@elizaos/core 0.25.8 → 0.25.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts","../src/actions.ts","../src/context.ts","../src/database/CircuitBreaker.ts","../src/logger.ts","../src/parsing.ts","../src/database.ts","../src/settings.ts","../src/types.ts","../src/models.ts","../src/localembeddingManager.ts","../src/embedding.ts","../src/evaluators.ts","../src/generation.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/getAction.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/errors/log.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/abi/encodeEventTopics.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/filters/createFilterRequestScope.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/createContractEventFilter.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/errors/getContractError.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/accounts/utils/publicKeyToAddress.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/signature/recoverPublicKey.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/signature/recoverAddress.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/encoding/toRlp.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/experimental/eip7702/utils/hashAuthorization.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/experimental/eip7702/utils/recoverAuthorizationAddress.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/errors/estimateGas.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/errors/getEstimateGasError.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/errors/fee.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/errors/block.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/formatters/transaction.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/formatters/block.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getBlock.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getGasPrice.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/estimateMaxPriorityFeePerGas.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/estimateFeesPerGas.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getTransactionCount.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/blob/blobsToCommitments.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/blob/blobsToProofs.ts","../../../node_modules/.pnpm/@noble+hashes@1.6.1/node_modules/@noble/hashes/src/_md.ts","../../../node_modules/.pnpm/@noble+hashes@1.6.1/node_modules/@noble/hashes/src/sha256.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/hash/sha256.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/blob/commitmentToVersionedHash.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/blob/commitmentsToVersionedHashes.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/constants/blob.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/errors/blob.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/blob/toBlobs.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/blob/toBlobSidecars.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/transaction/getTransactionType.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getChainId.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/wallet/prepareTransactionRequest.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getBalance.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/estimateGas.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/estimateContractGas.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/abi/decodeEventLog.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/abi/parseEventLogs.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/formatters/log.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getLogs.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getContractEvents.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/readContract.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/simulateContract.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/observe.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/wait.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/poll.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/promise/withCache.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getBlockNumber.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getFilterChanges.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/uninstallFilter.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/watchContractEvent.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/wallet/sendRawTransaction.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/errors/eip712.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getEip712Domain.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/uid.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/clients/createClient.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/promise/withDedupe.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/promise/withRetry.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/buildRequest.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/clients/transports/createTransport.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/errors/transport.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/promise/withTimeout.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/rpc/id.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/rpc/http.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/clients/transports/http.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/ens/errors.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/ens/encodedLabelToLabelhash.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/ens/namehash.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/ens/encodeLabelhash.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/ens/labelhash.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/ens/packetToBytes.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/ens/getEnsAddress.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/errors/ens.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/ens/avatar/utils.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/ens/avatar/parseAvatarRecord.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/ens/getEnsText.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/ens/getEnsAvatar.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/ens/getEnsName.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/ens/getEnsResolver.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/createBlockFilter.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/createEventFilter.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/createPendingTransactionFilter.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getBlobBaseFee.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getBlockTransactionCount.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getCode.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/formatters/feeHistory.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getFeeHistory.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getFilterLogs.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/errors/typedData.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/signature/hashTypedData.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/typedData.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/formatters/transactionReceipt.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/constants/strings.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/signature/toPrefixedMessage.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/signature/hashMessage.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/constants/bytes.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/signature/isErc6492Signature.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/signature/serializeErc6492Signature.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/formatters/proof.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getProof.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getStorageAt.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getTransaction.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getTransactionConfirmations.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/getTransactionReceipt.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/multicall.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/signature/serializeSignature.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/verifyHash.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/verifyMessage.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/verifyTypedData.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/watchBlockNumber.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/waitForTransactionReceipt.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/watchBlocks.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/watchEvent.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/public/watchPendingTransactions.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/siwe/parseSiweMessage.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/utils/siwe/validateSiweMessage.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/actions/siwe/verifySiweMessage.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/clients/decorators/public.ts","../../../node_modules/.pnpm/viem@2.21.58_bufferutil@4.0.9_typescript@5.6.3_utf-8-validate@5.0.10_zod@3.24.1/node_modules/viem/clients/createPublicClient.ts","../src/goals.ts","../src/memory.ts","../src/messages.ts","../src/posts.ts","../src/providers.ts","../src/relationships.ts","../src/runtime.ts","../src/uuid.ts","../../../node_modules/.pnpm/zod@3.24.1/node_modules/zod/lib/index.mjs","../src/knowledge.ts","../src/ragknowledge.ts","../src/environment.ts","../src/cache.ts"],"sourcesContent":["import dotenv from \"dotenv\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Load environment variables from root .env file\ndotenv.config({ path: path.resolve(__dirname, \"../../../.env\") });\n","import { names, uniqueNamesGenerator } from \"unique-names-generator\";\nimport type { Action, ActionExample } from \"./types.ts\";\n\n/**\n * Composes a set of example conversations based on provided actions and a specified count.\n * It randomly selects examples from the provided actions and formats them with generated names.\n * @param actionsData - An array of `Action` objects from which to draw examples.\n * @param count - The number of examples to generate.\n * @returns A string containing formatted examples of conversations.\n */\nexport const composeActionExamples = (actionsData: Action[], count: number) => {\n const data: ActionExample[][][] = actionsData.map((action: Action) => [\n ...action.examples,\n ]);\n\n const actionExamples: ActionExample[][] = [];\n let length = data.length;\n for (let i = 0; i < count && length; i++) {\n const actionId = i % length;\n const examples = data[actionId];\n if (examples.length) {\n const rand = ~~(Math.random() * examples.length);\n actionExamples[i] = examples.splice(rand, 1)[0];\n } else {\n i--;\n }\n\n if (examples.length == 0) {\n data.splice(actionId, 1);\n length--;\n }\n }\n\n const formattedExamples = actionExamples.map((example) => {\n const exampleNames = Array.from({ length: 5 }, () =>\n uniqueNamesGenerator({ dictionaries: [names] })\n );\n\n return `\\n${example\n .map((message) => {\n let messageString = `${message.user}: ${message.content.text}${message.content.action ? ` (${message.content.action})` : \"\"}`;\n for (let i = 0; i < exampleNames.length; i++) {\n messageString = messageString.replaceAll(\n `{{user${i + 1}}}`,\n exampleNames[i]\n );\n }\n return messageString;\n })\n .join(\"\\n\")}`;\n });\n\n return formattedExamples.join(\"\\n\");\n};\n\n/**\n * Formats the names of the provided actions into a comma-separated string.\n * @param actions - An array of `Action` objects from which to extract names.\n * @returns A comma-separated string of action names.\n */\nexport function formatActionNames(actions: Action[]) {\n return actions\n .sort(() => 0.5 - Math.random())\n .map((action: Action) => `${action.name}`)\n .join(\", \");\n}\n\n/**\n * Formats the provided actions into a detailed string listing each action's name and description, separated by commas and newlines.\n * @param actions - An array of `Action` objects to format.\n * @returns A detailed string of actions, including names and descriptions.\n */\nexport function formatActions(actions: Action[]) {\n return actions\n .sort(() => 0.5 - Math.random())\n .map((action: Action) => `${action.name}: ${action.description}`)\n .join(\",\\n\");\n}\n","import handlebars from \"handlebars\";\nimport type { State, TemplateType } from \"./types.ts\";\nimport { names, uniqueNamesGenerator } from \"unique-names-generator\";\n\n/**\n * Composes a context string by replacing placeholders in a template with corresponding values from the state.\n *\n * This function takes a template string with placeholders in the format `{{placeholder}}` and a state object.\n * It replaces each placeholder with the value from the state object that matches the placeholder's name.\n * If a matching key is not found in the state object for a given placeholder, the placeholder is replaced with an empty string.\n *\n * By default, this function uses a simple string replacement approach. However, when `templatingEngine` is set to `'handlebars'`, it uses Handlebars templating engine instead, compiling the template into a reusable function and evaluating it with the provided state object.\n *\n * @param {Object} params - The parameters for composing the context.\n * @param {State} params.state - The state object containing values to replace the placeholders in the template.\n * @param {TemplateType} params.template - The template string or function containing placeholders to be replaced with state values.\n * @param {\"handlebars\" | undefined} [params.templatingEngine] - The templating engine to use for compiling and evaluating the template (optional, default: `undefined`).\n * @returns {string} The composed context string with placeholders replaced by corresponding state values.\n *\n * @example\n * // Given a state object and a template\n * const state = { userName: \"Alice\", userAge: 30 };\n * const template = \"Hello, {{userName}}! You are {{userAge}} years old\";\n *\n * // Composing the context with simple string replacement will result in:\n * // \"Hello, Alice! You are 30 years old.\"\n * const contextSimple = composeContext({ state, template });\n *\n * // Using composeContext with a template function for dynamic template\n * const template = ({ state }) => {\n * const tone = Math.random() > 0.5 ? \"kind\" : \"rude\";\n * return `Hello, {{userName}}! You are {{userAge}} years old. Be ${tone}`;\n * };\n * const contextSimple = composeContext({ state, template });\n */\n\nexport const composeContext = ({\n state,\n template,\n templatingEngine,\n}: {\n state: State;\n template: TemplateType;\n templatingEngine?: \"handlebars\";\n}) => {\n const templateStr =\n typeof template === \"function\" ? template({ state }) : template;\n\n if (templatingEngine === \"handlebars\") {\n const templateFunction = handlebars.compile(templateStr);\n return templateFunction(state);\n }\n\n // @ts-expect-error match isn't working as expected\n const out = templateStr.replace(/{{\\w+}}/g, (match) => {\n const key = match.replace(/{{|}}/g, \"\");\n return state[key] ?? \"\";\n });\n return out;\n};\n\n/**\n * Adds a header to a body of text.\n *\n * This function takes a header string and a body string and returns a new string with the header prepended to the body.\n * If the body string is empty, the header is returned as is.\n *\n * @param {string} header - The header to add to the body.\n * @param {string} body - The body to which to add the header.\n * @returns {string} The body with the header prepended.\n *\n * @example\n * // Given a header and a body\n * const header = \"Header\";\n * const body = \"Body\";\n *\n * // Adding the header to the body will result in:\n * // \"Header\\nBody\"\n * const text = addHeader(header, body);\n */\nexport const addHeader = (header: string, body: string) => {\n return body.length > 0 ? `${header ? header + \"\\n\" : header}${body}\\n` : \"\";\n};\n\n/**\n * Generates a string with random user names populated in a template.\n *\n * This function generates a specified number of random user names and populates placeholders\n * in the provided template with these names. Placeholders in the template should follow the format `{{userX}}`\n * where `X` is the position of the user (e.g., `{{user1}}`, `{{user2}}`).\n *\n * @param {string} params.template - The template string containing placeholders for random user names.\n * @param {number} params.length - The number of random user names to generate.\n * @returns {string} The template string with placeholders replaced by random user names.\n *\n * @example\n * // Given a template and a length\n * const template = \"Hello, {{user1}}! Meet {{user2}} and {{user3}}.\";\n * const length = 3;\n *\n * // Composing the random user string will result in:\n * // \"Hello, John! Meet Alice and Bob.\"\n * const result = composeRandomUser({ template, length });\n */\nexport const composeRandomUser = (template: string, length: number) => {\n const exampleNames = Array.from({ length }, () =>\n uniqueNamesGenerator({ dictionaries: [names] })\n );\n let result = template;\n for (let i = 0; i < exampleNames.length; i++) {\n result = result.replaceAll(`{{user${i + 1}}}`, exampleNames[i]);\n }\n\n return result;\n};\n","export type CircuitBreakerState = \"CLOSED\" | \"OPEN\" | \"HALF_OPEN\";\n\nexport class CircuitBreaker {\n private state: CircuitBreakerState = \"CLOSED\";\n private failureCount = 0;\n private lastFailureTime?: number;\n private halfOpenSuccesses = 0;\n\n private readonly failureThreshold: number;\n private readonly resetTimeout: number;\n private readonly halfOpenMaxAttempts: number;\n\n constructor(\n private readonly config: {\n failureThreshold?: number;\n resetTimeout?: number;\n halfOpenMaxAttempts?: number;\n } = {}\n ) {\n this.failureThreshold = config.failureThreshold ?? 5;\n this.resetTimeout = config.resetTimeout ?? 60000;\n this.halfOpenMaxAttempts = config.halfOpenMaxAttempts ?? 3;\n }\n\n async execute<T>(operation: () => Promise<T>): Promise<T> {\n if (this.state === \"OPEN\") {\n if (Date.now() - (this.lastFailureTime || 0) > this.resetTimeout) {\n this.state = \"HALF_OPEN\";\n this.halfOpenSuccesses = 0;\n } else {\n throw new Error(\"Circuit breaker is OPEN\");\n }\n }\n\n try {\n const result = await operation();\n\n if (this.state === \"HALF_OPEN\") {\n this.halfOpenSuccesses++;\n if (this.halfOpenSuccesses >= this.halfOpenMaxAttempts) {\n this.reset();\n }\n }\n\n return result;\n } catch (error) {\n this.handleFailure();\n throw error;\n }\n }\n\n private handleFailure(): void {\n this.failureCount++;\n this.lastFailureTime = Date.now();\n\n if (\n this.state !== \"OPEN\" &&\n this.failureCount >= this.failureThreshold\n ) {\n this.state = \"OPEN\";\n }\n }\n\n private reset(): void {\n this.state = \"CLOSED\";\n this.failureCount = 0;\n this.lastFailureTime = undefined;\n }\n\n getState(): \"CLOSED\" | \"OPEN\" | \"HALF_OPEN\" {\n return this.state;\n }\n}\n","import pino, { type LogFn } from \"pino\";\nimport pretty from \"pino-pretty\";\n\nimport { parseBooleanFromText } from \"./parsing.ts\";\n\n\nconst customLevels: Record<string, number> = {\n fatal: 60,\n error: 50,\n warn: 40,\n info: 30,\n log: 29,\n progress: 28,\n success: 27,\n debug: 20,\n trace: 10,\n};\n\nconst raw = parseBooleanFromText(process?.env?.LOG_JSON_FORMAT) || false;\n\nconst createStream = () => {\n if (raw) {\n return undefined;\n }\n return pretty({\n colorize: true,\n translateTime: \"yyyy-mm-dd HH:MM:ss\",\n ignore: \"pid,hostname\",\n });\n};\n\nconst defaultLevel = process?.env?.DEFAULT_LOG_LEVEL || \"info\";\n\nconst options = {\n level: defaultLevel,\n customLevels,\n hooks: {\n logMethod(\n inputArgs: [string | Record<string, unknown>, ...unknown[]],\n method: LogFn\n ): void {\n const [arg1, ...rest] = inputArgs;\n\n if (typeof arg1 === \"object\") {\n const messageParts = rest.map((arg) =>\n typeof arg === \"string\" ? arg : JSON.stringify(arg)\n );\n const message = messageParts.join(\" \");\n method.apply(this, [arg1, message]);\n } else {\n const context = {};\n const messageParts = [arg1, ...rest].map((arg) =>\n typeof arg === \"string\" ? arg : arg\n );\n const message = messageParts\n .filter((part) => typeof part === \"string\")\n .join(\" \");\n const jsonParts = messageParts.filter(\n (part) => typeof part === \"object\"\n );\n\n Object.assign(context, ...jsonParts);\n\n method.apply(this, [context, message]);\n }\n },\n },\n};\n\nexport const elizaLogger = pino(options, createStream());\n\nexport default elizaLogger;\n","import type { ActionResponse } from \"./types.ts\";\nconst jsonBlockPattern = /```json\\n([\\s\\S]*?)\\n```/;\n\nexport const messageCompletionFooter = `\\nResponse format should be formatted in a valid JSON block like this:\n\\`\\`\\`json\n{ \"user\": \"{{agentName}}\", \"text\": \"<string>\", \"action\": \"<string>\" }\n\\`\\`\\`\n\nThe “action” field should be one of the options in [Available Actions] and the \"text\" field should be the response you want to send.\n`;\n\nexport const shouldRespondFooter = `The available options are [RESPOND], [IGNORE], or [STOP]. Choose the most appropriate option.\nIf {{agentName}} is talking too much, you can choose [IGNORE]\n\nYour response must include one of the options.`;\n\nexport const parseShouldRespondFromText = (\n text: string\n): \"RESPOND\" | \"IGNORE\" | \"STOP\" | null => {\n const match = text\n .split(\"\\n\")[0]\n .trim()\n .replace(\"[\", \"\")\n .toUpperCase()\n .replace(\"]\", \"\")\n .match(/^(RESPOND|IGNORE|STOP)$/i);\n return match\n ? (match[0].toUpperCase() as \"RESPOND\" | \"IGNORE\" | \"STOP\")\n : text.includes(\"RESPOND\")\n ? \"RESPOND\"\n : text.includes(\"IGNORE\")\n ? \"IGNORE\"\n : text.includes(\"STOP\")\n ? \"STOP\"\n : null;\n};\n\nexport const booleanFooter = `Respond with only a YES or a NO.`;\n\n/**\n * Parses a string to determine its boolean equivalent.\n *\n * Recognized affirmative values: \"YES\", \"Y\", \"TRUE\", \"T\", \"1\", \"ON\", \"ENABLE\".\n * Recognized negative values: \"NO\", \"N\", \"FALSE\", \"F\", \"0\", \"OFF\", \"DISABLE\".\n *\n * @param {string} text - The input text to parse.\n * @returns {boolean|null} - Returns `true` for affirmative inputs, `false` for negative inputs, and `null` for unrecognized inputs or null/undefined.\n */\nexport const parseBooleanFromText = (text: string) => {\n if (!text) return null; // Handle null or undefined input\n\n const affirmative = [\"YES\", \"Y\", \"TRUE\", \"T\", \"1\", \"ON\", \"ENABLE\"];\n const negative = [\"NO\", \"N\", \"FALSE\", \"F\", \"0\", \"OFF\", \"DISABLE\"];\n\n const normalizedText = text.trim().toUpperCase();\n\n if (affirmative.includes(normalizedText)) {\n return true;\n } else if (negative.includes(normalizedText)) {\n return false;\n }\n\n return null; // Return null for unrecognized inputs\n};\n\nexport const stringArrayFooter = `Respond with a JSON array containing the values in a valid JSON block formatted for markdown with this structure:\n\\`\\`\\`json\n[\n 'value',\n 'value'\n]\n\\`\\`\\`\n\nYour response must include the valid JSON block.`;\n\n/**\n * Parses a JSON array from a given text. The function looks for a JSON block wrapped in triple backticks\n * with `json` language identifier, and if not found, it searches for an array pattern within the text.\n * It then attempts to parse the JSON string into a JavaScript object. If parsing is successful and the result\n * is an array, it returns the array; otherwise, it returns null.\n *\n * @param text - The input text from which to extract and parse the JSON array.\n * @returns An array parsed from the JSON string if successful; otherwise, null.\n */\nexport function parseJsonArrayFromText(text: string) {\n let jsonData = null;\n\n // First try to parse with the original JSON format\n const jsonBlockMatch = text.match(jsonBlockPattern);\n\n if (jsonBlockMatch) {\n try {\n // Only replace quotes that are actually being used for string delimitation\n const normalizedJson = jsonBlockMatch[1].replace(\n /(?<!\\\\)'([^']*)'(?=\\s*[,}\\]])/g,\n '\"$1\"'\n );\n jsonData = JSON.parse(normalizedJson);\n } catch (e) {\n console.error(\"Error parsing JSON:\", e);\n console.error(\"Failed parsing text:\", jsonBlockMatch[1]);\n }\n }\n\n // If that fails, try to find an array pattern\n if (!jsonData) {\n const arrayPattern = /\\[\\s*(['\"])(.*?)\\1\\s*\\]/;\n const arrayMatch = text.match(arrayPattern);\n\n if (arrayMatch) {\n try {\n // Only replace quotes that are actually being used for string delimitation\n const normalizedJson = arrayMatch[0].replace(\n /(?<!\\\\)'([^']*)'(?=\\s*[,}\\]])/g,\n '\"$1\"'\n );\n jsonData = JSON.parse(normalizedJson);\n } catch (e) {\n console.error(\"Error parsing JSON:\", e);\n console.error(\"Failed parsing text:\", arrayMatch[0]);\n }\n }\n }\n\n if (Array.isArray(jsonData)) {\n return jsonData;\n }\n\n return null;\n}\n\n/**\n * Parses a JSON object from a given text. The function looks for a JSON block wrapped in triple backticks\n * with `json` language identifier, and if not found, it searches for an object pattern within the text.\n * It then attempts to parse the JSON string into a JavaScript object. If parsing is successful and the result\n * is an object (but not an array), it returns the object; otherwise, it tries to parse an array if the result\n * is an array, or returns null if parsing is unsuccessful or the result is neither an object nor an array.\n *\n * @param text - The input text from which to extract and parse the JSON object.\n * @returns An object parsed from the JSON string if successful; otherwise, null or the result of parsing an array.\n */\nexport function parseJSONObjectFromText(\n text: string\n): Record<string, any> | null {\n let jsonData = null;\n const jsonBlockMatch = text.match(jsonBlockPattern);\n\n if (jsonBlockMatch) {\n text = cleanJsonResponse(text);\n const parsingText = normalizeJsonString(text);\n try {\n jsonData = JSON.parse(parsingText);\n } catch (e) {\n console.error(\"Error parsing JSON:\", e);\n console.error(\"Text is not JSON\", text);\n return extractAttributes(text);\n }\n } else {\n const objectPattern = /{[\\s\\S]*?}?/;\n const objectMatch = text.match(objectPattern);\n\n if (objectMatch) {\n text = cleanJsonResponse(text);\n const parsingText = normalizeJsonString(text);\n try {\n jsonData = JSON.parse(parsingText);\n } catch (e) {\n console.error(\"Error parsing JSON:\", e);\n console.error(\"Text is not JSON\", text);\n return extractAttributes(text);\n }\n }\n }\n\n if (\n typeof jsonData === \"object\" &&\n jsonData !== null &&\n !Array.isArray(jsonData)\n ) {\n return jsonData;\n } else if (typeof jsonData === \"object\" && Array.isArray(jsonData)) {\n return parseJsonArrayFromText(text);\n } else {\n return null;\n }\n}\n\n/**\n * Extracts specific attributes (e.g., user, text, action) from a JSON-like string using regex.\n * @param response - The cleaned string response to extract attributes from.\n * @param attributesToExtract - An array of attribute names to extract.\n * @returns An object containing the extracted attributes.\n */\nexport function extractAttributes(\n response: string,\n attributesToExtract?: string[]\n): { [key: string]: string | undefined } {\n response = response.trim();\n const attributes: { [key: string]: string | undefined } = {};\n\n if (!attributesToExtract || attributesToExtract.length === 0) {\n // Extract all attributes if no specific attributes are provided\n const matches = response.matchAll(/\"([^\"]+)\"\\s*:\\s*\"([^\"]*)\"?/g);\n for (const match of matches) {\n attributes[match[1]] = match[2];\n }\n } else {\n // Extract only specified attributes\n attributesToExtract.forEach((attribute) => {\n const match = response.match(\n new RegExp(`\"${attribute}\"\\\\s*:\\\\s*\"([^\"]*)\"?`, \"i\")\n );\n if (match) {\n attributes[attribute] = match[1];\n }\n });\n }\n\n return Object.entries(attributes).length > 0 ? attributes : null;\n}\n\n/**\n * Normalizes a JSON-like string by correcting formatting issues:\n * - Removes extra spaces after '{' and before '}'.\n * - Wraps unquoted values in double quotes.\n * - Converts single-quoted values to double-quoted.\n * - Ensures consistency in key-value formatting.\n * - Normalizes mixed adjacent quote pairs.\n *\n * This is useful for cleaning up improperly formatted JSON strings\n * before parsing them into valid JSON.\n *\n * @param str - The JSON-like string to normalize.\n * @returns A properly formatted JSON string.\n */\n\nexport const normalizeJsonString = (str: string) => {\n // Remove extra spaces after '{' and before '}'\n str = str.replace(/\\{\\s+/, '{').replace(/\\s+\\}/, '}').trim();\n\n // \"key\": unquotedValue → \"key\": \"unquotedValue\"\n str = str.replace(\n /(\"[\\w\\d_-]+\")\\s*: \\s*(?!\"|\\[)([\\s\\S]+?)(?=(,\\s*\"|\\}$))/g,\n '$1: \"$2\"',\n );\n\n // \"key\": 'value' → \"key\": \"value\"\n str = str.replace(\n /\"([^\"]+)\"\\s*:\\s*'([^']*)'/g,\n (_, key, value) => `\"${key}\": \"${value}\"`,\n );\n\n // \"key\": someWord → \"key\": \"someWord\"\n str = str.replace(/(\"[\\w\\d_-]+\")\\s*:\\s*([A-Za-z_]+)(?![\"\\w])/g, '$1: \"$2\"');\n\n // Replace adjacent quote pairs with a single double quote\n str = str.replace(/(?:\"')|(?:'\")/g, '\"');\n return str;\n};\n\n/**\n * Cleans a JSON-like response string by removing unnecessary markers, line breaks, and extra whitespace.\n * This is useful for handling improperly formatted JSON responses from external sources.\n *\n * @param response - The raw JSON-like string response to clean.\n * @returns The cleaned string, ready for parsing or further processing.\n */\n\nexport function cleanJsonResponse(response: string): string {\n return response\n .replace(/```json\\s*/g, \"\") // Remove ```json\n .replace(/```\\s*/g, \"\") // Remove any remaining ```\n .replace(/(\\r\\n|\\n|\\r)/g, \"\") // Remove line breaks\n .trim();\n}\n\nexport const postActionResponseFooter = `Choose any combination of [LIKE], [RETWEET], [QUOTE], and [REPLY] that are appropriate. Each action must be on its own line. Your response must only include the chosen actions.`;\n\nexport const parseActionResponseFromText = (\n text: string\n): { actions: ActionResponse } => {\n const actions: ActionResponse = {\n like: false,\n retweet: false,\n quote: false,\n reply: false,\n };\n\n // Regex patterns\n const likePattern = /\\[LIKE\\]/i;\n const retweetPattern = /\\[RETWEET\\]/i;\n const quotePattern = /\\[QUOTE\\]/i;\n const replyPattern = /\\[REPLY\\]/i;\n\n // Check with regex\n actions.like = likePattern.test(text);\n actions.retweet = retweetPattern.test(text);\n actions.quote = quotePattern.test(text);\n actions.reply = replyPattern.test(text);\n\n // Also do line by line parsing as backup\n const lines = text.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed === \"[LIKE]\") actions.like = true;\n if (trimmed === \"[RETWEET]\") actions.retweet = true;\n if (trimmed === \"[QUOTE]\") actions.quote = true;\n if (trimmed === \"[REPLY]\") actions.reply = true;\n }\n\n return { actions };\n};\n\n/**\n * Truncate text to fit within the character limit, ensuring it ends at a complete sentence.\n */\nexport function truncateToCompleteSentence(\n text: string,\n maxLength: number\n): string {\n if (text.length <= maxLength) {\n return text;\n }\n\n // Attempt to truncate at the last period within the limit\n const lastPeriodIndex = text.lastIndexOf(\".\", maxLength - 1);\n if (lastPeriodIndex !== -1) {\n const truncatedAtPeriod = text.slice(0, lastPeriodIndex + 1).trim();\n if (truncatedAtPeriod.length > 0) {\n return truncatedAtPeriod;\n }\n }\n\n // If no period, truncate to the nearest whitespace within the limit\n const lastSpaceIndex = text.lastIndexOf(\" \", maxLength - 1);\n if (lastSpaceIndex !== -1) {\n const truncatedAtSpace = text.slice(0, lastSpaceIndex).trim();\n if (truncatedAtSpace.length > 0) {\n return truncatedAtSpace + \"...\";\n }\n }\n\n // Fallback: Hard truncate and add ellipsis\n const hardTruncated = text.slice(0, maxLength - 3).trim();\n return hardTruncated + \"...\";\n}\n","import type {\n Account,\n Actor,\n GoalStatus,\n Goal,\n Memory,\n Relationship,\n UUID,\n RAGKnowledgeItem,\n Participant,\n IDatabaseAdapter,\n} from \"./types.ts\";\nimport { CircuitBreaker } from \"./database/CircuitBreaker\";\nimport { elizaLogger } from \"./logger\";\n\n/**\n * An abstract class representing a database adapter for managing various entities\n * like accounts, memories, actors, goals, and rooms.\n */\nexport abstract class DatabaseAdapter<DB = any> implements IDatabaseAdapter {\n /**\n * The database instance.\n */\n db: DB;\n\n /**\n * Circuit breaker instance used to handle fault tolerance and prevent cascading failures.\n * Implements the Circuit Breaker pattern to temporarily disable operations when a failure threshold is reached.\n *\n * The circuit breaker has three states:\n * - CLOSED: Normal operation, requests pass through\n * - OPEN: Failure threshold exceeded, requests are blocked\n * - HALF_OPEN: Testing if service has recovered\n *\n * @protected\n */\n protected circuitBreaker: CircuitBreaker;\n\n /**\n * Creates a new DatabaseAdapter instance with optional circuit breaker configuration.\n *\n * @param circuitBreakerConfig - Configuration options for the circuit breaker\n * @param circuitBreakerConfig.failureThreshold - Number of failures before circuit opens (defaults to 5)\n * @param circuitBreakerConfig.resetTimeout - Time in ms before attempting to close circuit (defaults to 60000)\n * @param circuitBreakerConfig.halfOpenMaxAttempts - Number of successful attempts needed to close circuit (defaults to 3)\n */\n constructor(circuitBreakerConfig?: {\n failureThreshold?: number;\n resetTimeout?: number;\n halfOpenMaxAttempts?: number;\n }) {\n this.circuitBreaker = new CircuitBreaker(circuitBreakerConfig);\n }\n\n /**\n * Optional initialization method for the database adapter.\n * @returns A Promise that resolves when initialization is complete.\n */\n abstract init(): Promise<void>;\n\n /**\n * Optional close method for the database adapter.\n * @returns A Promise that resolves when closing is complete.\n */\n abstract close(): Promise<void>;\n\n /**\n * Retrieves an account by its ID.\n * @param userId The UUID of the user account to retrieve.\n * @returns A Promise that resolves to the Account object or null if not found.\n */\n abstract getAccountById(userId: UUID): Promise<Account | null>;\n\n /**\n * Creates a new account in the database.\n * @param account The account object to create.\n * @returns A Promise that resolves when the account creation is complete.\n */\n abstract createAccount(account: Account): Promise<boolean>;\n\n /**\n * Retrieves memories based on the specified parameters.\n * @param params An object containing parameters for the memory retrieval.\n * @returns A Promise that resolves to an array of Memory objects.\n */\n abstract getMemories(params: {\n agentId: UUID;\n roomId: UUID;\n count?: number;\n unique?: boolean;\n tableName: string;\n }): Promise<Memory[]>;\n\n abstract getMemoriesByRoomIds(params: {\n agentId: UUID;\n roomIds: UUID[];\n tableName: string;\n limit?: number;\n }): Promise<Memory[]>;\n\n abstract getMemoryById(id: UUID): Promise<Memory | null>;\n\n /**\n * Retrieves multiple memories by their IDs\n * @param memoryIds Array of UUIDs of the memories to retrieve\n * @param tableName Optional table name to filter memories by type\n * @returns Promise resolving to array of Memory objects\n */\n abstract getMemoriesByIds(\n memoryIds: UUID[],\n tableName?: string\n ): Promise<Memory[]>;\n\n /**\n * Retrieves cached embeddings based on the specified query parameters.\n * @param params An object containing parameters for the embedding retrieval.\n * @returns A Promise that resolves to an array of objects containing embeddings and levenshtein scores.\n */\n abstract getCachedEmbeddings({\n query_table_name,\n query_threshold,\n query_input,\n query_field_name,\n query_field_sub_name,\n query_match_count,\n }: {\n query_table_name: string;\n query_threshold: number;\n query_input: string;\n query_field_name: string;\n query_field_sub_name: string;\n query_match_count: number;\n }): Promise<\n {\n embedding: number[];\n levenshtein_score: number;\n }[]\n >;\n\n /**\n * Logs an event or action with the specified details.\n * @param params An object containing parameters for the log entry.\n * @returns A Promise that resolves when the log entry has been saved.\n */\n abstract log(params: {\n body: { [key: string]: unknown };\n userId: UUID;\n roomId: UUID;\n type: string;\n }): Promise<void>;\n\n /**\n * Retrieves details of actors in a given room.\n * @param params An object containing the roomId to search for actors.\n * @returns A Promise that resolves to an array of Actor objects.\n */\n abstract getActorDetails(params: { roomId: UUID }): Promise<Actor[]>;\n\n /**\n * Searches for memories based on embeddings and other specified parameters.\n * @param params An object containing parameters for the memory search.\n * @returns A Promise that resolves to an array of Memory objects.\n */\n abstract searchMemories(params: {\n tableName: string;\n agentId: UUID;\n roomId: UUID;\n embedding: number[];\n match_threshold: number;\n match_count: number;\n unique: boolean;\n }): Promise<Memory[]>;\n\n /**\n * Updates the status of a specific goal.\n * @param params An object containing the goalId and the new status.\n * @returns A Promise that resolves when the goal status has been updated.\n */\n abstract updateGoalStatus(params: {\n goalId: UUID;\n status: GoalStatus;\n }): Promise<void>;\n\n /**\n * Searches for memories by embedding and other specified parameters.\n * @param embedding The embedding vector to search with.\n * @param params Additional parameters for the search.\n * @returns A Promise that resolves to an array of Memory objects.\n */\n abstract searchMemoriesByEmbedding(\n embedding: number[],\n params: {\n match_threshold?: number;\n count?: number;\n roomId?: UUID;\n agentId?: UUID;\n unique?: boolean;\n tableName: string;\n }\n ): Promise<Memory[]>;\n\n /**\n * Creates a new memory in the database.\n * @param memory The memory object to create.\n * @param tableName The table where the memory should be stored.\n * @param unique Indicates if the memory should be unique.\n * @returns A Promise that resolves when the memory has been created.\n */\n abstract createMemory(\n memory: Memory,\n tableName: string,\n unique?: boolean\n ): Promise<void>;\n\n /**\n * Removes a specific memory from the database.\n * @param memoryId The UUID of the memory to remove.\n * @param tableName The table from which the memory should be removed.\n * @returns A Promise that resolves when the memory has been removed.\n */\n abstract removeMemory(memoryId: UUID, tableName: string): Promise<void>;\n\n /**\n * Removes all memories associated with a specific room.\n * @param roomId The UUID of the room whose memories should be removed.\n * @param tableName The table from which the memories should be removed.\n * @returns A Promise that resolves when all memories have been removed.\n */\n abstract removeAllMemories(roomId: UUID, tableName: string): Promise<void>;\n\n /**\n * Counts the number of memories in a specific room.\n * @param roomId The UUID of the room for which to count memories.\n * @param unique Specifies whether to count only unique memories.\n * @param tableName Optional table name to count memories from.\n * @returns A Promise that resolves to the number of memories.\n */\n abstract countMemories(\n roomId: UUID,\n unique?: boolean,\n tableName?: string\n ): Promise<number>;\n\n /**\n * Retrieves goals based on specified parameters.\n * @param params An object containing parameters for goal retrieval.\n * @returns A Promise that resolves to an array of Goal objects.\n */\n abstract getGoals(params: {\n agentId: UUID;\n roomId: UUID;\n userId?: UUID | null;\n onlyInProgress?: boolean;\n count?: number;\n }): Promise<Goal[]>;\n\n /**\n * Updates a specific goal in the database.\n * @param goal The goal object with updated properties.\n * @returns A Promise that resolves when the goal has been updated.\n */\n abstract updateGoal(goal: Goal): Promise<void>;\n\n /**\n * Creates a new goal in the database.\n * @param goal The goal object to create.\n * @returns A Promise that resolves when the goal has been created.\n */\n abstract createGoal(goal: Goal): Promise<void>;\n\n /**\n * Removes a specific goal from the database.\n * @param goalId The UUID of the goal to remove.\n * @returns A Promise that resolves when the goal has been removed.\n */\n abstract removeGoal(goalId: UUID): Promise<void>;\n\n /**\n * Removes all goals associated with a specific room.\n * @param roomId The UUID of the room whose goals should be removed.\n * @returns A Promise that resolves when all goals have been removed.\n */\n abstract removeAllGoals(roomId: UUID): Promise<void>;\n\n /**\n * Retrieves the room ID for a given room, if it exists.\n * @param roomId The UUID of the room to retrieve.\n * @returns A Promise that resolves to the room ID or null if not found.\n */\n abstract getRoom(roomId: UUID): Promise<UUID | null>;\n\n /**\n * Creates a new room with an optional specified ID.\n * @param roomId Optional UUID to assign to the new room.\n * @returns A Promise that resolves to the UUID of the created room.\n */\n abstract createRoom(roomId?: UUID): Promise<UUID>;\n\n /**\n * Removes a specific room from the database.\n * @param roomId The UUID of the room to remove.\n * @returns A Promise that resolves when the room has been removed.\n */\n abstract removeRoom(roomId: UUID): Promise<void>;\n\n /**\n * Retrieves room IDs for which a specific user is a participant.\n * @param userId The UUID of the user.\n * @returns A Promise that resolves to an array of room IDs.\n */\n abstract getRoomsForParticipant(userId: UUID): Promise<UUID[]>;\n\n /**\n * Retrieves room IDs for which specific users are participants.\n * @param userIds An array of UUIDs of the users.\n * @returns A Promise that resolves to an array of room IDs.\n */\n abstract getRoomsForParticipants(userIds: UUID[]): Promise<UUID[]>;\n\n /**\n * Adds a user as a participant to a specific room.\n * @param userId The UUID of the user to add as a participant.\n * @param roomId The UUID of the room to which the user will be added.\n * @returns A Promise that resolves to a boolean indicating success or failure.\n */\n abstract addParticipant(userId: UUID, roomId: UUID): Promise<boolean>;\n\n /**\n * Removes a user as a participant from a specific room.\n * @param userId The UUID of the user to remove as a participant.\n * @param roomId The UUID of the room from which the user will be removed.\n * @returns A Promise that resolves to a boolean indicating success or failure.\n */\n abstract removeParticipant(userId: UUID, roomId: UUID): Promise<boolean>;\n\n /**\n * Retrieves participants associated with a specific account.\n * @param userId The UUID of the account.\n * @returns A Promise that resolves to an array of Participant objects.\n */\n abstract getParticipantsForAccount(userId: UUID): Promise<Participant[]>;\n\n /**\n * Retrieves participants associated with a specific account.\n * @param userId The UUID of the account.\n * @returns A Promise that resolves to an array of Participant objects.\n */\n abstract getParticipantsForAccount(userId: UUID): Promise<Participant[]>;\n\n /**\n * Retrieves participants for a specific room.\n * @param roomId The UUID of the room for which to retrieve participants.\n * @returns A Promise that resolves to an array of UUIDs representing the participants.\n */\n abstract getParticipantsForRoom(roomId: UUID): Promise<UUID[]>;\n\n abstract getParticipantUserState(\n roomId: UUID,\n userId: UUID\n ): Promise<\"FOLLOWED\" | \"MUTED\" | null>;\n abstract setParticipantUserState(\n roomId: UUID,\n userId: UUID,\n state: \"FOLLOWED\" | \"MUTED\" | null\n ): Promise<void>;\n\n /**\n * Creates a new relationship between two users.\n * @param params An object containing the UUIDs of the two users (userA and userB).\n * @returns A Promise that resolves to a boolean indicating success or failure of the creation.\n */\n abstract createRelationship(params: {\n userA: UUID;\n userB: UUID;\n }): Promise<boolean>;\n\n /**\n * Retrieves a relationship between two users if it exists.\n * @param params An object containing the UUIDs of the two users (userA and userB).\n * @returns A Promise that resolves to the Relationship object or null if not found.\n */\n abstract getRelationship(params: {\n userA: UUID;\n userB: UUID;\n }): Promise<Relationship | null>;\n\n /**\n * Retrieves all relationships for a specific user.\n * @param params An object containing the UUID of the user.\n * @returns A Promise that resolves to an array of Relationship objects.\n */\n abstract getRelationships(params: {\n userId: UUID;\n }): Promise<Relationship[]>;\n\n /**\n * Retrieves knowledge items based on specified parameters.\n * @param params Object containing search parameters\n * @returns Promise resolving to array of knowledge items\n */\n abstract getKnowledge(params: {\n id?: UUID;\n agentId: UUID;\n limit?: number;\n query?: string;\n conversationContext?: string;\n }): Promise<RAGKnowledgeItem[]>;\n\n abstract searchKnowledge(params: {\n agentId: UUID;\n embedding: Float32Array;\n match_threshold: number;\n match_count: number;\n searchText?: string;\n }): Promise<RAGKnowledgeItem[]>;\n\n /**\n * Creates a new knowledge item in the database.\n * @param knowledge The knowledge item to create\n * @returns Promise resolving when creation is complete\n */\n abstract createKnowledge(knowledge: RAGKnowledgeItem): Promise<void>;\n\n /**\n * Removes a knowledge item and its associated chunks from the database.\n * @param id The ID of the knowledge item to remove\n * @returns Promise resolving when removal is complete\n */\n abstract removeKnowledge(id: UUID): Promise<void>;\n\n /**\n * Removes an agents full knowledge database and its associated chunks from the database.\n * @param agentId The Agent ID of the knowledge items to remove\n * @returns Promise resolving when removal is complete\n */\n abstract clearKnowledge(agentId: UUID, shared?: boolean): Promise<void>;\n\n /**\n * Executes an operation with circuit breaker protection.\n * @param operation A function that returns a Promise to be executed with circuit breaker protection\n * @param context A string describing the context/operation being performed for logging purposes\n * @returns A Promise that resolves to the result of the operation\n * @throws Will throw an error if the circuit breaker is open or if the operation fails\n * @protected\n */\n protected async withCircuitBreaker<T>(\n operation: () => Promise<T>,\n context: string\n ): Promise<T> {\n try {\n return await this.circuitBreaker.execute(operation);\n } catch (error) {\n elizaLogger.error(`Circuit breaker error in ${context}:`, {\n error: error instanceof Error ? error.message : String(error),\n state: this.circuitBreaker.getState(),\n });\n throw error;\n }\n }\n}\n","import { config } from \"dotenv\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport elizaLogger from \"./logger.ts\";\n\nelizaLogger.info(\"Loading embedding settings:\", {\n USE_OPENAI_EMBEDDING: process.env.USE_OPENAI_EMBEDDING,\n USE_OLLAMA_EMBEDDING: process.env.USE_OLLAMA_EMBEDDING,\n OLLAMA_EMBEDDING_MODEL:\n process.env.OLLAMA_EMBEDDING_MODEL || \"mxbai-embed-large\",\n});\n\n// Add this logging block\nelizaLogger.info(\"Loading character settings:\", {\n CHARACTER_PATH: process.env.CHARACTER_PATH,\n ARGV: process.argv,\n CHARACTER_ARG: process.argv.find((arg) => arg.startsWith(\"--character=\")),\n CWD: process.cwd(),\n});\n\ninterface Settings {\n [key: string]: string | undefined;\n}\n\ninterface NamespacedSettings {\n [namespace: string]: Settings;\n}\n\nlet environmentSettings: Settings = {};\n\n/**\n * Determines if code is running in a browser environment\n * @returns {boolean} True if in browser environment\n */\nconst isBrowser = (): boolean => {\n return (\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\"\n );\n};\n\n/**\n * Recursively searches for a .env file starting from the current directory\n * and moving up through parent directories (Node.js only)\n * @param {string} [startDir=process.cwd()] - Starting directory for the search\n * @returns {string|null} Path to the nearest .env file or null if not found\n */\nexport function findNearestEnvFile(startDir = process.cwd()) {\n if (isBrowser()) return null;\n\n let currentDir = startDir;\n\n // Continue searching until we reach the root directory\n while (currentDir !== path.parse(currentDir).root) {\n const envPath = path.join(currentDir, \".env\");\n\n if (fs.existsSync(envPath)) {\n return envPath;\n }\n\n // Move up to parent directory\n currentDir = path.dirname(currentDir);\n }\n\n // Check root directory as well\n const rootEnvPath = path.join(path.parse(currentDir).root, \".env\");\n return fs.existsSync(rootEnvPath) ? rootEnvPath : null;\n}\n\n/**\n * Configures environment settings for browser usage\n * @param {Settings} settings - Object containing environment variables\n */\nexport function configureSettings(settings: Settings) {\n environmentSettings = { ...settings };\n}\n\n/**\n * Loads environment variables from the nearest .env file in Node.js\n * or returns configured settings in browser\n * @returns {Settings} Environment variables object\n * @throws {Error} If no .env file is found in Node.js environment\n */\nexport function loadEnvConfig(): Settings {\n // For browser environments, return the configured settings\n if (isBrowser()) {\n return environmentSettings;\n }\n\n // Node.js environment: load from .env file\n const envPath = findNearestEnvFile();\n\n // attempt to Load the .env file into process.env\n const result = config(envPath ? { path: envPath } : {});\n\n if (!result.error) {\n elizaLogger.log(`Loaded .env file from: ${envPath}`);\n }\n\n // Parse namespaced settings\n const namespacedSettings = parseNamespacedSettings(process.env as Settings);\n\n // Attach to process.env for backward compatibility\n Object.entries(namespacedSettings).forEach(([namespace, settings]) => {\n process.env[`__namespaced_${namespace}`] = JSON.stringify(settings);\n });\n\n return process.env as Settings;\n}\n\n/**\n * Gets a specific environment variable\n * @param {string} key - The environment variable key\n * @param {string} [defaultValue] - Optional default value if key doesn't exist\n * @returns {string|undefined} The environment variable value or default value\n */\nexport function getEnvVariable(\n key: string,\n defaultValue?: string\n): string | undefined {\n if (isBrowser()) {\n return environmentSettings[key] || defaultValue;\n }\n return process.env[key] || defaultValue;\n}\n\n/**\n * Checks if a specific environment variable exists\n * @param {string} key - The environment variable key\n * @returns {boolean} True if the environment variable exists\n */\nexport function hasEnvVariable(key: string): boolean {\n if (isBrowser()) {\n return key in environmentSettings;\n }\n return key in process.env;\n}\n\n// Initialize settings based on environment\nexport const settings = isBrowser() ? environmentSettings : loadEnvConfig();\n\nelizaLogger.info(\"Parsed settings:\", {\n USE_OPENAI_EMBEDDING: settings.USE_OPENAI_EMBEDDING,\n USE_OPENAI_EMBEDDING_TYPE: typeof settings.USE_OPENAI_EMBEDDING,\n USE_OLLAMA_EMBEDDING: settings.USE_OLLAMA_EMBEDDING,\n USE_OLLAMA_EMBEDDING_TYPE: typeof settings.USE_OLLAMA_EMBEDDING,\n OLLAMA_EMBEDDING_MODEL:\n settings.OLLAMA_EMBEDDING_MODEL || \"mxbai-embed-large\",\n});\n\nexport default settings;\n\n// Add this function to parse namespaced settings\nfunction parseNamespacedSettings(env: Settings): NamespacedSettings {\n const namespaced: NamespacedSettings = {};\n\n for (const [key, value] of Object.entries(env)) {\n if (!value) continue;\n\n const [namespace, ...rest] = key.split(\".\");\n if (!namespace || rest.length === 0) continue;\n\n const settingKey = rest.join(\".\");\n namespaced[namespace] = namespaced[namespace] || {};\n namespaced[namespace][settingKey] = value;\n }\n\n return namespaced;\n}\n","import type { Readable } from \"stream\";\n\n/**\n * Represents a UUID string in the format \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n */\nexport type UUID = `${string}-${string}-${string}-${string}-${string}`;\n\n/**\n * Represents the content of a message or communication\n */\nexport interface Content {\n /** The main text content */\n text: string;\n\n /** Optional action associated with the message */\n action?: string;\n\n /** Optional source/origin of the content */\n source?: string;\n\n /** URL of the original message/post (e.g. tweet URL, Discord message link) */\n url?: string;\n\n /** UUID of parent message if this is a reply/thread */\n inReplyTo?: UUID;\n\n /** Array of media attachments */\n attachments?: Media[];\n\n /** Additional dynamic properties */\n [key: string]: unknown;\n}\n\n/**\n * Example content with associated user for demonstration purposes\n */\nexport interface ActionExample {\n /** User associated with the example */\n user: string;\n\n /** Content of the example */\n content: Content;\n}\n\n/**\n * Example conversation content with user ID\n */\nexport interface ConversationExample {\n /** UUID of user in conversation */\n userId: UUID;\n\n /** Content of the conversation */\n content: Content;\n}\n\n/**\n * Represents an actor/participant in a conversation\n */\nexport interface Actor {\n /** Display name */\n name: string;\n\n /** Username/handle */\n username: string;\n\n /** Additional profile details */\n details: {\n /** Short profile tagline */\n tagline: string;\n\n /** Longer profile summary */\n summary: string;\n\n /** Favorite quote */\n quote: string;\n };\n\n /** Unique identifier */\n id: UUID;\n}\n\n/**\n * Represents a single objective within a goal\n */\nexport interface Objective {\n /** Optional unique identifier */\n id?: string;\n\n /** Description of what needs to be achieved */\n description: string;\n\n /** Whether objective is completed */\n completed: boolean;\n}\n\n/**\n * Status enum for goals\n */\nexport enum GoalStatus {\n DONE = \"DONE\",\n FAILED = \"FAILED\",\n IN_PROGRESS = \"IN_PROGRESS\",\n}\n\n/**\n * Represents a high-level goal composed of objectives\n */\nexport interface Goal {\n /** Optional unique identifier */\n id?: UUID;\n\n /** Room ID where goal exists */\n roomId: UUID;\n\n /** User ID of goal owner */\n userId: UUID;\n\n /** Name/title of the goal */\n name: string;\n\n /** Current status */\n status: GoalStatus;\n\n /** Component objectives */\n objectives: Objective[];\n}\n\n/**\n * Model size/type classification\n */\nexport enum ModelClass {\n SMALL = \"small\",\n MEDIUM = \"medium\",\n LARGE = \"large\",\n EMBEDDING = \"embedding\",\n IMAGE = \"image\",\n}\n\n/**\n * Model settings\n */\nexport type ModelSettings = {\n /** Model name */\n name: string;\n\n /** Maximum input tokens */\n maxInputTokens: number;\n\n /** Maximum output tokens */\n maxOutputTokens: number;\n\n /** Optional frequency penalty */\n frequency_penalty?: number;\n\n /** Optional presence penalty */\n presence_penalty?: number;\n\n /** Optional repetition penalty */\n repetition_penalty?: number;\n\n /** Stop sequences */\n stop: string[];\n\n /** Temperature setting */\n temperature: number;\n\n /** Optional telemetry configuration (experimental) */\n experimental_telemetry?: TelemetrySettings;\n};\n\n/** Image model settings */\nexport type ImageModelSettings = {\n name: string;\n steps?: number;\n};\n\n/** Embedding model settings */\nexport type EmbeddingModelSettings = {\n name: string;\n dimensions?: number;\n};\n\n/**\n * Configuration for an AI model\n */\nexport type Model = {\n /** Optional API endpoint */\n endpoint?: string;\n\n /** Model names by size class */\n model: {\n [ModelClass.SMALL]?: ModelSettings;\n [ModelClass.MEDIUM]?: ModelSettings;\n [ModelClass.LARGE]?: ModelSettings;\n [ModelClass.EMBEDDING]?: EmbeddingModelSettings;\n [ModelClass.IMAGE]?: ImageModelSettings;\n };\n};\n\n/**\n * Model configurations by provider\n */\nexport type Models = {\n [ModelProviderName.OPENAI]: Model;\n [ModelProviderName.ETERNALAI]: Model;\n [ModelProviderName.ANTHROPIC]: Model;\n [ModelProviderName.GROK]: Model;\n [ModelProviderName.GROQ]: Model;\n [ModelProviderName.LLAMACLOUD]: Model;\n [ModelProviderName.TOGETHER]: Model;\n [ModelProviderName.LLAMALOCAL]: Model;\n [ModelProviderName.LMSTUDIO]: Model;\n [ModelProviderName.GOOGLE]: Model;\n [ModelProviderName.MISTRAL]: Model;\n [ModelProviderName.CLAUDE_VERTEX]: Model;\n [ModelProviderName.REDPILL]: Model;\n [ModelProviderName.OPENROUTER]: Model;\n [ModelProviderName.OLLAMA]: Model;\n [ModelProviderName.HEURIST]: Model;\n [ModelProviderName.GALADRIEL]: Model;\n [ModelProviderName.FAL]: Model;\n [ModelProviderName.GAIANET]: Model;\n [ModelProviderName.ALI_BAILIAN]: Model;\n [ModelProviderName.VOLENGINE]: Model;\n [ModelProviderName.NANOGPT]: Model;\n [ModelProviderName.HYPERBOLIC]: Model;\n [ModelProviderName.VENICE]: Model;\n [ModelProviderName.NVIDIA]: Model;\n [ModelProviderName.NINETEEN_AI]: Model;\n [ModelProviderName.AKASH_CHAT_API]: Model;\n [ModelProviderName.LIVEPEER]: Model;\n [ModelProviderName.DEEPSEEK]: Model;\n [ModelProviderName.INFERA]: Model;\n [ModelProviderName.BEDROCK]: Model;\n [ModelProviderName.ATOMA]: Model;\n [ModelProviderName.SECRETAI]: Model;\n [ModelProviderName.NEARAI]: Model;\n};\n\n/**\n * Available model providers\n */\nexport enum ModelProviderName {\n OPENAI = \"openai\",\n ETERNALAI = \"eternalai\",\n ANTHROPIC = \"anthropic\",\n GROK = \"grok\",\n GROQ = \"groq\",\n LLAMACLOUD = \"llama_cloud\",\n TOGETHER = \"together\",\n LLAMALOCAL = \"llama_local\",\n LMSTUDIO = \"lmstudio\",\n GOOGLE = \"google\",\n MISTRAL = \"mistral\",\n CLAUDE_VERTEX = \"claude_vertex\",\n REDPILL = \"redpill\",\n OPENROUTER = \"openrouter\",\n OLLAMA = \"ollama\",\n HEURIST = \"heurist\",\n GALADRIEL = \"galadriel\",\n FAL = \"falai\",\n GAIANET = \"gaianet\",\n ALI_BAILIAN = \"ali_bailian\",\n VOLENGINE = \"volengine\",\n NANOGPT = \"nanogpt\",\n HYPERBOLIC = \"hyperbolic\",\n VENICE = \"venice\",\n NVIDIA = \"nvidia\",\n NINETEEN_AI = \"nineteen_ai\",\n AKASH_CHAT_API = \"akash_chat_api\",\n LIVEPEER = \"livepeer\",\n LETZAI = \"letzai\",\n DEEPSEEK = \"deepseek\",\n INFERA = \"infera\",\n BEDROCK = \"bedrock\",\n ATOMA = \"atoma\",\n SECRETAI = \"secret_ai\",\n NEARAI = \"nearai\",\n}\n\n/**\n * Represents the current state/context of a conversation\n */\nexport interface State {\n /** ID of user who sent current message */\n userId?: UUID;\n\n /** ID of agent in conversation */\n agentId?: UUID;\n\n /** Agent's biography */\n bio: string;\n\n /** Agent's background lore */\n lore: string;\n\n /** Message handling directions */\n messageDirections: string;\n\n /** Post handling directions */\n postDirections: string;\n\n /** Current room/conversation ID */\n roomId: UUID;\n\n /** Optional agent name */\n agentName?: string;\n\n /** Optional message sender name */\n senderName?: string;\n\n /** String representation of conversation actors */\n actors: string;\n\n /** Optional array of actor objects */\n actorsData?: Actor[];\n\n /** Optional string representation of goals */\n goals?: string;\n\n /** Optional array of goal objects */\n goalsData?: Goal[];\n\n /** Recent message history as string */\n recentMessages: string;\n\n /** Recent message objects */\n recentMessagesData: Memory[];\n\n /** Optional valid action names */\n actionNames?: string;\n\n /** Optional action descriptions */\n actions?: string;\n\n /** Optional action objects */\n actionsData?: Action[];\n\n /** Optional action examples */\n actionExamples?: string;\n\n /** Optional provider descriptions */\n providers?: string;\n\n /** Optional response content */\n responseData?: Content;\n\n /** Optional recent interaction objects */\n recentInteractionsData?: Memory[];\n\n /** Optional recent interactions string */\n recentInteractions?: string;\n\n /** Optional formatted conversation */\n formattedConversation?: string;\n\n /** Optional formatted knowledge */\n knowledge?: string;\n /** Optional knowledge data */\n knowledgeData?: KnowledgeItem[];\n /** Optional knowledge data */\n ragKnowledgeData?: RAGKnowledgeItem[];\n\n /** Additional dynamic properties */\n [key: string]: unknown;\n}\n\n/**\n * Represents a stored memory/message\n */\nexport interface Memory {\n /** Optional unique identifier */\n id?: UUID;\n\n /** Associated user ID */\n userId: UUID;\n\n /** Associated agent ID */\n agentId: UUID;\n\n /** Optional creation timestamp */\n createdAt?: number;\n\n /** Memory content */\n content: Content;\n\n /** Optional embedding vector */\n embedding?: number[];\n\n /** Associated room ID */\n roomId: UUID;\n\n /** Whether memory is unique */\n unique?: boolean;\n\n /** Embedding similarity score */\n similarity?: number;\n}\n\n/**\n * Example message for demonstration\n */\nexport interface MessageExample {\n /** Associated user */\n user: string;\n\n /** Message content */\n content: Content;\n}\n\n/**\n * Handler function type for processing messages\n */\nexport type Handler = (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n options?: { [key: string]: unknown },\n callback?: HandlerCallback,\n) => Promise<unknown>;\n\n/**\n * Callback function type for handlers\n */\nexport type HandlerCallback = (\n response: Content,\n files?: any,\n) => Promise<Memory[]>;\n\n/**\n * Validator function type for actions/evaluators\n */\nexport type Validator = (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n) => Promise<boolean>;\n\n/**\n * Represents an action the agent can perform\n */\nexport interface Action {\n /** Similar action descriptions */\n similes: string[];\n\n /** Detailed description */\n description: string;\n\n /** Example usages */\n examples: ActionExample[][];\n\n /** Handler function */\n handler: Handler;\n\n /** Action name */\n name: string;\n\n /** Validation function */\n validate: Validator;\n\n /** Whether to suppress the initial message when this action is used */\n suppressInitialMessage?: boolean;\n}\n\n/**\n * Example for evaluating agent behavior\n */\nexport interface EvaluationExample {\n /** Evaluation context */\n context: string;\n\n /** Example messages */\n messages: Array<ActionExample>;\n\n /** Expected outcome */\n outcome: string;\n}\n\n/**\n * Evaluator for assessing agent responses\n */\nexport interface Evaluator {\n /** Whether to always run */\n alwaysRun?: boolean;\n\n /** Detailed description */\n description: string;\n\n /** Similar evaluator descriptions */\n similes: string[];\n\n /** Example evaluations */\n examples: EvaluationExample[];\n\n /** Handler function */\n handler: Handler;\n\n /** Evaluator name */\n name: string;\n\n /** Validation function */\n validate: Validator;\n}\n\n/**\n * Provider for external data/services\n */\nexport interface Provider {\n /** Data retrieval function */\n get: (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n ) => Promise<any>;\n}\n\n/**\n * Represents a relationship between users\n */\nexport interface Relationship {\n /** Unique identifier */\n id: UUID;\n\n /** First user ID */\n userA: UUID;\n\n /** Second user ID */\n userB: UUID;\n\n /** Primary user ID */\n userId: UUID;\n\n /** Associated room ID */\n roomId: UUID;\n\n /** Relationship status */\n status: string;\n\n /** Optional creation timestamp */\n createdAt?: string;\n}\n\n/**\n * Represents a user account\n */\nexport interface Account {\n /** Unique identifier */\n id: UUID;\n\n /** Display name */\n name: string;\n\n /** Username */\n username: string;\n\n /** Optional additional details */\n details?: { [key: string]: any };\n\n /** Optional email */\n email?: string;\n\n /** Optional avatar URL */\n avatarUrl?: string;\n}\n\n/**\n * Room participant with account details\n */\nexport interface Participant {\n /** Unique identifier */\n id: UUID;\n\n /** Associated account */\n account: Account;\n}\n\n/**\n * Represents a conversation room\n */\nexport interface Room {\n /** Unique identifier */\n id: UUID;\n\n /** Room participants */\n participants: Participant[];\n}\n\n/**\n * Represents a media attachment\n */\nexport type Media = {\n /** Unique identifier */\n id: string;\n\n /** Media URL */\n url: string;\n\n /** Media title */\n title: string;\n\n /** Media source */\n source: string;\n\n /** Media description */\n description: string;\n\n /** Text content */\n text: string;\n\n /** Content type */\n contentType?: string;\n};\n\n/**\n * Client instance\n */\nexport type ClientInstance = {\n /** Client name */\n // name: string;\n\n /** Stop client connection */\n stop: (runtime: IAgentRuntime) => Promise<unknown>;\n};\n\n/**\n * Client interface for platform connections\n */\nexport type Client = {\n /** Client name */\n name: string;\n\n /** Client configuration */\n config?: { [key: string]: any };\n\n /** Start client connection */\n start: (runtime: IAgentRuntime) => Promise<ClientInstance>;\n};\n\nexport type Adapter = {\n /** Initialize adapter */\n init: (runtime: IAgentRuntime) => IDatabaseAdapter & IDatabaseCacheAdapter;\n};\n\n/**\n * Plugin for extending agent functionality\n */\nexport type Plugin = {\n /** Plugin name */\n name: string;\n\n /** Plugin configuration */\n config?: { [key: string]: any };\n\n /** Plugin description */\n description: string;\n\n /** Optional actions */\n actions?: Action[];\n\n /** Optional providers */\n providers?: Provider[];\n\n /** Optional evaluators */\n evaluators?: Evaluator[];\n\n /** Optional services */\n services?: Service[];\n\n /** Optional clients */\n clients?: Client[];\n\n /** Optional adapters */\n adapters?: Adapter[];\n};\n\nexport interface IAgentConfig {\n [key: string]: string;\n}\n\nexport type TelemetrySettings = {\n /**\n * Enable or disable telemetry. Disabled by default while experimental.\n */\n isEnabled?: boolean;\n /**\n * Enable or disable input recording. Enabled by default.\n *\n * You might want to disable input recording to avoid recording sensitive\n * information, to reduce data transfers, or to increase performance.\n */\n recordInputs?: boolean;\n /**\n * Enable or disable output recording. Enabled by default.\n *\n * You might want to disable output recording to avoid recording sensitive\n * information, to reduce data transfers, or to increase performance.\n */\n recordOutputs?: boolean;\n /**\n * Identifier for this function. Used to group telemetry data by function.\n */\n functionId?: string;\n};\n\nexport interface ModelConfiguration {\n temperature?: number;\n maxOutputTokens?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n maxInputTokens?: number;\n experimental_telemetry?: TelemetrySettings;\n}\n\nexport type TemplateType = string | ((options: { state: State }) => string);\n\n/**\n * Configuration for an agent character\n */\nexport type Character = {\n /** Optional unique identifier */\n id?: UUID;\n\n /** Character name */\n name: string;\n\n /** Optional username */\n username?: string;\n\n /** Optional email */\n email?: string;\n\n /** Optional system prompt */\n system?: string;\n\n /** Model provider to use */\n modelProvider: ModelProviderName;\n\n /** Image model provider to use, if different from modelProvider */\n imageModelProvider?: ModelProviderName;\n\n /** Image Vision model provider to use, if different from modelProvider */\n imageVisionModelProvider?: ModelProviderName;\n\n /** Optional model endpoint override */\n modelEndpointOverride?: string;\n\n /** Optional prompt templates */\n templates?: {\n goalsTemplate?: TemplateType;\n factsTemplate?: TemplateType;\n messageHandlerTemplate?: TemplateType;\n shouldRespondTemplate?: TemplateType;\n continueMessageHandlerTemplate?: TemplateType;\n evaluationTemplate?: TemplateType;\n twitterSearchTemplate?: TemplateType;\n twitterActionTemplate?: TemplateType;\n twitterPostTemplate?: TemplateType;\n twitterMessageHandlerTemplate?: TemplateType;\n twitterShouldRespondTemplate?: TemplateType;\n twitterVoiceHandlerTemplate?: TemplateType;\n instagramPostTemplate?: TemplateType;\n instagramMessageHandlerTemplate?: TemplateType;\n instagramShouldRespondTemplate?: TemplateType;\n farcasterPostTemplate?: TemplateType;\n lensPostTemplate?: TemplateType;\n farcasterMessageHandlerTemplate?: TemplateType;\n lensMessageHandlerTemplate?: TemplateType;\n farcasterShouldRespondTemplate?: TemplateType;\n lensShouldRespondTemplate?: TemplateType;\n telegramMessageHandlerTemplate?: TemplateType;\n telegramShouldRespondTemplate?: TemplateType;\n telegramAutoPostTemplate?: string;\n telegramPinnedMessageTemplate?: string;\n discordAutoPostTemplate?: string;\n discordAnnouncementHypeTemplate?: string;\n discordVoiceHandlerTemplate?: TemplateType;\n discordShouldRespondTemplate?: TemplateType;\n discordMessageHandlerTemplate?: TemplateType;\n slackMessageHandlerTemplate?: TemplateType;\n slackShouldRespondTemplate?: TemplateType;\n jeeterPostTemplate?: string;\n jeeterSearchTemplate?: string;\n jeeterInteractionTemplate?: string;\n jeeterMessageHandlerTemplate?: string;\n jeeterShouldRespondTemplate?: string;\n devaPostTemplate?: string;\n };\n\n /** Character biography */\n bio: string | string[];\n\n /** Character background lore */\n lore: string[];\n\n /** Example messages */\n messageExamples: MessageExample[][];\n\n /** Example posts */\n postExamples: string[];\n\n /** Known topics */\n topics: string[];\n\n /** Character traits */\n adjectives: string[];\n\n /** Optional knowledge base */\n knowledge?: (string | { path: string; shared?: boolean })[];\n\n /** Available plugins */\n plugins: Plugin[];\n\n /** Optional configuration */\n settings?: {\n secrets?: { [key: string]: string };\n intiface?: boolean;\n imageSettings?: {\n steps?: number;\n width?: number;\n height?: number;\n cfgScale?: number;\n negativePrompt?: string;\n numIterations?: number;\n guidanceScale?: number;\n seed?: number;\n modelId?: string;\n jobId?: string;\n count?: number;\n stylePreset?: string;\n hideWatermark?: boolean;\n safeMode?: boolean;\n };\n voice?: {\n model?: string; // For VITS\n url?: string; // Legacy VITS support\n elevenlabs?: {\n // New structured ElevenLabs config\n voiceId: string;\n model?: string;\n stability?: string;\n similarityBoost?: string;\n style?: string;\n useSpeakerBoost?: string;\n };\n };\n model?: string;\n modelConfig?: ModelConfiguration;\n embeddingModel?: string;\n chains?: {\n evm?: any[];\n solana?: any[];\n [key: string]: any[];\n };\n transcription?: TranscriptionProvider;\n ragKnowledge?: boolean;\n };\n\n /** Optional client-specific config */\n clientConfig?: {\n discord?: {\n shouldIgnoreBotMessages?: boolean;\n shouldIgnoreDirectMessages?: boolean;\n shouldRespondOnlyToMentions?: boolean;\n messageSimilarityThreshold?: number;\n isPartOfTeam?: boolean;\n teamAgentIds?: string[];\n teamLeaderId?: string;\n teamMemberInterestKeywords?: string[];\n allowedChannelIds?: string[];\n autoPost?: {\n enabled?: boolean;\n monitorTime?: number;\n inactivityThreshold?: number;\n mainChannelId?: string;\n announcementChannelIds?: string[];\n minTimeBetweenPosts?: number;\n };\n };\n telegram?: {\n shouldIgnoreBotMessages?: boolean;\n shouldIgnoreDirectMessages?: boolean;\n shouldRespondOnlyToMentions?: boolean;\n shouldOnlyJoinInAllowedGroups?: boolean;\n allowedGroupIds?: string[];\n messageSimilarityThreshold?: number;\n isPartOfTeam?: boolean;\n teamAgentIds?: string[];\n teamLeaderId?: string;\n teamMemberInterestKeywords?: string[];\n autoPost?: {\n enabled?: boolean;\n monitorTime?: number;\n inactivityThreshold?: number;\n mainChannelId?: string;\n pinnedMessagesGroups?: string[];\n minTimeBetweenPosts?: number;\n };\n };\n slack?: {\n shouldIgnoreBotMessages?: boolean;\n shouldIgnoreDirectMessages?: boolean;\n };\n gitbook?: {\n keywords?: {\n projectTerms?: string[];\n generalQueries?: string[];\n };\n documentTriggers?: string[];\n };\n };\n\n /** Writing style guides */\n style: {\n all: string[];\n chat: string[];\n post: string[];\n };\n\n /** Optional Twitter profile */\n twitterProfile?: {\n id: string;\n username: string;\n screenName: string;\n bio: string;\n nicknames?: string[];\n };\n\n /** Optional Instagram profile */\n instagramProfile?: {\n id: string;\n username: string;\n bio: string;\n nicknames?: string[];\n };\n\n /** Optional SimsAI profile */\n simsaiProfile?: {\n id: string;\n username: string;\n screenName: string;\n bio: string;\n };\n\n /** Optional NFT prompt */\n nft?: {\n prompt: string;\n };\n\n /**Optinal Parent characters to inherit information from */\n extends?: string[];\n\n twitterSpaces?: TwitterSpaceDecisionOptions;\n};\n\nexport interface TwitterSpaceDecisionOptions {\n maxSpeakers?: number;\n topics?: string[];\n typicalDurationMinutes?: number;\n idleKickTimeoutMs?: number;\n minIntervalBetweenSpacesMinutes?: number;\n businessHoursOnly?: boolean;\n randomChance?: number;\n enableIdleMonitor?: boolean;\n enableSttTts?: boolean;\n enableRecording?: boolean;\n voiceId?: string;\n sttLanguage?: string;\n speakerMaxDurationMs?: number;\n}\n\n/**\n * Interface for database operations\n */\nexport interface IDatabaseAdapter {\n /** Database instance */\n db: any;\n\n /** Optional initialization */\n init(): Promise<void>;\n\n /** Close database connection */\n close(): Promise<void>;\n\n /** Get account by ID */\n getAccountById(userId: UUID): Promise<Account | null>;\n\n /** Create new account */\n createAccount(account: Account): Promise<boolean>;\n\n /** Get memories matching criteria */\n getMemories(params: {\n roomId: UUID;\n count?: number;\n unique?: boolean;\n tableName: string;\n agentId: UUID;\n start?: number;\n end?: number;\n }): Promise<Memory[]>;\n\n getMemoryById(id: UUID): Promise<Memory | null>;\n\n getMemoriesByIds(ids: UUID[], tableName?: string): Promise<Memory[]>;\n\n getMemoriesByRoomIds(params: {\n tableName: string;\n agentId: UUID;\n roomIds: UUID[];\n limit?: number;\n }): Promise<Memory[]>;\n\n getCachedEmbeddings(params: {\n query_table_name: string;\n query_threshold: number;\n query_input: string;\n query_field_name: string;\n query_field_sub_name: string;\n query_match_count: number;\n }): Promise<{ embedding: number[]; levenshtein_score: number }[]>;\n\n log(params: {\n body: { [key: string]: unknown };\n userId: UUID;\n roomId: UUID;\n type: string;\n }): Promise<void>;\n\n getActorDetails(params: { roomId: UUID }): Promise<Actor[]>;\n\n searchMemories(params: {\n tableName: string;\n agentId: UUID;\n roomId: UUID;\n embedding: number[];\n match_threshold: number;\n match_count: number;\n unique: boolean;\n }): Promise<Memory[]>;\n\n updateGoalStatus(params: {\n goalId: UUID;\n status: GoalStatus;\n }): Promise<void>;\n\n searchMemoriesByEmbedding(\n embedding: number[],\n params: {\n match_threshold?: number;\n count?: number;\n roomId?: UUID;\n agentId?: UUID;\n unique?: boolean;\n tableName: string;\n },\n ): Promise<Memory[]>;\n\n createMemory(\n memory: Memory,\n tableName: string,\n unique?: boolean,\n ): Promise<void>;\n\n removeMemory(memoryId: UUID, tableName: string): Promise<void>;\n\n removeAllMemories(roomId: UUID, tableName: string): Promise<void>;\n\n countMemories(\n roomId: UUID,\n unique?: boolean,\n tableName?: string,\n ): Promise<number>;\n\n getGoals(params: {\n agentId: UUID;\n roomId: UUID;\n userId?: UUID | null;\n onlyInProgress?: boolean;\n count?: number;\n }): Promise<Goal[]>;\n\n updateGoal(goal: Goal): Promise<void>;\n\n createGoal(goal: Goal): Promise<void>;\n\n removeGoal(goalId: UUID): Promise<void>;\n\n removeAllGoals(roomId: UUID): Promise<void>;\n\n getRoom(roomId: UUID): Promise<UUID | null>;\n\n createRoom(roomId?: UUID): Promise<UUID>;\n\n removeRoom(roomId: UUID): Promise<void>;\n\n getRoomsForParticipant(userId: UUID): Promise<UUID[]>;\n\n getRoomsForParticipants(userIds: UUID[]): Promise<UUID[]>;\n\n addParticipant(userId: UUID, roomId: UUID): Promise<boolean>;\n\n removeParticipant(userId: UUID, roomId: UUID): Promise<boolean>;\n\n getParticipantsForAccount(userId: UUID): Promise<Participant[]>;\n\n getParticipantsForRoom(roomId: UUID): Promise<UUID[]>;\n\n getParticipantUserState(\n roomId: UUID,\n userId: UUID,\n ): Promise<\"FOLLOWED\" | \"MUTED\" | null>;\n\n setParticipantUserState(\n roomId: UUID,\n userId: UUID,\n state: \"FOLLOWED\" | \"MUTED\" | null,\n ): Promise<void>;\n\n createRelationship(params: { userA: UUID; userB: UUID }): Promise<boolean>;\n\n getRelationship(params: {\n userA: UUID;\n userB: UUID;\n }): Promise<Relationship | null>;\n\n getRelationships(params: { userId: UUID }): Promise<Relationship[]>;\n\n getKnowledge(params: {\n id?: UUID;\n agentId: UUID;\n limit?: number;\n query?: string;\n conversationContext?: string;\n }): Promise<RAGKnowledgeItem[]>;\n\n searchKnowledge(params: {\n agentId: UUID;\n embedding: Float32Array;\n match_threshold: number;\n match_count: number;\n searchText?: string;\n }): Promise<RAGKnowledgeItem[]>;\n\n createKnowledge(knowledge: RAGKnowledgeItem): Promise<void>;\n removeKnowledge(id: UUID): Promise<void>;\n clearKnowledge(agentId: UUID, shared?: boolean): Promise<void>;\n}\n\nexport interface IDatabaseCacheAdapter {\n getCache(params: {\n agentId: UUID;\n key: string;\n }): Promise<string | undefined>;\n\n setCache(params: {\n agentId: UUID;\n key: string;\n value: string;\n }): Promise<boolean>;\n\n deleteCache(params: { agentId: UUID; key: string }): Promise<boolean>;\n}\n\nexport interface IMemoryManager {\n runtime: IAgentRuntime;\n tableName: string;\n constructor: Function;\n\n addEmbeddingToMemory(memory: Memory): Promise<Memory>;\n\n getMemories(opts: {\n roomId: UUID;\n count?: number;\n unique?: boolean;\n start?: number;\n end?: number;\n }): Promise<Memory[]>;\n\n getCachedEmbeddings(\n content: string,\n ): Promise<{ embedding: number[]; levenshtein_score: number }[]>;\n\n getMemoryById(id: UUID): Promise<Memory | null>;\n getMemoriesByRoomIds(params: {\n roomIds: UUID[];\n limit?: number;\n }): Promise<Memory[]>;\n searchMemoriesByEmbedding(\n embedding: number[],\n opts: {\n match_threshold?: number;\n count?: number;\n roomId: UUID;\n unique?: boolean;\n },\n ): Promise<Memory[]>;\n\n createMemory(memory: Memory, unique?: boolean): Promise<void>;\n\n removeMemory(memoryId: UUID): Promise<void>;\n\n removeAllMemories(roomId: UUID): Promise<void>;\n\n countMemories(roomId: UUID, unique?: boolean): Promise<number>;\n}\n\nexport interface IRAGKnowledgeManager {\n runtime: IAgentRuntime;\n tableName: string;\n\n getKnowledge(params: {\n query?: string;\n id?: UUID;\n limit?: number;\n conversationContext?: string;\n agentId?: UUID;\n }): Promise<RAGKnowledgeItem[]>;\n createKnowledge(item: RAGKnowledgeItem): Promise<void>;\n removeKnowledge(id: UUID): Promise<void>;\n searchKnowledge(params: {\n agentId: UUID;\n embedding: Float32Array | number[];\n match_threshold?: number;\n match_count?: number;\n searchText?: string;\n }): Promise<RAGKnowledgeItem[]>;\n clearKnowledge(shared?: boolean): Promise<void>;\n processFile(file: {\n path: string;\n content: string;\n type: \"pdf\" | \"md\" | \"txt\";\n isShared: boolean;\n }): Promise<void>;\n cleanupDeletedKnowledgeFiles(): Promise<void>;\n generateScopedId(path: string, isShared: boolean): UUID;\n}\n\nexport type CacheOptions = {\n expires?: number;\n};\n\nexport enum CacheStore {\n REDIS = \"redis\",\n DATABASE = \"database\",\n FILESYSTEM = \"filesystem\",\n}\n\nexport interface ICacheManager {\n get<T = unknown>(key: string): Promise<T | undefined>;\n set<T>(key: string, value: T, options?: CacheOptions): Promise<void>;\n delete(key: string): Promise<void>;\n}\n\nexport abstract class Service {\n private static instance: Service | null = null;\n\n static get serviceType(): ServiceType {\n throw new Error(\"Service must implement static serviceType getter\");\n }\n\n public static getInstance<T extends Service>(): T {\n if (!Service.instance) {\n Service.instance = new (this as any)();\n }\n return Service.instance as T;\n }\n\n get serviceType(): ServiceType {\n return (this.constructor as typeof Service).serviceType;\n }\n\n // Add abstract initialize method that must be implemented by derived classes\n abstract initialize(runtime: IAgentRuntime): Promise<void>;\n}\n\nexport interface IAgentRuntime {\n // Properties\n agentId: UUID;\n serverUrl: string;\n databaseAdapter: IDatabaseAdapter;\n token: string | null;\n modelProvider: ModelProviderName;\n imageModelProvider: ModelProviderName;\n imageVisionModelProvider: ModelProviderName;\n character: Character;\n providers: Provider[];\n actions: Action[];\n evaluators: Evaluator[];\n plugins: Plugin[];\n\n fetch?: typeof fetch | null;\n\n messageManager: IMemoryManager;\n descriptionManager: IMemoryManager;\n documentsManager: IMemoryManager;\n knowledgeManager: IMemoryManager;\n ragKnowledgeManager: IRAGKnowledgeManager;\n loreManager: IMemoryManager;\n\n cacheManager: ICacheManager;\n\n services: Map<ServiceType, Service>;\n clients: ClientInstance[];\n\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter | null;\n\n initialize(): Promise<void>;\n\n registerMemoryManager(manager: IMemoryManager): void;\n\n getMemoryManager(name: string): IMemoryManager | null;\n\n getService<T extends Service>(service: ServiceType): T | null;\n\n registerService(service: Service): void;\n\n getSetting(key: string): string | null;\n\n // Methods\n getConversationLength(): number;\n\n processActions(\n message: Memory,\n responses: Memory[],\n state?: State,\n callback?: HandlerCallback,\n ): Promise<void>;\n\n evaluate(\n message: Memory,\n state?: State,\n didRespond?: boolean,\n callback?: HandlerCallback,\n ): Promise<string[] | null>;\n\n ensureParticipantExists(userId: UUID, roomId: UUID): Promise<void>;\n\n ensureUserExists(\n userId: UUID,\n userName: string | null,\n name: string | null,\n source: string | null,\n ): Promise<void>;\n\n registerAction(action: Action): void;\n\n ensureConnection(\n userId: UUID,\n roomId: UUID,\n userName?: string,\n userScreenName?: string,\n source?: string,\n ): Promise<void>;\n\n ensureParticipantInRoom(userId: UUID, roomId: UUID): Promise<void>;\n\n ensureRoomExists(roomId: UUID): Promise<void>;\n\n composeState(\n message: Memory,\n additionalKeys?: { [key: string]: unknown },\n ): Promise<State>;\n\n updateRecentMessageState(state: State): Promise<State>;\n}\n\nexport interface IImageDescriptionService extends Service {\n describeImage(\n imageUrl: string,\n ): Promise<{ title: string; description: string }>;\n}\n\nexport interface ITranscriptionService extends Service {\n transcribeAttachment(audioBuffer: ArrayBuffer): Promise<string | null>;\n transcribeAttachmentLocally(\n audioBuffer: ArrayBuffer,\n ): Promise<string | null>;\n transcribe(audioBuffer: ArrayBuffer): Promise<string | null>;\n transcribeLocally(audioBuffer: ArrayBuffer): Promise<string | null>;\n}\n\nexport interface IVideoService extends Service {\n isVideoUrl(url: string): boolean;\n fetchVideoInfo(url: string): Promise<Media>;\n downloadVideo(videoInfo: Media): Promise<string>;\n processVideo(url: string, runtime: IAgentRuntime): Promise<Media>;\n}\n\nexport interface ITextGenerationService extends Service {\n initializeModel(): Promise<void>;\n queueMessageCompletion(\n context: string,\n temperature: number,\n stop: string[],\n frequency_penalty: number,\n presence_penalty: number,\n max_tokens: number,\n ): Promise<any>;\n queueTextCompletion(\n context: string,\n temperature: number,\n stop: string[],\n frequency_penalty: number,\n presence_penalty: number,\n max_tokens: number,\n ): Promise<string>;\n getEmbeddingResponse(input: string): Promise<number[] | undefined>;\n}\n\nexport interface IBrowserService extends Service {\n closeBrowser(): Promise<void>;\n getPageContent(\n url: string,\n runtime: IAgentRuntime,\n ): Promise<{ title: string; description: string; bodyContent: string }>;\n}\n\nexport interface ISpeechService extends Service {\n getInstance(): ISpeechService;\n generate(runtime: IAgentRuntime, text: string): Promise<Readable>;\n}\n\nexport interface IPdfService extends Service {\n getInstance(): IPdfService;\n convertPdfToText(pdfBuffer: Buffer): Promise<string>;\n}\n\nexport interface IAwsS3Service extends Service {\n uploadFile(\n imagePath: string,\n subDirectory: string,\n useSignedUrl: boolean,\n expiresIn: number,\n ): Promise<{\n success: boolean;\n url?: string;\n error?: string;\n }>;\n generateSignedUrl(fileName: string, expiresIn: number): Promise<string>;\n}\n\nexport interface UploadIrysResult {\n success: boolean;\n url?: string;\n error?: string;\n data?: any;\n}\n\nexport interface DataIrysFetchedFromGQL {\n success: boolean;\n data: any;\n error?: string;\n}\n\nexport interface GraphQLTag {\n name: string;\n values: any[];\n}\n\nexport enum IrysMessageType {\n REQUEST = \"REQUEST\",\n DATA_STORAGE = \"DATA_STORAGE\",\n REQUEST_RESPONSE = \"REQUEST_RESPONSE\",\n}\n\nexport enum IrysDataType {\n FILE = \"FILE\",\n IMAGE = \"IMAGE\",\n OTHER = \"OTHER\",\n}\n\nexport interface IrysTimestamp {\n from: number;\n to: number;\n}\n\nexport interface IIrysService extends Service {\n getDataFromAnAgent(\n agentsWalletPublicKeys: string[],\n tags: GraphQLTag[],\n timestamp: IrysTimestamp,\n ): Promise<DataIrysFetchedFromGQL>;\n workerUploadDataOnIrys(\n data: any,\n dataType: IrysDataType,\n messageType: IrysMessageType,\n serviceCategory: string[],\n protocol: string[],\n validationThreshold: number[],\n minimumProviders: number[],\n testProvider: boolean[],\n reputation: number[],\n ): Promise<UploadIrysResult>;\n providerUploadDataOnIrys(\n data: any,\n dataType: IrysDataType,\n serviceCategory: string[],\n protocol: string[],\n ): Promise<UploadIrysResult>;\n}\n\nexport interface ITeeLogService extends Service {\n getInstance(): ITeeLogService;\n log(\n agentId: string,\n roomId: string,\n userId: string,\n type: string,\n content: string,\n ): Promise<boolean>;\n}\n\nexport enum ServiceType {\n IMAGE_DESCRIPTION = \"image_description\",\n TRANSCRIPTION = \"transcription\",\n VIDEO = \"video\",\n TEXT_GENERATION = \"text_generation\",\n BROWSER = \"browser\",\n SPEECH_GENERATION = \"speech_generation\",\n PDF = \"pdf\",\n INTIFACE = \"intiface\",\n AWS_S3 = \"aws_s3\",\n BUTTPLUG = \"buttplug\",\n SLACK = \"slack\",\n VERIFIABLE_LOGGING = \"verifiable_logging\",\n IRYS = \"irys\",\n TEE_LOG = \"tee_log\",\n GOPLUS_SECURITY = \"goplus_security\",\n WEB_SEARCH = \"web_search\",\n EMAIL_AUTOMATION = \"email_automation\",\n NKN_CLIENT_SERVICE = \"nkn_client_service\",\n}\n\nexport enum LoggingLevel {\n DEBUG = \"debug\",\n VERBOSE = \"verbose\",\n NONE = \"none\",\n}\n\nexport type KnowledgeItem = {\n id: UUID;\n content: Content;\n};\n\nexport interface RAGKnowledgeItem {\n id: UUID;\n agentId: UUID;\n content: {\n text: string;\n metadata?: {\n isMain?: boolean;\n isChunk?: boolean;\n originalId?: UUID;\n chunkIndex?: number;\n source?: string;\n type?: string;\n isShared?: boolean;\n [key: string]: unknown;\n };\n };\n embedding?: Float32Array;\n createdAt?: number;\n similarity?: number;\n score?: number;\n}\n\nexport interface ActionResponse {\n like: boolean;\n retweet: boolean;\n quote?: boolean;\n reply?: boolean;\n}\n\nexport interface ISlackService extends Service {\n client: any;\n}\n\nexport enum TokenizerType {\n Auto = \"auto\",\n TikToken = \"tiktoken\",\n}\n\nexport enum TranscriptionProvider {\n OpenAI = \"openai\",\n Deepgram = \"deepgram\",\n Local = \"local\",\n}\n\nexport enum ActionTimelineType {\n ForYou = \"foryou\",\n Following = \"following\",\n}\nexport enum KnowledgeScope {\n SHARED = \"shared\",\n PRIVATE = \"private\",\n}\n\nexport enum CacheKeyPrefix {\n KNOWLEDGE = \"knowledge\",\n}\n\nexport interface DirectoryItem {\n directory: string;\n shared?: boolean;\n}\n\nexport interface ChunkRow {\n id: string;\n // Add other properties if needed\n}\n","import settings from \"./settings.ts\";\nimport {\n type EmbeddingModelSettings,\n type ImageModelSettings,\n ModelClass,\n ModelProviderName,\n type Models,\n type ModelSettings,\n} from \"./types.ts\";\n\nexport const models: Models = {\n [ModelProviderName.OPENAI]: {\n endpoint: settings.OPENAI_API_URL || \"https://api.openai.com/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_OPENAI_MODEL || \"gpt-4o-mini\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_OPENAI_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_OPENAI_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.EMBEDDING]: {\n name:\n settings.EMBEDDING_OPENAI_MODEL || \"text-embedding-3-small\",\n dimensions: 1536,\n },\n [ModelClass.IMAGE]: {\n name: settings.IMAGE_OPENAI_MODEL || \"dall-e-3\",\n },\n },\n },\n [ModelProviderName.ETERNALAI]: {\n endpoint: settings.ETERNALAI_URL,\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.ETERNALAI_MODEL ||\n \"neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.ETERNALAI_MODEL ||\n \"neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.ETERNALAI_MODEL ||\n \"neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n },\n },\n [ModelProviderName.ANTHROPIC]: {\n endpoint: \"https://api.anthropic.com/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_ANTHROPIC_MODEL || \"claude-3-haiku-20240307\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 4096,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_ANTHROPIC_MODEL ||\n \"claude-3-5-sonnet-20241022\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 4096,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_ANTHROPIC_MODEL ||\n \"claude-3-5-sonnet-20241022\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 4096,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.CLAUDE_VERTEX]: {\n endpoint: \"https://api.anthropic.com/v1\", // TODO: check\n model: {\n [ModelClass.SMALL]: {\n name: \"claude-3-5-sonnet-20241022\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: \"claude-3-5-sonnet-20241022\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: \"claude-3-opus-20240229\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.GROK]: {\n endpoint: \"https://api.x.ai/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_GROK_MODEL || \"grok-2-1212\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_GROK_MODEL || \"grok-2-1212\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_GROK_MODEL || \"grok-2-1212\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: settings.EMBEDDING_GROK_MODEL || \"grok-2-1212\", // not sure about this one\n },\n },\n },\n [ModelProviderName.GROQ]: {\n endpoint: \"https://api.groq.com/openai/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_GROQ_MODEL || \"llama-3.1-8b-instant\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8000,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_GROQ_MODEL || \"llama-3.3-70b-versatile\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8000,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_GROQ_MODEL || \"llama-3.2-90b-vision-preview\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8000,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: settings.EMBEDDING_GROQ_MODEL || \"llama-3.1-8b-instant\",\n },\n },\n },\n [ModelProviderName.LLAMACLOUD]: {\n endpoint: \"https://api.llamacloud.com/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: \"meta-llama/Llama-3.2-3B-Instruct-Turbo\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: \"meta-llama-3.1-8b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: \"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: \"togethercomputer/m2-bert-80M-32k-retrieval\",\n },\n [ModelClass.IMAGE]: {\n name: \"black-forest-labs/FLUX.1-schnell\",\n steps: 4,\n },\n },\n },\n [ModelProviderName.TOGETHER]: {\n endpoint: \"https://api.together.ai/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: \"meta-llama/Llama-3.2-3B-Instruct-Turbo\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: \"meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo-128K\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: \"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: \"togethercomputer/m2-bert-80M-32k-retrieval\",\n },\n [ModelClass.IMAGE]: {\n name: \"black-forest-labs/FLUX.1-schnell\",\n steps: 4,\n },\n },\n },\n [ModelProviderName.LLAMALOCAL]: {\n model: {\n [ModelClass.SMALL]: {\n name: \"NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true\",\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: \"NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true\", // TODO: ?download=true\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: \"NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true\", // \"RichardErkhov/NousResearch_-_Meta-Llama-3.1-70B-gguf\", // TODO:\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: \"togethercomputer/m2-bert-80M-32k-retrieval\",\n },\n },\n },\n [ModelProviderName.LMSTUDIO]: {\n endpoint: settings.LMSTUDIO_SERVER_URL || \"http://localhost:1234/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_LMSTUDIO_MODEL || settings.LMSTUDIO_MODEL || \"hermes-3-llama-3.1-8b\",\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_LMSTUDIO_MODEL || settings.LMSTUDIO_MODEL || \"hermes-3-llama-3.1-8b\",\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_LMSTUDIO_MODEL || settings.LMSTUDIO_MODEL || \"hermes-3-llama-3.1-8b\",\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.GOOGLE]: {\n endpoint: \"https://generativelanguage.googleapis.com\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_GOOGLE_MODEL ||\n settings.GOOGLE_MODEL ||\n \"gemini-2.0-flash-exp\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_GOOGLE_MODEL ||\n settings.GOOGLE_MODEL ||\n \"gemini-2.0-flash-exp\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_GOOGLE_MODEL ||\n settings.GOOGLE_MODEL ||\n \"gemini-2.0-flash-exp\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name:\n settings.EMBEDDING_GOOGLE_MODEL ||\n settings.GOOGLE_MODEL ||\n \"text-embedding-004\",\n },\n },\n },\n [ModelProviderName.MISTRAL]: {\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_MISTRAL_MODEL ||\n settings.MISTRAL_MODEL ||\n \"mistral-small-latest\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_MISTRAL_MODEL ||\n settings.MISTRAL_MODEL ||\n \"mistral-large-latest\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_MISTRAL_MODEL ||\n settings.MISTRAL_MODEL ||\n \"mistral-large-latest\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.REDPILL]: {\n endpoint: \"https://api.red-pill.ai/v1\",\n // Available models: https://docs.red-pill.ai/get-started/supported-models\n // To test other models, change the models below\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_REDPILL_MODEL ||\n settings.REDPILL_MODEL ||\n \"gpt-4o-mini\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_REDPILL_MODEL ||\n settings.REDPILL_MODEL ||\n \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_REDPILL_MODEL ||\n settings.REDPILL_MODEL ||\n \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n\n [ModelClass.EMBEDDING]: {\n name: \"text-embedding-3-small\",\n },\n },\n },\n [ModelProviderName.OPENROUTER]: {\n endpoint: \"https://openrouter.ai/api/v1\",\n // Available models: https://openrouter.ai/models\n // To test other models, change the models below\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_OPENROUTER_MODEL ||\n settings.OPENROUTER_MODEL ||\n \"nousresearch/hermes-3-llama-3.1-405b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_OPENROUTER_MODEL ||\n settings.OPENROUTER_MODEL ||\n \"nousresearch/hermes-3-llama-3.1-405b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_OPENROUTER_MODEL ||\n settings.OPENROUTER_MODEL ||\n \"nousresearch/hermes-3-llama-3.1-405b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: \"text-embedding-3-small\",\n },\n },\n },\n [ModelProviderName.OLLAMA]: {\n endpoint: settings.OLLAMA_SERVER_URL || \"http://localhost:11434\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_OLLAMA_MODEL ||\n settings.OLLAMA_MODEL ||\n \"llama3.2\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_OLLAMA_MODEL ||\n settings.OLLAMA_MODEL ||\n \"hermes3\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_OLLAMA_MODEL ||\n settings.OLLAMA_MODEL ||\n \"hermes3:70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n\n [ModelClass.EMBEDDING]: {\n name: settings.OLLAMA_EMBEDDING_MODEL || \"mxbai-embed-large\",\n dimensions: 1024,\n },\n },\n },\n [ModelProviderName.HEURIST]: {\n endpoint: \"https://llm-gateway.heurist.xyz\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_HEURIST_MODEL ||\n \"meta-llama/llama-3-70b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_HEURIST_MODEL ||\n \"meta-llama/llama-3-70b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_HEURIST_MODEL ||\n \"meta-llama/llama-3.3-70b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.IMAGE]: {\n name: settings.HEURIST_IMAGE_MODEL || \"FLUX.1-dev\",\n steps: 20,\n },\n [ModelClass.EMBEDDING]: {\n name: \"BAAI/bge-large-en-v1.5\",\n dimensions: 1024,\n },\n },\n },\n [ModelProviderName.GALADRIEL]: {\n endpoint: \"https://api.galadriel.com/v1/verified\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_GALADRIEL_MODEL || \"gpt-4o-mini\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_GALADRIEL_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_GALADRIEL_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n },\n },\n [ModelProviderName.FAL]: {\n endpoint: \"https://api.fal.ai/v1\",\n model: {\n [ModelClass.IMAGE]: { name: \"fal-ai/flux-lora\", steps: 28 },\n },\n },\n [ModelProviderName.GAIANET]: {\n endpoint: settings.GAIANET_SERVER_URL,\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.GAIANET_MODEL ||\n settings.SMALL_GAIANET_MODEL ||\n \"llama3b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.GAIANET_MODEL ||\n settings.MEDIUM_GAIANET_MODEL ||\n \"llama\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.GAIANET_MODEL ||\n settings.LARGE_GAIANET_MODEL ||\n \"qwen72b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: settings.GAIANET_EMBEDDING_MODEL || \"nomic-embed\",\n dimensions: 768,\n },\n },\n },\n [ModelProviderName.ALI_BAILIAN]: {\n endpoint: \"https://dashscope.aliyuncs.com/compatible-mode/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: \"qwen-turbo\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: \"qwen-plus\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: \"qwen-max\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.IMAGE]: {\n name: \"wanx-v1\",\n },\n },\n },\n [ModelProviderName.VOLENGINE]: {\n endpoint:\n settings.VOLENGINE_API_URL ||\n \"https://open.volcengineapi.com/api/v3/\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_VOLENGINE_MODEL ||\n settings.VOLENGINE_MODEL ||\n \"doubao-lite-128k\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_VOLENGINE_MODEL ||\n settings.VOLENGINE_MODEL ||\n \"doubao-pro-128k\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_VOLENGINE_MODEL ||\n settings.VOLENGINE_MODEL ||\n \"doubao-pro-256k\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.EMBEDDING]: {\n name: settings.VOLENGINE_EMBEDDING_MODEL || \"doubao-embedding\",\n },\n },\n },\n [ModelProviderName.NANOGPT]: {\n endpoint: \"https://nano-gpt.com/api/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_NANOGPT_MODEL || \"gpt-4o-mini\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_NANOGPT_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_NANOGPT_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n },\n },\n [ModelProviderName.HYPERBOLIC]: {\n endpoint: \"https://api.hyperbolic.xyz/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_HYPERBOLIC_MODEL ||\n settings.HYPERBOLIC_MODEL ||\n \"meta-llama/Llama-3.2-3B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_HYPERBOLIC_MODEL ||\n settings.HYPERBOLIC_MODEL ||\n \"meta-llama/Meta-Llama-3.1-70B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_HYPERBOLIC_MODEL ||\n settings.HYPERBOLIC_MODEL ||\n \"meta-llama/Meta-Llama-3.1-405-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.IMAGE]: {\n name: settings.IMAGE_HYPERBOLIC_MODEL || \"FLUX.1-dev\",\n },\n },\n },\n [ModelProviderName.VENICE]: {\n endpoint: \"https://api.venice.ai/api/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_VENICE_MODEL || \"llama-3.3-70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_VENICE_MODEL || \"llama-3.3-70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_VENICE_MODEL || \"llama-3.1-405b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.IMAGE]: {\n name: settings.IMAGE_VENICE_MODEL || \"fluently-xl\",\n },\n },\n },\n [ModelProviderName.NVIDIA]: {\n endpoint: \"https://integrate.api.nvidia.com/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_NVIDIA_MODEL || \"meta/llama-3.2-3b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_NVIDIA_MODEL || \"meta/llama-3.3-70b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_NVIDIA_MODEL || \"meta/llama-3.1-405b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n },\n },\n [ModelProviderName.NINETEEN_AI]: {\n endpoint: \"https://api.nineteen.ai/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_NINETEEN_AI_MODEL ||\n \"unsloth/Llama-3.2-3B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_NINETEEN_AI_MODEL ||\n \"unsloth/Meta-Llama-3.1-8B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_NINETEEN_AI_MODEL ||\n \"hugging-quants/Meta-Llama-3.1-70B-Instruct-AWQ-INT4\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.IMAGE]: {\n name:\n settings.IMAGE_NINETEEN_AI_MODEL ||\n \"dataautogpt3/ProteusV0.4-Lightning\",\n },\n },\n },\n [ModelProviderName.AKASH_CHAT_API]: {\n endpoint: \"https://chatapi.akash.network/api/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_AKASH_CHAT_API_MODEL ||\n \"Meta-Llama-3-2-3B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_AKASH_CHAT_API_MODEL ||\n \"Meta-Llama-3-3-70B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_AKASH_CHAT_API_MODEL ||\n \"Meta-Llama-3-1-405B-Instruct-FP8\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n },\n },\n [ModelProviderName.LIVEPEER]: {\n endpoint: settings.LIVEPEER_GATEWAY_URL || \"http://gateway.test-gateway\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_LIVEPEER_MODEL ||\n \"meta-llama/Meta-Llama-3.1-8B-Instruct\",\n stop: [],\n maxInputTokens: 8000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_LIVEPEER_MODEL ||\n \"meta-llama/Meta-Llama-3.1-8B-Instruct\",\n stop: [],\n maxInputTokens: 8000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_LIVEPEER_MODEL ||\n \"meta-llama/Meta-Llama-3.1-8B-Instruct\",\n stop: [],\n maxInputTokens: 8000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n [ModelClass.IMAGE]: {\n name:\n settings.IMAGE_LIVEPEER_MODEL || \"ByteDance/SDXL-Lightning\",\n },\n },\n },\n [ModelProviderName.INFERA]: {\n endpoint: \"https://api.infera.org\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_INFERA_MODEL || \"llama3.2:3b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_INFERA_MODEL || \"mistral-nemo:latest\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_INFERA_MODEL || \"mistral-small:latest\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n },\n },\n [ModelProviderName.DEEPSEEK]: {\n endpoint: settings.DEEPSEEK_API_URL || \"https://api.deepseek.com\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_DEEPSEEK_MODEL || \"deepseek-chat\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_DEEPSEEK_MODEL || \"deepseek-chat\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_DEEPSEEK_MODEL || \"deepseek-chat\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.BEDROCK]: {\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_BEDROCK_MODEL || \"amazon.nova-micro-v1:0\",\n maxInputTokens: 128000,\n maxOutputTokens: 5120,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n stop: [],\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_BEDROCK_MODEL || \"amazon.nova-lite-v1:0\",\n maxInputTokens: 128000,\n maxOutputTokens: 5120,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n stop: [],\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_BEDROCK_MODEL || \"amazon.nova-pro-v1:0\",\n maxInputTokens: 128000,\n maxOutputTokens: 5120,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n stop: [],\n },\n [ModelClass.EMBEDDING]: {\n name:\n settings.EMBEDDING_BEDROCK_MODEL ||\n \"amazon.titan-embed-text-v1\",\n },\n [ModelClass.IMAGE]: {\n name: settings.IMAGE_BEDROCK_MODEL || \"amazon.nova-canvas-v1:0\",\n },\n },\n },\n [ModelProviderName.ATOMA]: {\n endpoint: settings.ATOMA_API_URL || \"https://api.atoma.network/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_ATOMA_MODEL ||\n \"meta-llama/Llama-3.3-70B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_ATOMA_MODEL ||\n \"meta-llama/Llama-3.3-70B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_ATOMA_MODEL ||\n \"meta-llama/Llama-3.3-70B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.SECRETAI]: {\n endpoint: settings.SECRET_AI_URL || \"https://ai1.scrtlabs.com:21434\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_SECRET_AI_MODEL ||\n \"deepseek-r1:70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_SECRET_AI_MODEL ||\n \"deepseek-r1:70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_SECRET_AI_MODEL ||\n \"deepseek-r1:70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.NEARAI]: {\n endpoint: settings.NEARAI_API_URL || \"https://api.near.ai/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_NEARAI_MODEL ||\n settings.NEARAI_MODEL ||\n \"fireworks::accounts/fireworks/models/llama-v3p2-3b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_NEARAI_MODEL ||\n settings.NEARAI_MODEL ||\n \"fireworks::accounts/fireworks/models/llama-v3p1-70b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_NEARAI_MODEL ||\n settings.NEARAI_MODEL ||\n \"fireworks::accounts/fireworks/models/llama-v3p1-405b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.IMAGE]: {\n name: settings.IMAGE_NEARAI_MODEL || \"fireworks::accounts/fireworks/models/playground-v2-5-1024px-aesthetic\",\n },\n },\n },\n};\n\nexport function getModelSettings(\n provider: ModelProviderName,\n type: ModelClass\n): ModelSettings | undefined {\n return models[provider]?.model[type] as ModelSettings | undefined;\n}\n\nexport function getImageModelSettings(\n provider: ModelProviderName\n): ImageModelSettings | undefined {\n return models[provider]?.model[ModelClass.IMAGE] as\n | ImageModelSettings\n | undefined;\n}\n\nexport function getEmbeddingModelSettings(\n provider: ModelProviderName\n): EmbeddingModelSettings | undefined {\n return models[provider]?.model[ModelClass.EMBEDDING] as\n | EmbeddingModelSettings\n | undefined;\n}\n\nexport function getEndpoint(provider: ModelProviderName) {\n return models[provider].endpoint;\n}\n","import path from \"node:path\";\nimport { fileURLToPath } from \"url\";\nimport { FlagEmbedding, EmbeddingModel } from \"fastembed\";\nimport elizaLogger from \"./logger\";\n\nclass LocalEmbeddingModelManager {\n private static instance: LocalEmbeddingModelManager | null;\n private model: FlagEmbedding | null = null;\n private initPromise: Promise<void> | null = null;\n private initializationLock = false;\n\n private constructor() {}\n\n public static getInstance(): LocalEmbeddingModelManager {\n if (!LocalEmbeddingModelManager.instance) {\n LocalEmbeddingModelManager.instance =\n new LocalEmbeddingModelManager();\n }\n return LocalEmbeddingModelManager.instance;\n }\n\n private async getRootPath(): Promise<string> {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const rootPath = path.resolve(__dirname, \"..\");\n return rootPath.includes(\"/eliza/\")\n ? rootPath.split(\"/eliza/\")[0] + \"/eliza/\"\n : path.resolve(__dirname, \"..\");\n }\n\n public async initialize(): Promise<void> {\n // If already initialized, return immediately\n if (this.model) {\n return;\n }\n\n // If initialization is in progress, wait for it\n if (this.initPromise) {\n return this.initPromise;\n }\n\n // Use a lock to prevent multiple simultaneous initializations\n if (this.initializationLock) {\n // Wait for current initialization to complete\n while (this.initializationLock) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n return;\n }\n\n this.initializationLock = true;\n\n try {\n this.initPromise = this.initializeModel();\n await this.initPromise;\n } finally {\n this.initializationLock = false;\n this.initPromise = null;\n }\n }\n\n private async initializeModel(): Promise<void> {\n const isNode =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\n if (!isNode) {\n throw new Error(\"Local embedding not supported in browser\");\n }\n\n try {\n const fs = await import(\"fs\");\n const cacheDir = (await this.getRootPath()) + \"/cache/\";\n\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true });\n }\n\n elizaLogger.debug(\"Initializing BGE embedding model...\");\n\n this.model = await FlagEmbedding.init({\n cacheDir: cacheDir,\n model: EmbeddingModel.BGESmallENV15,\n maxLength: 512,\n });\n\n elizaLogger.debug(\"BGE model initialized successfully\");\n } catch (error) {\n elizaLogger.error(\"Failed to initialize BGE model:\", error);\n throw error;\n }\n }\n\n public async generateEmbedding(input: string): Promise<number[]> {\n if (!this.model) {\n await this.initialize();\n }\n\n if (!this.model) {\n throw new Error(\"Failed to initialize model\");\n }\n\n try {\n // Let fastembed handle tokenization internally\n const embedding = await this.model.queryEmbed(input);\n // Debug the raw embedding - uncomment if debugging embeddings\n // elizaLogger.debug(\"Raw embedding from BGE:\", {\n // type: typeof embedding,\n // isArray: Array.isArray(embedding),\n // dimensions: Array.isArray(embedding)\n // ? embedding.length\n // : \"not an array\",\n // sample: Array.isArray(embedding)\n // ? embedding.slice(0, 5)\n // : embedding,\n // });\n return this.processEmbedding(embedding);\n } catch (error) {\n elizaLogger.error(\"Embedding generation failed:\", error);\n throw error;\n }\n }\n\n private processEmbedding(embedding: number[]): number[] {\n let finalEmbedding: number[];\n\n if (\n ArrayBuffer.isView(embedding) &&\n embedding.constructor === Float32Array\n ) {\n finalEmbedding = Array.from(embedding);\n } else if (\n Array.isArray(embedding) &&\n ArrayBuffer.isView(embedding[0]) &&\n embedding[0].constructor === Float32Array\n ) {\n finalEmbedding = Array.from(embedding[0]);\n } else if (Array.isArray(embedding)) {\n finalEmbedding = embedding;\n } else {\n throw new Error(`Unexpected embedding format: ${typeof embedding}`);\n }\n\n finalEmbedding = finalEmbedding.map((n) => Number(n));\n\n if (!Array.isArray(finalEmbedding) || finalEmbedding[0] === undefined) {\n throw new Error(\n \"Invalid embedding format: must be an array starting with a number\"\n );\n }\n\n if (finalEmbedding.length !== 384) {\n elizaLogger.warn(\n `Unexpected embedding dimension: ${finalEmbedding.length}`\n );\n }\n\n return finalEmbedding;\n }\n\n public async reset(): Promise<void> {\n if (this.model) {\n // Add any cleanup logic here if needed\n this.model = null;\n }\n this.initPromise = null;\n this.initializationLock = false;\n }\n\n // For testing purposes\n public static resetInstance(): void {\n if (LocalEmbeddingModelManager.instance) {\n LocalEmbeddingModelManager.instance.reset();\n LocalEmbeddingModelManager.instance = null;\n }\n }\n}\n\nexport default LocalEmbeddingModelManager;\n","import { getEmbeddingModelSettings, getEndpoint } from \"./models.ts\";\nimport { type IAgentRuntime, ModelProviderName } from \"./types.ts\";\nimport settings from \"./settings.ts\";\nimport elizaLogger from \"./logger.ts\";\nimport LocalEmbeddingModelManager from \"./localembeddingManager.ts\";\n\ninterface EmbeddingOptions {\n model: string;\n endpoint: string;\n apiKey?: string;\n length?: number;\n isOllama?: boolean;\n dimensions?: number;\n provider?: string;\n}\n\nexport const EmbeddingProvider = {\n OpenAI: \"OpenAI\",\n Ollama: \"Ollama\",\n GaiaNet: \"GaiaNet\",\n Heurist: \"Heurist\",\n BGE: \"BGE\",\n} as const;\n\nexport type EmbeddingProviderType =\n (typeof EmbeddingProvider)[keyof typeof EmbeddingProvider];\n\nexport type EmbeddingConfig = {\n readonly dimensions: number;\n readonly model: string;\n readonly provider: EmbeddingProviderType;\n};\n\nexport const getEmbeddingConfig = (): EmbeddingConfig => ({\n dimensions:\n settings.USE_OPENAI_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.OPENAI).dimensions\n : settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.OLLAMA).dimensions\n : settings.USE_GAIANET_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.GAIANET)\n .dimensions\n : settings.USE_HEURIST_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.HEURIST)\n .dimensions\n : 384, // BGE\n model:\n settings.USE_OPENAI_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.OPENAI).name\n : settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.OLLAMA).name\n : settings.USE_GAIANET_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.GAIANET).name\n : settings.USE_HEURIST_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.HEURIST).name\n : \"BGE-small-en-v1.5\",\n provider:\n settings.USE_OPENAI_EMBEDDING?.toLowerCase() === \"true\"\n ? \"OpenAI\"\n : settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === \"true\"\n ? \"Ollama\"\n : settings.USE_GAIANET_EMBEDDING?.toLowerCase() === \"true\"\n ? \"GaiaNet\"\n : settings.USE_HEURIST_EMBEDDING?.toLowerCase() === \"true\"\n ? \"Heurist\"\n : \"BGE\",\n});\n\nasync function getRemoteEmbedding(\n input: string,\n options: EmbeddingOptions\n): Promise<number[]> {\n // Ensure endpoint ends with /v1 for OpenAI\n const baseEndpoint = options.endpoint.endsWith(\"/v1\")\n ? options.endpoint\n : `${options.endpoint}${options.isOllama ? \"/v1\" : \"\"}`;\n\n // Construct full URL\n const fullUrl = `${baseEndpoint}/embeddings`;\n\n const requestOptions = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(options.apiKey\n ? {\n Authorization: `Bearer ${options.apiKey}`,\n }\n : {}),\n },\n body: JSON.stringify({\n input,\n model: options.model,\n dimensions:\n options.dimensions ||\n options.length ||\n getEmbeddingConfig().dimensions, // Prefer dimensions, fallback to length\n }),\n };\n\n try {\n const response = await fetch(fullUrl, requestOptions);\n\n if (!response.ok) {\n elizaLogger.error(\"API Response:\", await response.text()); // Debug log\n throw new Error(\n `Embedding API Error: ${response.status} ${response.statusText}`\n );\n }\n\n interface EmbeddingResponse {\n data: Array<{ embedding: number[] }>;\n }\n\n const data: EmbeddingResponse = await response.json();\n return data?.data?.[0].embedding;\n } catch (e) {\n elizaLogger.error(\"Full error details:\", e);\n throw e;\n }\n}\n\nexport function getEmbeddingType(runtime: IAgentRuntime): \"local\" | \"remote\" {\n const isNode =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\n // Use local embedding if:\n // - Running in Node.js\n // - Not using OpenAI provider\n // - Not forcing OpenAI embeddings\n const isLocal =\n isNode &&\n runtime.character.modelProvider !== ModelProviderName.OPENAI &&\n runtime.character.modelProvider !== ModelProviderName.GAIANET &&\n runtime.character.modelProvider !== ModelProviderName.HEURIST &&\n !settings.USE_OPENAI_EMBEDDING;\n\n return isLocal ? \"local\" : \"remote\";\n}\n\nexport function getEmbeddingZeroVector(): number[] {\n let embeddingDimension = 384; // Default BGE dimension\n\n if (settings.USE_OPENAI_EMBEDDING?.toLowerCase() === \"true\") {\n embeddingDimension = getEmbeddingModelSettings(\n ModelProviderName.OPENAI\n ).dimensions; // OpenAI dimension\n } else if (settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === \"true\") {\n embeddingDimension = getEmbeddingModelSettings(\n ModelProviderName.OLLAMA\n ).dimensions; // Ollama mxbai-embed-large dimension\n } else if (settings.USE_GAIANET_EMBEDDING?.toLowerCase() === \"true\") {\n embeddingDimension = getEmbeddingModelSettings(\n ModelProviderName.GAIANET\n ).dimensions; // GaiaNet dimension\n } else if (settings.USE_HEURIST_EMBEDDING?.toLowerCase() === \"true\") {\n embeddingDimension = getEmbeddingModelSettings(\n ModelProviderName.HEURIST\n ).dimensions; // Heurist dimension\n }\n\n return Array(embeddingDimension).fill(0);\n}\n\n/**\n * Gets embeddings from a remote API endpoint. Falls back to local BGE/384\n *\n * @param {string} input - The text to generate embeddings for\n * @param {EmbeddingOptions} options - Configuration options including:\n * - model: The model name to use\n * - endpoint: Base API endpoint URL\n * - apiKey: Optional API key for authentication\n * - isOllama: Whether this is an Ollama endpoint\n * - dimensions: Desired embedding dimensions\n * @param {IAgentRuntime} runtime - The agent runtime context\n * @returns {Promise<number[]>} Array of embedding values\n * @throws {Error} If the API request fails\n */\n\nexport async function embed(runtime: IAgentRuntime, input: string) {\n elizaLogger.debug(\"Embedding request:\", {\n modelProvider: runtime.character.modelProvider,\n useOpenAI: process.env.USE_OPENAI_EMBEDDING,\n input: input?.slice(0, 50) + \"...\",\n inputType: typeof input,\n inputLength: input?.length,\n isString: typeof input === \"string\",\n isEmpty: !input,\n });\n\n // Validate input\n if (!input || typeof input !== \"string\" || input.trim().length === 0) {\n elizaLogger.warn(\"Invalid embedding input:\", {\n input,\n type: typeof input,\n length: input?.length,\n });\n return []; // Return empty embedding array\n }\n\n // Check cache first\n const cachedEmbedding = await retrieveCachedEmbedding(runtime, input);\n if (cachedEmbedding) return cachedEmbedding;\n\n const config = getEmbeddingConfig();\n const isNode = typeof process !== \"undefined\" && process.versions?.node;\n\n // Determine which embedding path to use\n if (config.provider === EmbeddingProvider.OpenAI) {\n return await getRemoteEmbedding(input, {\n model: config.model,\n endpoint: settings.OPENAI_API_URL || \"https://api.openai.com/v1\",\n apiKey: settings.OPENAI_API_KEY,\n dimensions: config.dimensions,\n });\n }\n\n if (config.provider === EmbeddingProvider.Ollama) {\n return await getRemoteEmbedding(input, {\n model: config.model,\n endpoint:\n runtime.character.modelEndpointOverride ||\n getEndpoint(ModelProviderName.OLLAMA),\n isOllama: true,\n dimensions: config.dimensions,\n });\n }\n\n if (config.provider == EmbeddingProvider.GaiaNet) {\n return await getRemoteEmbedding(input, {\n model: config.model,\n endpoint:\n runtime.character.modelEndpointOverride ||\n getEndpoint(ModelProviderName.GAIANET) ||\n settings.SMALL_GAIANET_SERVER_URL ||\n settings.MEDIUM_GAIANET_SERVER_URL ||\n settings.LARGE_GAIANET_SERVER_URL,\n apiKey: settings.GAIANET_API_KEY || runtime.token,\n dimensions: config.dimensions,\n });\n }\n\n if (config.provider === EmbeddingProvider.Heurist) {\n return await getRemoteEmbedding(input, {\n model: config.model,\n endpoint: getEndpoint(ModelProviderName.HEURIST),\n apiKey: runtime.token,\n dimensions: config.dimensions,\n });\n }\n\n // BGE - try local first if in Node\n if (isNode) {\n try {\n return await getLocalEmbedding(input);\n } catch (error) {\n elizaLogger.warn(\n \"Local embedding failed, falling back to remote\",\n error\n );\n }\n }\n\n // Fallback to remote override\n return await getRemoteEmbedding(input, {\n model: config.model,\n endpoint:\n runtime.character.modelEndpointOverride ||\n getEndpoint(runtime.character.modelProvider),\n apiKey: runtime.token,\n dimensions: config.dimensions,\n });\n\n async function getLocalEmbedding(input: string): Promise<number[]> {\n elizaLogger.debug(\"DEBUG - Inside getLocalEmbedding function\");\n\n try {\n const embeddingManager = LocalEmbeddingModelManager.getInstance();\n return await embeddingManager.generateEmbedding(input);\n } catch (error) {\n elizaLogger.error(\"Local embedding failed:\", error);\n throw error;\n }\n }\n\n async function retrieveCachedEmbedding(\n runtime: IAgentRuntime,\n input: string\n ) {\n if (!input) {\n elizaLogger.log(\"No input to retrieve cached embedding for\");\n return null;\n }\n\n const similaritySearchResult =\n await runtime.messageManager.getCachedEmbeddings(input);\n if (similaritySearchResult.length > 0) {\n return similaritySearchResult[0].embedding;\n }\n return null;\n }\n}\n","import { names, uniqueNamesGenerator } from \"unique-names-generator\";\nimport type { ActionExample, Evaluator } from \"./types.ts\";\nimport { stringArrayFooter } from \"./parsing.ts\";\n\n/**\n * Template used for the evaluation generateText.\n */\nexport const evaluationTemplate =\n `TASK: Based on the conversation and conditions, determine which evaluation functions are appropriate to call.\nExamples:\n{{evaluatorExamples}}\n\nINSTRUCTIONS: You are helping me to decide which appropriate functions to call based on the conversation between {{senderName}} and {{agentName}}.\n\n{{recentMessages}}\n\nEvaluator Functions:\n{{evaluators}}\n\nTASK: Based on the most recent conversation, determine which evaluators functions are appropriate to call to call.\nInclude the name of evaluators that are relevant and should be called in the array\nAvailable evaluator names to include are {{evaluatorNames}}\n` + stringArrayFooter;\n\n/**\n * Formats the names of evaluators into a comma-separated list, each enclosed in single quotes.\n * @param evaluators - An array of evaluator objects.\n * @returns A string that concatenates the names of all evaluators, each enclosed in single quotes and separated by commas.\n */\nexport function formatEvaluatorNames(evaluators: Evaluator[]) {\n return evaluators\n .map((evaluator: Evaluator) => `'${evaluator.name}'`)\n .join(\",\\n\");\n}\n\n/**\n * Formats evaluator details into a string, including both the name and description of each evaluator.\n * @param evaluators - An array of evaluator objects.\n * @returns A string that concatenates the name and description of each evaluator, separated by a colon and a newline character.\n */\nexport function formatEvaluators(evaluators: Evaluator[]) {\n return evaluators\n .map(\n (evaluator: Evaluator) =>\n `'${evaluator.name}: ${evaluator.description}'`\n )\n .join(\",\\n\");\n}\n\n/**\n * Formats evaluator examples into a readable string, replacing placeholders with generated names.\n * @param evaluators - An array of evaluator objects, each containing examples to format.\n * @returns A string that presents each evaluator example in a structured format, including context, messages, and outcomes, with placeholders replaced by generated names.\n */\nexport function formatEvaluatorExamples(evaluators: Evaluator[]) {\n return evaluators\n .map((evaluator) => {\n return evaluator.examples\n .map((example) => {\n const exampleNames = Array.from({ length: 5 }, () =>\n uniqueNamesGenerator({ dictionaries: [names] })\n );\n\n let formattedContext = example.context;\n let formattedOutcome = example.outcome;\n\n exampleNames.forEach((name, index) => {\n const placeholder = `{{user${index + 1}}}`;\n formattedContext = formattedContext.replaceAll(\n placeholder,\n name\n );\n formattedOutcome = formattedOutcome.replaceAll(\n placeholder,\n name\n );\n });\n\n const formattedMessages = example.messages\n .map((message: ActionExample) => {\n let messageString = `${message.user}: ${message.content.text}`;\n exampleNames.forEach((name, index) => {\n const placeholder = `{{user${index + 1}}}`;\n messageString = messageString.replaceAll(\n placeholder,\n name\n );\n });\n return (\n messageString +\n (message.content.action\n ? ` (${message.content.action})`\n : \"\")\n );\n })\n .join(\"\\n\");\n\n return `Context:\\n${formattedContext}\\n\\nMessages:\\n${formattedMessages}\\n\\nOutcome:\\n${formattedOutcome}`;\n })\n .join(\"\\n\\n\");\n })\n .join(\"\\n\\n\");\n}\n\n/**\n * Generates a string summarizing the descriptions of each evaluator example.\n * @param evaluators - An array of evaluator objects, each containing examples.\n * @returns A string that summarizes the descriptions for each evaluator example, formatted with the evaluator name, example number, and description.\n */\nexport function formatEvaluatorExampleDescriptions(evaluators: Evaluator[]) {\n return evaluators\n .map((evaluator) =>\n evaluator.examples\n .map(\n (_example, index) =>\n `${evaluator.name} Example ${index + 1}: ${evaluator.description}`\n )\n .join(\"\\n\")\n )\n .join(\"\\n\\n\");\n}\n","import { createAnthropic } from \"@ai-sdk/anthropic\";\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { createMistral } from \"@ai-sdk/mistral\";\nimport { createGroq } from \"@ai-sdk/groq\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport { bedrock } from \"@ai-sdk/amazon-bedrock\";\nimport {\n generateObject as aiGenerateObject,\n generateText as aiGenerateText,\n type CoreTool,\n type GenerateObjectResult,\n type StepResult as AIStepResult,\n} from \"ai\";\nimport { Buffer } from \"buffer\";\nimport { createOllama } from \"ollama-ai-provider\";\nimport OpenAI from \"openai\";\nimport { encodingForModel, type TiktokenModel } from \"js-tiktoken\";\n// import { AutoTokenizer } from \"@huggingface/transformers\";\nimport Together from \"together-ai\";\nimport type { ZodSchema } from \"zod\";\nimport { elizaLogger } from \"./index.ts\";\nimport {\n models,\n getModelSettings,\n getImageModelSettings,\n getEndpoint,\n} from \"./models.ts\";\nimport {\n parseBooleanFromText,\n parseJsonArrayFromText,\n parseJSONObjectFromText,\n parseShouldRespondFromText,\n parseActionResponseFromText,\n} from \"./parsing.ts\";\nimport settings from \"./settings.ts\";\nimport {\n type Content,\n type IAgentRuntime,\n type IImageDescriptionService,\n type ITextGenerationService,\n ModelClass,\n ModelProviderName,\n ServiceType,\n type ActionResponse,\n // type IVerifiableInferenceAdapter,\n // type VerifiableInferenceOptions,\n // type VerifiableInferenceResult,\n //VerifiableInferenceProvider,\n type TelemetrySettings,\n TokenizerType,\n} from \"./types.ts\";\nimport { fal } from \"@fal-ai/client\";\n\nimport BigNumber from \"bignumber.js\";\nimport { createPublicClient, http } from \"viem\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\n\ntype Tool = CoreTool<any, any>;\ntype StepResult = AIStepResult<any>;\n\n/**\n * Trims the provided text context to a specified token limit using a tokenizer model and type.\n *\n * The function dynamically determines the truncation method based on the tokenizer settings\n * provided by the runtime. If no tokenizer settings are defined, it defaults to using the\n * TikToken truncation method with the \"gpt-4o\" model.\n *\n * @async\n * @function trimTokens\n * @param {string} context - The text to be tokenized and trimmed.\n * @param {number} maxTokens - The maximum number of tokens allowed after truncation.\n * @param {IAgentRuntime} runtime - The runtime interface providing tokenizer settings.\n *\n * @returns {Promise<string>} A promise that resolves to the trimmed text.\n *\n * @throws {Error} Throws an error if the runtime settings are invalid or missing required fields.\n *\n * @example\n * const trimmedText = await trimTokens(\"This is an example text\", 50, runtime);\n * console.log(trimmedText); // Output will be a truncated version of the input text.\n */\nexport async function trimTokens(\n context: string,\n maxTokens: number,\n runtime: IAgentRuntime\n) {\n if (!context) return \"\";\n if (maxTokens <= 0) throw new Error(\"maxTokens must be positive\");\n\n const tokenizerModel = runtime.getSetting(\"TOKENIZER_MODEL\");\n const tokenizerType = runtime.getSetting(\"TOKENIZER_TYPE\");\n\n if (!tokenizerModel || !tokenizerType) {\n // Default to TikToken truncation using the \"gpt-4o\" model if tokenizer settings are not defined\n return truncateTiktoken(\"gpt-4o\", context, maxTokens);\n }\n\n // Choose the truncation method based on tokenizer type\n // if (tokenizerType === TokenizerType.Auto) {\n // return truncateAuto(tokenizerModel, context, maxTokens);\n // }\n\n if (tokenizerType === TokenizerType.TikToken) {\n return truncateTiktoken(\n tokenizerModel as TiktokenModel,\n context,\n maxTokens\n );\n }\n\n elizaLogger.warn(`Unsupported tokenizer type: ${tokenizerType}`);\n return truncateTiktoken(\"gpt-4o\", context, maxTokens);\n}\n\n// async function truncateAuto(\n// modelPath: string,\n// context: string,\n// maxTokens: number\n// ) {\n// try {\n// const tokenizer = await AutoTokenizer.from_pretrained(modelPath);\n// const tokens = tokenizer.encode(context);\n\n// // If already within limits, return unchanged\n// if (tokens.length <= maxTokens) {\n// return context;\n// }\n\n// // Keep the most recent tokens by slicing from the end\n// const truncatedTokens = tokens.slice(-maxTokens);\n\n// // Decode back to text - js-tiktoken decode() returns a string directly\n// return tokenizer.decode(truncatedTokens);\n// } catch (error) {\n// elizaLogger.error(\"Error in trimTokens:\", error);\n// // Return truncated string if tokenization fails\n// return context.slice(-maxTokens * 4); // Rough estimate of 4 chars per token\n// }\n// }\n\nasync function truncateTiktoken(\n model: TiktokenModel,\n context: string,\n maxTokens: number\n) {\n try {\n const encoding = encodingForModel(model);\n\n // Encode the text into tokens\n const tokens = encoding.encode(context);\n\n // If already within limits, return unchanged\n if (tokens.length <= maxTokens) {\n return context;\n }\n\n // Keep the most recent tokens by slicing from the end\n const truncatedTokens = tokens.slice(-maxTokens);\n\n // Decode back to text - js-tiktoken decode() returns a string directly\n return encoding.decode(truncatedTokens);\n } catch (error) {\n elizaLogger.error(\"Error in trimTokens:\", error);\n // Return truncated string if tokenization fails\n return context.slice(-maxTokens * 4); // Rough estimate of 4 chars per token\n }\n}\n\n/**\n * Get OnChain EternalAI System Prompt\n * @returns System Prompt\n */\nasync function getOnChainEternalAISystemPrompt(\n runtime: IAgentRuntime\n): Promise<string> | undefined {\n const agentId = runtime.getSetting(\"ETERNALAI_AGENT_ID\");\n const providerUrl = runtime.getSetting(\"ETERNALAI_RPC_URL\");\n const contractAddress = runtime.getSetting(\n \"ETERNALAI_AGENT_CONTRACT_ADDRESS\"\n );\n if (agentId && providerUrl && contractAddress) {\n // get on-chain system-prompt\n const contractABI = [\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_agentId\",\n type: \"uint256\",\n },\n ],\n name: \"getAgentSystemPrompt\",\n outputs: [\n { internalType: \"bytes[]\", name: \"\", type: \"bytes[]\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n ];\n\n const publicClient = createPublicClient({\n transport: http(providerUrl),\n });\n\n try {\n const validAddress: `0x${string}` =\n contractAddress as `0x${string}`;\n const result = await publicClient.readContract({\n address: validAddress,\n abi: contractABI,\n functionName: \"getAgentSystemPrompt\",\n args: [new BigNumber(agentId)],\n });\n if (result) {\n elizaLogger.info(\"on-chain system-prompt response\", result[0]);\n const value = result[0].toString().replace(\"0x\", \"\");\n const content = Buffer.from(value, \"hex\").toString(\"utf-8\");\n elizaLogger.info(\"on-chain system-prompt\", content);\n return await fetchEternalAISystemPrompt(runtime, content);\n } else {\n return undefined;\n }\n } catch (error) {\n elizaLogger.error(error);\n elizaLogger.error(\"err\", error);\n }\n }\n return undefined;\n}\n\n/**\n * Fetch EternalAI System Prompt\n * @returns System Prompt\n */\nasync function fetchEternalAISystemPrompt(\n runtime: IAgentRuntime,\n content: string\n): Promise<string> | undefined {\n const IPFS = \"ipfs://\";\n const containsSubstring: boolean = content.includes(IPFS);\n if (containsSubstring) {\n const lightHouse = content.replace(\n IPFS,\n \"https://gateway.lighthouse.storage/ipfs/\"\n );\n elizaLogger.info(\"fetch lightHouse\", lightHouse);\n const responseLH = await fetch(lightHouse, {\n method: \"GET\",\n });\n elizaLogger.info(\"fetch lightHouse resp\", responseLH);\n if (responseLH.ok) {\n const data = await responseLH.text();\n return data;\n } else {\n const gcs = content.replace(\n IPFS,\n \"https://cdn.eternalai.org/upload/\"\n );\n elizaLogger.info(\"fetch gcs\", gcs);\n const responseGCS = await fetch(gcs, {\n method: \"GET\",\n });\n elizaLogger.info(\"fetch lightHouse gcs\", responseGCS);\n if (responseGCS.ok) {\n const data = await responseGCS.text();\n return data;\n } else {\n throw new Error(\"invalid on-chain system prompt\");\n }\n }\n } else {\n return content;\n }\n}\n\n/**\n * Gets the Cloudflare Gateway base URL for a specific provider if enabled\n * @param runtime The runtime environment\n * @param provider The model provider name\n * @returns The Cloudflare Gateway base URL if enabled, undefined otherwise\n */\nfunction getCloudflareGatewayBaseURL(\n runtime: IAgentRuntime,\n provider: string\n): string | undefined {\n const isCloudflareEnabled =\n runtime.getSetting(\"CLOUDFLARE_GW_ENABLED\") === \"true\";\n const cloudflareAccountId = runtime.getSetting(\"CLOUDFLARE_AI_ACCOUNT_ID\");\n const cloudflareGatewayId = runtime.getSetting(\"CLOUDFLARE_AI_GATEWAY_ID\");\n\n elizaLogger.debug(\"Cloudflare Gateway Configuration:\", {\n isEnabled: isCloudflareEnabled,\n hasAccountId: !!cloudflareAccountId,\n hasGatewayId: !!cloudflareGatewayId,\n provider: provider,\n });\n\n if (!isCloudflareEnabled) {\n elizaLogger.debug(\"Cloudflare Gateway is not enabled\");\n return undefined;\n }\n\n if (!cloudflareAccountId) {\n elizaLogger.warn(\n \"Cloudflare Gateway is enabled but CLOUDFLARE_AI_ACCOUNT_ID is not set\"\n );\n return undefined;\n }\n\n if (!cloudflareGatewayId) {\n elizaLogger.warn(\n \"Cloudflare Gateway is enabled but CLOUDFLARE_AI_GATEWAY_ID is not set\"\n );\n return undefined;\n }\n\n const baseURL = `https://gateway.ai.cloudflare.com/v1/${cloudflareAccountId}/${cloudflareGatewayId}/${provider.toLowerCase()}`;\n elizaLogger.info(\"Using Cloudflare Gateway:\", {\n provider,\n baseURL,\n accountId: cloudflareAccountId,\n gatewayId: cloudflareGatewayId,\n });\n\n return baseURL;\n}\n\n/**\n * Send a message to the model for a text generateText - receive a string back and parse how you'd like\n * @param opts - The options for the generateText request.\n * @param opts.context The context of the message to be completed.\n * @param opts.stop A list of strings to stop the generateText at.\n * @param opts.model The model to use for generateText.\n * @param opts.frequency_penalty The frequency penalty to apply to the generateText.\n * @param opts.presence_penalty The presence penalty to apply to the generateText.\n * @param opts.temperature The temperature to apply to the generateText.\n * @param opts.max_context_length The maximum length of the context to apply to the generateText.\n * @returns The completed message.\n */\n\nexport async function generateText({\n runtime,\n context,\n modelClass,\n tools = {},\n onStepFinish,\n maxSteps = 1,\n stop,\n customSystemPrompt,\n // verifiableInference = process.env.VERIFIABLE_INFERENCE_ENABLED === \"true\",\n // verifiableInferenceOptions,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n tools?: Record<string, Tool>;\n onStepFinish?: (event: StepResult) => Promise<void> | void;\n maxSteps?: number;\n stop?: string[];\n customSystemPrompt?: string;\n // verifiableInference?: boolean;\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter;\n // verifiableInferenceOptions?: VerifiableInferenceOptions;\n}): Promise<string> {\n if (!context) {\n console.error(\"generateText context is empty\");\n return \"\";\n }\n\n elizaLogger.log(\"Generating text...\");\n\n elizaLogger.info(\"Generating text with options:\", {\n modelProvider: runtime.modelProvider,\n model: modelClass,\n // verifiableInference,\n });\n elizaLogger.log(\"Using provider:\", runtime.modelProvider);\n // If verifiable inference is requested and adapter is provided, use it\n // if (verifiableInference && runtime.verifiableInferenceAdapter) {\n // elizaLogger.log(\n // \"Using verifiable inference adapter:\",\n // runtime.verifiableInferenceAdapter\n // );\n // try {\n // const result: VerifiableInferenceResult =\n // await runtime.verifiableInferenceAdapter.generateText(\n // context,\n // modelClass,\n // verifiableInferenceOptions\n // );\n // elizaLogger.log(\"Verifiable inference result:\", result);\n // // Verify the proof\n // const isValid =\n // await runtime.verifiableInferenceAdapter.verifyProof(result);\n // if (!isValid) {\n // throw new Error(\"Failed to verify inference proof\");\n // }\n\n // return result.text;\n // } catch (error) {\n // elizaLogger.error(\"Error in verifiable inference:\", error);\n // throw error;\n // }\n // }\n\n const provider = runtime.modelProvider;\n elizaLogger.debug(\"Provider settings:\", {\n provider,\n hasRuntime: !!runtime,\n runtimeSettings: {\n CLOUDFLARE_GW_ENABLED: runtime.getSetting(\"CLOUDFLARE_GW_ENABLED\"),\n CLOUDFLARE_AI_ACCOUNT_ID: runtime.getSetting(\n \"CLOUDFLARE_AI_ACCOUNT_ID\"\n ),\n CLOUDFLARE_AI_GATEWAY_ID: runtime.getSetting(\n \"CLOUDFLARE_AI_GATEWAY_ID\"\n ),\n },\n });\n\n const endpoint =\n runtime.character.modelEndpointOverride || getEndpoint(provider);\n const modelSettings = getModelSettings(runtime.modelProvider, modelClass);\n let model = modelSettings.name;\n\n // allow character.json settings => secrets to override models\n // FIXME: add MODEL_MEDIUM support\n switch (provider) {\n // if runtime.getSetting(\"LLAMACLOUD_MODEL_LARGE\") is true and modelProvider is LLAMACLOUD, then use the large model\n case ModelProviderName.LLAMACLOUD:\n {\n switch (modelClass) {\n case ModelClass.LARGE:\n {\n model =\n runtime.getSetting(\"LLAMACLOUD_MODEL_LARGE\") ||\n model;\n }\n break;\n case ModelClass.SMALL:\n {\n model =\n runtime.getSetting(\"LLAMACLOUD_MODEL_SMALL\") ||\n model;\n }\n break;\n }\n }\n break;\n case ModelProviderName.TOGETHER:\n {\n switch (modelClass) {\n case ModelClass.LARGE:\n {\n model =\n runtime.getSetting(\"TOGETHER_MODEL_LARGE\") ||\n model;\n }\n break;\n case ModelClass.SMALL:\n {\n model =\n runtime.getSetting(\"TOGETHER_MODEL_SMALL\") ||\n model;\n }\n break;\n }\n }\n break;\n case ModelProviderName.OPENROUTER:\n {\n switch (modelClass) {\n case ModelClass.LARGE:\n {\n model =\n runtime.getSetting(\"LARGE_OPENROUTER_MODEL\") ||\n model;\n }\n break;\n case ModelClass.SMALL:\n {\n model =\n runtime.getSetting(\"SMALL_OPENROUTER_MODEL\") ||\n model;\n }\n break;\n }\n }\n break;\n }\n\n elizaLogger.info(\"Selected model:\", model);\n\n const modelConfiguration = runtime.character?.settings?.modelConfig;\n const temperature =\n modelConfiguration?.temperature || modelSettings.temperature;\n const frequency_penalty =\n modelConfiguration?.frequency_penalty ||\n modelSettings.frequency_penalty;\n const presence_penalty =\n modelConfiguration?.presence_penalty || modelSettings.presence_penalty;\n const max_context_length =\n modelConfiguration?.maxInputTokens || modelSettings.maxInputTokens;\n const max_response_length =\n modelConfiguration?.maxOutputTokens ||\n modelSettings.maxOutputTokens;\n const experimental_telemetry =\n modelConfiguration?.experimental_telemetry ||\n modelSettings.experimental_telemetry;\n\n const apiKey = runtime.token;\n\n try {\n elizaLogger.debug(\n `Trimming context to max length of ${max_context_length} tokens.`\n );\n\n context = await trimTokens(context, max_context_length, runtime);\n\n let response: string;\n\n const _stop = stop || modelSettings.stop;\n elizaLogger.debug(\n `Using provider: ${provider}, model: ${model}, temperature: ${temperature}, max response length: ${max_response_length}`\n );\n\n switch (provider) {\n // OPENAI & LLAMACLOUD shared same structure.\n case ModelProviderName.OPENAI:\n case ModelProviderName.ALI_BAILIAN:\n case ModelProviderName.VOLENGINE:\n case ModelProviderName.LLAMACLOUD:\n case ModelProviderName.NANOGPT:\n case ModelProviderName.HYPERBOLIC:\n case ModelProviderName.TOGETHER:\n case ModelProviderName.NINETEEN_AI:\n case ModelProviderName.AKASH_CHAT_API:\n case ModelProviderName.LMSTUDIO:\n case ModelProviderName.NEARAI: {\n elizaLogger.debug(\n \"Initializing OpenAI model with Cloudflare check\"\n );\n const baseURL =\n getCloudflareGatewayBaseURL(runtime, \"openai\") || endpoint;\n\n //elizaLogger.debug(\"OpenAI baseURL result:\", { baseURL });\n const openai = createOpenAI({\n apiKey,\n baseURL,\n fetch: runtime.fetch,\n });\n\n const { text: openaiResponse } = await aiGenerateText({\n model: openai.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = openaiResponse;\n console.log(\"Received response from OpenAI model.\");\n break;\n }\n\n case ModelProviderName.ETERNALAI: {\n elizaLogger.debug(\"Initializing EternalAI model.\");\n const openai = createOpenAI({\n apiKey,\n baseURL: endpoint,\n fetch: async (\n input: RequestInfo | URL,\n init?: RequestInit\n ): Promise<Response> => {\n const url =\n typeof input === \"string\"\n ? input\n : input.toString();\n const chain_id =\n runtime.getSetting(\"ETERNALAI_CHAIN_ID\") || \"45762\";\n\n const options: RequestInit = { ...init };\n if (options?.body) {\n const body = JSON.parse(options.body as string);\n body.chain_id = chain_id;\n options.body = JSON.stringify(body);\n }\n\n const fetching = await runtime.fetch(url, options);\n\n if (\n parseBooleanFromText(\n runtime.getSetting(\"ETERNALAI_LOG\")\n )\n ) {\n elizaLogger.info(\n \"Request data: \",\n JSON.stringify(options, null, 2)\n );\n const clonedResponse = fetching.clone();\n try {\n clonedResponse.json().then((data) => {\n elizaLogger.info(\n \"Response data: \",\n JSON.stringify(data, null, 2)\n );\n });\n } catch (e) {\n elizaLogger.debug(e);\n }\n }\n return fetching;\n },\n });\n\n let system_prompt =\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined;\n try {\n const on_chain_system_prompt =\n await getOnChainEternalAISystemPrompt(runtime);\n if (!on_chain_system_prompt) {\n elizaLogger.error(\n new Error(\"invalid on_chain_system_prompt\")\n );\n } else {\n system_prompt = on_chain_system_prompt;\n elizaLogger.info(\n \"new on-chain system prompt\",\n system_prompt\n );\n }\n } catch (e) {\n elizaLogger.error(e);\n }\n\n const { text: openaiResponse } = await aiGenerateText({\n model: openai.languageModel(model),\n prompt: context,\n system: system_prompt,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n });\n\n response = openaiResponse;\n elizaLogger.debug(\"Received response from EternalAI model.\");\n break;\n }\n\n case ModelProviderName.GOOGLE: {\n const google = createGoogleGenerativeAI({\n apiKey,\n fetch: runtime.fetch,\n });\n\n const { text: googleResponse } = await aiGenerateText({\n model: google(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = googleResponse;\n elizaLogger.debug(\"Received response from Google model.\");\n break;\n }\n\n case ModelProviderName.MISTRAL: {\n const mistral = createMistral();\n\n const { text: mistralResponse } = await aiGenerateText({\n model: mistral(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n });\n\n response = mistralResponse;\n elizaLogger.debug(\"Received response from Mistral model.\");\n break;\n }\n\n case ModelProviderName.ANTHROPIC: {\n elizaLogger.debug(\n \"Initializing Anthropic model with Cloudflare check\"\n );\n const baseURL =\n getCloudflareGatewayBaseURL(runtime, \"anthropic\") ||\n \"https://api.anthropic.com/v1\";\n elizaLogger.debug(\"Anthropic baseURL result:\", { baseURL });\n\n const anthropic = createAnthropic({\n apiKey,\n baseURL,\n fetch: runtime.fetch,\n });\n const { text: anthropicResponse } = await aiGenerateText({\n model: anthropic.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = anthropicResponse;\n elizaLogger.debug(\"Received response from Anthropic model.\");\n break;\n }\n\n case ModelProviderName.CLAUDE_VERTEX: {\n elizaLogger.debug(\"Initializing Claude Vertex model.\");\n\n const anthropic = createAnthropic({\n apiKey,\n fetch: runtime.fetch,\n });\n\n const { text: anthropicResponse } = await aiGenerateText({\n model: anthropic.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = anthropicResponse;\n elizaLogger.debug(\n \"Received response from Claude Vertex model.\"\n );\n break;\n }\n\n case ModelProviderName.GROK: {\n elizaLogger.debug(\"Initializing Grok model.\");\n const grok = createOpenAI({\n apiKey,\n baseURL: endpoint,\n fetch: runtime.fetch,\n });\n\n const { text: grokResponse } = await aiGenerateText({\n model: grok.languageModel(model, {\n parallelToolCalls: false,\n }),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = grokResponse;\n elizaLogger.debug(\"Received response from Grok model.\");\n break;\n }\n\n case ModelProviderName.GROQ: {\n elizaLogger.debug(\n \"Initializing Groq model with Cloudflare check\"\n );\n const baseURL = getCloudflareGatewayBaseURL(runtime, \"groq\");\n elizaLogger.debug(\"Groq baseURL result:\", { baseURL });\n const groq = createGroq({\n apiKey,\n fetch: runtime.fetch,\n baseURL,\n });\n\n const { text: groqResponse } = await aiGenerateText({\n model: groq.languageModel(model),\n prompt: context,\n temperature,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools,\n onStepFinish: onStepFinish,\n maxSteps,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry,\n });\n\n response = groqResponse;\n elizaLogger.debug(\"Received response from Groq model.\");\n break;\n }\n\n case ModelProviderName.LLAMALOCAL: {\n elizaLogger.debug(\n \"Using local Llama model for text completion.\"\n );\n const textGenerationService =\n runtime.getService<ITextGenerationService>(\n ServiceType.TEXT_GENERATION\n );\n\n if (!textGenerationService) {\n throw new Error(\"Text generation service not found\");\n }\n\n response = await textGenerationService.queueTextCompletion(\n context,\n temperature,\n _stop,\n frequency_penalty,\n presence_penalty,\n max_response_length\n );\n elizaLogger.debug(\"Received response from local Llama model.\");\n break;\n }\n\n case ModelProviderName.REDPILL: {\n elizaLogger.debug(\"Initializing RedPill model.\");\n const serverUrl = getEndpoint(provider);\n const openai = createOpenAI({\n apiKey,\n baseURL: serverUrl,\n fetch: runtime.fetch,\n });\n\n const { text: redpillResponse } = await aiGenerateText({\n model: openai.languageModel(model),\n prompt: context,\n temperature: temperature,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = redpillResponse;\n elizaLogger.debug(\"Received response from redpill model.\");\n break;\n }\n\n case ModelProviderName.OPENROUTER: {\n elizaLogger.debug(\"Initializing OpenRouter model.\");\n const serverUrl = getEndpoint(provider);\n const openrouter = createOpenAI({\n apiKey,\n baseURL: serverUrl,\n fetch: runtime.fetch,\n });\n\n const { text: openrouterResponse } = await aiGenerateText({\n model: openrouter.languageModel(model),\n prompt: context,\n temperature: temperature,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = openrouterResponse;\n elizaLogger.debug(\"Received response from OpenRouter model.\");\n break;\n }\n\n case ModelProviderName.OLLAMA:\n {\n elizaLogger.debug(\"Initializing Ollama model.\");\n\n const ollamaProvider = createOllama({\n baseURL: getEndpoint(provider) + \"/api\",\n fetch: runtime.fetch,\n });\n const ollama = ollamaProvider(model);\n\n elizaLogger.debug(\"****** MODEL\\n\", model);\n\n const { text: ollamaResponse } = await aiGenerateText({\n model: ollama,\n prompt: context,\n tools: tools,\n onStepFinish: onStepFinish,\n temperature: temperature,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = ollamaResponse.replace(/<think>[\\s\\S]*?<\\/think>\\s*\\n*/g, '');\n }\n elizaLogger.debug(\"Received response from Ollama model.\");\n break;\n\n case ModelProviderName.HEURIST: {\n elizaLogger.debug(\"Initializing Heurist model.\");\n const heurist = createOpenAI({\n apiKey: apiKey,\n baseURL: endpoint,\n fetch: runtime.fetch,\n });\n\n const { text: heuristResponse } = await aiGenerateText({\n model: heurist.languageModel(model),\n prompt: context,\n system:\n customSystemPrompt ??\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n temperature: temperature,\n maxTokens: max_response_length,\n maxSteps: maxSteps,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = heuristResponse;\n elizaLogger.debug(\"Received response from Heurist model.\");\n break;\n }\n case ModelProviderName.GAIANET: {\n elizaLogger.debug(\"Initializing GAIANET model.\");\n\n var baseURL = getEndpoint(provider);\n if (!baseURL) {\n switch (modelClass) {\n case ModelClass.SMALL:\n baseURL =\n settings.SMALL_GAIANET_SERVER_URL ||\n \"https://llama3b.gaia.domains/v1\";\n break;\n case ModelClass.MEDIUM:\n baseURL =\n settings.MEDIUM_GAIANET_SERVER_URL ||\n \"https://llama8b.gaia.domains/v1\";\n break;\n case ModelClass.LARGE:\n baseURL =\n settings.LARGE_GAIANET_SERVER_URL ||\n \"https://qwen72b.gaia.domains/v1\";\n break;\n }\n }\n\n elizaLogger.debug(\"Using GAIANET model with baseURL:\", baseURL);\n\n const openai = createOpenAI({\n apiKey,\n baseURL: endpoint,\n fetch: runtime.fetch,\n });\n\n const { text: openaiResponse } = await aiGenerateText({\n model: openai.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = openaiResponse;\n elizaLogger.debug(\"Received response from GAIANET model.\");\n break;\n }\n\n case ModelProviderName.ATOMA: {\n elizaLogger.debug(\"Initializing Atoma model.\");\n const atoma = createOpenAI({\n apiKey,\n baseURL: endpoint,\n fetch: runtime.fetch,\n });\n\n const { text: atomaResponse } = await aiGenerateText({\n model: atoma.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = atomaResponse;\n elizaLogger.debug(\"Received response from Atoma model.\");\n break;\n }\n\n case ModelProviderName.GALADRIEL: {\n elizaLogger.debug(\"Initializing Galadriel model.\");\n const headers = {};\n const fineTuneApiKey = runtime.getSetting(\n \"GALADRIEL_FINE_TUNE_API_KEY\"\n );\n if (fineTuneApiKey) {\n headers[\"Fine-Tune-Authentication\"] = fineTuneApiKey;\n }\n const galadriel = createOpenAI({\n headers,\n apiKey: apiKey,\n baseURL: endpoint,\n fetch: runtime.fetch,\n });\n\n const { text: galadrielResponse } = await aiGenerateText({\n model: galadriel.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = galadrielResponse;\n elizaLogger.debug(\"Received response from Galadriel model.\");\n break;\n }\n\n case ModelProviderName.INFERA: {\n elizaLogger.debug(\"Initializing Infera model.\");\n\n const apiKey = settings.INFERA_API_KEY || runtime.token;\n\n const infera = createOpenAI({\n apiKey,\n baseURL: endpoint,\n headers: {\n api_key: apiKey,\n \"Content-Type\": \"application/json\",\n },\n });\n\n const { text: inferaResponse } = await aiGenerateText({\n model: infera.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n });\n response = inferaResponse;\n elizaLogger.debug(\"Received response from Infera model.\");\n break;\n }\n\n case ModelProviderName.VENICE: {\n elizaLogger.debug(\"Initializing Venice model.\");\n const venice = createOpenAI({\n apiKey: apiKey,\n baseURL: endpoint,\n });\n\n const { text: veniceResponse } = await aiGenerateText({\n model: venice.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n temperature: temperature,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n });\n\n // console.warn(\"veniceResponse:\")\n // console.warn(veniceResponse)\n //rferrari: remove all text from <think> to </think>\\n\\n\n response = veniceResponse\n .replace(/<think>[\\s\\S]*?<\\/think>\\s*\\n*/g, '');\n // console.warn(response)\n\n // response = veniceResponse;\n elizaLogger.debug(\"Received response from Venice model.\");\n break;\n }\n\n case ModelProviderName.NVIDIA: {\n elizaLogger.debug(\"Initializing NVIDIA model.\");\n const nvidia = createOpenAI({\n apiKey: apiKey,\n baseURL: endpoint,\n });\n\n const { text: nvidiaResponse } = await aiGenerateText({\n model: nvidia.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n temperature: temperature,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n });\n\n response = nvidiaResponse;\n elizaLogger.debug(\"Received response from NVIDIA model.\");\n break;\n }\n\n case ModelProviderName.DEEPSEEK: {\n elizaLogger.debug(\"Initializing Deepseek model.\");\n const serverUrl = models[provider].endpoint;\n const deepseek = createOpenAI({\n apiKey,\n baseURL: serverUrl,\n fetch: runtime.fetch,\n });\n\n const { text: deepseekResponse } = await aiGenerateText({\n model: deepseek.languageModel(model),\n prompt: context,\n temperature: temperature,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = deepseekResponse;\n elizaLogger.debug(\"Received response from Deepseek model.\");\n break;\n }\n\n case ModelProviderName.LIVEPEER: {\n elizaLogger.debug(\"Initializing Livepeer model.\");\n\n if (!endpoint) {\n throw new Error(\"Livepeer Gateway URL is not defined\");\n }\n\n const requestBody = {\n model: model,\n messages: [\n {\n role: \"system\",\n content:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n \"You are a helpful assistant\",\n },\n {\n role: \"user\",\n content: context,\n },\n ],\n max_tokens: max_response_length,\n stream: false,\n };\n\n const fetchResponse = await runtime.fetch(endpoint + \"/llm\", {\n method: \"POST\",\n headers: {\n accept: \"text/event-stream\",\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer eliza-app-llm\",\n },\n body: JSON.stringify(requestBody),\n });\n\n if (!fetchResponse.ok) {\n const errorText = await fetchResponse.text();\n throw new Error(\n `Livepeer request failed (${fetchResponse.status}): ${errorText}`\n );\n }\n\n const json = await fetchResponse.json();\n\n if (!json?.choices?.[0]?.message?.content) {\n throw new Error(\"Invalid response format from Livepeer\");\n }\n\n response = json.choices[0].message.content.replace(\n /<\\|start_header_id\\|>assistant<\\|end_header_id\\|>\\n\\n/,\n \"\"\n );\n elizaLogger.debug(\n \"Successfully received response from Livepeer model\"\n );\n break;\n }\n\n case ModelProviderName.SECRETAI:\n {\n elizaLogger.debug(\"Initializing SecretAI model.\");\n\n const secretAiProvider = createOllama({\n baseURL: getEndpoint(provider) + \"/api\",\n fetch: runtime.fetch,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n }\n });\n const secretAi = secretAiProvider(model);\n\n const { text: secretAiResponse } = await aiGenerateText({\n model: secretAi,\n prompt: context,\n tools: tools,\n onStepFinish: onStepFinish,\n temperature: temperature,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n });\n\n response = secretAiResponse;\n }\n break;\n \n case ModelProviderName.BEDROCK: {\n elizaLogger.debug(\"Initializing Bedrock model.\");\n\n const { text: bedrockResponse } = await aiGenerateText({\n model: bedrock(model),\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n prompt: context\n });\n\n response = bedrockResponse;\n elizaLogger.debug(\"Received response from Bedrock model.\");\n break;\n }\n\n default: {\n const errorMessage = `Unsupported provider: ${provider}`;\n elizaLogger.error(errorMessage);\n throw new Error(errorMessage);\n }\n }\n\n return response;\n } catch (error) {\n elizaLogger.error(\"Error in generateText:\", error);\n throw error;\n }\n}\n\n/**\n * Sends a message to the model to determine if it should respond to the given context.\n * @param opts - The options for the generateText request\n * @param opts.context The context to evaluate for response\n * @param opts.stop A list of strings to stop the generateText at\n * @param opts.model The model to use for generateText\n * @param opts.frequency_penalty The frequency penalty to apply (0.0 to 2.0)\n * @param opts.presence_penalty The presence penalty to apply (0.0 to 2.0)\n * @param opts.temperature The temperature to control randomness (0.0 to 2.0)\n * @param opts.serverUrl The URL of the API server\n * @param opts.max_context_length Maximum allowed context length in tokens\n * @param opts.max_response_length Maximum allowed response length in tokens\n * @returns Promise resolving to \"RESPOND\", \"IGNORE\", \"STOP\" or null\n */\nexport async function generateShouldRespond({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<\"RESPOND\" | \"IGNORE\" | \"STOP\" | null> {\n let retryDelay = 1000;\n while (true) {\n try {\n elizaLogger.debug(\n \"Attempting to generate text with context:\",\n context\n );\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n\n elizaLogger.debug(\"Received response from generateText:\", response);\n const parsedResponse = parseShouldRespondFromText(response.trim());\n if (parsedResponse) {\n elizaLogger.debug(\"Parsed response:\", parsedResponse);\n return parsedResponse;\n } else {\n elizaLogger.debug(\"generateShouldRespond no response\");\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateShouldRespond:\", error);\n if (\n error instanceof TypeError &&\n error.message.includes(\"queueTextCompletion\")\n ) {\n elizaLogger.error(\n \"TypeError: Cannot read properties of null (reading 'queueTextCompletion')\"\n );\n }\n }\n\n elizaLogger.log(`Retrying in ${retryDelay}ms...`);\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n\n/**\n * Splits content into chunks of specified size with optional overlapping bleed sections\n * @param content - The text content to split into chunks\n * @param chunkSize - The maximum size of each chunk in tokens\n * @param bleed - Number of characters to overlap between chunks (default: 100)\n * @returns Promise resolving to array of text chunks with bleed sections\n */\nexport async function splitChunks(\n content: string,\n chunkSize = 1500,\n bleed = 100\n): Promise<string[]> {\n elizaLogger.debug(`[splitChunks] Starting text split`);\n\n const chunks = splitText(content, chunkSize, bleed);\n\n elizaLogger.debug(`[splitChunks] Split complete:`, {\n numberOfChunks: chunks.length,\n averageChunkSize:\n chunks.reduce((acc, chunk) => acc + chunk.length, 0) /\n chunks.length,\n });\n\n return chunks;\n}\n\nexport function splitText(content: string, chunkSize: number, bleed: number): string[] {\n const chunks: string[] = [];\n let start = 0;\n\n while (start < content.length) {\n const end = Math.min(start + chunkSize, content.length);\n chunks.push(content.substring(start, end));\n start = end - bleed; // Apply overlap\n }\n\n return chunks;\n}\n\n/**\n * Sends a message to the model and parses the response as a boolean value\n * @param opts - The options for the generateText request\n * @param opts.context The context to evaluate for the boolean response\n * @param opts.stop A list of strings to stop the generateText at\n * @param opts.model The model to use for generateText\n * @param opts.frequency_penalty The frequency penalty to apply (0.0 to 2.0)\n * @param opts.presence_penalty The presence penalty to apply (0.0 to 2.0)\n * @param opts.temperature The temperature to control randomness (0.0 to 2.0)\n * @param opts.serverUrl The URL of the API server\n * @param opts.max_context_length Maximum allowed context length in tokens\n * @param opts.max_response_length Maximum allowed response length in tokens\n * @returns Promise resolving to a boolean value parsed from the model's response\n */\nexport async function generateTrueOrFalse({\n runtime,\n context = \"\",\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<boolean> {\n let retryDelay = 1000;\n const modelSettings = getModelSettings(runtime.modelProvider, modelClass);\n const stop = Array.from(\n new Set([...(modelSettings.stop || []), [\"\\n\"]])\n ) as string[];\n\n while (true) {\n try {\n const response = await generateText({\n stop,\n runtime,\n context,\n modelClass,\n });\n\n const parsedResponse = parseBooleanFromText(response.trim());\n if (parsedResponse !== null) {\n return parsedResponse;\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateTrueOrFalse:\", error);\n }\n\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n\n/**\n * Send a message to the model and parse the response as a string array\n * @param opts - The options for the generateText request\n * @param opts.context The context/prompt to send to the model\n * @param opts.stop Array of strings that will stop the model's generation if encountered\n * @param opts.model The language model to use\n * @param opts.frequency_penalty The frequency penalty to apply (0.0 to 2.0)\n * @param opts.presence_penalty The presence penalty to apply (0.0 to 2.0)\n * @param opts.temperature The temperature to control randomness (0.0 to 2.0)\n * @param opts.serverUrl The URL of the API server\n * @param opts.token The API token for authentication\n * @param opts.max_context_length Maximum allowed context length in tokens\n * @param opts.max_response_length Maximum allowed response length in tokens\n * @returns Promise resolving to an array of strings parsed from the model's response\n */\nexport async function generateTextArray({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<string[]> {\n if (!context) {\n elizaLogger.error(\"generateTextArray context is empty\");\n return [];\n }\n let retryDelay = 1000;\n\n while (true) {\n try {\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n\n const parsedResponse = parseJsonArrayFromText(response);\n if (parsedResponse) {\n return parsedResponse;\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateTextArray:\", error);\n }\n\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n\nexport async function generateObjectDeprecated({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<any> {\n if (!context) {\n elizaLogger.error(\"generateObjectDeprecated context is empty\");\n return null;\n }\n let retryDelay = 1000;\n\n while (true) {\n try {\n // this is slightly different than generateObjectArray, in that we parse object, not object array\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n const parsedResponse = parseJSONObjectFromText(response);\n if (parsedResponse) {\n return parsedResponse;\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateObject:\", error);\n }\n\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n\nexport async function generateObjectArray({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<any[]> {\n if (!context) {\n elizaLogger.error(\"generateObjectArray context is empty\");\n return [];\n }\n let retryDelay = 1000;\n\n while (true) {\n try {\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n\n const parsedResponse = parseJsonArrayFromText(response);\n if (parsedResponse) {\n return parsedResponse;\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateTextArray:\", error);\n }\n\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n\n/**\n * Send a message to the model for generateText.\n * @param opts - The options for the generateText request.\n * @param opts.context The context of the message to be completed.\n * @param opts.stop A list of strings to stop the generateText at.\n * @param opts.model The model to use for generateText.\n * @param opts.frequency_penalty The frequency penalty to apply to the generateText.\n * @param opts.presence_penalty The presence penalty to apply to the generateText.\n * @param opts.temperature The temperature to apply to the generateText.\n * @param opts.max_context_length The maximum length of the context to apply to the generateText.\n * @returns The completed message.\n */\nexport async function generateMessageResponse({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<Content> {\n const modelSettings = getModelSettings(runtime.modelProvider, modelClass);\n const max_context_length = modelSettings.maxInputTokens;\n\n context = await trimTokens(context, max_context_length, runtime);\n elizaLogger.debug(\"Context:\", context);\n let retryLength = 1000; // exponential backoff\n while (true) {\n try {\n elizaLogger.log(\"Generating message response..\");\n\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n\n // try parsing the response as JSON, if null then try again\n const parsedContent = parseJSONObjectFromText(response) as Content;\n if (!parsedContent) {\n elizaLogger.debug(\"parsedContent is null, retrying\");\n continue;\n }\n\n return parsedContent;\n } catch (error) {\n elizaLogger.error(\"ERROR:\", error);\n // wait for 2 seconds\n retryLength *= 2;\n await new Promise((resolve) => setTimeout(resolve, retryLength));\n elizaLogger.debug(\"Retrying...\");\n }\n }\n}\n\nexport const generateImage = async (\n data: {\n prompt: string;\n width: number;\n height: number;\n count?: number;\n negativePrompt?: string;\n numIterations?: number;\n guidanceScale?: number;\n seed?: number;\n modelId?: string;\n jobId?: string;\n stylePreset?: string;\n hideWatermark?: boolean;\n safeMode?: boolean;\n cfgScale?: number;\n },\n runtime: IAgentRuntime\n): Promise<{\n success: boolean;\n data?: string[];\n error?: any;\n}> => {\n const modelSettings = getImageModelSettings(runtime.imageModelProvider);\n if (!modelSettings) {\n elizaLogger.warn(\"No model settings found for the image model provider.\");\n return { success: false, error: \"No model settings available\" };\n }\n const model = modelSettings.name;\n elizaLogger.info(\"Generating image with options:\", {\n imageModelProvider: model,\n });\n\n const apiKey =\n runtime.imageModelProvider === runtime.modelProvider\n ? runtime.token\n : (() => {\n // First try to match the specific provider\n switch (runtime.imageModelProvider) {\n case ModelProviderName.HEURIST:\n return runtime.getSetting(\"HEURIST_API_KEY\");\n case ModelProviderName.TOGETHER:\n return runtime.getSetting(\"TOGETHER_API_KEY\");\n case ModelProviderName.FAL:\n return runtime.getSetting(\"FAL_API_KEY\");\n case ModelProviderName.OPENAI:\n return runtime.getSetting(\"OPENAI_API_KEY\");\n case ModelProviderName.VENICE:\n return runtime.getSetting(\"VENICE_API_KEY\");\n case ModelProviderName.LIVEPEER:\n return runtime.getSetting(\"LIVEPEER_GATEWAY_URL\");\n case ModelProviderName.SECRETAI:\n return runtime.getSetting(\"SECRET_AI_API_KEY\");\n case ModelProviderName.NEARAI:\n try {\n // Read auth config from ~/.nearai/config.json if it exists\n const config = JSON.parse(fs.readFileSync(path.join(os.homedir(), '.nearai/config.json'), 'utf8'));\n return JSON.stringify(config?.auth);\n } catch (e) {\n elizaLogger.warn(`Error loading NEAR AI config. The environment variable NEARAI_API_KEY will be used. ${e}`);\n }\n return runtime.getSetting(\"NEARAI_API_KEY\");\n default:\n // If no specific match, try the fallback chain\n return (\n runtime.getSetting(\"HEURIST_API_KEY\") ??\n runtime.getSetting(\"NINETEEN_AI_API_KEY\") ??\n runtime.getSetting(\"TOGETHER_API_KEY\") ??\n runtime.getSetting(\"FAL_API_KEY\") ??\n runtime.getSetting(\"OPENAI_API_KEY\") ??\n runtime.getSetting(\"VENICE_API_KEY\") ??\n runtime.getSetting(\"LIVEPEER_GATEWAY_URL\")\n );\n }\n })();\n try {\n if (runtime.imageModelProvider === ModelProviderName.HEURIST) {\n const response = await fetch(\n \"http://sequencer.heurist.xyz/submit_job\",\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n job_id: data.jobId || crypto.randomUUID(),\n model_input: {\n SD: {\n prompt: data.prompt,\n neg_prompt: data.negativePrompt,\n num_iterations: data.numIterations || 20,\n width: data.width || 512,\n height: data.height || 512,\n guidance_scale: data.guidanceScale || 3,\n seed: data.seed || -1,\n },\n },\n model_id: model,\n deadline: 60,\n priority: 1,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(\n `Heurist image generation failed: ${response.statusText}`\n );\n }\n\n const imageURL = await response.json();\n return { success: true, data: [imageURL] };\n } else if (\n runtime.imageModelProvider === ModelProviderName.TOGETHER ||\n // for backwards compat\n runtime.imageModelProvider === ModelProviderName.LLAMACLOUD\n ) {\n const together = new Together({ apiKey: apiKey as string });\n const response = await together.images.create({\n model: model,\n prompt: data.prompt,\n width: data.width,\n height: data.height,\n steps: modelSettings?.steps ?? 4,\n n: data.count,\n });\n\n // Add type assertion to handle the response properly\n const togetherResponse =\n response as unknown as TogetherAIImageResponse;\n\n if (\n !togetherResponse.data ||\n !Array.isArray(togetherResponse.data)\n ) {\n throw new Error(\"Invalid response format from Together AI\");\n }\n\n // Rest of the code remains the same...\n const base64s = await Promise.all(\n togetherResponse.data.map(async (image) => {\n if (!image.url) {\n elizaLogger.error(\"Missing URL in image data:\", image);\n throw new Error(\"Missing URL in Together AI response\");\n }\n\n // Fetch the image from the URL\n const imageResponse = await fetch(image.url);\n if (!imageResponse.ok) {\n throw new Error(\n `Failed to fetch image: ${imageResponse.statusText}`\n );\n }\n\n // Convert to blob and then to base64\n const blob = await imageResponse.blob();\n const arrayBuffer = await blob.arrayBuffer();\n const base64 = Buffer.from(arrayBuffer).toString(\"base64\");\n\n // Return with proper MIME type\n return `data:image/jpeg;base64,${base64}`;\n })\n );\n\n if (base64s.length === 0) {\n throw new Error(\"No images generated by Together AI\");\n }\n\n elizaLogger.debug(`Generated ${base64s.length} images`);\n return { success: true, data: base64s };\n } else if (runtime.imageModelProvider === ModelProviderName.FAL) {\n fal.config({\n credentials: apiKey as string,\n });\n\n // Prepare the input parameters according to their schema\n const input = {\n prompt: data.prompt,\n image_size: \"square\" as const,\n num_inference_steps: modelSettings?.steps ?? 50,\n guidance_scale: data.guidanceScale || 3.5,\n num_images: data.count,\n enable_safety_checker:\n runtime.getSetting(\"FAL_AI_ENABLE_SAFETY_CHECKER\") ===\n \"true\",\n safety_tolerance: Number(\n runtime.getSetting(\"FAL_AI_SAFETY_TOLERANCE\") || \"2\"\n ),\n output_format: \"png\" as const,\n seed: data.seed ?? 6252023,\n ...(runtime.getSetting(\"FAL_AI_LORA_PATH\")\n ? {\n loras: [\n {\n path: runtime.getSetting(\"FAL_AI_LORA_PATH\"),\n scale: 1,\n },\n ],\n }\n : {}),\n };\n\n // Subscribe to the model\n const result = await fal.subscribe(model, {\n input,\n logs: true,\n onQueueUpdate: (update) => {\n if (update.status === \"IN_PROGRESS\") {\n elizaLogger.info(update.logs.map((log) => log.message));\n }\n },\n });\n // Convert the returned image URLs to base64 to match existing functionality\n const base64Promises = result.data.images.map(async (image) => {\n const response = await fetch(image.url);\n const blob = await response.blob();\n const buffer = await blob.arrayBuffer();\n const base64 = Buffer.from(buffer).toString(\"base64\");\n return `data:${image.content_type};base64,${base64}`;\n });\n\n const base64s = await Promise.all(base64Promises);\n return { success: true, data: base64s };\n } else if (runtime.imageModelProvider === ModelProviderName.VENICE) {\n const response = await fetch(\n \"https://api.venice.ai/api/v1/image/generate\",\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n model: model,\n prompt: data.prompt,\n cfg_scale: data.guidanceScale,\n negative_prompt: data.negativePrompt,\n width: data.width,\n height: data.height,\n steps: data.numIterations,\n safe_mode: data.safeMode,\n seed: data.seed,\n style_preset: data.stylePreset,\n hide_watermark: data.hideWatermark,\n }),\n }\n );\n\n const result = await response.json();\n\n if (!result.images || !Array.isArray(result.images)) {\n throw new Error(\"Invalid response format from Venice AI\");\n }\n\n const base64s = result.images.map((base64String) => {\n if (!base64String) {\n throw new Error(\n \"Empty base64 string in Venice AI response\"\n );\n }\n return `data:image/png;base64,${base64String}`;\n });\n\n return { success: true, data: base64s };\n } else if (\n runtime.imageModelProvider === ModelProviderName.NINETEEN_AI\n ) {\n const response = await fetch(\n \"https://api.nineteen.ai/v1/text-to-image\",\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n model: model,\n prompt: data.prompt,\n negative_prompt: data.negativePrompt,\n width: data.width,\n height: data.height,\n steps: data.numIterations,\n cfg_scale: data.guidanceScale || 3,\n }),\n }\n );\n\n const result = await response.json();\n\n if (!result.images || !Array.isArray(result.images)) {\n throw new Error(\"Invalid response format from Nineteen AI\");\n }\n\n const base64s = result.images.map((base64String) => {\n if (!base64String) {\n throw new Error(\n \"Empty base64 string in Nineteen AI response\"\n );\n }\n return `data:image/png;base64,${base64String}`;\n });\n\n return { success: true, data: base64s };\n } else if (runtime.imageModelProvider === ModelProviderName.LIVEPEER) {\n if (!apiKey) {\n throw new Error(\"Livepeer Gateway is not defined\");\n }\n try {\n const baseUrl = new URL(apiKey);\n if (!baseUrl.protocol.startsWith(\"http\")) {\n throw new Error(\"Invalid Livepeer Gateway URL protocol\");\n }\n\n const response = await fetch(\n `${baseUrl.toString()}text-to-image`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer eliza-app-img\",\n },\n body: JSON.stringify({\n model_id:\n data.modelId || \"ByteDance/SDXL-Lightning\",\n prompt: data.prompt,\n width: data.width || 1024,\n height: data.height || 1024,\n }),\n }\n );\n const result = await response.json();\n if (!result.images?.length) {\n throw new Error(\"No images generated\");\n }\n const base64Images = await Promise.all(\n result.images.map(async (image) => {\n console.log(\"imageUrl console log\", image.url);\n let imageUrl;\n if (image.url.includes(\"http\")) {\n imageUrl = image.url;\n } else {\n imageUrl = `${apiKey}${image.url}`;\n }\n const imageResponse = await fetch(imageUrl);\n if (!imageResponse.ok) {\n throw new Error(\n `Failed to fetch image: ${imageResponse.statusText}`\n );\n }\n const blob = await imageResponse.blob();\n const arrayBuffer = await blob.arrayBuffer();\n const base64 =\n Buffer.from(arrayBuffer).toString(\"base64\");\n return `data:image/jpeg;base64,${base64}`;\n })\n );\n return {\n success: true,\n data: base64Images,\n };\n } catch (error) {\n console.error(error);\n return { success: false, error: error };\n }\n } else {\n let targetSize = `${data.width}x${data.height}`;\n if (\n targetSize !== \"1024x1024\" &&\n targetSize !== \"1792x1024\" &&\n targetSize !== \"1024x1792\"\n ) {\n targetSize = \"1024x1024\";\n }\n const openaiApiKey = runtime.getSetting(\"OPENAI_API_KEY\") as string;\n if (!openaiApiKey) {\n throw new Error(\"OPENAI_API_KEY is not set\");\n }\n const openai = new OpenAI({\n apiKey: openaiApiKey as string,\n });\n const response = await openai.images.generate({\n model,\n prompt: data.prompt,\n size: targetSize as \"1024x1024\" | \"1792x1024\" | \"1024x1792\",\n n: data.count,\n response_format: \"b64_json\",\n });\n const base64s = response.data.map(\n (image) => `data:image/png;base64,${image.b64_json}`\n );\n return { success: true, data: base64s };\n }\n } catch (error) {\n console.error(error);\n return { success: false, error: error };\n }\n};\n\nexport const generateCaption = async (\n data: { imageUrl: string },\n runtime: IAgentRuntime\n): Promise<{\n title: string;\n description: string;\n}> => {\n const { imageUrl } = data;\n const imageDescriptionService =\n runtime.getService<IImageDescriptionService>(\n ServiceType.IMAGE_DESCRIPTION\n );\n\n if (!imageDescriptionService) {\n throw new Error(\"Image description service not found\");\n }\n\n const resp = await imageDescriptionService.describeImage(imageUrl);\n return {\n title: resp.title.trim(),\n description: resp.description.trim(),\n };\n};\n\n/**\n * Configuration options for generating objects with a model.\n */\nexport interface GenerationOptions {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n schema?: ZodSchema;\n schemaName?: string;\n schemaDescription?: string;\n stop?: string[];\n mode?: \"auto\" | \"json\" | \"tool\";\n experimental_providerMetadata?: Record<string, unknown>;\n // verifiableInference?: boolean;\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter;\n // verifiableInferenceOptions?: VerifiableInferenceOptions;\n}\n\n/**\n * Base settings for model generation.\n */\ninterface ModelSettings {\n prompt: string;\n temperature: number;\n maxTokens: number;\n frequencyPenalty: number;\n presencePenalty: number;\n stop?: string[];\n experimental_telemetry?: TelemetrySettings;\n}\n\n/**\n * Generates structured objects from a prompt using specified AI models and configuration options.\n *\n * @param {GenerationOptions} options - Configuration options for generating objects.\n * @returns {Promise<any[]>} - A promise that resolves to an array of generated objects.\n * @throws {Error} - Throws an error if the provider is unsupported or if generation fails.\n */\nexport const generateObject = async ({\n runtime,\n context,\n modelClass,\n schema,\n schemaName,\n schemaDescription,\n stop,\n mode = \"json\",\n // verifiableInference = false,\n // verifiableInferenceAdapter,\n // verifiableInferenceOptions,\n}: GenerationOptions): Promise<GenerateObjectResult<unknown>> => {\n if (!context) {\n const errorMessage = \"generateObject context is empty\";\n console.error(errorMessage);\n throw new Error(errorMessage);\n }\n\n const provider = runtime.modelProvider;\n const modelSettings = getModelSettings(runtime.modelProvider, modelClass);\n const model = modelSettings.name;\n const temperature = modelSettings.temperature;\n const frequency_penalty = modelSettings.frequency_penalty;\n const presence_penalty = modelSettings.presence_penalty;\n const max_context_length = modelSettings.maxInputTokens;\n const max_response_length = modelSettings.maxOutputTokens;\n const experimental_telemetry = modelSettings.experimental_telemetry;\n const apiKey = runtime.token;\n\n try {\n context = await trimTokens(context, max_context_length, runtime);\n\n const modelOptions: ModelSettings = {\n prompt: context,\n temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n stop: stop || modelSettings.stop,\n experimental_telemetry: experimental_telemetry,\n };\n\n const response = await handleProvider({\n provider,\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode,\n modelOptions,\n runtime,\n context,\n modelClass,\n // verifiableInference,\n // verifiableInferenceAdapter,\n // verifiableInferenceOptions,\n });\n\n return response;\n } catch (error) {\n console.error(\"Error in generateObject:\", error);\n throw error;\n }\n};\n\n/**\n * Interface for provider-specific generation options.\n */\ninterface ProviderOptions {\n runtime: IAgentRuntime;\n provider: ModelProviderName;\n model: any;\n apiKey: string;\n schema?: ZodSchema;\n schemaName?: string;\n schemaDescription?: string;\n mode?: \"auto\" | \"json\" | \"tool\";\n experimental_providerMetadata?: Record<string, unknown>;\n modelOptions: ModelSettings;\n modelClass: ModelClass;\n context: string;\n // verifiableInference?: boolean;\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter;\n // verifiableInferenceOptions?: VerifiableInferenceOptions;\n}\n\n/**\n * Handles AI generation based on the specified provider.\n *\n * @param {ProviderOptions} options - Configuration options specific to the provider.\n * @returns {Promise<any[]>} - A promise that resolves to an array of generated objects.\n */\nexport async function handleProvider(\n options: ProviderOptions\n): Promise<GenerateObjectResult<unknown>> {\n const {\n provider,\n runtime,\n context,\n modelClass,\n //verifiableInference,\n //verifiableInferenceAdapter,\n //verifiableInferenceOptions,\n } = options;\n switch (provider) {\n case ModelProviderName.OPENAI:\n case ModelProviderName.ETERNALAI:\n case ModelProviderName.ALI_BAILIAN:\n case ModelProviderName.VOLENGINE:\n case ModelProviderName.LLAMACLOUD:\n case ModelProviderName.TOGETHER:\n case ModelProviderName.NANOGPT:\n case ModelProviderName.AKASH_CHAT_API:\n case ModelProviderName.LMSTUDIO:\n return await handleOpenAI(options);\n case ModelProviderName.ANTHROPIC:\n case ModelProviderName.CLAUDE_VERTEX:\n return await handleAnthropic(options);\n case ModelProviderName.GROK:\n return await handleGrok(options);\n case ModelProviderName.GROQ:\n return await handleGroq(options);\n case ModelProviderName.LLAMALOCAL:\n return await generateObjectDeprecated({\n runtime,\n context,\n modelClass,\n });\n case ModelProviderName.GOOGLE:\n return await handleGoogle(options);\n case ModelProviderName.MISTRAL:\n return await handleMistral(options);\n case ModelProviderName.REDPILL:\n return await handleRedPill(options);\n case ModelProviderName.OPENROUTER:\n return await handleOpenRouter(options);\n case ModelProviderName.OLLAMA:\n return await handleOllama(options);\n case ModelProviderName.DEEPSEEK:\n return await handleDeepSeek(options);\n case ModelProviderName.LIVEPEER:\n return await handleLivepeer(options);\n case ModelProviderName.SECRETAI:\n return await handleSecretAi(options);\n case ModelProviderName.NEARAI:\n return await handleNearAi(options);\n default: {\n const errorMessage = `Unsupported provider: ${provider}`;\n elizaLogger.error(errorMessage);\n throw new Error(errorMessage);\n }\n }\n}\n/**\n * Handles object generation for OpenAI.\n *\n * @param {ProviderOptions} options - Options specific to OpenAI.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleOpenAI({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n provider,\n runtime,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const endpoint =\n runtime.character.modelEndpointOverride || getEndpoint(provider);\n const baseURL =\n getCloudflareGatewayBaseURL(runtime, \"openai\") || endpoint;\n const openai = createOpenAI({ apiKey, baseURL });\n return await aiGenerateObject({\n model: openai.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Anthropic models.\n *\n * @param {ProviderOptions} options - Options specific to Anthropic.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleAnthropic({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"auto\",\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n elizaLogger.debug(\"Handling Anthropic request with Cloudflare check\");\n if (mode === \"json\") {\n elizaLogger.warn(\"Anthropic mode is set to json, changing to auto\");\n mode = \"auto\";\n }\n const baseURL = getCloudflareGatewayBaseURL(runtime, \"anthropic\");\n elizaLogger.debug(\"Anthropic handleAnthropic baseURL:\", { baseURL });\n\n const anthropic = createAnthropic({ apiKey, baseURL });\n return await aiGenerateObject({\n model: anthropic.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Grok models.\n *\n * @param {ProviderOptions} options - Options specific to Grok.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleGrok({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const grok = createOpenAI({ apiKey, baseURL: models.grok.endpoint });\n return await aiGenerateObject({\n model: grok.languageModel(model, { parallelToolCalls: false }),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Groq models.\n *\n * @param {ProviderOptions} options - Options specific to Groq.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleGroq({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n elizaLogger.debug(\"Handling Groq request with Cloudflare check\");\n const baseURL = getCloudflareGatewayBaseURL(runtime, \"groq\");\n elizaLogger.debug(\"Groq handleGroq baseURL:\", { baseURL });\n\n const groq = createGroq({ apiKey, baseURL });\n return await aiGenerateObject({\n model: groq.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Google models.\n *\n * @param {ProviderOptions} options - Options specific to Google.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleGoogle({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const google = createGoogleGenerativeAI({apiKey});\n return await aiGenerateObject({\n model: google(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Mistral models.\n *\n * @param {ProviderOptions} options - Options specific to Mistral.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleMistral({\n model,\n schema,\n schemaName,\n schemaDescription,\n mode,\n modelOptions,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const mistral = createMistral();\n return await aiGenerateObject({\n model: mistral(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Redpill models.\n *\n * @param {ProviderOptions} options - Options specific to Redpill.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleRedPill({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const redPill = createOpenAI({ apiKey, baseURL: models.redpill.endpoint });\n return await aiGenerateObject({\n model: redPill.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for OpenRouter models.\n *\n * @param {ProviderOptions} options - Options specific to OpenRouter.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleOpenRouter({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const openRouter = createOpenAI({\n apiKey,\n baseURL: models.openrouter.endpoint,\n });\n return await aiGenerateObject({\n model: openRouter.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Ollama models.\n *\n * @param {ProviderOptions} options - Options specific to Ollama.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleOllama({\n model,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n provider,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const ollamaProvider = createOllama({\n baseURL: getEndpoint(provider) + \"/api\",\n });\n const ollama = ollamaProvider(model);\n return await aiGenerateObject({\n model: ollama,\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for DeepSeek models.\n *\n * @param {ProviderOptions} options - Options specific to DeepSeek.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleDeepSeek({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode,\n modelOptions,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const openai = createOpenAI({ apiKey, baseURL: models.deepseek.endpoint });\n return await aiGenerateObject({\n model: openai.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Amazon Bedrock models.\n *\n * @param {ProviderOptions} options - Options specific to Amazon Bedrock.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleBedrock({\n model,\n schema,\n schemaName,\n schemaDescription,\n mode,\n modelOptions,\n provider,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n return await aiGenerateObject({\n model: bedrock(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\nasync function handleLivepeer({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode,\n modelOptions,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n console.log(\"Livepeer provider api key:\", apiKey);\n if (!apiKey) {\n throw new Error(\n \"Livepeer provider requires LIVEPEER_GATEWAY_URL to be configured\"\n );\n }\n\n const livepeerClient = createOpenAI({\n apiKey,\n baseURL: apiKey, // Use the apiKey as the baseURL since it contains the gateway URL\n });\n\n return await aiGenerateObject({\n model: livepeerClient.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Secret AI models.\n *\n * @param {ProviderOptions} options - Options specific to Secret AI.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleSecretAi({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n provider,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const secretAiProvider = createOllama({\n baseURL: getEndpoint(provider) + \"/api\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n }\n });\n const secretAi = secretAiProvider(model);\n return await aiGenerateObject({\n model: secretAi,\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for NEAR AI models.\n *\n * @param {ProviderOptions} options - Options specific to NEAR AI.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleNearAi({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const nearai = createOpenAI({ apiKey, baseURL: models.nearai.endpoint });\n // Require structured output if schema is provided\n const settings = schema ? { structuredOutputs: true } : undefined;\n return await aiGenerateObject({\n model: nearai.languageModel(model, settings),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n// Add type definition for Together AI response\ninterface TogetherAIImageResponse {\n data: Array<{\n url: string;\n content_type?: string;\n image_type?: string;\n }>;\n}\n\nexport async function generateTweetActions({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<ActionResponse | null> {\n let retryDelay = 1000;\n while (true) {\n try {\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n elizaLogger.debug(\n \"Received response from generateText for tweet actions:\",\n response\n );\n const { actions } = parseActionResponseFromText(response.trim());\n if (actions) {\n elizaLogger.debug(\"Parsed tweet actions:\", actions);\n return actions;\n } else {\n elizaLogger.debug(\"generateTweetActions no valid response\");\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateTweetActions:\", error);\n if (\n error instanceof TypeError &&\n error.message.includes(\"queueTextCompletion\")\n ) {\n elizaLogger.error(\n \"TypeError: Cannot read properties of null (reading 'queueTextCompletion')\"\n );\n }\n }\n elizaLogger.log(`Retrying in ${retryDelay}ms...`);\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n","import type { Client } from '../clients/createClient.js'\nimport type { PublicActions } from '../clients/decorators/public.js'\nimport type { WalletActions } from '../clients/decorators/wallet.js'\nimport type { Transport } from '../clients/transports/createTransport.js'\nimport type { Account } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type { RpcSchema } from '../types/eip1193.js'\n\n/**\n * Retrieves and returns an action from the client (if exists), and falls\n * back to the tree-shakable action.\n *\n * Useful for extracting overridden actions from a client (ie. if a consumer\n * wants to override the `sendTransaction` implementation).\n */\nexport function getAction<\n transport extends Transport,\n chain extends Chain | undefined,\n account extends Account | undefined,\n rpcSchema extends RpcSchema | undefined,\n extended extends { [key: string]: unknown },\n client extends Client<transport, chain, account, rpcSchema, extended>,\n parameters,\n returnType,\n>(\n client: client,\n actionFn: (_: any, parameters: parameters) => returnType,\n // Some minifiers drop `Function.prototype.name`, or replace it with short letters,\n // meaning that `actionFn.name` will not always work. For that case, the consumer\n // needs to pass the name explicitly.\n name: keyof PublicActions | keyof WalletActions | (string & {}),\n): (parameters: parameters) => returnType {\n const action_implicit = client[actionFn.name]\n if (typeof action_implicit === 'function')\n return action_implicit as (params: parameters) => returnType\n\n const action_explicit = client[name]\n if (typeof action_explicit === 'function')\n return action_explicit as (params: parameters) => returnType\n\n return (params) => actionFn(client, params)\n}\n","import { BaseError } from './base.js'\n\nexport type FilterTypeNotSupportedErrorType = FilterTypeNotSupportedError & {\n name: 'FilterTypeNotSupportedError'\n}\nexport class FilterTypeNotSupportedError extends BaseError {\n constructor(type: string) {\n super(`Filter type \"${type}\" is not supported.`, {\n name: 'FilterTypeNotSupportedError',\n })\n }\n}\n","import type {\n Abi,\n AbiParameter,\n AbiParameterToPrimitiveType,\n ExtractAbiEvents,\n} from 'abitype'\n\nimport {\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n} from '../../errors/abi.js'\nimport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from '../../errors/log.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n ContractEventArgs,\n ContractEventName,\n EventDefinition,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { IsNarrowable, UnionEvaluate } from '../../types/utils.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n type ToEventSelectorErrorType,\n toEventSelector,\n} from '../hash/toEventSelector.js'\nimport {\n type EncodeAbiParametersErrorType,\n encodeAbiParameters,\n} from './encodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\nimport { type GetAbiItemErrorType, getAbiItem } from './getAbiItem.js'\n\nconst docsPath = '/docs/contract/encodeEventTopics'\n\nexport type EncodeEventTopicsParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n ///\n hasEvents = abi extends Abi\n ? Abi extends abi\n ? true\n : [ExtractAbiEvents<abi>] extends [never]\n ? false\n : true\n : true,\n allArgs = ContractEventArgs<\n abi,\n eventName extends ContractEventName<abi>\n ? eventName\n : ContractEventName<abi>\n >,\n allErrorNames = ContractEventName<abi>,\n> = {\n abi: abi\n args?: allArgs | undefined\n} & UnionEvaluate<\n IsNarrowable<abi, Abi> extends true\n ? abi['length'] extends 1\n ? { eventName?: eventName | allErrorNames | undefined }\n : { eventName: eventName | allErrorNames }\n : { eventName?: eventName | allErrorNames | undefined }\n> &\n (hasEvents extends true ? unknown : never)\n\nexport type EncodeEventTopicsReturnType = [Hex, ...(Hex | Hex[] | null)[]]\n\nexport type EncodeEventTopicsErrorType =\n | AbiEventNotFoundErrorType\n | EncodeArgErrorType\n | FormatAbiItemErrorType\n | GetAbiItemErrorType\n | ToEventSelectorErrorType\n | ErrorType\n\nexport function encodeEventTopics<\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName<abi> | undefined = undefined,\n>(\n parameters: EncodeEventTopicsParameters<abi, eventName>,\n): EncodeEventTopicsReturnType {\n const { abi, eventName, args } = parameters as EncodeEventTopicsParameters\n\n let abiItem = abi[0]\n if (eventName) {\n const item = getAbiItem({ abi, name: eventName })\n if (!item) throw new AbiEventNotFoundError(eventName, { docsPath })\n abiItem = item\n }\n\n if (abiItem.type !== 'event')\n throw new AbiEventNotFoundError(undefined, { docsPath })\n\n const definition = formatAbiItem(abiItem)\n const signature = toEventSelector(definition as EventDefinition)\n\n let topics: (Hex | Hex[] | null)[] = []\n if (args && 'inputs' in abiItem) {\n const indexedInputs = abiItem.inputs?.filter(\n (param) => 'indexed' in param && param.indexed,\n )\n const args_ = Array.isArray(args)\n ? args\n : Object.values(args).length > 0\n ? (indexedInputs?.map((x: any) => (args as any)[x.name]) ?? [])\n : []\n\n if (args_.length > 0) {\n topics =\n indexedInputs?.map((param, i) => {\n if (Array.isArray(args_[i]))\n return args_[i].map((_: any, j: number) =>\n encodeArg({ param, value: args_[i][j] }),\n )\n return args_[i] ? encodeArg({ param, value: args_[i] }) : null\n }) ?? []\n }\n }\n return [signature, ...topics]\n}\n\nexport type EncodeArgErrorType =\n | Keccak256ErrorType\n | ToBytesErrorType\n | EncodeAbiParametersErrorType\n | FilterTypeNotSupportedErrorType\n | ErrorType\n\nfunction encodeArg({\n param,\n value,\n}: { param: AbiParameter; value: AbiParameterToPrimitiveType<AbiParameter> }) {\n if (param.type === 'string' || param.type === 'bytes')\n return keccak256(toBytes(value as string))\n if (param.type === 'tuple' || param.type.match(/^(.*)\\[(\\d+)?\\]$/))\n throw new FilterTypeNotSupportedError(param.type)\n return encodeAbiParameters([param], [value])\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { OnResponseFn } from '../../clients/transports/fallback.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { PublicRpcSchema } from '../../types/eip1193.js'\nimport type { EIP1193RequestFn } from '../../types/eip1193.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { Filter } from '../../types/utils.js'\n\ntype CreateFilterRequestScopeParameters = {\n method:\n | 'eth_newFilter'\n | 'eth_newPendingTransactionFilter'\n | 'eth_newBlockFilter'\n}\n\ntype FilterRpcSchema = Filter<\n PublicRpcSchema,\n { Method: 'eth_getFilterLogs' | 'eth_getFilterChanges' }\n>\n\ntype CreateFilterRequestScopeReturnType = (\n id: Hex,\n) => EIP1193RequestFn<FilterRpcSchema>\n\n/**\n * Scopes `request` to the filter ID. If the client is a fallback, it will\n * listen for responses and scope the child transport `request` function\n * to the successful filter ID.\n */\nexport function createFilterRequestScope<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n { method }: CreateFilterRequestScopeParameters,\n): CreateFilterRequestScopeReturnType {\n const requestMap: Record<Hex, EIP1193RequestFn> = {}\n\n if (client.transport.type === 'fallback')\n client.transport.onResponse?.(\n ({\n method: method_,\n response: id,\n status,\n transport,\n }: Parameters<OnResponseFn>[0]) => {\n if (status === 'success' && method === method_)\n requestMap[id as Hex] = transport.request\n },\n )\n\n return ((id) =>\n requestMap[id] || client.request) as CreateFilterRequestScopeReturnType\n}\n","import type { Abi, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hex } from '../../types/misc.js'\nimport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateContractEventFilterParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName<abi> | undefined = undefined,\n args extends\n | MaybeExtractEventArgsFromAbi<abi, eventName>\n | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n address?: Address | Address[] | undefined\n abi: abi\n eventName?: eventName | ContractEventName<abi> | undefined\n fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments in the event ABI item.\n * @default false\n */\n strict?: strict | boolean | undefined\n toBlock?: toBlock | BlockNumber | BlockTag | undefined\n} & (undefined extends eventName\n ? {\n args?: undefined\n }\n : MaybeExtractEventArgsFromAbi<abi, eventName> extends infer eventFilterArgs\n ? {\n args?:\n | eventFilterArgs\n | (args extends eventFilterArgs ? args : never)\n | undefined\n }\n : {\n args?: undefined\n })\n\nexport type CreateContractEventFilterReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName<abi> | undefined = undefined,\n args extends\n | MaybeExtractEventArgsFromAbi<abi, eventName>\n | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = Filter<'event', abi, eventName, args, strict, fromBlock, toBlock>\n\nexport type CreateContractEventFilterErrorType =\n | EncodeEventTopicsErrorType\n | RequestErrorType\n | NumberToHexErrorType\n | ErrorType\n\n/**\n * Creates a Filter to retrieve event logs that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges) or [`getFilterLogs`](https://viem.sh/docs/actions/public/getFilterLogs).\n *\n * - Docs: https://viem.sh/docs/contract/createContractEventFilter\n *\n * @param client - Client to use\n * @param parameters - {@link CreateContractEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateContractEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createContractEventFilter } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createContractEventFilter(client, {\n * abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n * })\n */\nexport async function createContractEventFilter<\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName<abi> | undefined,\n args extends MaybeExtractEventArgsFromAbi<abi, eventName> | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n client: Client<Transport, chain>,\n parameters: CreateContractEventFilterParameters<\n abi,\n eventName,\n args,\n strict,\n fromBlock,\n toBlock\n >,\n): Promise<\n CreateContractEventFilterReturnType<\n abi,\n eventName,\n args,\n strict,\n fromBlock,\n toBlock\n >\n> {\n const { address, abi, args, eventName, fromBlock, strict, toBlock } =\n parameters as CreateContractEventFilterParameters\n\n const getRequest = createFilterRequestScope(client, {\n method: 'eth_newFilter',\n })\n\n const topics = eventName\n ? encodeEventTopics({\n abi,\n args,\n eventName,\n } as unknown as EncodeEventTopicsParameters)\n : undefined\n const id: Hex = await client.request({\n method: 'eth_newFilter',\n params: [\n {\n address,\n fromBlock:\n typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n topics,\n },\n ],\n })\n\n return {\n abi,\n args,\n eventName,\n id,\n request: getRequest(id),\n strict: Boolean(strict),\n type: 'event',\n } as unknown as CreateContractEventFilterReturnType<\n abi,\n eventName,\n args,\n strict,\n fromBlock,\n toBlock\n >\n}\n","import type { Abi, Address } from 'abitype'\n\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n RawContractError,\n} from '../../errors/contract.js'\nimport { RpcRequestError } from '../../errors/request.js'\nimport { InternalRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nconst EXECUTION_REVERTED_ERROR_CODE = 3\n\nexport type GetContractErrorReturnType<cause = ErrorType> = Omit<\n ContractFunctionExecutionErrorType,\n 'cause'\n> & {\n cause:\n | cause\n | ContractFunctionZeroDataErrorType\n | ContractFunctionRevertedErrorType\n}\n\nexport function getContractError<err extends ErrorType<string>>(\n err: err,\n {\n abi,\n address,\n args,\n docsPath,\n functionName,\n sender,\n }: {\n abi: Abi\n args: any\n address?: Address | undefined\n docsPath?: string | undefined\n functionName: string\n sender?: Address | undefined\n },\n): GetContractErrorReturnType {\n const error = (\n err instanceof RawContractError\n ? err\n : err instanceof BaseError\n ? err.walk((err) => 'data' in (err as Error)) || err.walk()\n : {}\n ) as BaseError\n const { code, data, details, message, shortMessage } =\n error as RawContractError\n\n const cause = (() => {\n if (err instanceof AbiDecodingZeroDataError)\n return new ContractFunctionZeroDataError({ functionName })\n if (\n [EXECUTION_REVERTED_ERROR_CODE, InternalRpcError.code].includes(code) &&\n (data || details || message || shortMessage)\n ) {\n return new ContractFunctionRevertedError({\n abi,\n data: typeof data === 'object' ? data.data : data,\n functionName,\n message:\n error instanceof RpcRequestError\n ? details\n : (shortMessage ?? message),\n })\n }\n return err\n })()\n\n return new ContractFunctionExecutionError(cause as BaseError, {\n abi,\n args,\n contractAddress: address,\n docsPath,\n functionName,\n sender,\n }) as GetContractErrorReturnType\n}\n","import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport {\n type ChecksumAddressErrorType,\n checksumAddress,\n} from '../../utils/address/getAddress.js'\nimport {\n type Keccak256ErrorType,\n keccak256,\n} from '../../utils/hash/keccak256.js'\n\nexport type PublicKeyToAddressErrorType =\n | ChecksumAddressErrorType\n | Keccak256ErrorType\n | ErrorType\n\n/**\n * @description Converts an ECDSA public key to an address.\n *\n * @param publicKey The public key to convert.\n *\n * @returns The address.\n */\nexport function publicKeyToAddress(publicKey: Hex): Address {\n const address = keccak256(`0x${publicKey.substring(4)}`).substring(26)\n return checksumAddress(`0x${address}`) as Address\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport {\n type HexToNumberErrorType,\n hexToBigInt,\n hexToNumber,\n} from '../encoding/fromHex.js'\nimport { toHex } from '../encoding/toHex.js'\n\nexport type RecoverPublicKeyParameters = {\n hash: Hex | ByteArray\n signature: Hex | ByteArray | Signature\n}\n\nexport type RecoverPublicKeyReturnType = Hex\n\nexport type RecoverPublicKeyErrorType =\n | HexToNumberErrorType\n | IsHexErrorType\n | ErrorType\n\nexport async function recoverPublicKey({\n hash,\n signature,\n}: RecoverPublicKeyParameters): Promise<RecoverPublicKeyReturnType> {\n const hashHex = isHex(hash) ? hash : toHex(hash)\n\n const { secp256k1 } = await import('@noble/curves/secp256k1')\n const signature_ = (() => {\n // typeof signature: `Signature`\n if (typeof signature === 'object' && 'r' in signature && 's' in signature) {\n const { r, s, v, yParity } = signature\n const yParityOrV = Number(yParity ?? v)!\n const recoveryBit = toRecoveryBit(yParityOrV)\n return new secp256k1.Signature(\n hexToBigInt(r),\n hexToBigInt(s),\n ).addRecoveryBit(recoveryBit)\n }\n\n // typeof signature: `Hex | ByteArray`\n const signatureHex = isHex(signature) ? signature : toHex(signature)\n const yParityOrV = hexToNumber(`0x${signatureHex.slice(130)}`)\n const recoveryBit = toRecoveryBit(yParityOrV)\n return secp256k1.Signature.fromCompact(\n signatureHex.substring(2, 130),\n ).addRecoveryBit(recoveryBit)\n })()\n\n const publicKey = signature_\n .recoverPublicKey(hashHex.substring(2))\n .toHex(false)\n return `0x${publicKey}`\n}\n\nfunction toRecoveryBit(yParityOrV: number) {\n if (yParityOrV === 0 || yParityOrV === 1) return yParityOrV\n if (yParityOrV === 27) return 0\n if (yParityOrV === 28) return 1\n throw new Error('Invalid yParityOrV value')\n}\n","import type { Address } from 'abitype'\n\nimport { publicKeyToAddress } from '../../accounts/utils/publicKeyToAddress.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { recoverPublicKey } from './recoverPublicKey.js'\n\nexport type RecoverAddressParameters = {\n hash: Hex | ByteArray\n signature: Hex | ByteArray | Signature\n}\n\nexport type RecoverAddressReturnType = Address\n\nexport type RecoverAddressErrorType = ErrorType\n\nexport async function recoverAddress({\n hash,\n signature,\n}: RecoverAddressParameters): Promise<RecoverAddressReturnType> {\n return publicKeyToAddress(await recoverPublicKey({ hash: hash, signature }))\n}\n","import { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n type CreateCursorErrorType,\n type Cursor,\n createCursor,\n} from '../cursor.js'\n\nimport { type HexToBytesErrorType, hexToBytes } from './toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from './toHex.js'\n\nexport type RecursiveArray<T> = T | readonly RecursiveArray<T>[]\n\ntype To = 'hex' | 'bytes'\n\ntype Encodable = {\n length: number\n encode(cursor: Cursor): void\n}\n\nexport type ToRlpReturnType<to extends To> =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type ToRlpErrorType =\n | CreateCursorErrorType\n | BytesToHexErrorType\n | HexToBytesErrorType\n | ErrorType\n\nexport function toRlp<to extends To = 'hex'>(\n bytes: RecursiveArray<ByteArray> | RecursiveArray<Hex>,\n to: to | To | undefined = 'hex',\n): ToRlpReturnType<to> {\n const encodable = getEncodable(bytes)\n const cursor = createCursor(new Uint8Array(encodable.length))\n encodable.encode(cursor)\n\n if (to === 'hex') return bytesToHex(cursor.bytes) as ToRlpReturnType<to>\n return cursor.bytes as ToRlpReturnType<to>\n}\n\nexport type BytesToRlpErrorType = ToRlpErrorType | ErrorType\n\nexport function bytesToRlp<to extends To = 'bytes'>(\n bytes: RecursiveArray<ByteArray>,\n to: to | To | undefined = 'bytes',\n): ToRlpReturnType<to> {\n return toRlp(bytes, to)\n}\n\nexport type HexToRlpErrorType = ToRlpErrorType | ErrorType\n\nexport function hexToRlp<to extends To = 'hex'>(\n hex: RecursiveArray<Hex>,\n to: to | To | undefined = 'hex',\n): ToRlpReturnType<to> {\n return toRlp(hex, to)\n}\n\nfunction getEncodable(\n bytes: RecursiveArray<ByteArray> | RecursiveArray<Hex>,\n): Encodable {\n if (Array.isArray(bytes))\n return getEncodableList(bytes.map((x) => getEncodable(x)))\n return getEncodableBytes(bytes as any)\n}\n\nfunction getEncodableList(list: Encodable[]): Encodable {\n const bodyLength = list.reduce((acc, x) => acc + x.length, 0)\n\n const sizeOfBodyLength = getSizeOfLength(bodyLength)\n const length = (() => {\n if (bodyLength <= 55) return 1 + bodyLength\n return 1 + sizeOfBodyLength + bodyLength\n })()\n\n return {\n length,\n encode(cursor: Cursor) {\n if (bodyLength <= 55) {\n cursor.pushByte(0xc0 + bodyLength)\n } else {\n cursor.pushByte(0xc0 + 55 + sizeOfBodyLength)\n if (sizeOfBodyLength === 1) cursor.pushUint8(bodyLength)\n else if (sizeOfBodyLength === 2) cursor.pushUint16(bodyLength)\n else if (sizeOfBodyLength === 3) cursor.pushUint24(bodyLength)\n else cursor.pushUint32(bodyLength)\n }\n for (const { encode } of list) {\n encode(cursor)\n }\n },\n }\n}\n\nfunction getEncodableBytes(bytesOrHex: ByteArray | Hex): Encodable {\n const bytes =\n typeof bytesOrHex === 'string' ? hexToBytes(bytesOrHex) : bytesOrHex\n\n const sizeOfBytesLength = getSizeOfLength(bytes.length)\n const length = (() => {\n if (bytes.length === 1 && bytes[0] < 0x80) return 1\n if (bytes.length <= 55) return 1 + bytes.length\n return 1 + sizeOfBytesLength + bytes.length\n })()\n\n return {\n length,\n encode(cursor: Cursor) {\n if (bytes.length === 1 && bytes[0] < 0x80) {\n cursor.pushBytes(bytes)\n } else if (bytes.length <= 55) {\n cursor.pushByte(0x80 + bytes.length)\n cursor.pushBytes(bytes)\n } else {\n cursor.pushByte(0x80 + 55 + sizeOfBytesLength)\n if (sizeOfBytesLength === 1) cursor.pushUint8(bytes.length)\n else if (sizeOfBytesLength === 2) cursor.pushUint16(bytes.length)\n else if (sizeOfBytesLength === 3) cursor.pushUint24(bytes.length)\n else cursor.pushUint32(bytes.length)\n cursor.pushBytes(bytes)\n }\n },\n }\n}\n\nfunction getSizeOfLength(length: number) {\n if (length < 2 ** 8) return 1\n if (length < 2 ** 16) return 2\n if (length < 2 ** 24) return 3\n if (length < 2 ** 32) return 4\n throw new BaseError('Length is too large.')\n}\n","import type { ErrorType } from '../../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../../types/misc.js'\nimport {\n type ConcatHexErrorType,\n concatHex,\n} from '../../../utils/data/concat.js'\nimport {\n type HexToBytesErrorType,\n hexToBytes,\n} from '../../../utils/encoding/toBytes.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../../utils/encoding/toHex.js'\nimport { type ToRlpErrorType, toRlp } from '../../../utils/encoding/toRlp.js'\nimport {\n type Keccak256ErrorType,\n keccak256,\n} from '../../../utils/hash/keccak256.js'\nimport type { Authorization } from '../types/authorization.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type HashAuthorizationParameters<to extends To> = Authorization & {\n /** Output format. @default \"hex\" */\n to?: to | To | undefined\n}\n\nexport type HashAuthorizationReturnType<to extends To> =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type HashAuthorizationErrorType =\n | Keccak256ErrorType\n | ConcatHexErrorType\n | ToRlpErrorType\n | NumberToHexErrorType\n | HexToBytesErrorType\n | ErrorType\n\n/**\n * Computes an Authorization hash in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n */\nexport function hashAuthorization<to extends To = 'hex'>(\n parameters: HashAuthorizationParameters<to>,\n): HashAuthorizationReturnType<to> {\n const { chainId, contractAddress, nonce, to } = parameters\n const hash = keccak256(\n concatHex([\n '0x05',\n toRlp([\n chainId ? numberToHex(chainId) : '0x',\n contractAddress,\n nonce ? numberToHex(nonce) : '0x',\n ]),\n ]),\n )\n if (to === 'bytes') return hexToBytes(hash) as HashAuthorizationReturnType<to>\n return hash as HashAuthorizationReturnType<to>\n}\n","import type { Address } from 'abitype'\n\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../../types/misc.js'\nimport type { OneOf } from '../../../types/utils.js'\nimport {\n type RecoverAddressErrorType,\n recoverAddress,\n} from '../../../utils/signature/recoverAddress.js'\nimport type {\n Authorization,\n SignedAuthorization,\n} from '../types/authorization.js'\nimport {\n type HashAuthorizationErrorType,\n hashAuthorization,\n} from './hashAuthorization.js'\n\nexport type RecoverAuthorizationAddressParameters<\n authorization extends OneOf<Authorization | SignedAuthorization> = OneOf<\n Authorization | SignedAuthorization\n >,\n //\n _signature = Hex | ByteArray | OneOf<Signature | SignedAuthorization>,\n> = {\n /**\n * The Authorization object.\n *\n * - If an unsigned `authorization` is provided, the `signature` property is required.\n * - If a signed `authorization` is provided, the `signature` property does not need to be provided.\n */\n authorization: authorization | OneOf<Authorization | SignedAuthorization>\n} & (authorization extends SignedAuthorization\n ? {\n /** Signature of the Authorization. Not required if the `authorization` is signed. */\n signature?: _signature | undefined\n }\n : {\n /** Signature of the Authorization. Not required if the `authorization` is signed. */\n signature: _signature\n })\n\nexport type RecoverAuthorizationAddressReturnType = Address\n\nexport type RecoverAuthorizationAddressErrorType =\n | HashAuthorizationErrorType\n | RecoverAddressErrorType\n | ErrorType\n\nexport async function recoverAuthorizationAddress<\n const authorization extends OneOf<Authorization | SignedAuthorization>,\n>(\n parameters: RecoverAuthorizationAddressParameters<authorization>,\n): Promise<RecoverAuthorizationAddressReturnType> {\n const { authorization, signature } = parameters\n\n return recoverAddress({\n hash: hashAuthorization(authorization as Authorization),\n signature: (signature ?? authorization) as Signature,\n })\n}\n","import type { Account } from '../accounts/types.js'\nimport type { EstimateGasParameters } from '../actions/public/estimateGas.js'\nimport type { Chain } from '../types/chain.js'\nimport { formatEther } from '../utils/unit/formatEther.js'\nimport { formatGwei } from '../utils/unit/formatGwei.js'\n\nimport { BaseError } from './base.js'\nimport { prettyPrint } from './transaction.js'\n\nexport type EstimateGasExecutionErrorType = EstimateGasExecutionError & {\n name: 'EstimateGasExecutionError'\n}\nexport class EstimateGasExecutionError extends BaseError {\n override cause: BaseError\n\n constructor(\n cause: BaseError,\n {\n account,\n docsPath,\n chain,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n }: Omit<EstimateGasParameters<any>, 'account'> & {\n account?: Account | undefined\n chain?: Chain | undefined\n docsPath?: string | undefined\n },\n ) {\n const prettyArgs = prettyPrint({\n from: account?.address,\n to,\n value:\n typeof value !== 'undefined' &&\n `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n data,\n gas,\n gasPrice:\n typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n maxFeePerGas:\n typeof maxFeePerGas !== 'undefined' &&\n `${formatGwei(maxFeePerGas)} gwei`,\n maxPriorityFeePerGas:\n typeof maxPriorityFeePerGas !== 'undefined' &&\n `${formatGwei(maxPriorityFeePerGas)} gwei`,\n nonce,\n })\n\n super(cause.shortMessage, {\n cause,\n docsPath,\n metaMessages: [\n ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n 'Estimate Gas Arguments:',\n prettyArgs,\n ].filter(Boolean) as string[],\n name: 'EstimateGasExecutionError',\n })\n this.cause = cause\n }\n}\n","import type { Account } from '../../accounts/types.js'\nimport type { EstimateGasParameters } from '../../actions/public/estimateGas.js'\nimport type { BaseError } from '../../errors/base.js'\nimport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from '../../errors/estimateGas.js'\nimport { UnknownNodeError } from '../../errors/node.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\n\nimport {\n type GetNodeErrorParameters,\n type GetNodeErrorReturnType,\n getNodeError,\n} from './getNodeError.js'\n\nexport type GetEstimateGasErrorReturnType<cause = ErrorType> = Omit<\n EstimateGasExecutionErrorType,\n 'cause'\n> & { cause: cause | GetNodeErrorReturnType }\n\nexport function getEstimateGasError<err extends ErrorType<string>>(\n err: err,\n {\n docsPath,\n ...args\n }: Omit<EstimateGasParameters, 'account'> & {\n account?: Account | undefined\n chain?: Chain | undefined\n docsPath?: string | undefined\n },\n): GetEstimateGasErrorReturnType<err> {\n const cause = (() => {\n const cause = getNodeError(\n err as {} as BaseError,\n args as GetNodeErrorParameters,\n )\n if (cause instanceof UnknownNodeError) return err as {} as BaseError\n return cause\n })()\n return new EstimateGasExecutionError(cause, {\n docsPath,\n ...args,\n }) as GetEstimateGasErrorReturnType<err>\n}\n","import { formatGwei } from '../utils/unit/formatGwei.js'\nimport { BaseError } from './base.js'\n\nexport type BaseFeeScalarErrorType = BaseFeeScalarError & {\n name: 'BaseFeeScalarError'\n}\nexport class BaseFeeScalarError extends BaseError {\n constructor() {\n super('`baseFeeMultiplier` must be greater than 1.', {\n name: 'BaseFeeScalarError',\n })\n }\n}\n\nexport type Eip1559FeesNotSupportedErrorType = Eip1559FeesNotSupportedError & {\n name: 'Eip1559FeesNotSupportedError'\n}\nexport class Eip1559FeesNotSupportedError extends BaseError {\n constructor() {\n super('Chain does not support EIP-1559 fees.', {\n name: 'Eip1559FeesNotSupportedError',\n })\n }\n}\n\nexport type MaxFeePerGasTooLowErrorType = MaxFeePerGasTooLowError & {\n name: 'MaxFeePerGasTooLowError'\n}\nexport class MaxFeePerGasTooLowError extends BaseError {\n constructor({ maxPriorityFeePerGas }: { maxPriorityFeePerGas: bigint }) {\n super(\n `\\`maxFeePerGas\\` cannot be less than the \\`maxPriorityFeePerGas\\` (${formatGwei(\n maxPriorityFeePerGas,\n )} gwei).`,\n { name: 'MaxFeePerGasTooLowError' },\n )\n }\n}\n","import type { Hash } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type BlockNotFoundErrorType = BlockNotFoundError & {\n name: 'BlockNotFoundError'\n}\nexport class BlockNotFoundError extends BaseError {\n constructor({\n blockHash,\n blockNumber,\n }: {\n blockHash?: Hash | undefined\n blockNumber?: bigint | undefined\n }) {\n let identifier = 'Block'\n if (blockHash) identifier = `Block at hash \"${blockHash}\"`\n if (blockNumber) identifier = `Block at number \"${blockNumber}\"`\n super(`${identifier} could not be found.`, { name: 'BlockNotFoundError' })\n }\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { SignedAuthorizationList } from '../../experimental/eip7702/types/authorization.js'\nimport type { RpcAuthorizationList } from '../../experimental/eip7702/types/rpc.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ExtractChainFormatterExclude,\n ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RpcTransaction } from '../../types/rpc.js'\nimport type { Transaction, TransactionType } from '../../types/transaction.js'\nimport type { ExactPartial, UnionLooseOmit } from '../../types/utils.js'\nimport { hexToNumber } from '../encoding/fromHex.js'\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\n\ntype TransactionPendingDependencies =\n | 'blockHash'\n | 'blockNumber'\n | 'transactionIndex'\n\nexport type FormattedTransaction<\n chain extends Chain | undefined = undefined,\n blockTag extends BlockTag = BlockTag,\n _FormatterReturnType = ExtractChainFormatterReturnType<\n chain,\n 'transaction',\n Transaction\n >,\n _ExcludedPendingDependencies extends string = TransactionPendingDependencies &\n ExtractChainFormatterExclude<chain, 'transaction'>,\n> = UnionLooseOmit<_FormatterReturnType, TransactionPendingDependencies> & {\n [_K in _ExcludedPendingDependencies]: never\n} & Pick<\n Transaction<bigint, number, blockTag extends 'pending' ? true : false>,\n TransactionPendingDependencies\n >\n\nexport const transactionType = {\n '0x0': 'legacy',\n '0x1': 'eip2930',\n '0x2': 'eip1559',\n '0x3': 'eip4844',\n '0x4': 'eip7702',\n} as const satisfies Record<Hex, TransactionType>\n\nexport type FormatTransactionErrorType = ErrorType\n\nexport function formatTransaction(transaction: ExactPartial<RpcTransaction>) {\n const transaction_ = {\n ...transaction,\n blockHash: transaction.blockHash ? transaction.blockHash : null,\n blockNumber: transaction.blockNumber\n ? BigInt(transaction.blockNumber)\n : null,\n chainId: transaction.chainId ? hexToNumber(transaction.chainId) : undefined,\n gas: transaction.gas ? BigInt(transaction.gas) : undefined,\n gasPrice: transaction.gasPrice ? BigInt(transaction.gasPrice) : undefined,\n maxFeePerBlobGas: transaction.maxFeePerBlobGas\n ? BigInt(transaction.maxFeePerBlobGas)\n : undefined,\n maxFeePerGas: transaction.maxFeePerGas\n ? BigInt(transaction.maxFeePerGas)\n : undefined,\n maxPriorityFeePerGas: transaction.maxPriorityFeePerGas\n ? BigInt(transaction.maxPriorityFeePerGas)\n : undefined,\n nonce: transaction.nonce ? hexToNumber(transaction.nonce) : undefined,\n to: transaction.to ? transaction.to : null,\n transactionIndex: transaction.transactionIndex\n ? Number(transaction.transactionIndex)\n : null,\n type: transaction.type\n ? (transactionType as any)[transaction.type]\n : undefined,\n typeHex: transaction.type ? transaction.type : undefined,\n value: transaction.value ? BigInt(transaction.value) : undefined,\n v: transaction.v ? BigInt(transaction.v) : undefined,\n } as Transaction\n\n if (transaction.authorizationList)\n transaction_.authorizationList = formatAuthorizationList(\n transaction.authorizationList,\n )\n\n transaction_.yParity = (() => {\n // If `yParity` is provided, we will use it.\n if (transaction.yParity) return Number(transaction.yParity)\n\n // If no `yParity` provided, try derive from `v`.\n if (typeof transaction_.v === 'bigint') {\n if (transaction_.v === 0n || transaction_.v === 27n) return 0\n if (transaction_.v === 1n || transaction_.v === 28n) return 1\n if (transaction_.v >= 35n) return transaction_.v % 2n === 0n ? 1 : 0\n }\n\n return undefined\n })()\n\n if (transaction_.type === 'legacy') {\n delete transaction_.accessList\n delete transaction_.maxFeePerBlobGas\n delete transaction_.maxFeePerGas\n delete transaction_.maxPriorityFeePerGas\n delete transaction_.yParity\n }\n if (transaction_.type === 'eip2930') {\n delete transaction_.maxFeePerBlobGas\n delete transaction_.maxFeePerGas\n delete transaction_.maxPriorityFeePerGas\n }\n if (transaction_.type === 'eip1559') {\n delete transaction_.maxFeePerBlobGas\n }\n return transaction_\n}\n\nexport type DefineTransactionErrorType = DefineFormatterErrorType | ErrorType\n\nexport const defineTransaction = /*#__PURE__*/ defineFormatter(\n 'transaction',\n formatTransaction,\n)\n\n//////////////////////////////////////////////////////////////////////////////\n\nfunction formatAuthorizationList(\n authorizationList: RpcAuthorizationList,\n): SignedAuthorizationList {\n return authorizationList.map((authorization) => ({\n contractAddress: (authorization as any).address,\n chainId: Number(authorization.chainId),\n nonce: Number(authorization.nonce),\n r: authorization.r,\n s: authorization.s,\n yParity: Number(authorization.yParity),\n })) as SignedAuthorizationList\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { Block, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ExtractChainFormatterExclude,\n ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcBlock } from '../../types/rpc.js'\nimport type { ExactPartial, Prettify } from '../../types/utils.js'\n\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\nimport { type FormattedTransaction, formatTransaction } from './transaction.js'\n\ntype BlockPendingDependencies = 'hash' | 'logsBloom' | 'nonce' | 'number'\n\nexport type FormattedBlock<\n chain extends Chain | undefined = undefined,\n includeTransactions extends boolean = boolean,\n blockTag extends BlockTag = BlockTag,\n _FormatterReturnType = ExtractChainFormatterReturnType<\n chain,\n 'block',\n Block<bigint, includeTransactions>\n >,\n _ExcludedPendingDependencies extends string = BlockPendingDependencies &\n ExtractChainFormatterExclude<chain, 'block'>,\n _Formatted = Omit<_FormatterReturnType, BlockPendingDependencies> & {\n [_key in _ExcludedPendingDependencies]: never\n } & Pick<\n Block<bigint, includeTransactions, blockTag>,\n BlockPendingDependencies\n >,\n _Transactions = includeTransactions extends true\n ? Prettify<FormattedTransaction<chain, blockTag>>[]\n : Hash[],\n> = Omit<_Formatted, 'transactions'> & {\n transactions: _Transactions\n}\n\nexport type FormatBlockErrorType = ErrorType\n\nexport function formatBlock(block: ExactPartial<RpcBlock>) {\n const transactions = (block.transactions ?? []).map((transaction) => {\n if (typeof transaction === 'string') return transaction\n return formatTransaction(transaction)\n })\n return {\n ...block,\n baseFeePerGas: block.baseFeePerGas ? BigInt(block.baseFeePerGas) : null,\n blobGasUsed: block.blobGasUsed ? BigInt(block.blobGasUsed) : undefined,\n difficulty: block.difficulty ? BigInt(block.difficulty) : undefined,\n excessBlobGas: block.excessBlobGas\n ? BigInt(block.excessBlobGas)\n : undefined,\n gasLimit: block.gasLimit ? BigInt(block.gasLimit) : undefined,\n gasUsed: block.gasUsed ? BigInt(block.gasUsed) : undefined,\n hash: block.hash ? block.hash : null,\n logsBloom: block.logsBloom ? block.logsBloom : null,\n nonce: block.nonce ? block.nonce : null,\n number: block.number ? BigInt(block.number) : null,\n size: block.size ? BigInt(block.size) : undefined,\n timestamp: block.timestamp ? BigInt(block.timestamp) : undefined,\n transactions,\n totalDifficulty: block.totalDifficulty\n ? BigInt(block.totalDifficulty)\n : null,\n } as Block\n}\n\nexport type DefineBlockErrorType = DefineFormatterErrorType | ErrorType\n\nexport const defineBlock = /*#__PURE__*/ defineFormatter('block', formatBlock)\n","import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from '../../errors/block.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcBlock } from '../../types/rpc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type FormattedBlock,\n formatBlock,\n} from '../../utils/formatters/block.js'\n\nexport type GetBlockParameters<\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n> = {\n /** Whether or not to include transaction data in the response. */\n includeTransactions?: includeTransactions | undefined\n} & (\n | {\n /** Hash of the block. */\n blockHash?: Hash | undefined\n blockNumber?: undefined\n blockTag?: undefined\n }\n | {\n blockHash?: undefined\n /** The block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockHash?: undefined\n blockNumber?: undefined\n /**\n * The block tag.\n * @default 'latest'\n */\n blockTag?: blockTag | BlockTag | undefined\n }\n)\n\nexport type GetBlockReturnType<\n chain extends Chain | undefined = undefined,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n> = Prettify<FormattedBlock<chain, includeTransactions, blockTag>>\n\nexport type GetBlockErrorType =\n | BlockNotFoundErrorType\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns information about a block at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlock\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods:\n * - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) for `blockNumber` & `blockTag`.\n * - Calls [`eth_getBlockByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash) for `blockHash`.\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockParameters}\n * @returns Information about the block. {@link GetBlockReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlock } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const block = await getBlock(client)\n */\nexport async function getBlock<\n chain extends Chain | undefined,\n account extends Account | undefined,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n>(\n client: Client<Transport, chain, account>,\n {\n blockHash,\n blockNumber,\n blockTag: blockTag_,\n includeTransactions: includeTransactions_,\n }: GetBlockParameters<includeTransactions, blockTag> = {},\n): Promise<GetBlockReturnType<chain, includeTransactions, blockTag>> {\n const blockTag = blockTag_ ?? 'latest'\n const includeTransactions = includeTransactions_ ?? false\n\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n let block: RpcBlock | null = null\n if (blockHash) {\n block = await client.request(\n {\n method: 'eth_getBlockByHash',\n params: [blockHash, includeTransactions],\n },\n { dedupe: true },\n )\n } else {\n block = await client.request(\n {\n method: 'eth_getBlockByNumber',\n params: [blockNumberHex || blockTag, includeTransactions],\n },\n { dedupe: Boolean(blockNumberHex) },\n )\n }\n\n if (!block) throw new BlockNotFoundError({ blockHash, blockNumber })\n\n const format = client.chain?.formatters?.block?.format || formatBlock\n return format(block)\n}\n","import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetGasPriceReturnType = bigint\n\nexport type GetGasPriceErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the current price of gas (in wei).\n *\n * - Docs: https://viem.sh/docs/actions/public/getGasPrice\n * - JSON-RPC Methods: [`eth_gasPrice`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gasprice)\n *\n * @param client - Client to use\n * @returns The gas price (in wei). {@link GetGasPriceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getGasPrice } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gasPrice = await getGasPrice(client)\n */\nexport async function getGasPrice<\n chain extends Chain | undefined,\n account extends Account | undefined,\n>(client: Client<Transport, chain, account>): Promise<GetGasPriceReturnType> {\n const gasPrice = await client.request({\n method: 'eth_gasPrice',\n })\n return BigInt(gasPrice)\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n} from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type { Chain, ChainFeesFnParameters } from '../../types/chain.js'\nimport type { GetChainParameter } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type HexToBigIntErrorType,\n hexToBigInt,\n} from '../../utils/encoding/fromHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { PrepareTransactionRequestParameters } from '../wallet/prepareTransactionRequest.js'\nimport { type GetBlockErrorType, getBlock } from './getBlock.js'\nimport { type GetGasPriceErrorType, getGasPrice } from './getGasPrice.js'\n\nexport type EstimateMaxPriorityFeePerGasParameters<\n chain extends Chain | undefined = Chain | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n> = GetChainParameter<chain, chainOverride>\n\nexport type EstimateMaxPriorityFeePerGasReturnType = bigint\n\nexport type EstimateMaxPriorityFeePerGasErrorType =\n | GetBlockErrorType\n | HexToBigIntErrorType\n | RequestErrorType\n | GetBlockErrorType\n | GetGasPriceErrorType\n | Eip1559FeesNotSupportedErrorType\n | ErrorType\n\n/**\n * Returns an estimate for the max priority fee per gas (in wei) for a\n * transaction to be likely included in the next block.\n * Defaults to [`chain.fees.defaultPriorityFee`](/docs/clients/chains#fees-defaultpriorityfee) if set.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateMaxPriorityFeePerGas\n *\n * @param client - Client to use\n * @returns An estimate (in wei) for the max priority fee per gas. {@link EstimateMaxPriorityFeePerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateMaxPriorityFeePerGas } from 'viem/actions'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const maxPriorityFeePerGas = await estimateMaxPriorityFeePerGas(client)\n * // 10000000n\n */\nexport async function estimateMaxPriorityFeePerGas<\n chain extends Chain | undefined,\n chainOverride extends Chain | undefined,\n>(\n client: Client<Transport, chain>,\n args?:\n | EstimateMaxPriorityFeePerGasParameters<chain, chainOverride>\n | undefined,\n): Promise<EstimateMaxPriorityFeePerGasReturnType> {\n return internal_estimateMaxPriorityFeePerGas(client, args as any)\n}\n\nexport async function internal_estimateMaxPriorityFeePerGas<\n chain extends Chain | undefined,\n chainOverride extends Chain | undefined,\n>(\n client: Client<Transport, chain>,\n args: EstimateMaxPriorityFeePerGasParameters<chain, chainOverride> & {\n block?: Block | undefined\n request?:\n | PrepareTransactionRequestParameters<\n chain,\n Account | undefined,\n chainOverride\n >\n | undefined\n },\n): Promise<EstimateMaxPriorityFeePerGasReturnType> {\n const { block: block_, chain = client.chain, request } = args || {}\n\n try {\n const maxPriorityFeePerGas =\n chain?.fees?.maxPriorityFeePerGas ?? chain?.fees?.defaultPriorityFee\n\n if (typeof maxPriorityFeePerGas === 'function') {\n const block =\n block_ || (await getAction(client, getBlock, 'getBlock')({}))\n const maxPriorityFeePerGas_ = await maxPriorityFeePerGas({\n block,\n client,\n request,\n } as ChainFeesFnParameters)\n if (maxPriorityFeePerGas_ === null) throw new Error()\n return maxPriorityFeePerGas_\n }\n\n if (typeof maxPriorityFeePerGas !== 'undefined') return maxPriorityFeePerGas\n\n const maxPriorityFeePerGasHex = await client.request({\n method: 'eth_maxPriorityFeePerGas',\n })\n return hexToBigInt(maxPriorityFeePerGasHex)\n } catch {\n // If the RPC Provider does not support `eth_maxPriorityFeePerGas`\n // fall back to calculating it manually via `gasPrice - baseFeePerGas`.\n // See: https://github.com/ethereum/pm/issues/328#:~:text=eth_maxPriorityFeePerGas%20after%20London%20will%20effectively%20return%20eth_gasPrice%20%2D%20baseFee\n const [block, gasPrice] = await Promise.all([\n block_\n ? Promise.resolve(block_)\n : getAction(client, getBlock, 'getBlock')({}),\n getAction(client, getGasPrice, 'getGasPrice')({}),\n ])\n\n if (typeof block.baseFeePerGas !== 'bigint')\n throw new Eip1559FeesNotSupportedError()\n\n const maxPriorityFeePerGas = gasPrice - block.baseFeePerGas\n\n if (maxPriorityFeePerGas < 0n) return 0n\n return maxPriorityFeePerGas\n }\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n} from '../../errors/fee.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type {\n Chain,\n ChainEstimateFeesPerGasFnParameters,\n ChainFeesFnParameters,\n GetChainParameter,\n} from '../../types/chain.js'\nimport type {\n FeeValuesEIP1559,\n FeeValuesLegacy,\n FeeValuesType,\n} from '../../types/fee.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { PrepareTransactionRequestParameters } from '../wallet/prepareTransactionRequest.js'\nimport {\n type EstimateMaxPriorityFeePerGasErrorType,\n internal_estimateMaxPriorityFeePerGas,\n} from './estimateMaxPriorityFeePerGas.js'\nimport { getBlock } from './getBlock.js'\nimport { type GetGasPriceErrorType, getGasPrice } from './getGasPrice.js'\n\nexport type EstimateFeesPerGasParameters<\n chain extends Chain | undefined = Chain | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n type extends FeeValuesType = FeeValuesType,\n> = {\n /**\n * The type of fee values to return.\n *\n * - `legacy`: Returns the legacy gas price.\n * - `eip1559`: Returns the max fee per gas and max priority fee per gas.\n *\n * @default 'eip1559'\n */\n type?: type | FeeValuesType | undefined\n} & GetChainParameter<chain, chainOverride>\n\nexport type EstimateFeesPerGasReturnType<\n type extends FeeValuesType = FeeValuesType,\n> =\n | (type extends 'legacy' ? FeeValuesLegacy : never)\n | (type extends 'eip1559' ? FeeValuesEIP1559 : never)\n\nexport type EstimateFeesPerGasErrorType =\n | BaseFeeScalarErrorType\n | EstimateMaxPriorityFeePerGasErrorType\n | GetGasPriceErrorType\n | Eip1559FeesNotSupportedErrorType\n | ErrorType\n\n/**\n * Returns an estimate for the fees per gas (in wei) for a\n * transaction to be likely included in the next block.\n * Defaults to [`chain.fees.estimateFeesPerGas`](/docs/clients/chains#fees-estimatefeespergas) if set.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateFeesPerGas\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateFeesPerGasParameters}\n * @returns An estimate (in wei) for the fees per gas. {@link EstimateFeesPerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateFeesPerGas } from 'viem/actions'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const maxPriorityFeePerGas = await estimateFeesPerGas(client)\n * // { maxFeePerGas: ..., maxPriorityFeePerGas: ... }\n */\nexport async function estimateFeesPerGas<\n chain extends Chain | undefined,\n chainOverride extends Chain | undefined,\n type extends FeeValuesType = 'eip1559',\n>(\n client: Client<Transport, chain>,\n args?: EstimateFeesPerGasParameters<chain, chainOverride, type> | undefined,\n): Promise<EstimateFeesPerGasReturnType<type>> {\n return internal_estimateFeesPerGas(client, args as any)\n}\n\nexport async function internal_estimateFeesPerGas<\n chain extends Chain | undefined,\n chainOverride extends Chain | undefined,\n type extends FeeValuesType = 'eip1559',\n>(\n client: Client<Transport, chain>,\n args: EstimateFeesPerGasParameters<chain, chainOverride, type> & {\n block?: Block | undefined\n request?: PrepareTransactionRequestParameters<Chain, Account> | undefined\n },\n): Promise<EstimateFeesPerGasReturnType<type>> {\n const {\n block: block_,\n chain = client.chain,\n request,\n type = 'eip1559',\n } = args || {}\n\n const baseFeeMultiplier = await (async () => {\n if (typeof chain?.fees?.baseFeeMultiplier === 'function')\n return chain.fees.baseFeeMultiplier({\n block: block_ as Block,\n client,\n request,\n } as ChainFeesFnParameters)\n return chain?.fees?.baseFeeMultiplier ?? 1.2\n })()\n if (baseFeeMultiplier < 1) throw new BaseFeeScalarError()\n\n const decimals = baseFeeMultiplier.toString().split('.')[1]?.length ?? 0\n const denominator = 10 ** decimals\n const multiply = (base: bigint) =>\n (base * BigInt(Math.ceil(baseFeeMultiplier * denominator))) /\n BigInt(denominator)\n\n const block = block_\n ? block_\n : await getAction(client, getBlock, 'getBlock')({})\n\n if (typeof chain?.fees?.estimateFeesPerGas === 'function') {\n const fees = (await chain.fees.estimateFeesPerGas({\n block: block_ as Block,\n client,\n multiply,\n request,\n type,\n } as ChainEstimateFeesPerGasFnParameters)) as unknown as EstimateFeesPerGasReturnType<type>\n\n if (fees !== null) return fees\n }\n\n if (type === 'eip1559') {\n if (typeof block.baseFeePerGas !== 'bigint')\n throw new Eip1559FeesNotSupportedError()\n\n const maxPriorityFeePerGas =\n typeof request?.maxPriorityFeePerGas === 'bigint'\n ? request.maxPriorityFeePerGas\n : await internal_estimateMaxPriorityFeePerGas(\n client as Client<Transport, Chain>,\n {\n block: block as Block,\n chain,\n request,\n },\n )\n\n const baseFeePerGas = multiply(block.baseFeePerGas)\n const maxFeePerGas =\n request?.maxFeePerGas ?? baseFeePerGas + maxPriorityFeePerGas\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n } as EstimateFeesPerGasReturnType<type>\n }\n\n const gasPrice =\n request?.gasPrice ??\n multiply(await getAction(client, getGasPrice, 'getGasPrice')({}))\n return {\n gasPrice,\n } as EstimateFeesPerGasReturnType<type>\n}\n","import type { Address } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type HexToNumberErrorType,\n hexToNumber,\n} from '../../utils/encoding/fromHex.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetTransactionCountParameters = {\n /** The account address. */\n address: Address\n} & (\n | {\n /** The block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /** The block tag. Defaults to 'latest'. */\n blockTag?: BlockTag | undefined\n }\n)\nexport type GetTransactionCountReturnType = number\n\nexport type GetTransactionCountErrorType =\n | RequestErrorType\n | NumberToHexErrorType\n | HexToNumberErrorType\n | ErrorType\n\n/**\n * Returns the number of [Transactions](https://viem.sh/docs/glossary/terms#transaction) an Account has sent.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionCount\n * - JSON-RPC Methods: [`eth_getTransactionCount`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionCountParameters}\n * @returns The number of transactions an account has sent. {@link GetTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionCount } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionCount = await getTransactionCount(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function getTransactionCount<\n chain extends Chain | undefined,\n account extends Account | undefined,\n>(\n client: Client<Transport, chain, account>,\n { address, blockTag = 'latest', blockNumber }: GetTransactionCountParameters,\n): Promise<GetTransactionCountReturnType> {\n const count = await client.request(\n {\n method: 'eth_getTransactionCount',\n params: [address, blockNumber ? numberToHex(blockNumber) : blockTag],\n },\n { dedupe: Boolean(blockNumber) },\n )\n return hexToNumber(count)\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type BlobsToCommitmentsParameters<\n blobs extends readonly ByteArray[] | readonly Hex[] =\n | readonly ByteArray[]\n | readonly Hex[],\n to extends To | undefined = undefined,\n> = {\n /** Blobs to transform into commitments. */\n blobs: blobs | readonly ByteArray[] | readonly Hex[]\n /** KZG implementation. */\n kzg: Pick<Kzg, 'blobToKzgCommitment'>\n /** Return type. */\n to?: to | To | undefined\n}\n\nexport type BlobsToCommitmentsReturnType<to extends To> =\n | (to extends 'bytes' ? readonly ByteArray[] : never)\n | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type BlobsToCommitmentsErrorType =\n | HexToBytesErrorType\n | BytesToHexErrorType\n | ErrorType\n\n/**\n * Compute commitments from a list of blobs.\n *\n * @example\n * ```ts\n * import { blobsToCommitments, toBlobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * ```\n */\nexport function blobsToCommitments<\n const blobs extends readonly ByteArray[] | readonly Hex[],\n to extends To =\n | (blobs extends readonly Hex[] ? 'hex' : never)\n | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n parameters: BlobsToCommitmentsParameters<blobs, to>,\n): BlobsToCommitmentsReturnType<to> {\n const { kzg } = parameters\n\n const to =\n parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes')\n const blobs = (\n typeof parameters.blobs[0] === 'string'\n ? parameters.blobs.map((x) => hexToBytes(x as any))\n : parameters.blobs\n ) as ByteArray[]\n\n const commitments: ByteArray[] = []\n for (const blob of blobs)\n commitments.push(Uint8Array.from(kzg.blobToKzgCommitment(blob)))\n\n return (to === 'bytes'\n ? commitments\n : commitments.map((x) =>\n bytesToHex(x),\n )) as {} as BlobsToCommitmentsReturnType<to>\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type blobsToProofsParameters<\n blobs extends readonly ByteArray[] | readonly Hex[],\n commitments extends readonly ByteArray[] | readonly Hex[],\n to extends To =\n | (blobs extends readonly Hex[] ? 'hex' : never)\n | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n ///\n _blobsType =\n | (blobs extends readonly Hex[] ? readonly Hex[] : never)\n | (blobs extends readonly ByteArray[] ? readonly ByteArray[] : never),\n> = {\n /** Blobs to transform into proofs. */\n blobs: blobs\n /** Commitments for the blobs. */\n commitments: commitments &\n (commitments extends _blobsType\n ? {}\n : `commitments must be the same type as blobs`)\n /** KZG implementation. */\n kzg: Pick<Kzg, 'computeBlobKzgProof'>\n /** Return type. */\n to?: to | To | undefined\n}\n\nexport type blobsToProofsReturnType<to extends To> =\n | (to extends 'bytes' ? ByteArray[] : never)\n | (to extends 'hex' ? Hex[] : never)\n\nexport type blobsToProofsErrorType =\n | BytesToHexErrorType\n | HexToBytesErrorType\n | ErrorType\n\n/**\n * Compute the proofs for a list of blobs and their commitments.\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const proofs = blobsToProofs({ blobs, commitments, kzg })\n * ```\n */\nexport function blobsToProofs<\n const blobs extends readonly ByteArray[] | readonly Hex[],\n const commitments extends readonly ByteArray[] | readonly Hex[],\n to extends To =\n | (blobs extends readonly Hex[] ? 'hex' : never)\n | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n parameters: blobsToProofsParameters<blobs, commitments, to>,\n): blobsToProofsReturnType<to> {\n const { kzg } = parameters\n\n const to =\n parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes')\n\n const blobs = (\n typeof parameters.blobs[0] === 'string'\n ? parameters.blobs.map((x) => hexToBytes(x as any))\n : parameters.blobs\n ) as ByteArray[]\n const commitments = (\n typeof parameters.commitments[0] === 'string'\n ? parameters.commitments.map((x) => hexToBytes(x as any))\n : parameters.commitments\n ) as ByteArray[]\n\n const proofs: ByteArray[] = []\n for (let i = 0; i < blobs.length; i++) {\n const blob = blobs[i]\n const commitment = commitments[i]\n proofs.push(Uint8Array.from(kzg.computeBlobKzgProof(blob, commitment)))\n }\n\n return (to === 'bytes'\n ? proofs\n : proofs.map((x) => bytesToHex(x))) as {} as blobsToProofsReturnType<to>\n}\n","import { aexists, aoutput } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n/**\n * Polyfill for Safari 14\n */\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/**\n * Choice: a ? b : c\n */\nexport const Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n\n/**\n * Majority function, true if any two inputs is true\n */\nexport const Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(\n readonly blockLen: number,\n public outputLen: number,\n readonly padOffset: number,\n readonly isLE: boolean\n ) {\n super();\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Input): this {\n aexists(this);\n const { view, buffer, blockLen } = 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 // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n}\n","import { HashMD, Chi, Maj } from './_md.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per late 2024.\n\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n// Initial state:\n// first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD<SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n A = SHA256_IV[0] | 0;\n B = SHA256_IV[1] | 0;\n C = SHA256_IV[2] | 0;\n D = SHA256_IV[3] | 0;\n E = SHA256_IV[4] | 0;\n F = SHA256_IV[5] | 0;\n G = SHA256_IV[6] | 0;\n H = SHA256_IV[7] | 0;\n\n constructor() {\n super(64, 32, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean() {\n SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n A = 0xc1059ed8 | 0;\n B = 0x367cd507 | 0;\n C = 0x3070dd17 | 0;\n D = 0xf70e5939 | 0;\n E = 0xffc00b31 | 0;\n F = 0x68581511 | 0;\n G = 0x64f98fa7 | 0;\n H = 0xbefa4fa4 | 0;\n constructor() {\n super();\n this.outputLen = 28;\n }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\n/**\n * SHA2-224 hash function\n */\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n","import { sha256 as noble_sha256 } from '@noble/hashes/sha256'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\nimport { type ToBytesErrorType, toBytes } from '../encoding/toBytes.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type Sha256Hash<to extends To> =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type Sha256ErrorType =\n | IsHexErrorType\n | ToBytesErrorType\n | ToHexErrorType\n | ErrorType\n\nexport function sha256<to extends To = 'hex'>(\n value: Hex | ByteArray,\n to_?: to | undefined,\n): Sha256Hash<to> {\n const to = to_ || 'hex'\n const bytes = noble_sha256(\n isHex(value, { strict: false }) ? toBytes(value) : value,\n )\n if (to === 'bytes') return bytes as Sha256Hash<to>\n return toHex(bytes) as Sha256Hash<to>\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Sha256ErrorType, sha256 } from '../hash/sha256.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type CommitmentToVersionedHashParameters<\n commitment extends Uint8Array | Hex = Uint8Array | Hex,\n to extends To | undefined = undefined,\n> = {\n /** Commitment from blob. */\n commitment: commitment | Uint8Array | Hex\n /** Return type. */\n to?: to | To | undefined\n /** Version to tag onto the hash. */\n version?: number | undefined\n}\n\nexport type CommitmentToVersionedHashReturnType<to extends To> =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type CommitmentToVersionedHashErrorType =\n | Sha256ErrorType\n | BytesToHexErrorType\n | ErrorType\n\n/**\n * Transform a commitment to it's versioned hash.\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * commitmentToVersionedHash,\n * toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const [commitment] = blobsToCommitments({ blobs, kzg })\n * const versionedHash = commitmentToVersionedHash({ commitment })\n * ```\n */\nexport function commitmentToVersionedHash<\n const commitment extends Hex | ByteArray,\n to extends To =\n | (commitment extends Hex ? 'hex' : never)\n | (commitment extends ByteArray ? 'bytes' : never),\n>(\n parameters: CommitmentToVersionedHashParameters<commitment, to>,\n): CommitmentToVersionedHashReturnType<to> {\n const { commitment, version = 1 } = parameters\n const to = parameters.to ?? (typeof commitment === 'string' ? 'hex' : 'bytes')\n\n const versionedHash = sha256(commitment, 'bytes')\n versionedHash.set([version], 0)\n return (\n to === 'bytes' ? versionedHash : bytesToHex(versionedHash)\n ) as CommitmentToVersionedHashReturnType<to>\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport {\n type CommitmentToVersionedHashErrorType,\n commitmentToVersionedHash,\n} from './commitmentToVersionedHash.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type CommitmentsToVersionedHashesParameters<\n commitments extends readonly Uint8Array[] | readonly Hex[] =\n | readonly Uint8Array[]\n | readonly Hex[],\n to extends To | undefined = undefined,\n> = {\n /** Commitments from blobs. */\n commitments: commitments | readonly Uint8Array[] | readonly Hex[]\n /** Return type. */\n to?: to | To | undefined\n /** Version to tag onto the hashes. */\n version?: number | undefined\n}\n\nexport type CommitmentsToVersionedHashesReturnType<to extends To> =\n | (to extends 'bytes' ? readonly ByteArray[] : never)\n | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type CommitmentsToVersionedHashesErrorType =\n | CommitmentToVersionedHashErrorType\n | ErrorType\n\n/**\n * Transform a list of commitments to their versioned hashes.\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * commitmentsToVersionedHashes,\n * toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const versionedHashes = commitmentsToVersionedHashes({ commitments })\n * ```\n */\nexport function commitmentsToVersionedHashes<\n const commitments extends readonly Uint8Array[] | readonly Hex[],\n to extends To =\n | (commitments extends readonly Hex[] ? 'hex' : never)\n | (commitments extends readonly ByteArray[] ? 'bytes' : never),\n>(\n parameters: CommitmentsToVersionedHashesParameters<commitments, to>,\n): CommitmentsToVersionedHashesReturnType<to> {\n const { commitments, version } = parameters\n\n const to =\n parameters.to ?? (typeof commitments[0] === 'string' ? 'hex' : 'bytes')\n\n const hashes: Uint8Array[] | Hex[] = []\n for (const commitment of commitments) {\n hashes.push(\n commitmentToVersionedHash({\n commitment,\n to,\n version,\n }) as any,\n )\n }\n return hashes as any\n}\n","// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md#parameters\n\n/** Blob limit per transaction. */\nconst blobsPerTransaction = 6\n\n/** The number of bytes in a BLS scalar field element. */\nexport const bytesPerFieldElement = 32\n\n/** The number of field elements in a blob. */\nexport const fieldElementsPerBlob = 4096\n\n/** The number of bytes in a blob. */\nexport const bytesPerBlob = bytesPerFieldElement * fieldElementsPerBlob\n\n/** Blob bytes limit per transaction. */\nexport const maxBytesPerTransaction =\n bytesPerBlob * blobsPerTransaction -\n // terminator byte (0x80).\n 1 -\n // zero byte (0x00) appended to each field element.\n 1 * fieldElementsPerBlob * blobsPerTransaction\n","import { versionedHashVersionKzg } from '../constants/kzg.js'\nimport type { Hash } from '../types/misc.js'\n\nimport { BaseError } from './base.js'\n\nexport type BlobSizeTooLargeErrorType = BlobSizeTooLargeError & {\n name: 'BlobSizeTooLargeError'\n}\nexport class BlobSizeTooLargeError extends BaseError {\n constructor({ maxSize, size }: { maxSize: number; size: number }) {\n super('Blob size is too large.', {\n metaMessages: [`Max: ${maxSize} bytes`, `Given: ${size} bytes`],\n name: 'BlobSizeTooLargeError',\n })\n }\n}\n\nexport type EmptyBlobErrorType = EmptyBlobError & {\n name: 'EmptyBlobError'\n}\nexport class EmptyBlobError extends BaseError {\n constructor() {\n super('Blob data must not be empty.', { name: 'EmptyBlobError' })\n }\n}\n\nexport type InvalidVersionedHashSizeErrorType =\n InvalidVersionedHashSizeError & {\n name: 'InvalidVersionedHashSizeError'\n }\nexport class InvalidVersionedHashSizeError extends BaseError {\n constructor({\n hash,\n size,\n }: {\n hash: Hash\n size: number\n }) {\n super(`Versioned hash \"${hash}\" size is invalid.`, {\n metaMessages: ['Expected: 32', `Received: ${size}`],\n name: 'InvalidVersionedHashSizeError',\n })\n }\n}\n\nexport type InvalidVersionedHashVersionErrorType =\n InvalidVersionedHashVersionError & {\n name: 'InvalidVersionedHashVersionError'\n }\nexport class InvalidVersionedHashVersionError extends BaseError {\n constructor({\n hash,\n version,\n }: {\n hash: Hash\n version: number\n }) {\n super(`Versioned hash \"${hash}\" version is invalid.`, {\n metaMessages: [\n `Expected: ${versionedHashVersionKzg}`,\n `Received: ${version}`,\n ],\n name: 'InvalidVersionedHashVersionError',\n })\n }\n}\n","import {\n bytesPerBlob,\n bytesPerFieldElement,\n fieldElementsPerBlob,\n maxBytesPerTransaction,\n} from '../../constants/blob.js'\nimport {\n BlobSizeTooLargeError,\n type BlobSizeTooLargeErrorType,\n EmptyBlobError,\n type EmptyBlobErrorType,\n} from '../../errors/blob.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { type CreateCursorErrorType, createCursor } from '../cursor.js'\nimport { type SizeErrorType, size } from '../data/size.js'\nimport { type HexToBytesErrorType, hexToBytes } from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type ToBlobsParameters<\n data extends Hex | ByteArray = Hex | ByteArray,\n to extends To | undefined = undefined,\n> = {\n /** Data to transform to a blob. */\n data: data | Hex | ByteArray\n /** Return type. */\n to?: to | To | undefined\n}\n\nexport type ToBlobsReturnType<to extends To> =\n | (to extends 'bytes' ? readonly ByteArray[] : never)\n | (to extends 'hex' ? readonly Hex[] : never)\n\nexport type ToBlobsErrorType =\n | BlobSizeTooLargeErrorType\n | BytesToHexErrorType\n | CreateCursorErrorType\n | EmptyBlobErrorType\n | HexToBytesErrorType\n | SizeErrorType\n | ErrorType\n\n/**\n * Transforms arbitrary data to blobs.\n *\n * @example\n * ```ts\n * import { toBlobs, stringToHex } from 'viem'\n *\n * const blobs = toBlobs({ data: stringToHex('hello world') })\n * ```\n */\nexport function toBlobs<\n const data extends Hex | ByteArray,\n to extends To =\n | (data extends Hex ? 'hex' : never)\n | (data extends ByteArray ? 'bytes' : never),\n>(parameters: ToBlobsParameters<data, to>): ToBlobsReturnType<to> {\n const to =\n parameters.to ?? (typeof parameters.data === 'string' ? 'hex' : 'bytes')\n const data = (\n typeof parameters.data === 'string'\n ? hexToBytes(parameters.data)\n : parameters.data\n ) as ByteArray\n\n const size_ = size(data)\n if (!size_) throw new EmptyBlobError()\n if (size_ > maxBytesPerTransaction)\n throw new BlobSizeTooLargeError({\n maxSize: maxBytesPerTransaction,\n size: size_,\n })\n\n const blobs = []\n\n let active = true\n let position = 0\n while (active) {\n const blob = createCursor(new Uint8Array(bytesPerBlob))\n\n let size = 0\n while (size < fieldElementsPerBlob) {\n const bytes = data.slice(position, position + (bytesPerFieldElement - 1))\n\n // Push a zero byte so the field element doesn't overflow the BLS modulus.\n blob.pushByte(0x00)\n\n // Push the current segment of data bytes.\n blob.pushBytes(bytes)\n\n // If we detect that the current segment of data bytes is less than 31 bytes,\n // we can stop processing and push a terminator byte to indicate the end of the blob.\n if (bytes.length < 31) {\n blob.pushByte(0x80)\n active = false\n break\n }\n\n size++\n position += 31\n }\n\n blobs.push(blob)\n }\n\n return (\n to === 'bytes'\n ? blobs.map((x) => x.bytes)\n : blobs.map((x) => bytesToHex(x.bytes))\n ) as any\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { BlobSidecars } from '../../types/eip4844.js'\nimport type { Kzg } from '../../types/kzg.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n type BlobsToCommitmentsErrorType,\n blobsToCommitments,\n} from './blobsToCommitments.js'\nimport { blobsToProofs, type blobsToProofsErrorType } from './blobsToProofs.js'\nimport { type ToBlobsErrorType, toBlobs } from './toBlobs.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type ToBlobSidecarsParameters<\n data extends Hex | ByteArray | undefined = undefined,\n blobs extends readonly Hex[] | readonly ByteArray[] | undefined = undefined,\n to extends To =\n | (blobs extends readonly Hex[] ? 'hex' : never)\n | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n ///\n _blobsType =\n | (blobs extends readonly Hex[] ? readonly Hex[] : never)\n | (blobs extends readonly ByteArray[] ? readonly ByteArray[] : never),\n> = {\n /** Return type. */\n to?: to | To | undefined\n} & OneOf<\n | {\n /** Data to transform into blobs. */\n data: data | Hex | ByteArray\n /** KZG implementation. */\n kzg: Kzg\n }\n | {\n /** Blobs. */\n blobs: blobs | readonly Hex[] | readonly ByteArray[]\n /** Commitment for each blob. */\n commitments: _blobsType | readonly Hex[] | readonly ByteArray[]\n /** Proof for each blob. */\n proofs: _blobsType | readonly Hex[] | readonly ByteArray[]\n }\n>\n\nexport type ToBlobSidecarsReturnType<to extends To> =\n | (to extends 'bytes' ? BlobSidecars<ByteArray> : never)\n | (to extends 'hex' ? BlobSidecars<Hex> : never)\n\nexport type ToBlobSidecarsErrorType =\n | BlobsToCommitmentsErrorType\n | ToBlobsErrorType\n | blobsToProofsErrorType\n | ErrorType\n\n/**\n * Transforms arbitrary data (or blobs, commitments, & proofs) into a sidecar array.\n *\n * @example\n * ```ts\n * import { toBlobSidecars, stringToHex } from 'viem'\n *\n * const sidecars = toBlobSidecars({ data: stringToHex('hello world') })\n * ```\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * toBlobs,\n * blobsToProofs,\n * toBlobSidecars,\n * stringToHex\n * } from 'viem'\n *\n * const blobs = toBlobs({ data: stringToHex('hello world') })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const proofs = blobsToProofs({ blobs, commitments, kzg })\n *\n * const sidecars = toBlobSidecars({ blobs, commitments, proofs })\n * ```\n */\nexport function toBlobSidecars<\n const data extends Hex | ByteArray | undefined = undefined,\n const blobs extends\n | readonly Hex[]\n | readonly ByteArray[]\n | undefined = undefined,\n to extends To =\n | (data extends Hex ? 'hex' : never)\n | (data extends ByteArray ? 'bytes' : never)\n | (blobs extends readonly Hex[] ? 'hex' : never)\n | (blobs extends readonly ByteArray[] ? 'bytes' : never),\n>(\n parameters: ToBlobSidecarsParameters<data, blobs, to>,\n): ToBlobSidecarsReturnType<to> {\n const { data, kzg, to } = parameters\n const blobs = parameters.blobs ?? toBlobs({ data: data!, to })\n const commitments =\n parameters.commitments ?? blobsToCommitments({ blobs, kzg: kzg!, to })\n const proofs =\n parameters.proofs ?? blobsToProofs({ blobs, commitments, kzg: kzg!, to })\n\n const sidecars: BlobSidecars = []\n for (let i = 0; i < blobs.length; i++)\n sidecars.push({\n blob: blobs[i],\n commitment: commitments[i],\n proof: proofs[i],\n })\n\n return sidecars as ToBlobSidecarsReturnType<to>\n}\n","import {\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n} from '../../index.js'\nimport type {\n TransactionRequestGeneric,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n} from '../../types/transaction.js'\nimport type { Assign, ExactPartial, IsNever, OneOf } from '../../types/utils.js'\n\nexport type GetTransactionType<\n transaction extends OneOf<\n TransactionSerializableGeneric | TransactionRequestGeneric\n > = TransactionSerializableGeneric,\n result =\n | (transaction extends LegacyProperties ? 'legacy' : never)\n | (transaction extends EIP1559Properties ? 'eip1559' : never)\n | (transaction extends EIP2930Properties ? 'eip2930' : never)\n | (transaction extends EIP4844Properties ? 'eip4844' : never)\n | (transaction extends EIP7702Properties ? 'eip7702' : never)\n | (transaction['type'] extends TransactionSerializableGeneric['type']\n ? Extract<transaction['type'], string>\n : never),\n> = IsNever<keyof transaction> extends true\n ? string\n : IsNever<result> extends false\n ? result\n : string\n\nexport type GetTransactionTypeErrorType =\n | InvalidSerializableTransactionErrorType\n | ErrorType\n\nexport function getTransactionType<\n const transaction extends OneOf<\n TransactionSerializableGeneric | TransactionRequestGeneric\n >,\n>(transaction: transaction): GetTransactionType<transaction> {\n if (transaction.type)\n return transaction.type as GetTransactionType<transaction>\n\n if (typeof transaction.authorizationList !== 'undefined')\n return 'eip7702' as any\n\n if (\n typeof transaction.blobs !== 'undefined' ||\n typeof transaction.blobVersionedHashes !== 'undefined' ||\n typeof transaction.maxFeePerBlobGas !== 'undefined' ||\n typeof transaction.sidecars !== 'undefined'\n )\n return 'eip4844' as any\n\n if (\n typeof transaction.maxFeePerGas !== 'undefined' ||\n typeof transaction.maxPriorityFeePerGas !== 'undefined'\n ) {\n return 'eip1559' as any\n }\n\n if (typeof transaction.gasPrice !== 'undefined') {\n if (typeof transaction.accessList !== 'undefined') return 'eip2930' as any\n return 'legacy' as any\n }\n\n throw new InvalidSerializableTransactionError({ transaction })\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////\n// Types\n\ntype BaseProperties = {\n accessList?: undefined\n authorizationList?: undefined\n blobs?: undefined\n blobVersionedHashes?: undefined\n gasPrice?: undefined\n maxFeePerBlobGas?: undefined\n maxFeePerGas?: undefined\n maxPriorityFeePerGas?: undefined\n sidecars?: undefined\n}\n\ntype LegacyProperties = Assign<BaseProperties, FeeValuesLegacy>\ntype EIP1559Properties = Assign<\n BaseProperties,\n OneOf<\n | {\n maxFeePerGas: FeeValuesEIP1559['maxFeePerGas']\n }\n | {\n maxPriorityFeePerGas: FeeValuesEIP1559['maxPriorityFeePerGas']\n },\n FeeValuesEIP1559\n > & {\n accessList?: TransactionSerializableEIP2930['accessList'] | undefined\n }\n>\ntype EIP2930Properties = Assign<\n ExactPartial<LegacyProperties>,\n {\n accessList: TransactionSerializableEIP2930['accessList']\n }\n>\ntype EIP4844Properties = Assign<\n ExactPartial<EIP1559Properties>,\n ExactPartial<FeeValuesEIP4844> &\n OneOf<\n | {\n blobs: TransactionSerializableEIP4844['blobs']\n }\n | {\n blobVersionedHashes: TransactionSerializableEIP4844['blobVersionedHashes']\n }\n | {\n sidecars: TransactionSerializableEIP4844['sidecars']\n },\n TransactionSerializableEIP4844\n >\n>\ntype EIP7702Properties = Assign<\n ExactPartial<EIP1559Properties>,\n {\n authorizationList: TransactionSerializableEIP7702['authorizationList']\n }\n>\n","import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type HexToNumberErrorType,\n hexToNumber,\n} from '../../utils/encoding/fromHex.js'\n\nexport type GetChainIdReturnType = number\n\nexport type GetChainIdErrorType =\n | HexToNumberErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns the chain ID associated with the current network.\n *\n * - Docs: https://viem.sh/docs/actions/public/getChainId\n * - JSON-RPC Methods: [`eth_chainId`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_chainid)\n *\n * @param client - Client to use\n * @returns The current chain ID. {@link GetChainIdReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getChainId } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const chainId = await getChainId(client)\n * // 1\n */\nexport async function getChainId<\n chain extends Chain | undefined,\n account extends Account | undefined,\n>(client: Client<Transport, chain, account>): Promise<GetChainIdReturnType> {\n const chainIdHex = await client.request(\n {\n method: 'eth_chainId',\n },\n { dedupe: true },\n )\n return hexToNumber(chainIdHex)\n}\n","import type { Address } from 'abitype'\nimport type { Account } from '../../accounts/types.js'\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport {\n type EstimateFeesPerGasErrorType,\n internal_estimateFeesPerGas,\n} from '../../actions/public/estimateFeesPerGas.js'\nimport {\n type EstimateGasErrorType,\n type EstimateGasParameters,\n estimateGas,\n} from '../../actions/public/estimateGas.js'\nimport {\n type GetBlockErrorType,\n getBlock as getBlock_,\n} from '../../actions/public/getBlock.js'\nimport {\n type GetTransactionCountErrorType,\n getTransactionCount,\n} from '../../actions/public/getTransactionCount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { AccountNotFoundErrorType } from '../../errors/account.js'\nimport {\n Eip1559FeesNotSupportedError,\n MaxFeePerGasTooLowError,\n} from '../../errors/fee.js'\nimport type { DeriveAccount, GetAccountParameter } from '../../types/account.js'\nimport type { Block } from '../../types/block.js'\nimport type { Chain, DeriveChain } from '../../types/chain.js'\nimport type { GetChainParameter } from '../../types/chain.js'\nimport type { GetTransactionRequestKzgParameter } from '../../types/kzg.js'\nimport type {\n TransactionRequest,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestLegacy,\n TransactionSerializable,\n} from '../../types/transaction.js'\nimport type {\n ExactPartial,\n IsNever,\n Prettify,\n UnionOmit,\n UnionRequiredBy,\n} from '../../types/utils.js'\nimport { blobsToCommitments } from '../../utils/blob/blobsToCommitments.js'\nimport { blobsToProofs } from '../../utils/blob/blobsToProofs.js'\nimport { commitmentsToVersionedHashes } from '../../utils/blob/commitmentsToVersionedHashes.js'\nimport { toBlobSidecars } from '../../utils/blob/toBlobSidecars.js'\nimport type { FormattedTransactionRequest } from '../../utils/formatters/transactionRequest.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { NonceManager } from '../../utils/nonceManager.js'\nimport {\n type AssertRequestErrorType,\n type AssertRequestParameters,\n assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport {\n type GetTransactionType,\n getTransactionType,\n} from '../../utils/transaction/getTransactionType.js'\nimport { getChainId as getChainId_ } from '../public/getChainId.js'\n\nexport const defaultParameters = [\n 'blobVersionedHashes',\n 'chainId',\n 'fees',\n 'gas',\n 'nonce',\n 'type',\n] as const\n\nexport type PrepareTransactionRequestParameterType =\n | 'blobVersionedHashes'\n | 'chainId'\n | 'fees'\n | 'gas'\n | 'nonce'\n | 'sidecars'\n | 'type'\ntype ParameterTypeToParameters<\n parameterType extends PrepareTransactionRequestParameterType,\n> = parameterType extends 'fees'\n ? 'maxFeePerGas' | 'maxPriorityFeePerGas' | 'gasPrice'\n : parameterType\n\nexport type PrepareTransactionRequestRequest<\n chain extends Chain | undefined = Chain | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n ///\n _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'> &\n GetTransactionRequestKzgParameter & {\n /**\n * Nonce manager to use for the transaction request.\n */\n nonceManager?: NonceManager | undefined\n /**\n * Parameters to prepare for the transaction request.\n *\n * @default ['blobVersionedHashes', 'chainId', 'fees', 'gas', 'nonce', 'type']\n */\n parameters?: readonly PrepareTransactionRequestParameterType[] | undefined\n }\n\nexport type PrepareTransactionRequestParameters<\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n accountOverride extends Account | Address | undefined =\n | Account\n | Address\n | undefined,\n request extends PrepareTransactionRequestRequest<\n chain,\n chainOverride\n > = PrepareTransactionRequestRequest<chain, chainOverride>,\n> = request &\n GetAccountParameter<account, accountOverride, false, true> &\n GetChainParameter<chain, chainOverride> &\n GetTransactionRequestKzgParameter<request> & { chainId?: number | undefined }\n\nexport type PrepareTransactionRequestReturnType<\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n accountOverride extends Account | Address | undefined =\n | Account\n | Address\n | undefined,\n request extends PrepareTransactionRequestRequest<\n chain,\n chainOverride\n > = PrepareTransactionRequestRequest<chain, chainOverride>,\n ///\n _derivedAccount extends Account | Address | undefined = DeriveAccount<\n account,\n accountOverride\n >,\n _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n _transactionType = request['type'] extends string | undefined\n ? request['type']\n : GetTransactionType<request> extends 'legacy'\n ? unknown\n : GetTransactionType<request>,\n _transactionRequest extends TransactionRequest =\n | (_transactionType extends 'legacy' ? TransactionRequestLegacy : never)\n | (_transactionType extends 'eip1559' ? TransactionRequestEIP1559 : never)\n | (_transactionType extends 'eip2930' ? TransactionRequestEIP2930 : never)\n | (_transactionType extends 'eip4844' ? TransactionRequestEIP4844 : never)\n | (_transactionType extends 'eip7702' ? TransactionRequestEIP7702 : never),\n> = Prettify<\n UnionRequiredBy<\n Extract<\n UnionOmit<FormattedTransactionRequest<_derivedChain>, 'from'> &\n (_derivedChain extends Chain\n ? { chain: _derivedChain }\n : { chain?: undefined }) &\n (_derivedAccount extends Account\n ? { account: _derivedAccount; from: Address }\n : { account?: undefined; from?: undefined }),\n IsNever<_transactionRequest> extends true\n ? unknown\n : ExactPartial<_transactionRequest>\n > & { chainId?: number | undefined },\n ParameterTypeToParameters<\n request['parameters'] extends readonly PrepareTransactionRequestParameterType[]\n ? request['parameters'][number]\n : (typeof defaultParameters)[number]\n >\n > &\n (unknown extends request['kzg'] ? {} : Pick<request, 'kzg'>)\n>\n\nexport type PrepareTransactionRequestErrorType =\n | AccountNotFoundErrorType\n | AssertRequestErrorType\n | ParseAccountErrorType\n | GetBlockErrorType\n | GetTransactionCountErrorType\n | EstimateGasErrorType\n | EstimateFeesPerGasErrorType\n\n/**\n * Prepares a transaction request for signing.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest\n *\n * @param args - {@link PrepareTransactionRequestParameters}\n * @returns The transaction request. {@link PrepareTransactionRequestReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { prepareTransactionRequest } from 'viem/actions'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const request = await prepareTransactionRequest(client, {\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x0000000000000000000000000000000000000000',\n * value: 1n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { prepareTransactionRequest } from 'viem/actions'\n *\n * const client = createWalletClient({\n * account: privateKeyToAccount('0x…'),\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const request = await prepareTransactionRequest(client, {\n * to: '0x0000000000000000000000000000000000000000',\n * value: 1n,\n * })\n */\nexport async function prepareTransactionRequest<\n chain extends Chain | undefined,\n account extends Account | undefined,\n const request extends PrepareTransactionRequestRequest<chain, chainOverride>,\n accountOverride extends Account | Address | undefined = undefined,\n chainOverride extends Chain | undefined = undefined,\n>(\n client: Client<Transport, chain, account>,\n args: PrepareTransactionRequestParameters<\n chain,\n account,\n chainOverride,\n accountOverride,\n request\n >,\n): Promise<\n PrepareTransactionRequestReturnType<\n chain,\n account,\n chainOverride,\n accountOverride,\n request\n >\n> {\n const {\n account: account_ = client.account,\n blobs,\n chain,\n gas,\n kzg,\n nonce,\n nonceManager,\n parameters = defaultParameters,\n type,\n } = args\n const account = account_ ? parseAccount(account_) : account_\n\n const request = { ...args, ...(account ? { from: account?.address } : {}) }\n\n let block: Block | undefined\n async function getBlock(): Promise<Block> {\n if (block) return block\n block = await getAction(\n client,\n getBlock_,\n 'getBlock',\n )({ blockTag: 'latest' })\n return block\n }\n\n let chainId: number | undefined\n async function getChainId(): Promise<number> {\n if (chainId) return chainId\n if (chain) return chain.id\n if (typeof args.chainId !== 'undefined') return args.chainId\n const chainId_ = await getAction(client, getChainId_, 'getChainId')({})\n chainId = chainId_\n return chainId\n }\n\n if (\n (parameters.includes('blobVersionedHashes') ||\n parameters.includes('sidecars')) &&\n blobs &&\n kzg\n ) {\n const commitments = blobsToCommitments({ blobs, kzg })\n\n if (parameters.includes('blobVersionedHashes')) {\n const versionedHashes = commitmentsToVersionedHashes({\n commitments,\n to: 'hex',\n })\n request.blobVersionedHashes = versionedHashes\n }\n if (parameters.includes('sidecars')) {\n const proofs = blobsToProofs({ blobs, commitments, kzg })\n const sidecars = toBlobSidecars({\n blobs,\n commitments,\n proofs,\n to: 'hex',\n })\n request.sidecars = sidecars\n }\n }\n\n if (parameters.includes('chainId')) request.chainId = await getChainId()\n\n if (parameters.includes('nonce') && typeof nonce === 'undefined' && account) {\n if (nonceManager) {\n const chainId = await getChainId()\n request.nonce = await nonceManager.consume({\n address: account.address,\n chainId,\n client,\n })\n } else {\n request.nonce = await getAction(\n client,\n getTransactionCount,\n 'getTransactionCount',\n )({\n address: account.address,\n blockTag: 'pending',\n })\n }\n }\n\n if (\n (parameters.includes('fees') || parameters.includes('type')) &&\n typeof type === 'undefined'\n ) {\n try {\n request.type = getTransactionType(\n request as TransactionSerializable,\n ) as any\n } catch {\n // infer type from block\n const block = await getBlock()\n request.type =\n typeof block?.baseFeePerGas === 'bigint' ? 'eip1559' : 'legacy'\n }\n }\n\n if (parameters.includes('fees')) {\n // TODO(4844): derive blob base fees once https://github.com/ethereum/execution-apis/pull/486 is merged.\n\n if (request.type !== 'legacy' && request.type !== 'eip2930') {\n // EIP-1559 fees\n if (\n typeof request.maxFeePerGas === 'undefined' ||\n typeof request.maxPriorityFeePerGas === 'undefined'\n ) {\n const block = await getBlock()\n const { maxFeePerGas, maxPriorityFeePerGas } =\n await internal_estimateFeesPerGas(client, {\n block: block as Block,\n chain,\n request: request as PrepareTransactionRequestParameters,\n })\n\n if (\n typeof args.maxPriorityFeePerGas === 'undefined' &&\n args.maxFeePerGas &&\n args.maxFeePerGas < maxPriorityFeePerGas\n )\n throw new MaxFeePerGasTooLowError({\n maxPriorityFeePerGas,\n })\n\n request.maxPriorityFeePerGas = maxPriorityFeePerGas\n request.maxFeePerGas = maxFeePerGas\n }\n } else {\n // Legacy fees\n if (\n typeof args.maxFeePerGas !== 'undefined' ||\n typeof args.maxPriorityFeePerGas !== 'undefined'\n )\n throw new Eip1559FeesNotSupportedError()\n\n const block = await getBlock()\n const { gasPrice: gasPrice_ } = await internal_estimateFeesPerGas(\n client,\n {\n block: block as Block,\n chain,\n request: request as PrepareTransactionRequestParameters,\n type: 'legacy',\n },\n )\n request.gasPrice = gasPrice_\n }\n }\n\n if (parameters.includes('gas') && typeof gas === 'undefined')\n request.gas = await getAction(\n client,\n estimateGas,\n 'estimateGas',\n )({\n ...request,\n account: account\n ? { address: account.address, type: 'json-rpc' }\n : account,\n } as EstimateGasParameters)\n\n assertRequest(request as AssertRequestParameters)\n\n delete request.parameters\n\n return request as any\n}\n","import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetBalanceParameters = {\n /** The address of the account. */\n address: Address\n} & (\n | {\n /** The balance of the account at a block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /** The balance of the account at a block tag. */\n blockTag?: BlockTag | undefined\n }\n)\n\nexport type GetBalanceReturnType = bigint\n\nexport type GetBalanceErrorType =\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns the balance of an address in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBalance\n * - JSON-RPC Methods: [`eth_getBalance`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance)\n *\n * You can convert the balance to ether units with [`formatEther`](https://viem.sh/docs/utilities/formatEther).\n *\n * ```ts\n * const balance = await getBalance(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * blockTag: 'safe'\n * })\n * const balanceAsEther = formatEther(balance)\n * // \"6.942\"\n * ```\n *\n * @param client - Client to use\n * @param parameters - {@link GetBalanceParameters}\n * @returns The balance of the address in wei. {@link GetBalanceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBalance } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const balance = await getBalance(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n * // 10000000000000000000000n (wei)\n */\nexport async function getBalance<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n { address, blockNumber, blockTag = 'latest' }: GetBalanceParameters,\n): Promise<GetBalanceReturnType> {\n const blockNumberHex = blockNumber ? numberToHex(blockNumber) : undefined\n\n const balance = await client.request({\n method: 'eth_getBalance',\n params: [address, blockNumberHex || blockTag],\n })\n return BigInt(balance)\n}\n","import type { Address } from 'abitype'\nimport type { Account } from '../../accounts/types.js'\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { BaseError } from '../../errors/base.js'\nimport {\n type RecoverAuthorizationAddressErrorType,\n recoverAuthorizationAddress,\n} from '../../experimental/eip7702/utils/recoverAuthorizationAddress.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { StateOverride } from '../../types/stateOverride.js'\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type GetEstimateGasErrorReturnType,\n getEstimateGasError,\n} from '../../utils/errors/getEstimateGasError.js'\nimport { extract } from '../../utils/formatters/extract.js'\nimport {\n type FormattedTransactionRequest,\n formatTransactionRequest,\n} from '../../utils/formatters/transactionRequest.js'\nimport { serializeStateOverride } from '../../utils/stateOverride.js'\nimport {\n type AssertRequestErrorType,\n type AssertRequestParameters,\n assertRequest,\n} from '../../utils/transaction/assertRequest.js'\nimport {\n type PrepareTransactionRequestParameters,\n prepareTransactionRequest,\n} from '../wallet/prepareTransactionRequest.js'\nimport { getBalance } from './getBalance.js'\n\nexport type EstimateGasParameters<\n chain extends Chain | undefined = Chain | undefined,\n> = UnionOmit<FormattedEstimateGas<chain>, 'from'> & {\n account?: Account | Address | undefined\n stateOverride?: StateOverride | undefined\n} & (\n | {\n /** The balance of the account at a block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /**\n * The balance of the account at a block tag.\n * @default 'latest'\n */\n blockTag?: BlockTag | undefined\n }\n )\ntype FormattedEstimateGas<chain extends Chain | undefined = Chain | undefined> =\n FormattedTransactionRequest<chain>\n\nexport type EstimateGasReturnType = bigint\n\nexport type EstimateGasErrorType = GetEstimateGasErrorReturnType<\n | ParseAccountErrorType\n | NumberToHexErrorType\n | RequestErrorType\n | RecoverAuthorizationAddressErrorType\n | AssertRequestErrorType\n>\n\n/**\n * Estimates the gas necessary to complete a transaction without submitting it to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateGas\n * - JSON-RPC Methods: [`eth_estimateGas`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_estimategas)\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateGas } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gasEstimate = await estimateGas(client, {\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * })\n */\nexport async function estimateGas<\n chain extends Chain | undefined,\n account extends Account | undefined = undefined,\n>(\n client: Client<Transport, chain, account>,\n args: EstimateGasParameters<chain>,\n): Promise<EstimateGasReturnType> {\n const { account: account_ = client.account } = args\n const account = account_ ? parseAccount(account_) : undefined\n\n try {\n const {\n accessList,\n authorizationList,\n blobs,\n blobVersionedHashes,\n blockNumber,\n blockTag,\n data,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n value,\n stateOverride,\n ...rest\n } = (await prepareTransactionRequest(client, {\n ...args,\n parameters:\n // Some RPC Providers do not compute versioned hashes from blobs. We will need\n // to compute them.\n account?.type === 'local' ? undefined : ['blobVersionedHashes'],\n } as PrepareTransactionRequestParameters)) as EstimateGasParameters\n\n const blockNumberHex = blockNumber ? numberToHex(blockNumber) : undefined\n const block = blockNumberHex || blockTag\n\n const rpcStateOverride = serializeStateOverride(stateOverride)\n\n const to = await (async () => {\n // If `to` exists on the parameters, use that.\n if (rest.to) return rest.to\n\n // If no `to` exists, and we are sending a EIP-7702 transaction, use the\n // address of the first authorization in the list.\n if (authorizationList && authorizationList.length > 0)\n return await recoverAuthorizationAddress({\n authorization: authorizationList[0],\n }).catch(() => {\n throw new BaseError(\n '`to` is required. Could not infer from `authorizationList`',\n )\n })\n\n // Otherwise, we are sending a deployment transaction.\n return undefined\n })()\n\n assertRequest(args as AssertRequestParameters)\n\n const chainFormat = client.chain?.formatters?.transactionRequest?.format\n const format = chainFormat || formatTransactionRequest\n\n const request = format({\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { format: chainFormat }),\n from: account?.address,\n accessList,\n authorizationList,\n blobs,\n blobVersionedHashes,\n data,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n } as TransactionRequest)\n\n function estimateGas_rpc(parameters: {\n block: any\n request: any\n rpcStateOverride: any\n }) {\n const { block, request, rpcStateOverride } = parameters\n return client.request({\n method: 'eth_estimateGas',\n params: rpcStateOverride\n ? [request, block ?? 'latest', rpcStateOverride]\n : block\n ? [request, block]\n : [request],\n })\n }\n\n let estimate = BigInt(\n await estimateGas_rpc({ block, request, rpcStateOverride }),\n )\n\n // TODO(7702): Remove this once https://github.com/ethereum/execution-apis/issues/561 is resolved.\n // Authorization list schema is not implemented on JSON-RPC spec yet, so we need to\n // manually estimate the gas.\n if (authorizationList) {\n const value = await getBalance(client, { address: request.from })\n const estimates = await Promise.all(\n authorizationList.map(async (authorization) => {\n const { contractAddress } = authorization\n const estimate = await estimateGas_rpc({\n block,\n request: {\n authorizationList: undefined,\n data,\n from: account?.address,\n to: contractAddress,\n value: numberToHex(value),\n },\n rpcStateOverride,\n }).catch(() => 100_000n)\n return 2n * BigInt(estimate)\n }),\n )\n estimate += estimates.reduce((acc, curr) => acc + curr, 0n)\n }\n\n return estimate\n } catch (err) {\n throw getEstimateGasError(err as BaseError, {\n ...args,\n account,\n chain: client.chain,\n })\n }\n}\n","import type { Abi } from 'abitype'\n\nimport type { Account } from '../../accounts/types.js'\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractFunctionArgs,\n ContractFunctionName,\n ContractFunctionParameters,\n GetValue,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { UnionOmit } from '../../types/utils.js'\nimport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetContractErrorReturnType,\n getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type EstimateGasErrorType,\n type EstimateGasParameters,\n estimateGas,\n} from './estimateGas.js'\n\nexport type EstimateContractGasParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'nonpayable' | 'payable'\n > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n chain extends Chain | undefined = Chain | undefined,\n> = ContractFunctionParameters<\n abi,\n 'nonpayable' | 'payable',\n functionName,\n args\n> &\n UnionOmit<EstimateGasParameters<chain>, 'data' | 'to' | 'value'> &\n GetValue<\n abi,\n functionName,\n EstimateGasParameters<chain> extends EstimateGasParameters\n ? EstimateGasParameters<chain>['value']\n : EstimateGasParameters['value']\n > & {\n /** Data to append to the end of the calldata. Useful for adding a [\"domain\" tag](https://opensea.notion.site/opensea/Seaport-Order-Attributions-ec2d69bf455041a5baa490941aad307f). */\n dataSuffix?: Hex | undefined\n }\n\nexport type EstimateContractGasReturnType = bigint\n\nexport type EstimateContractGasErrorType = GetContractErrorReturnType<\n EncodeFunctionDataErrorType | EstimateGasErrorType | ParseAccountErrorType\n>\n\n/**\n * Estimates the gas required to successfully execute a contract write function call.\n *\n * - Docs: https://viem.sh/docs/contract/estimateContractGas\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`estimateGas` action](https://viem.sh/docs/actions/public/estimateGas) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateContractGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateContractGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateContractGas } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gas = await estimateContractGas(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint() public']),\n * functionName: 'mint',\n * account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * })\n */\nexport async function estimateContractGas<\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n chain extends Chain | undefined,\n account extends Account | undefined = undefined,\n>(\n client: Client<Transport, chain, account>,\n parameters: EstimateContractGasParameters<abi, functionName, args, chain>,\n): Promise<EstimateContractGasReturnType> {\n const { abi, address, args, functionName, dataSuffix, ...request } =\n parameters as EstimateContractGasParameters\n const data = encodeFunctionData({\n abi,\n args,\n functionName,\n } as EncodeFunctionDataParameters)\n try {\n const gas = await getAction(\n client,\n estimateGas,\n 'estimateGas',\n )({\n data: `${data}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n to: address,\n ...request,\n } as unknown as EstimateGasParameters)\n return gas\n } catch (error) {\n const account = request.account ? parseAccount(request.account) : undefined\n throw getContractError(error as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/estimateContractGas',\n functionName,\n sender: account?.address,\n })\n }\n}\n","import type { Abi, AbiParameter } from 'abitype'\n\nimport {\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type {\n ContractEventArgsFromTopics,\n ContractEventName,\n EventDefinition,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n IsNarrowable,\n Prettify,\n UnionEvaluate,\n} from '../../types/utils.js'\nimport { size } from '../data/size.js'\nimport {\n type ToEventSelectorErrorType,\n toEventSelector,\n} from '../hash/toEventSelector.js'\n\nimport { PositionOutOfBoundsError } from '../../errors/cursor.js'\nimport {\n type DecodeAbiParametersErrorType,\n decodeAbiParameters,\n} from './decodeAbiParameters.js'\nimport { type FormatAbiItemErrorType, formatAbiItem } from './formatAbiItem.js'\n\nexport type DecodeEventLogParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n topics extends Hex[] = Hex[],\n data extends Hex | undefined = undefined,\n strict extends boolean = true,\n> = {\n abi: abi\n data?: data | undefined\n eventName?: eventName | ContractEventName<abi> | undefined\n strict?: strict | boolean | undefined\n topics: [signature: Hex, ...args: topics] | []\n}\n\nexport type DecodeEventLogReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n topics extends Hex[] = Hex[],\n data extends Hex | undefined = undefined,\n strict extends boolean = true,\n ///\n allEventNames extends\n ContractEventName<abi> = eventName extends ContractEventName<abi>\n ? eventName\n : ContractEventName<abi>,\n> = IsNarrowable<abi, Abi> extends true\n ? {\n [name in allEventNames]: Prettify<\n {\n eventName: name\n } & UnionEvaluate<\n ContractEventArgsFromTopics<abi, name, strict> extends infer allArgs\n ? topics extends readonly []\n ? data extends undefined\n ? { args?: undefined }\n : { args?: allArgs | undefined }\n : { args: allArgs }\n : never\n >\n >\n }[allEventNames]\n : {\n eventName: eventName\n args: readonly unknown[] | undefined\n }\n\nexport type DecodeEventLogErrorType =\n | AbiDecodingDataSizeTooSmallErrorType\n | AbiEventSignatureEmptyTopicsErrorType\n | AbiEventSignatureNotFoundErrorType\n | DecodeAbiParametersErrorType\n | DecodeLogTopicsMismatchErrorType\n | DecodeLogDataMismatchErrorType\n | FormatAbiItemErrorType\n | ToEventSelectorErrorType\n | ErrorType\n\nconst docsPath = '/docs/contract/decodeEventLog'\n\nexport function decodeEventLog<\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName<abi> | undefined = undefined,\n topics extends Hex[] = Hex[],\n data extends Hex | undefined = undefined,\n strict extends boolean = true,\n>(\n parameters: DecodeEventLogParameters<abi, eventName, topics, data, strict>,\n): DecodeEventLogReturnType<abi, eventName, topics, data, strict> {\n const {\n abi,\n data,\n strict: strict_,\n topics,\n } = parameters as DecodeEventLogParameters\n\n const strict = strict_ ?? true\n const [signature, ...argTopics] = topics\n if (!signature) throw new AbiEventSignatureEmptyTopicsError({ docsPath })\n\n const abiItem = (() => {\n if (abi.length === 1) return abi[0]\n return abi.find(\n (x) =>\n x.type === 'event' &&\n signature === toEventSelector(formatAbiItem(x) as EventDefinition),\n )\n })()\n\n if (!(abiItem && 'name' in abiItem) || abiItem.type !== 'event')\n throw new AbiEventSignatureNotFoundError(signature, { docsPath })\n\n const { name, inputs } = abiItem\n const isUnnamed = inputs?.some((x) => !('name' in x && x.name))\n\n let args: any = isUnnamed ? [] : {}\n\n // Decode topics (indexed args).\n const indexedInputs = inputs.filter((x) => 'indexed' in x && x.indexed)\n for (let i = 0; i < indexedInputs.length; i++) {\n const param = indexedInputs[i]\n const topic = argTopics[i]\n if (!topic)\n throw new DecodeLogTopicsMismatch({\n abiItem,\n param: param as AbiParameter & { indexed: boolean },\n })\n args[isUnnamed ? i : param.name || i] = decodeTopic({ param, value: topic })\n }\n\n // Decode data (non-indexed args).\n const nonIndexedInputs = inputs.filter((x) => !('indexed' in x && x.indexed))\n if (nonIndexedInputs.length > 0) {\n if (data && data !== '0x') {\n try {\n const decodedData = decodeAbiParameters(nonIndexedInputs, data)\n if (decodedData) {\n if (isUnnamed) args = [...args, ...decodedData]\n else {\n for (let i = 0; i < nonIndexedInputs.length; i++) {\n args[nonIndexedInputs[i].name!] = decodedData[i]\n }\n }\n }\n } catch (err) {\n if (strict) {\n if (\n err instanceof AbiDecodingDataSizeTooSmallError ||\n err instanceof PositionOutOfBoundsError\n )\n throw new DecodeLogDataMismatch({\n abiItem,\n data: data,\n params: nonIndexedInputs,\n size: size(data),\n })\n throw err\n }\n }\n } else if (strict) {\n throw new DecodeLogDataMismatch({\n abiItem,\n data: '0x',\n params: nonIndexedInputs,\n size: 0,\n })\n }\n }\n\n return {\n eventName: name,\n args: Object.values(args).length > 0 ? args : undefined,\n } as unknown as DecodeEventLogReturnType<abi, eventName, topics, data, strict>\n}\n\nfunction decodeTopic({ param, value }: { param: AbiParameter; value: Hex }) {\n if (\n param.type === 'string' ||\n param.type === 'bytes' ||\n param.type === 'tuple' ||\n param.type.match(/^(.*)\\[(\\d+)?\\]$/)\n )\n return value\n const decodedArg = decodeAbiParameters([param], value) || []\n return decodedArg[0]\n}\n","// TODO(v3): checksum address.\n\nimport type { Abi, AbiEvent, AbiEventParameter, Address } from 'abitype'\nimport {\n AbiEventSignatureNotFoundError,\n DecodeLogDataMismatch,\n DecodeLogTopicsMismatch,\n} from '../../errors/abi.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ContractEventName, GetEventArgs } from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport { isAddressEqual } from '../address/isAddressEqual.js'\nimport { toBytes } from '../encoding/toBytes.js'\nimport { keccak256 } from '../hash/keccak256.js'\nimport { toEventSelector } from '../hash/toEventSelector.js'\nimport {\n type DecodeEventLogErrorType,\n decodeEventLog,\n} from './decodeEventLog.js'\n\nexport type ParseEventLogsParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends\n | ContractEventName<abi>\n | ContractEventName<abi>[]\n | undefined = ContractEventName<abi>,\n strict extends boolean | undefined = boolean | undefined,\n ///\n allArgs = GetEventArgs<\n abi,\n eventName extends ContractEventName<abi>\n ? eventName\n : ContractEventName<abi>,\n {\n EnableUnion: true\n IndexedOnly: false\n Required: false\n }\n >,\n> = {\n /** Contract ABI. */\n abi: abi\n /** Arguments for the event. */\n args?: allArgs | undefined\n /** Contract event. */\n eventName?:\n | eventName\n | ContractEventName<abi>\n | ContractEventName<abi>[]\n | undefined\n /** List of logs. */\n logs: (Log | RpcLog)[]\n strict?: strict | boolean | undefined\n}\n\nexport type ParseEventLogsReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends\n | ContractEventName<abi>\n | ContractEventName<abi>[]\n | undefined = ContractEventName<abi>,\n strict extends boolean | undefined = boolean | undefined,\n ///\n derivedEventName extends\n | ContractEventName<abi>\n | undefined = eventName extends ContractEventName<abi>[]\n ? eventName[number]\n : eventName,\n> = Log<bigint, number, false, undefined, strict, abi, derivedEventName>[]\n\nexport type ParseEventLogsErrorType = DecodeEventLogErrorType | ErrorType\n\n/**\n * Extracts & decodes logs matching the provided signature(s) (`abi` + optional `eventName`)\n * from a set of opaque logs.\n *\n * @param parameters - {@link ParseEventLogsParameters}\n * @returns The logs. {@link ParseEventLogsReturnType}\n *\n * @example\n * import { createClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { parseEventLogs } from 'viem/op-stack'\n *\n * const client = createClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const receipt = await getTransactionReceipt(client, {\n * hash: '0xec23b2ba4bc59ba61554507c1b1bc91649e6586eb2dd00c728e8ed0db8bb37ea',\n * })\n *\n * const logs = parseEventLogs({ logs: receipt.logs })\n * // [{ args: { ... }, eventName: 'TransactionDeposited', ... }, ...]\n */\nexport function parseEventLogs<\n abi extends Abi | readonly unknown[],\n strict extends boolean | undefined = true,\n eventName extends\n | ContractEventName<abi>\n | ContractEventName<abi>[]\n | undefined = undefined,\n>(\n parameters: ParseEventLogsParameters<abi, eventName, strict>,\n): ParseEventLogsReturnType<abi, eventName, strict> {\n const { abi, args, logs, strict = true } = parameters\n\n const eventName = (() => {\n if (!parameters.eventName) return undefined\n if (Array.isArray(parameters.eventName)) return parameters.eventName\n return [parameters.eventName as string]\n })()\n\n return logs\n .map((log) => {\n try {\n const abiItem = (abi as Abi).find(\n (abiItem) =>\n abiItem.type === 'event' &&\n log.topics[0] === toEventSelector(abiItem),\n ) as AbiEvent\n if (!abiItem) return null\n\n const event = decodeEventLog({\n ...log,\n abi: [abiItem],\n strict,\n })\n\n // Check that the decoded event name matches the provided event name.\n if (eventName && !eventName.includes(event.eventName)) return null\n\n // Check that the decoded event args match the provided args.\n if (\n !includesArgs({\n args: event.args,\n inputs: abiItem.inputs,\n matchArgs: args,\n })\n )\n return null\n\n return { ...event, ...log }\n } catch (err) {\n let eventName: string | undefined\n let isUnnamed: boolean | undefined\n\n if (err instanceof AbiEventSignatureNotFoundError) return null\n if (\n err instanceof DecodeLogDataMismatch ||\n err instanceof DecodeLogTopicsMismatch\n ) {\n // If strict mode is on, and log data/topics do not match event definition, skip.\n if (strict) return null\n eventName = err.abiItem.name\n isUnnamed = err.abiItem.inputs?.some((x) => !('name' in x && x.name))\n }\n\n // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).\n return { ...log, args: isUnnamed ? [] : {}, eventName }\n }\n })\n .filter(Boolean) as unknown as ParseEventLogsReturnType<\n abi,\n eventName,\n strict\n >\n}\n\nfunction includesArgs(parameters: {\n args: unknown\n inputs: AbiEvent['inputs']\n matchArgs: unknown\n}) {\n const { args, inputs, matchArgs } = parameters\n\n if (!matchArgs) return true\n if (!args) return false\n\n function isEqual(input: AbiEventParameter, value: unknown, arg: unknown) {\n try {\n if (input.type === 'address')\n return isAddressEqual(value as Address, arg as Address)\n if (input.type === 'string' || input.type === 'bytes')\n return keccak256(toBytes(value as string)) === arg\n return value === arg\n } catch {\n return false\n }\n }\n\n if (Array.isArray(args) && Array.isArray(matchArgs)) {\n return matchArgs.every((value, index) => {\n if (value === null || value === undefined) return true\n const input = inputs[index]\n if (!input) return false\n const value_ = Array.isArray(value) ? value : [value]\n return value_.some((value) => isEqual(input, value, args[index]))\n })\n }\n\n if (\n typeof args === 'object' &&\n !Array.isArray(args) &&\n typeof matchArgs === 'object' &&\n !Array.isArray(matchArgs)\n )\n return Object.entries(matchArgs).every(([key, value]) => {\n if (value === null || value === undefined) return true\n const input = inputs.find((input) => input.name === key)\n if (!input) return false\n const value_ = Array.isArray(value) ? value : [value]\n return value_.some((value) =>\n isEqual(input, value, (args as Record<string, unknown>)[key]),\n )\n })\n\n return false\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { Log } from '../../types/log.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\n\nexport type FormatLogErrorType = ErrorType\n\nexport function formatLog(\n log: ExactPartial<RpcLog>,\n {\n args,\n eventName,\n }: { args?: unknown | undefined; eventName?: string | undefined } = {},\n) {\n return {\n ...log,\n blockHash: log.blockHash ? log.blockHash : null,\n blockNumber: log.blockNumber ? BigInt(log.blockNumber) : null,\n logIndex: log.logIndex ? Number(log.logIndex) : null,\n transactionHash: log.transactionHash ? log.transactionHash : null,\n transactionIndex: log.transactionIndex\n ? Number(log.transactionIndex)\n : null,\n ...(eventName ? { args, eventName } : {}),\n } as Log\n}\n","import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash, LogTopic } from '../../types/misc.js'\nimport type { RpcLog } from '../../types/rpc.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type FormatLogErrorType,\n formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetLogsParameters<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n //\n _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = {\n /** Address or list of addresses from which logs originated */\n address?: Address | Address[] | undefined\n} & (\n | {\n event: abiEvent\n events?: undefined\n args?: MaybeExtractEventArgsFromAbi<abiEvents, _eventName> | undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n event?: undefined\n events: abiEvents\n args?: undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n event?: undefined\n events?: undefined\n args?: undefined\n strict?: undefined\n }\n) &\n (\n | {\n /** Block number or tag after which to include logs */\n fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n /** Block number or tag before which to include logs */\n toBlock?: toBlock | BlockNumber | BlockTag | undefined\n blockHash?: undefined\n }\n | {\n fromBlock?: undefined\n toBlock?: undefined\n /** Hash of block to include logs from */\n blockHash?: Hash | undefined\n }\n )\n\nexport type GetLogsReturnType<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n //\n _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n _pending extends boolean =\n | (fromBlock extends 'pending' ? true : false)\n | (toBlock extends 'pending' ? true : false),\n> = Log<bigint, number, _pending, abiEvent, strict, abiEvents, _eventName>[]\n\nexport type GetLogsErrorType =\n | DecodeEventLogErrorType\n | EncodeEventTopicsErrorType\n | FormatLogErrorType\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns a list of event logs matching the provided parameters.\n *\n * - Docs: https://viem.sh/docs/actions/public/getLogs\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/logs_event-logs\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param client - Client to use\n * @param parameters - {@link GetLogsParameters}\n * @returns A list of event logs. {@link GetLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getLogs } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const logs = await getLogs(client)\n */\nexport async function getLogs<\n chain extends Chain | undefined,\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n client: Client<Transport, chain>,\n {\n address,\n blockHash,\n fromBlock,\n toBlock,\n event,\n events: events_,\n args,\n strict: strict_,\n }: GetLogsParameters<abiEvent, abiEvents, strict, fromBlock, toBlock> = {},\n): Promise<GetLogsReturnType<abiEvent, abiEvents, strict, fromBlock, toBlock>> {\n const strict = strict_ ?? false\n const events = events_ ?? (event ? [event] : undefined)\n\n let topics: LogTopic[] = []\n if (events) {\n const encoded = (events as AbiEvent[]).flatMap((event) =>\n encodeEventTopics({\n abi: [event],\n eventName: (event as AbiEvent).name,\n args: events_ ? undefined : args,\n } as EncodeEventTopicsParameters),\n )\n // TODO: Clean up type casting\n topics = [encoded as LogTopic]\n if (event) topics = topics[0] as LogTopic[]\n }\n\n let logs: RpcLog[]\n if (blockHash) {\n logs = await client.request({\n method: 'eth_getLogs',\n params: [{ address, topics, blockHash }],\n })\n } else {\n logs = await client.request({\n method: 'eth_getLogs',\n params: [\n {\n address,\n topics,\n fromBlock:\n typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n },\n ],\n })\n }\n\n const formattedLogs = logs.map((log) => formatLog(log))\n if (!events)\n return formattedLogs as GetLogsReturnType<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock\n >\n return parseEventLogs({\n abi: events,\n args: args as any,\n logs: formattedLogs,\n strict,\n }) as unknown as GetLogsReturnType<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock\n >\n}\n","import type { Abi, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractEventArgs,\n ContractEventName,\n} from '../../types/contract.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash } from '../../types/misc.js'\nimport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n getAbiItem,\n} from '../../utils/abi/getAbiItem.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type GetLogsErrorType,\n type GetLogsParameters,\n getLogs,\n} from './getLogs.js'\n\nexport type GetContractEventsParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName<abi> | undefined =\n | ContractEventName<abi>\n | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n /** The address of the contract. */\n address?: Address | Address[] | undefined\n /** Contract ABI. */\n abi: abi\n args?:\n | ContractEventArgs<\n abi,\n eventName extends ContractEventName<abi>\n ? eventName\n : ContractEventName<abi>\n >\n | undefined\n /** Contract event. */\n eventName?: eventName | ContractEventName<abi> | undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | boolean | undefined\n} & (\n | {\n /** Block number or tag after which to include logs */\n fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n /** Block number or tag before which to include logs */\n toBlock?: toBlock | BlockNumber | BlockTag | undefined\n blockHash?: undefined\n }\n | {\n fromBlock?: undefined\n toBlock?: undefined\n /** Hash of block to include logs from */\n blockHash?: Hash | undefined\n }\n)\n\nexport type GetContractEventsReturnType<\n abi extends Abi | readonly unknown[] = readonly unknown[],\n eventName extends ContractEventName<abi> | undefined =\n | ContractEventName<abi>\n | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n ///\n isPending extends boolean =\n | (fromBlock extends 'pending' ? true : false)\n | (toBlock extends 'pending' ? true : false),\n> = Log<bigint, number, isPending, undefined, strict, abi, eventName>[]\n\nexport type GetContractEventsErrorType =\n | GetAbiItemErrorType\n | GetLogsErrorType\n | ErrorType\n\n/**\n * Returns a list of event logs emitted by a contract.\n *\n * - Docs: https://viem.sh/docs/actions/public/getContractEvents\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param client - Client to use\n * @param parameters - {@link GetContractEventsParameters}\n * @returns A list of event logs. {@link GetContractEventsReturnType}\n *\n * @example\n * import { createClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getContractEvents } from 'viem/public'\n * import { wagmiAbi } from './abi'\n *\n * const client = createClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const logs = await getContractEvents(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: wagmiAbi,\n * eventName: 'Transfer'\n * })\n */\nexport async function getContractEvents<\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName<abi> | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n client: Client<Transport, chain>,\n parameters: GetContractEventsParameters<\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >,\n): Promise<\n GetContractEventsReturnType<abi, eventName, strict, fromBlock, toBlock>\n> {\n const {\n abi,\n address,\n args,\n blockHash,\n eventName,\n fromBlock,\n toBlock,\n strict,\n } = parameters\n const event = eventName\n ? getAbiItem({ abi, name: eventName } as GetAbiItemParameters)\n : undefined\n const events = !event\n ? (abi as Abi).filter((x) => x.type === 'event')\n : undefined\n return getAction(\n client,\n getLogs,\n 'getLogs',\n )({\n address,\n args,\n blockHash,\n event,\n events,\n fromBlock,\n toBlock,\n strict,\n } as {} as GetLogsParameters) as unknown as GetContractEventsReturnType<\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n}\n","import type { Abi } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractFunctionArgs,\n ContractFunctionName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n} from '../../types/contract.js'\nimport type { UnionEvaluate } from '../../types/utils.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetContractErrorReturnType,\n getContractError,\n} from '../../utils/errors/getContractError.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport { type CallErrorType, type CallParameters, call } from './call.js'\n\nexport type ReadContractParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'pure' | 'view'\n > = ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<\n abi,\n 'pure' | 'view',\n functionName\n > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n> = UnionEvaluate<\n Pick<\n CallParameters,\n | 'account'\n | 'blockNumber'\n | 'blockTag'\n | 'factory'\n | 'factoryData'\n | 'stateOverride'\n >\n> &\n ContractFunctionParameters<abi, 'pure' | 'view', functionName, args, boolean>\n\nexport type ReadContractReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'pure' | 'view'\n > = ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<\n abi,\n 'pure' | 'view',\n functionName\n > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n> = ContractFunctionReturnType<abi, 'pure' | 'view', functionName, args>\n\nexport type ReadContractErrorType = GetContractErrorReturnType<\n CallErrorType | EncodeFunctionDataErrorType | DecodeFunctionResultErrorType\n>\n\n/**\n * Calls a read-only function on a contract, and returns the response.\n *\n * - Docs: https://viem.sh/docs/contract/readContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_reading-contracts\n *\n * A \"read-only\" function (constant function) on a Solidity contract is denoted by a `view` or `pure` keyword. They can only read the state of the contract, and cannot make any changes to it. Since read-only methods do not change the state of the contract, they do not require any gas to be executed, and can be called by any user without the need to pay for gas.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link ReadContractParameters}\n * @returns The response from the contract. Type is inferred. {@link ReadContractReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { readContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await readContract(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function balanceOf(address) view returns (uint256)']),\n * functionName: 'balanceOf',\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // 424122n\n */\nexport async function readContract<\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'pure' | 'view'>,\n const args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n>(\n client: Client<Transport, chain>,\n parameters: ReadContractParameters<abi, functionName, args>,\n): Promise<ReadContractReturnType<abi, functionName, args>> {\n const { abi, address, args, functionName, ...rest } =\n parameters as ReadContractParameters\n const calldata = encodeFunctionData({\n abi,\n args,\n functionName,\n } as EncodeFunctionDataParameters)\n try {\n const { data } = await getAction(\n client,\n call,\n 'call',\n )({\n ...(rest as CallParameters),\n data: calldata,\n to: address!,\n })\n return decodeFunctionResult({\n abi,\n args,\n functionName,\n data: data || '0x',\n }) as ReadContractReturnType<abi, functionName>\n } catch (error) {\n throw getContractError(error as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/readContract',\n functionName,\n })\n }\n}\n","import type { Abi, AbiFunction, AbiStateMutability, Address } from 'abitype'\n\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../../accounts/utils/parseAccount.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BaseError } from '../../errors/base.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Account, ParseAccount } from '../../types/account.js'\nimport type { Chain, DeriveChain } from '../../types/chain.js'\nimport type {\n ContractFunctionArgs,\n ContractFunctionName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n ExtractAbiFunctionForArgs,\n} from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n IsNarrowable,\n NoInfer,\n Prettify,\n UnionEvaluate,\n UnionOmit,\n} from '../../types/utils.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetContractErrorReturnType,\n getContractError,\n} from '../../utils/errors/getContractError.js'\nimport type { WriteContractParameters } from '../wallet/writeContract.js'\n\nimport type { TransactionRequest } from '../../types/transaction.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type CallErrorType, type CallParameters, call } from './call.js'\n\nexport type GetMutabilityAwareValue<\n abi extends Abi | readonly unknown[],\n mutability extends AbiStateMutability = AbiStateMutability,\n functionName extends ContractFunctionName<\n abi,\n mutability\n > = ContractFunctionName<abi, mutability>,\n valueType = TransactionRequest['value'],\n args extends ContractFunctionArgs<\n abi,\n mutability,\n functionName\n > = ContractFunctionArgs<abi, mutability, functionName>,\n abiFunction extends AbiFunction = abi extends Abi\n ? ExtractAbiFunctionForArgs<abi, mutability, functionName, args>\n : AbiFunction,\n _Narrowable extends boolean = IsNarrowable<abi, Abi>,\n> = _Narrowable extends true\n ? abiFunction['stateMutability'] extends 'payable'\n ? { value?: NoInfer<valueType> | undefined }\n : abiFunction['payable'] extends true\n ? { value?: NoInfer<valueType> | undefined }\n : { value?: undefined }\n : { value?: NoInfer<valueType> | undefined }\n\nexport type SimulateContractParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'nonpayable' | 'payable'\n > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n chain extends Chain | undefined = Chain | undefined,\n chainOverride extends Chain | undefined = Chain | undefined,\n accountOverride extends Account | Address | null | undefined = undefined,\n ///\n derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>,\n> = {\n account?: accountOverride | null | undefined\n chain?: chainOverride | undefined\n /** Data to append to the end of the calldata. Useful for adding a [\"domain\" tag](https://opensea.notion.site/opensea/Seaport-Order-Attributions-ec2d69bf455041a5baa490941aad307f). */\n dataSuffix?: Hex | undefined\n} & ContractFunctionParameters<\n abi,\n 'nonpayable' | 'payable',\n functionName,\n args\n> &\n UnionOmit<\n CallParameters<derivedChain>,\n | 'account'\n | 'batch'\n | 'code'\n | 'to'\n | 'data'\n | 'factory'\n | 'factoryData'\n | 'value'\n > &\n GetMutabilityAwareValue<\n abi,\n 'nonpayable' | 'payable',\n functionName,\n CallParameters<derivedChain> extends CallParameters\n ? CallParameters<derivedChain>['value']\n : CallParameters['value'],\n args\n >\n\nexport type SimulateContractReturnType<\n out abi extends Abi | readonly unknown[] = Abi,\n in out functionName extends ContractFunctionName<\n abi,\n 'nonpayable' | 'payable'\n > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n in out args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n /** @ts-expect-error cast variance */\n out chain extends Chain | undefined = Chain | undefined,\n out account extends Account | undefined = Account | undefined,\n out chainOverride extends Chain | undefined = Chain | undefined,\n out accountOverride extends Account | Address | null | undefined =\n | Account\n | Address\n | null\n | undefined,\n ///\n in out minimizedAbi extends Abi = readonly [\n ExtractAbiFunctionForArgs<\n abi extends Abi ? abi : Abi,\n 'nonpayable' | 'payable',\n functionName,\n args\n >,\n ],\n out resolvedAccount extends\n | Account\n | null\n | undefined = accountOverride extends Account | Address | null\n ? ParseAccount<accountOverride>\n : account,\n> = {\n result: ContractFunctionReturnType<\n minimizedAbi,\n 'nonpayable' | 'payable',\n functionName,\n args\n >\n request: Prettify<\n UnionEvaluate<\n UnionOmit<\n WriteContractParameters<\n minimizedAbi,\n functionName,\n args,\n chain,\n undefined,\n chainOverride\n >,\n 'account' | 'abi' | 'args' | 'chain' | 'functionName'\n >\n > &\n ContractFunctionParameters<\n minimizedAbi,\n 'nonpayable' | 'payable',\n functionName,\n args\n > & {\n chain: DeriveChain<chain, chainOverride>\n } & (resolvedAccount extends Account | null\n ? { account: resolvedAccount }\n : { account?: undefined })\n >\n}\n\nexport type SimulateContractErrorType =\n | ParseAccountErrorType\n | EncodeFunctionDataErrorType\n | GetContractErrorReturnType<CallErrorType | DecodeFunctionResultErrorType>\n | ErrorType\n\n/**\n * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.\n *\n * - Docs: https://viem.sh/docs/contract/simulateContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n *\n * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link SimulateContractParameters}\n * @returns The simulation result and write request. {@link SimulateContractReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { simulateContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await simulateContract(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint(uint32) view returns (uint32)']),\n * functionName: 'mint',\n * args: ['69420'],\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function simulateContract<\n chain extends Chain | undefined,\n account extends Account | undefined,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n const args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n >,\n chainOverride extends Chain | undefined = undefined,\n accountOverride extends Account | Address | null | undefined = undefined,\n>(\n client: Client<Transport, chain, account>,\n parameters: SimulateContractParameters<\n abi,\n functionName,\n args,\n chain,\n chainOverride,\n accountOverride\n >,\n): Promise<\n SimulateContractReturnType<\n abi,\n functionName,\n args,\n chain,\n account,\n chainOverride,\n accountOverride\n >\n> {\n const { abi, address, args, dataSuffix, functionName, ...callRequest } =\n parameters as SimulateContractParameters\n\n const account = callRequest.account\n ? parseAccount(callRequest.account)\n : client.account\n const calldata = encodeFunctionData({ abi, args, functionName })\n try {\n const { data } = await getAction(\n client,\n call,\n 'call',\n )({\n batch: false,\n data: `${calldata}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n to: address,\n ...callRequest,\n account,\n })\n const result = decodeFunctionResult({\n abi,\n args,\n functionName,\n data: data || '0x',\n })\n const minimizedAbi = abi.filter(\n (abiItem) =>\n 'name' in abiItem && abiItem.name === parameters.functionName,\n )\n return {\n result,\n request: {\n abi: minimizedAbi,\n address,\n args,\n dataSuffix,\n functionName,\n ...callRequest,\n account,\n },\n } as unknown as SimulateContractReturnType<\n abi,\n functionName,\n args,\n chain,\n account,\n chainOverride,\n accountOverride\n >\n } catch (error) {\n throw getContractError(error as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/simulateContract',\n functionName,\n sender: account?.address,\n })\n }\n}\n","import type { ErrorType } from '../errors/utils.js'\nimport type { MaybePromise } from '../types/utils.js'\n\ntype Callback = ((...args: any[]) => any) | undefined\ntype Callbacks = Record<string, Callback>\n\nexport type ObserveErrorType = ErrorType\n\n/** @internal */\nexport const listenersCache = /*#__PURE__*/ new Map<\n string,\n { id: number; fns: Callbacks }[]\n>()\n/** @internal */\nexport const cleanupCache = /*#__PURE__*/ new Map<string, () => void>()\n\ntype EmitFunction<callbacks extends Callbacks> = (\n emit: callbacks,\n) => MaybePromise<void | (() => void)>\n\nlet callbackCount = 0\n\n/**\n * @description Sets up an observer for a given function. If another function\n * is set up under the same observer id, the function will only be called once\n * for both instances of the observer.\n */\nexport function observe<callbacks extends Callbacks>(\n observerId: string,\n callbacks: callbacks,\n fn: EmitFunction<callbacks>,\n) {\n const callbackId = ++callbackCount\n\n const getListeners = () => listenersCache.get(observerId) || []\n\n const unsubscribe = () => {\n const listeners = getListeners()\n listenersCache.set(\n observerId,\n listeners.filter((cb: any) => cb.id !== callbackId),\n )\n }\n\n const unwatch = () => {\n const listeners = getListeners()\n if (!listeners.some((cb: any) => cb.id === callbackId)) return\n const cleanup = cleanupCache.get(observerId)\n if (listeners.length === 1 && cleanup) cleanup()\n unsubscribe()\n }\n\n const listeners = getListeners()\n listenersCache.set(observerId, [\n ...listeners,\n { id: callbackId, fns: callbacks },\n ])\n\n if (listeners && listeners.length > 0) return unwatch\n\n const emit: callbacks = {} as callbacks\n for (const key in callbacks) {\n emit[key] = ((\n ...args: Parameters<NonNullable<callbacks[keyof callbacks]>>\n ) => {\n const listeners = getListeners()\n if (listeners.length === 0) return\n for (const listener of listeners) listener.fns[key]?.(...args)\n }) as callbacks[Extract<keyof callbacks, string>]\n }\n\n const cleanup = fn(emit)\n if (typeof cleanup === 'function') cleanupCache.set(observerId, cleanup)\n\n return unwatch\n}\n","export async function wait(time: number) {\n return new Promise((res) => setTimeout(res, time))\n}\n","import type { ErrorType } from '../errors/utils.js'\nimport { wait } from './wait.js'\n\ntype PollOptions<data> = {\n // Whether or not to emit when the polling starts.\n emitOnBegin?: boolean | undefined\n // The initial wait time (in ms) before polling.\n initialWaitTime?: ((data: data | void) => Promise<number>) | undefined\n // The interval (in ms).\n interval: number\n}\n\nexport type PollErrorType = ErrorType\n\n/**\n * @description Polls a function at a specified interval.\n */\nexport function poll<data>(\n fn: ({ unpoll }: { unpoll: () => void }) => Promise<data | void>,\n { emitOnBegin, initialWaitTime, interval }: PollOptions<data>,\n) {\n let active = true\n\n const unwatch = () => (active = false)\n\n const watch = async () => {\n let data: data | void = undefined\n if (emitOnBegin) data = await fn({ unpoll: unwatch })\n\n const initialWait = (await initialWaitTime?.(data)) ?? interval\n await wait(initialWait)\n\n const poll = async () => {\n if (!active) return\n await fn({ unpoll: unwatch })\n await wait(interval)\n poll()\n }\n\n poll()\n }\n watch()\n\n return unwatch\n}\n","import type { ErrorType } from '../../errors/utils.js'\n\n/** @internal */\nexport const promiseCache = /*#__PURE__*/ new Map()\n/** @internal */\nexport const responseCache = /*#__PURE__*/ new Map()\n\nexport type GetCacheErrorType = ErrorType\n\nexport function getCache<data>(cacheKey: string) {\n const buildCache = <data>(cacheKey: string, cache: Map<string, data>) => ({\n clear: () => cache.delete(cacheKey),\n get: () => cache.get(cacheKey),\n set: (data: data) => cache.set(cacheKey, data),\n })\n\n const promise = buildCache<Promise<data>>(cacheKey, promiseCache)\n const response = buildCache<{ created: Date; data: data }>(\n cacheKey,\n responseCache,\n )\n\n return {\n clear: () => {\n promise.clear()\n response.clear()\n },\n promise,\n response,\n }\n}\n\ntype WithCacheParameters = {\n /** The key to cache the data against. */\n cacheKey: string\n /** The time that cached data will remain in memory. Default: Infinity (no expiry) */\n cacheTime?: number | undefined\n}\n\n/**\n * @description Returns the result of a given promise, and caches the result for\n * subsequent invocations against a provided cache key.\n */\nexport async function withCache<data>(\n fn: () => Promise<data>,\n { cacheKey, cacheTime = Number.POSITIVE_INFINITY }: WithCacheParameters,\n) {\n const cache = getCache<data>(cacheKey)\n\n // If a response exists in the cache, and it's not expired, return it\n // and do not invoke the promise.\n // If the max age is 0, the cache is disabled.\n const response = cache.response.get()\n if (response && cacheTime > 0) {\n const age = new Date().getTime() - response.created.getTime()\n if (age < cacheTime) return response.data\n }\n\n let promise = cache.promise.get()\n if (!promise) {\n promise = fn()\n\n // Store the promise in the cache so that subsequent invocations\n // will wait for the same promise to resolve (deduping).\n cache.promise.set(promise)\n }\n\n try {\n const data = await promise\n\n // Store the response in the cache so that subsequent invocations\n // will return the same response.\n cache.response.set({ created: new Date(), data })\n\n return data\n } finally {\n // Clear the promise cache so that subsequent invocations will\n // invoke the promise again.\n cache.promise.clear()\n }\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type GetCacheErrorType,\n getCache,\n withCache,\n} from '../../utils/promise/withCache.js'\n\nexport type GetBlockNumberParameters = {\n /** Time (in ms) that cached block number will remain in memory. */\n cacheTime?: number | undefined\n}\n\nexport type GetBlockNumberReturnType = bigint\n\nexport type GetBlockNumberErrorType = RequestErrorType | ErrorType\n\nconst cacheKey = (id: string) => `blockNumber.${id}`\n\n/** @internal */\nexport type GetBlockNumberCacheErrorType = GetCacheErrorType | ErrorType\n\n/** @internal */\nexport function getBlockNumberCache(id: string) {\n return getCache(cacheKey(id))\n}\n\n/**\n * Returns the number of the most recent block seen.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods: [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber)\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockNumberParameters}\n * @returns The number of the block. {@link GetBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlockNumber } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const blockNumber = await getBlockNumber(client)\n * // 69420n\n */\nexport async function getBlockNumber<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n { cacheTime = client.cacheTime }: GetBlockNumberParameters = {},\n): Promise<GetBlockNumberReturnType> {\n const blockNumberHex = await withCache(\n () =>\n client.request({\n method: 'eth_blockNumber',\n }),\n { cacheKey: cacheKey(client.uid), cacheTime },\n )\n return BigInt(blockNumberHex)\n}\n","import type { Abi, AbiEvent, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcLog } from '../../index.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter, FilterType } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type FormatLogErrorType,\n formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetFilterChangesParameters<\n filterType extends FilterType = FilterType,\n abi extends Abi | readonly unknown[] | undefined = undefined,\n eventName extends string | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n filter: Filter<filterType, abi, eventName, any, strict, fromBlock, toBlock>\n}\n\nexport type GetFilterChangesReturnType<\n filterType extends FilterType = FilterType,\n abi extends Abi | readonly unknown[] | undefined = undefined,\n eventName extends string | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n _AbiEvent extends AbiEvent | undefined = abi extends Abi\n ? eventName extends string\n ? ExtractAbiEvent<abi, eventName>\n : undefined\n : undefined,\n _Pending extends boolean =\n | (fromBlock extends 'pending' ? true : false)\n | (toBlock extends 'pending' ? true : false),\n> = filterType extends 'event'\n ? Log<bigint, number, _Pending, _AbiEvent, strict, abi, eventName>[]\n : Hash[]\n\nexport type GetFilterChangesErrorType =\n | RequestErrorType\n | DecodeEventLogErrorType\n | FormatLogErrorType\n | ErrorType\n\n/**\n * Returns a list of logs or hashes based on a [Filter](/docs/glossary/terms#filter) since the last time it was called.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterChanges\n * - JSON-RPC Methods: [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges)\n *\n * A Filter can be created from the following actions:\n *\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createContractEventFilter`](https://viem.sh/docs/contract/createContractEventFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * Depending on the type of filter, the return value will be different:\n *\n * - If the filter was created with `createContractEventFilter` or `createEventFilter`, it returns a list of logs.\n * - If the filter was created with `createPendingTransactionFilter`, it returns a list of transaction hashes.\n * - If the filter was created with `createBlockFilter`, it returns a list of block hashes.\n *\n * @param client - Client to use\n * @param parameters - {@link GetFilterChangesParameters}\n * @returns Logs or hashes. {@link GetFilterChangesReturnType}\n *\n * @example\n * // Blocks\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createBlockFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createBlockFilter(client)\n * const hashes = await getFilterChanges(client, { filter })\n *\n * @example\n * // Contract Events\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createContractEventFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createContractEventFilter(client, {\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n * eventName: 'Transfer',\n * })\n * const logs = await getFilterChanges(client, { filter })\n *\n * @example\n * // Raw Events\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await getFilterChanges(client, { filter })\n *\n * @example\n * // Transactions\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter, getFilterChanges } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createPendingTransactionFilter(client)\n * const hashes = await getFilterChanges(client, { filter })\n */\nexport async function getFilterChanges<\n transport extends Transport,\n chain extends Chain | undefined,\n filterType extends FilterType,\n const abi extends Abi | readonly unknown[] | undefined,\n eventName extends string | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n _client: Client<transport, chain>,\n {\n filter,\n }: GetFilterChangesParameters<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >,\n): Promise<\n GetFilterChangesReturnType<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n> {\n const strict = 'strict' in filter && filter.strict\n\n const logs = await filter.request({\n method: 'eth_getFilterChanges',\n params: [filter.id],\n })\n\n if (typeof logs[0] === 'string')\n return logs as GetFilterChangesReturnType<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n\n const formattedLogs = logs.map((log) => formatLog(log as RpcLog))\n if (!('abi' in filter) || !filter.abi)\n return formattedLogs as GetFilterChangesReturnType<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n return parseEventLogs({\n abi: filter.abi,\n logs: formattedLogs,\n strict,\n }) as unknown as GetFilterChangesReturnType<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type UninstallFilterParameters = {\n filter: Filter<any>\n}\nexport type UninstallFilterReturnType = boolean\n\nexport type UninstallFilterErrorType = RequestErrorType | ErrorType\n\n/**\n * Destroys a [`Filter`](https://viem.sh/docs/glossary/types#filter).\n *\n * - Docs: https://viem.sh/docs/actions/public/uninstallFilter\n * - JSON-RPC Methods: [`eth_uninstallFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_uninstallFilter)\n *\n * Destroys a Filter that was created from one of the following Actions:\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * @param client - Client to use\n * @param parameters - {@link UninstallFilterParameters}\n * @returns A boolean indicating if the Filter was successfully uninstalled. {@link UninstallFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter, uninstallFilter } from 'viem/public'\n *\n * const filter = await createPendingTransactionFilter(client)\n * const uninstalled = await uninstallFilter(client, { filter })\n * // true\n */\nexport async function uninstallFilter<\n transport extends Transport,\n chain extends Chain | undefined,\n>(\n _client: Client<transport, chain>,\n { filter }: UninstallFilterParameters,\n): Promise<UninstallFilterReturnType> {\n return filter.request({\n method: 'eth_uninstallFilter',\n params: [filter.id],\n })\n}\n","import type { Abi, Address, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\n\nimport {\n DecodeLogDataMismatch,\n DecodeLogTopicsMismatch,\n} from '../../errors/abi.js'\nimport { InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber } from '../../types/block.js'\nimport type {\n ContractEventArgs,\n ContractEventName,\n} from '../../types/contract.js'\nimport type { LogTopic } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { decodeEventLog } from '../../utils/abi/decodeEventLog.js'\nimport {\n type EncodeEventTopicsParameters,\n encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\nimport { createContractEventFilter } from './createContractEventFilter.js'\nimport { getBlockNumber } from './getBlockNumber.js'\nimport {\n type GetContractEventsParameters,\n getContractEvents,\n} from './getContractEvents.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type WatchContractEventOnLogsParameter<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName<abi> = ContractEventName<abi>,\n strict extends boolean | undefined = undefined,\n> = abi extends Abi\n ? Abi extends abi\n ? Log[]\n : Log<bigint, number, false, ExtractAbiEvent<abi, eventName>, strict>[]\n : Log[]\n\nexport type WatchContractEventOnLogsFn<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName<abi> = ContractEventName<abi>,\n strict extends boolean | undefined = undefined,\n> = (logs: WatchContractEventOnLogsParameter<abi, eventName, strict>) => void\n\nexport type WatchContractEventParameters<\n abi extends Abi | readonly unknown[] = Abi,\n eventName extends ContractEventName<abi> | undefined = ContractEventName<abi>,\n strict extends boolean | undefined = undefined,\n transport extends Transport = Transport,\n> = {\n /** The address of the contract. */\n address?: Address | Address[] | undefined\n /** Contract ABI. */\n abi: abi\n args?:\n | ContractEventArgs<\n abi,\n eventName extends ContractEventName<abi>\n ? eventName\n : ContractEventName<abi>\n >\n | undefined\n /** Contract event. */\n eventName?: eventName | ContractEventName<abi> | undefined\n /** Block to start listening from. */\n fromBlock?: BlockNumber<bigint> | undefined\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: ((error: Error) => void) | undefined\n /** The callback to call when new event logs are received. */\n onLogs: WatchContractEventOnLogsFn<\n abi,\n eventName extends ContractEventName<abi>\n ? eventName\n : ContractEventName<abi>,\n strict\n >\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | boolean | undefined\n} & GetPollOptions<transport>\n\nexport type WatchContractEventReturnType = () => void\n\nexport type WatchContractEventErrorType =\n | StringifyErrorType\n | ObserveErrorType\n | ErrorType\n\n/**\n * Watches and returns emitted contract event logs.\n *\n * - Docs: https://viem.sh/docs/contract/watchContractEvent\n *\n * This Action will batch up all the event logs found within the [`pollingInterval`](https://viem.sh/docs/contract/watchContractEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/contract/watchContractEvent#onLogs).\n *\n * `watchContractEvent` will attempt to create an [Event Filter](https://viem.sh/docs/contract/createContractEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchContractEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchContractEventParameters}\n * @returns A function that can be invoked to stop watching for new event logs. {@link WatchContractEventReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchContractEvent } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = watchContractEvent(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['event Transfer(address indexed from, address indexed to, uint256 value)']),\n * eventName: 'Transfer',\n * args: { from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b' },\n * onLogs: (logs) => console.log(logs),\n * })\n */\nexport function watchContractEvent<\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName<abi> | undefined = undefined,\n strict extends boolean | undefined = undefined,\n transport extends Transport = Transport,\n>(\n client: Client<transport, chain>,\n parameters: WatchContractEventParameters<abi, eventName, strict, transport>,\n): WatchContractEventReturnType {\n const {\n abi,\n address,\n args,\n batch = true,\n eventName,\n fromBlock,\n onError,\n onLogs,\n poll: poll_,\n pollingInterval = client.pollingInterval,\n strict: strict_,\n } = parameters\n\n const enablePolling = (() => {\n if (typeof poll_ !== 'undefined') return poll_\n if (typeof fromBlock === 'bigint') return true\n if (client.transport.type === 'webSocket') return false\n if (\n client.transport.type === 'fallback' &&\n client.transport.transports[0].config.type === 'webSocket'\n )\n return false\n return true\n })()\n\n const pollContractEvent = () => {\n const strict = strict_ ?? false\n const observerId = stringify([\n 'watchContractEvent',\n address,\n args,\n batch,\n client.uid,\n eventName,\n pollingInterval,\n strict,\n fromBlock,\n ])\n\n return observe(observerId, { onLogs, onError }, (emit) => {\n let previousBlockNumber: bigint\n if (fromBlock !== undefined) previousBlockNumber = fromBlock - 1n\n let filter: Filter<'event', abi, eventName> | undefined\n let initialized = false\n\n const unwatch = poll(\n async () => {\n if (!initialized) {\n try {\n filter = (await getAction(\n client,\n createContractEventFilter,\n 'createContractEventFilter',\n )({\n abi,\n address,\n args: args as any,\n eventName: eventName as any,\n strict: strict as any,\n fromBlock,\n })) as Filter<'event', abi, eventName>\n } catch {}\n initialized = true\n return\n }\n\n try {\n let logs: Log[]\n if (filter) {\n logs = await getAction(\n client,\n getFilterChanges,\n 'getFilterChanges',\n )({ filter })\n } else {\n // If the filter doesn't exist, we will fall back to use `getLogs`.\n // The fall back exists because some RPC Providers do not support filters.\n\n // Fetch the block number to use for `getLogs`.\n const blockNumber = await getAction(\n client,\n getBlockNumber,\n 'getBlockNumber',\n )({})\n\n // If the block number has changed, we will need to fetch the logs.\n // If the block number doesn't exist, we are yet to reach the first poll interval,\n // so do not emit any logs.\n if (previousBlockNumber && previousBlockNumber < blockNumber) {\n logs = await getAction(\n client,\n getContractEvents,\n 'getContractEvents',\n )({\n abi,\n address,\n args,\n eventName,\n fromBlock: previousBlockNumber + 1n,\n toBlock: blockNumber,\n strict,\n } as {} as GetContractEventsParameters)\n } else {\n logs = []\n }\n previousBlockNumber = blockNumber\n }\n\n if (logs.length === 0) return\n if (batch) emit.onLogs(logs as any)\n else for (const log of logs) emit.onLogs([log] as any)\n } catch (err) {\n // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.\n // Reinitialize the filter when this occurs\n if (filter && err instanceof InvalidInputRpcError)\n initialized = false\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin: true,\n interval: pollingInterval,\n },\n )\n\n return async () => {\n if (filter)\n await getAction(\n client,\n uninstallFilter,\n 'uninstallFilter',\n )({ filter })\n unwatch()\n }\n })\n }\n\n const subscribeContractEvent = () => {\n const strict = strict_ ?? false\n const observerId = stringify([\n 'watchContractEvent',\n address,\n args,\n batch,\n client.uid,\n eventName,\n pollingInterval,\n strict,\n ])\n\n let active = true\n let unsubscribe = () => (active = false)\n return observe(observerId, { onLogs, onError }, (emit) => {\n ;(async () => {\n try {\n const transport = (() => {\n if (client.transport.type === 'fallback') {\n const transport = client.transport.transports.find(\n (transport: ReturnType<Transport>) =>\n transport.config.type === 'webSocket',\n )\n if (!transport) return client.transport\n return transport.value\n }\n return client.transport\n })()\n\n const topics: LogTopic[] = eventName\n ? encodeEventTopics({\n abi: abi,\n eventName: eventName,\n args,\n } as EncodeEventTopicsParameters)\n : []\n\n const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n params: ['logs', { address, topics }],\n onData(data: any) {\n if (!active) return\n const log = data.result\n try {\n const { eventName, args } = decodeEventLog({\n abi: abi,\n data: log.data,\n topics: log.topics as any,\n strict: strict_,\n })\n const formatted = formatLog(log, {\n args,\n eventName: eventName as string,\n })\n emit.onLogs([formatted] as any)\n } catch (err) {\n let eventName: string | undefined\n let isUnnamed: boolean | undefined\n if (\n err instanceof DecodeLogDataMismatch ||\n err instanceof DecodeLogTopicsMismatch\n ) {\n // If strict mode is on, and log data/topics do not match event definition, skip.\n if (strict_) return\n eventName = err.abiItem.name\n isUnnamed = err.abiItem.inputs?.some(\n (x) => !('name' in x && x.name),\n )\n }\n\n // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).\n const formatted = formatLog(log, {\n args: isUnnamed ? [] : {},\n eventName,\n })\n emit.onLogs([formatted] as any)\n }\n },\n onError(error: Error) {\n emit.onError?.(error)\n },\n })\n unsubscribe = unsubscribe_\n if (!active) unsubscribe()\n } catch (err) {\n onError?.(err as Error)\n }\n })()\n return () => unsubscribe()\n })\n }\n\n return enablePolling ? pollContractEvent() : subscribeContractEvent()\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { TransactionSerializedGeneric } from '../../types/transaction.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type SendRawTransactionParameters = {\n /** The signed serialized transaction. */\n serializedTransaction: TransactionSerializedGeneric\n}\n\nexport type SendRawTransactionReturnType = Hash\n\nexport type SendRawTransactionErrorType = RequestErrorType | ErrorType\n\n/**\n * Sends a **signed** transaction to the network\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction\n * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionParameters}\n * @returns The transaction hash. {@link SendRawTransactionReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n *\n * const hash = await sendRawTransaction(client, {\n * serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\nexport async function sendRawTransaction<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n { serializedTransaction }: SendRawTransactionParameters,\n): Promise<SendRawTransactionReturnType> {\n return client.request(\n {\n method: 'eth_sendRawTransaction',\n params: [serializedTransaction],\n },\n { retryCount: 0 },\n )\n}\n","import type { Address } from 'abitype'\nimport { BaseError } from './base.js'\n\nexport type Eip712DomainNotFoundErrorType = Eip712DomainNotFoundError & {\n name: 'Eip712DomainNotFoundError'\n}\nexport class Eip712DomainNotFoundError extends BaseError {\n constructor({ address }: { address: Address }) {\n super(`No EIP-712 domain found on contract \"${address}\".`, {\n metaMessages: [\n 'Ensure that:',\n `- The contract is deployed at the address \"${address}\".`,\n '- `eip712Domain()` function exists on the contract.',\n '- `eip712Domain()` function matches signature to ERC-5267 specification.',\n ],\n name: 'Eip712DomainNotFoundError',\n })\n }\n}\n","import type { Address, TypedDataDomain } from 'abitype'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n Eip712DomainNotFoundError,\n type Eip712DomainNotFoundErrorType,\n} from '../../errors/eip712.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequiredBy } from '../../types/utils.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type ReadContractErrorType,\n type ReadContractParameters,\n readContract,\n} from './readContract.js'\n\nexport type GetEip712DomainParameters = {\n address: Address\n} & Pick<ReadContractParameters, 'factory' | 'factoryData'>\n\nexport type GetEip712DomainReturnType = {\n domain: RequiredBy<\n TypedDataDomain,\n 'chainId' | 'name' | 'verifyingContract' | 'salt' | 'version'\n >\n fields: Hex\n extensions: readonly bigint[]\n}\n\nexport type GetEip712DomainErrorType =\n | Eip712DomainNotFoundErrorType\n | ReadContractErrorType\n | ErrorType\n\n/**\n * Reads the EIP-712 domain from a contract, based on the ERC-5267 specification.\n *\n * @param client - A {@link Client} instance.\n * @param parameters - The parameters of the action. {@link GetEip712DomainParameters}\n * @returns The EIP-712 domain, fields, and extensions. {@link GetEip712DomainReturnType}\n *\n * @example\n * ```ts\n * import { createPublicClient, http, getEip712Domain } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const domain = await getEip712Domain(client, {\n * address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * })\n * // {\n * // domain: {\n * // name: 'ExampleContract',\n * // version: '1',\n * // chainId: 1,\n * // verifyingContract: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * // },\n * // fields: '0x0f',\n * // extensions: [],\n * // }\n * ```\n */\nexport async function getEip712Domain(\n client: Client<Transport>,\n parameters: GetEip712DomainParameters,\n): Promise<GetEip712DomainReturnType> {\n const { address, factory, factoryData } = parameters\n\n try {\n const [\n fields,\n name,\n version,\n chainId,\n verifyingContract,\n salt,\n extensions,\n ] = await getAction(\n client,\n readContract,\n 'readContract',\n )({\n abi,\n address,\n functionName: 'eip712Domain',\n factory,\n factoryData,\n })\n\n return {\n domain: {\n name,\n version,\n chainId: Number(chainId),\n verifyingContract,\n salt,\n },\n extensions,\n fields,\n }\n } catch (e) {\n const error = e as ReadContractErrorType\n if (\n error.name === 'ContractFunctionExecutionError' &&\n error.cause.name === 'ContractFunctionZeroDataError'\n ) {\n throw new Eip712DomainNotFoundError({ address })\n }\n throw error\n }\n}\n\nconst abi = [\n {\n inputs: [],\n name: 'eip712Domain',\n outputs: [\n { name: 'fields', type: 'bytes1' },\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n { name: 'salt', type: 'bytes32' },\n { name: 'extensions', type: 'uint256[]' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n","const size = 256\nlet index = size\nlet buffer: string\n\nexport function uid(length = 11) {\n if (!buffer || index + length > size * 2) {\n buffer = ''\n index = 0\n for (let i = 0; i < size; i++) {\n buffer += ((256 + Math.random() * 256) | 0).toString(16).substring(1)\n }\n }\n return buffer.substring(index, index++ + length)\n}\n","import type { Address } from 'abitype'\n\nimport type { JsonRpcAccount } from '../accounts/types.js'\nimport {\n type ParseAccountErrorType,\n parseAccount,\n} from '../accounts/utils/parseAccount.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Account } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type {\n EIP1193RequestFn,\n EIP1474Methods,\n RpcSchema,\n} from '../types/eip1193.js'\nimport type { ExactPartial, Prettify } from '../types/utils.js'\nimport type {\n CcipRequestParameters,\n CcipRequestReturnType,\n} from '../utils/ccip.js'\nimport { uid } from '../utils/uid.js'\nimport type { PublicActions } from './decorators/public.js'\nimport type { WalletActions } from './decorators/wallet.js'\nimport type { Transport } from './transports/createTransport.js'\n\nexport type ClientConfig<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n accountOrAddress extends Account | Address | undefined =\n | Account\n | Address\n | undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n> = {\n /** The Account to use for the Client. This will be used for Actions that require an account as an argument. */\n account?: accountOrAddress | Account | Address | undefined\n /** Flags for batch settings. */\n batch?:\n | {\n /** Toggle to enable `eth_call` multicall aggregation. */\n multicall?: boolean | Prettify<MulticallBatchOptions> | undefined\n }\n | undefined\n /**\n * Time (in ms) that cached data will remain in memory.\n * @default 4_000\n */\n cacheTime?: number | undefined\n /**\n * [CCIP Read](https://eips.ethereum.org/EIPS/eip-3668) configuration.\n * If `false`, the client will not support offchain CCIP lookups.\n */\n ccipRead?:\n | {\n /**\n * A function that will be called to make the offchain CCIP lookup request.\n * @see https://eips.ethereum.org/EIPS/eip-3668#client-lookup-protocol\n */\n request?: (\n parameters: CcipRequestParameters,\n ) => Promise<CcipRequestReturnType>\n }\n | false\n | undefined\n /** Chain for the client. */\n chain?: Chain | undefined | chain\n /** A key for the client. */\n key?: string | undefined\n /** A name for the client. */\n name?: string | undefined\n /**\n * Frequency (in ms) for polling enabled actions & events.\n * @default 4_000\n */\n pollingInterval?: number | undefined\n /**\n * Typed JSON-RPC schema for the client.\n */\n rpcSchema?: rpcSchema | undefined\n /** The RPC transport */\n transport: transport\n /** The type of client. */\n type?: string | undefined\n}\n\n// Actions that are used internally by other Actions (ie. `call` is used by `readContract`).\n// They are allowed to be extended, but must conform to their parameter & return type interfaces.\n// Example: an extended `call` action must accept `CallParameters` as parameters,\n// and conform to the `CallReturnType` return type.\ntype ExtendableProtectedActions<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n> = Pick<\n PublicActions<transport, chain, account>,\n | 'call'\n | 'createContractEventFilter'\n | 'createEventFilter'\n | 'estimateContractGas'\n | 'estimateGas'\n | 'getBlock'\n | 'getBlockNumber'\n | 'getChainId'\n | 'getContractEvents'\n | 'getEnsText'\n | 'getFilterChanges'\n | 'getGasPrice'\n | 'getLogs'\n | 'getTransaction'\n | 'getTransactionCount'\n | 'getTransactionReceipt'\n | 'prepareTransactionRequest'\n | 'readContract'\n | 'sendRawTransaction'\n | 'simulateContract'\n | 'uninstallFilter'\n | 'watchBlockNumber'\n | 'watchContractEvent'\n> &\n Pick<WalletActions<chain, account>, 'sendTransaction' | 'writeContract'>\n\n// TODO: Move `transport` to slot index 2 since `chain` and `account` used more frequently.\n// Otherwise, we end up with a lot of `Client<Transport, chain, account>` in actions.\nexport type Client<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n extended extends Extended | undefined = Extended | undefined,\n> = Client_Base<transport, chain, account, rpcSchema> &\n (extended extends Extended ? extended : unknown) & {\n extend: <\n const client extends Extended &\n ExactPartial<ExtendableProtectedActions<transport, chain, account>>,\n >(\n fn: (\n client: Client<transport, chain, account, rpcSchema, extended>,\n ) => client,\n ) => Client<\n transport,\n chain,\n account,\n rpcSchema,\n Prettify<client> & (extended extends Extended ? extended : unknown)\n >\n }\n\ntype Client_Base<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n> = {\n /** The Account of the Client. */\n account: account\n /** Flags for batch settings. */\n batch?: ClientConfig['batch'] | undefined\n /** Time (in ms) that cached data will remain in memory. */\n cacheTime: number\n /** [CCIP Read](https://eips.ethereum.org/EIPS/eip-3668) configuration. */\n ccipRead?: ClientConfig['ccipRead'] | undefined\n /** Chain for the client. */\n chain: chain\n /** A key for the client. */\n key: string\n /** A name for the client. */\n name: string\n /** Frequency (in ms) for polling enabled actions & events. Defaults to 4_000 milliseconds. */\n pollingInterval: number\n /** Request function wrapped with friendly error handling */\n request: EIP1193RequestFn<\n rpcSchema extends undefined ? EIP1474Methods : rpcSchema\n >\n /** The RPC transport */\n transport: ReturnType<transport>['config'] & ReturnType<transport>['value']\n /** The type of client. */\n type: string\n /** A unique ID for the client. */\n uid: string\n}\n\ntype Extended = Prettify<\n // disallow redefining base properties\n { [_ in keyof Client_Base]?: undefined } & {\n [key: string]: unknown\n }\n>\n\nexport type MulticallBatchOptions = {\n /** The maximum size (in bytes) for each calldata chunk. @default 1_024 */\n batchSize?: number | undefined\n /** The maximum number of milliseconds to wait before sending a batch. @default 0 */\n wait?: number | undefined\n}\n\nexport type CreateClientErrorType = ParseAccountErrorType | ErrorType\n\nexport function createClient<\n transport extends Transport,\n chain extends Chain | undefined = undefined,\n accountOrAddress extends Account | Address | undefined = undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n>(\n parameters: ClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n): Prettify<\n Client<\n transport,\n chain,\n accountOrAddress extends Address\n ? Prettify<JsonRpcAccount<accountOrAddress>>\n : accountOrAddress,\n rpcSchema\n >\n>\n\nexport function createClient(parameters: ClientConfig): Client {\n const {\n batch,\n cacheTime = parameters.pollingInterval ?? 4_000,\n ccipRead,\n key = 'base',\n name = 'Base Client',\n pollingInterval = 4_000,\n type = 'base',\n } = parameters\n\n const chain = parameters.chain\n const account = parameters.account\n ? parseAccount(parameters.account)\n : undefined\n const { config, request, value } = parameters.transport({\n chain,\n pollingInterval,\n })\n const transport = { ...config, ...value }\n\n const client = {\n account,\n batch,\n cacheTime,\n ccipRead,\n chain,\n key,\n name,\n pollingInterval,\n request,\n transport,\n type,\n uid: uid(),\n }\n\n function extend(base: typeof client) {\n type ExtendFn = (base: typeof client) => unknown\n return (extendFn: ExtendFn) => {\n const extended = extendFn(base) as Extended\n for (const key in client) delete extended[key]\n const combined = { ...base, ...extended }\n return Object.assign(combined, { extend: extend(combined as any) })\n }\n }\n\n return Object.assign(client, { extend: extend(client) as any })\n}\n\n/**\n * Defines a typed JSON-RPC schema for the client.\n * Note: This is a runtime noop function.\n */\nexport function rpcSchema<rpcSchema extends RpcSchema>(): rpcSchema {\n return null as any\n}\n","import { LruMap } from '../lru.js'\n\n/** @internal */\nexport const promiseCache = /*#__PURE__*/ new LruMap<Promise<any>>(8192)\n\ntype WithDedupeOptions = {\n enabled?: boolean | undefined\n id?: string | undefined\n}\n\n/** Deduplicates in-flight promises. */\nexport function withDedupe<data>(\n fn: () => Promise<data>,\n { enabled = true, id }: WithDedupeOptions,\n): Promise<data> {\n if (!enabled || !id) return fn()\n if (promiseCache.get(id)) return promiseCache.get(id)!\n const promise = fn().finally(() => promiseCache.delete(id))\n promiseCache.set(id, promise)\n return promise\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport { wait } from '../wait.js'\n\nexport type WithRetryParameters = {\n // The delay (in ms) between retries.\n delay?:\n | ((config: { count: number; error: Error }) => number)\n | number\n | undefined\n // The max number of times to retry.\n retryCount?: number | undefined\n // Whether or not to retry when an error is thrown.\n shouldRetry?:\n | (({\n count,\n error,\n }: {\n count: number\n error: Error\n }) => Promise<boolean> | boolean)\n | undefined\n}\n\nexport type WithRetryErrorType = ErrorType\n\nexport function withRetry<data>(\n fn: () => Promise<data>,\n {\n delay: delay_ = 100,\n retryCount = 2,\n shouldRetry = () => true,\n }: WithRetryParameters = {},\n) {\n return new Promise<data>((resolve, reject) => {\n const attemptRetry = async ({ count = 0 } = {}) => {\n const retry = async ({ error }: { error: Error }) => {\n const delay =\n typeof delay_ === 'function' ? delay_({ count, error }) : delay_\n if (delay) await wait(delay)\n attemptRetry({ count: count + 1 })\n }\n\n try {\n const data = await fn()\n resolve(data)\n } catch (err) {\n if (\n count < retryCount &&\n (await shouldRetry({ count, error: err as Error }))\n )\n return retry({ error: err as Error })\n reject(err)\n }\n }\n attemptRetry()\n })\n}\n","import { BaseError } from '../errors/base.js'\nimport {\n HttpRequestError,\n type HttpRequestErrorType,\n type RpcRequestErrorType,\n type TimeoutErrorType,\n type WebSocketRequestErrorType,\n} from '../errors/request.js'\nimport {\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n type ProviderRpcErrorCode,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n type RpcError,\n type RpcErrorCode,\n type RpcErrorType,\n SwitchChainError,\n type SwitchChainErrorType,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n} from '../errors/rpc.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type {\n EIP1193RequestFn,\n EIP1193RequestOptions,\n} from '../types/eip1193.js'\nimport { stringToHex } from './encoding/toHex.js'\nimport { keccak256 } from './hash/keccak256.js'\nimport type { CreateBatchSchedulerErrorType } from './promise/createBatchScheduler.js'\nimport { withDedupe } from './promise/withDedupe.js'\nimport { type WithRetryErrorType, withRetry } from './promise/withRetry.js'\nimport type { GetSocketRpcClientErrorType } from './rpc/socket.js'\nimport { stringify } from './stringify.js'\n\nexport type RequestErrorType =\n | ChainDisconnectedErrorType\n | CreateBatchSchedulerErrorType\n | HttpRequestErrorType\n | InternalRpcErrorType\n | InvalidInputRpcErrorType\n | InvalidParamsRpcErrorType\n | InvalidRequestRpcErrorType\n | GetSocketRpcClientErrorType\n | JsonRpcVersionUnsupportedErrorType\n | LimitExceededRpcErrorType\n | MethodNotFoundRpcErrorType\n | MethodNotSupportedRpcErrorType\n | ParseRpcErrorType\n | ProviderDisconnectedErrorType\n | ResourceNotFoundRpcErrorType\n | ResourceUnavailableRpcErrorType\n | RpcErrorType\n | RpcRequestErrorType\n | SwitchChainErrorType\n | TimeoutErrorType\n | TransactionRejectedRpcErrorType\n | UnauthorizedProviderErrorType\n | UnknownRpcErrorType\n | UnsupportedProviderMethodErrorType\n | UserRejectedRequestErrorType\n | WebSocketRequestErrorType\n | WithRetryErrorType\n | ErrorType\n\nexport function buildRequest<request extends (args: any) => Promise<any>>(\n request: request,\n options: EIP1193RequestOptions = {},\n): EIP1193RequestFn {\n return async (args, overrideOptions = {}) => {\n const {\n dedupe = false,\n retryDelay = 150,\n retryCount = 3,\n uid,\n } = {\n ...options,\n ...overrideOptions,\n }\n const requestId = dedupe\n ? keccak256(stringToHex(`${uid}.${stringify(args)}`))\n : undefined\n return withDedupe(\n () =>\n withRetry(\n async () => {\n try {\n return await request(args)\n } catch (err_) {\n const err = err_ as unknown as RpcError<\n RpcErrorCode | ProviderRpcErrorCode\n >\n switch (err.code) {\n // -32700\n case ParseRpcError.code:\n throw new ParseRpcError(err)\n // -32600\n case InvalidRequestRpcError.code:\n throw new InvalidRequestRpcError(err)\n // -32601\n case MethodNotFoundRpcError.code:\n throw new MethodNotFoundRpcError(err, { method: args.method })\n // -32602\n case InvalidParamsRpcError.code:\n throw new InvalidParamsRpcError(err)\n // -32603\n case InternalRpcError.code:\n throw new InternalRpcError(err)\n // -32000\n case InvalidInputRpcError.code:\n throw new InvalidInputRpcError(err)\n // -32001\n case ResourceNotFoundRpcError.code:\n throw new ResourceNotFoundRpcError(err)\n // -32002\n case ResourceUnavailableRpcError.code:\n throw new ResourceUnavailableRpcError(err)\n // -32003\n case TransactionRejectedRpcError.code:\n throw new TransactionRejectedRpcError(err)\n // -32004\n case MethodNotSupportedRpcError.code:\n throw new MethodNotSupportedRpcError(err, {\n method: args.method,\n })\n // -32005\n case LimitExceededRpcError.code:\n throw new LimitExceededRpcError(err)\n // -32006\n case JsonRpcVersionUnsupportedError.code:\n throw new JsonRpcVersionUnsupportedError(err)\n // 4001\n case UserRejectedRequestError.code:\n throw new UserRejectedRequestError(err)\n // 4100\n case UnauthorizedProviderError.code:\n throw new UnauthorizedProviderError(err)\n // 4200\n case UnsupportedProviderMethodError.code:\n throw new UnsupportedProviderMethodError(err)\n // 4900\n case ProviderDisconnectedError.code:\n throw new ProviderDisconnectedError(err)\n // 4901\n case ChainDisconnectedError.code:\n throw new ChainDisconnectedError(err)\n // 4902\n case SwitchChainError.code:\n throw new SwitchChainError(err)\n // CAIP-25: User Rejected Error\n // https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes#rejected-caip-25\n case 5000:\n throw new UserRejectedRequestError(err)\n default:\n if (err_ instanceof BaseError) throw err_\n throw new UnknownRpcError(err as Error)\n }\n }\n },\n {\n delay: ({ count, error }) => {\n // If we find a Retry-After header, let's retry after the given time.\n if (error && error instanceof HttpRequestError) {\n const retryAfter = error?.headers?.get('Retry-After')\n if (retryAfter?.match(/\\d/))\n return Number.parseInt(retryAfter) * 1000\n }\n\n // Otherwise, let's retry with an exponential backoff.\n return ~~(1 << count) * retryDelay\n },\n retryCount,\n shouldRetry: ({ error }) => shouldRetry(error),\n },\n ),\n { enabled: dedupe, id: requestId },\n )\n }\n}\n\n/** @internal */\nexport function shouldRetry(error: Error) {\n if ('code' in error && typeof error.code === 'number') {\n if (error.code === -1) return true // Unknown error\n if (error.code === LimitExceededRpcError.code) return true\n if (error.code === InternalRpcError.code) return true\n return false\n }\n if (error instanceof HttpRequestError && error.status) {\n // Forbidden\n if (error.status === 403) return true\n // Request Timeout\n if (error.status === 408) return true\n // Request Entity Too Large\n if (error.status === 413) return true\n // Too Many Requests\n if (error.status === 429) return true\n // Internal Server Error\n if (error.status === 500) return true\n // Bad Gateway\n if (error.status === 502) return true\n // Service Unavailable\n if (error.status === 503) return true\n // Gateway Timeout\n if (error.status === 504) return true\n return false\n }\n return true\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { EIP1193RequestFn } from '../../types/eip1193.js'\nimport { buildRequest } from '../../utils/buildRequest.js'\nimport { uid as uid_ } from '../../utils/uid.js'\nimport type { ClientConfig } from '../createClient.js'\n\nexport type TransportConfig<\n type extends string = string,\n eip1193RequestFn extends EIP1193RequestFn = EIP1193RequestFn,\n> = {\n /** The name of the transport. */\n name: string\n /** The key of the transport. */\n key: string\n /** The JSON-RPC request function that matches the EIP-1193 request spec. */\n request: eip1193RequestFn\n /** The base delay (in ms) between retries. */\n retryDelay?: number | undefined\n /** The max number of times to retry. */\n retryCount?: number | undefined\n /** The timeout (in ms) for requests. */\n timeout?: number | undefined\n /** The type of the transport. */\n type: type\n}\n\nexport type Transport<\n type extends string = string,\n rpcAttributes = Record<string, any>,\n eip1193RequestFn extends EIP1193RequestFn = EIP1193RequestFn,\n> = <chain extends Chain | undefined = Chain>({\n chain,\n}: {\n chain?: chain | undefined\n pollingInterval?: ClientConfig['pollingInterval'] | undefined\n retryCount?: TransportConfig['retryCount'] | undefined\n timeout?: TransportConfig['timeout'] | undefined\n}) => {\n config: TransportConfig<type>\n request: eip1193RequestFn\n value?: rpcAttributes | undefined\n}\n\nexport type CreateTransportErrorType = ErrorType\n\n/**\n * @description Creates an transport intended to be used with a client.\n */\nexport function createTransport<\n type extends string,\n rpcAttributes extends Record<string, any>,\n>(\n {\n key,\n name,\n request,\n retryCount = 3,\n retryDelay = 150,\n timeout,\n type,\n }: TransportConfig<type>,\n value?: rpcAttributes | undefined,\n): ReturnType<Transport<type, rpcAttributes>> {\n const uid = uid_()\n return {\n config: {\n key,\n name,\n request,\n retryCount,\n retryDelay,\n timeout,\n type,\n },\n request: buildRequest(request, { retryCount, retryDelay, uid }),\n value,\n }\n}\n","import { BaseError } from './base.js'\n\nexport type UrlRequiredErrorType = UrlRequiredError & {\n name: 'UrlRequiredError'\n}\nexport class UrlRequiredError extends BaseError {\n constructor() {\n super(\n 'No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.',\n {\n docsPath: '/docs/clients/intro',\n name: 'UrlRequiredError',\n },\n )\n }\n}\n","import type { ErrorType } from '../../errors/utils.js'\n\nexport type WithTimeoutErrorType = ErrorType\n\nexport function withTimeout<data>(\n fn: ({\n signal,\n }: { signal: AbortController['signal'] | null }) => Promise<data>,\n {\n errorInstance = new Error('timed out'),\n timeout,\n signal,\n }: {\n // The error instance to throw when the timeout is reached.\n errorInstance?: Error | undefined\n // The timeout (in ms).\n timeout: number\n // Whether or not the timeout should use an abort signal.\n signal?: boolean | undefined\n },\n): Promise<data> {\n return new Promise((resolve, reject) => {\n ;(async () => {\n let timeoutId!: NodeJS.Timeout\n try {\n const controller = new AbortController()\n if (timeout > 0) {\n timeoutId = setTimeout(() => {\n if (signal) {\n controller.abort()\n } else {\n reject(errorInstance)\n }\n }, timeout) as NodeJS.Timeout // need to cast because bun globals.d.ts overrides @types/node\n }\n resolve(await fn({ signal: controller?.signal || null }))\n } catch (err) {\n if ((err as Error)?.name === 'AbortError') reject(errorInstance)\n reject(err)\n } finally {\n clearTimeout(timeoutId)\n }\n })()\n })\n}\n","function createIdStore() {\n return {\n current: 0,\n take() {\n return this.current++\n },\n reset() {\n this.current = 0\n },\n }\n}\n\nexport const idCache = /*#__PURE__*/ createIdStore()\n","import {\n HttpRequestError,\n type HttpRequestErrorType as HttpRequestErrorType_,\n TimeoutError,\n type TimeoutErrorType,\n} from '../../errors/request.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcRequest, RpcResponse } from '../../types/rpc.js'\nimport type { MaybePromise } from '../../types/utils.js'\nimport {\n type WithTimeoutErrorType,\n withTimeout,\n} from '../promise/withTimeout.js'\nimport { stringify } from '../stringify.js'\nimport { idCache } from './id.js'\n\nexport type HttpRpcClientOptions = {\n /** Request configuration to pass to `fetch`. */\n fetchOptions?: Omit<RequestInit, 'body'> | undefined\n /** A callback to handle the request. */\n onRequest?:\n | ((\n request: Request,\n init: RequestInit,\n ) => MaybePromise<\n void | undefined | (RequestInit & { url?: string | undefined })\n >)\n | undefined\n /** A callback to handle the response. */\n onResponse?: ((response: Response) => Promise<void> | void) | undefined\n /** The timeout (in ms) for the request. */\n timeout?: number | undefined\n}\n\nexport type HttpRequestParameters<\n body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = {\n /** The RPC request body. */\n body: body\n /** Request configuration to pass to `fetch`. */\n fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined\n /** A callback to handle the response. */\n onRequest?:\n | ((\n request: Request,\n init: RequestInit,\n ) => MaybePromise<\n void | undefined | (RequestInit & { url?: string | undefined })\n >)\n | undefined\n /** A callback to handle the response. */\n onResponse?: ((response: Response) => Promise<void> | void) | undefined\n /** The timeout (in ms) for the request. */\n timeout?: HttpRpcClientOptions['timeout'] | undefined\n}\n\nexport type HttpRequestReturnType<\n body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = body extends RpcRequest[] ? RpcResponse[] : RpcResponse\n\nexport type HttpRequestErrorType =\n | HttpRequestErrorType_\n | TimeoutErrorType\n | WithTimeoutErrorType\n | ErrorType\n\nexport type HttpRpcClient = {\n request<body extends RpcRequest | RpcRequest[]>(\n params: HttpRequestParameters<body>,\n ): Promise<HttpRequestReturnType<body>>\n}\n\nexport function getHttpRpcClient(\n url: string,\n options: HttpRpcClientOptions = {},\n): HttpRpcClient {\n return {\n async request(params) {\n const {\n body,\n onRequest = options.onRequest,\n onResponse = options.onResponse,\n timeout = options.timeout ?? 10_000,\n } = params\n\n const fetchOptions = {\n ...(options.fetchOptions ?? {}),\n ...(params.fetchOptions ?? {}),\n }\n\n const { headers, method, signal: signal_ } = fetchOptions\n\n try {\n const response = await withTimeout(\n async ({ signal }) => {\n const init: RequestInit = {\n ...fetchOptions,\n body: Array.isArray(body)\n ? stringify(\n body.map((body) => ({\n jsonrpc: '2.0',\n id: body.id ?? idCache.take(),\n ...body,\n })),\n )\n : stringify({\n jsonrpc: '2.0',\n id: body.id ?? idCache.take(),\n ...body,\n }),\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n method: method || 'POST',\n signal: signal_ || (timeout > 0 ? signal : null),\n }\n const request = new Request(url, init)\n const args = (await onRequest?.(request, init)) ?? { ...init, url }\n const response = await fetch(args.url ?? url, args)\n return response\n },\n {\n errorInstance: new TimeoutError({ body, url }),\n timeout,\n signal: true,\n },\n )\n\n if (onResponse) await onResponse(response)\n\n let data: any\n if (\n response.headers.get('Content-Type')?.startsWith('application/json')\n )\n data = await response.json()\n else {\n data = await response.text()\n try {\n data = JSON.parse(data || '{}')\n } catch (err) {\n if (response.ok) throw err\n data = { error: data }\n }\n }\n\n if (!response.ok) {\n throw new HttpRequestError({\n body,\n details: stringify(data.error) || response.statusText,\n headers: response.headers,\n status: response.status,\n url,\n })\n }\n\n return data\n } catch (err) {\n if (err instanceof HttpRequestError) throw err\n if (err instanceof TimeoutError) throw err\n throw new HttpRequestError({\n body,\n cause: err as Error,\n url,\n })\n }\n },\n }\n}\n","import { RpcRequestError } from '../../errors/request.js'\nimport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from '../../errors/transport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { RpcRequest } from '../../types/rpc.js'\nimport { createBatchScheduler } from '../../utils/promise/createBatchScheduler.js'\nimport {\n type HttpRpcClientOptions,\n getHttpRpcClient,\n} from '../../utils/rpc/http.js'\n\nimport {\n type CreateTransportErrorType,\n type Transport,\n type TransportConfig,\n createTransport,\n} from './createTransport.js'\n\nexport type HttpTransportConfig = {\n /**\n * Whether to enable Batch JSON-RPC.\n * @link https://www.jsonrpc.org/specification#batch\n */\n batch?:\n | boolean\n | {\n /** The maximum number of JSON-RPC requests to send in a batch. @default 1_000 */\n batchSize?: number | undefined\n /** The maximum number of milliseconds to wait before sending a batch. @default 0 */\n wait?: number | undefined\n }\n | undefined\n /**\n * Request configuration to pass to `fetch`.\n * @link https://developer.mozilla.org/en-US/docs/Web/API/fetch\n */\n fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined\n /** A callback to handle the response from `fetch`. */\n onFetchRequest?: HttpRpcClientOptions['onRequest'] | undefined\n /** A callback to handle the response from `fetch`. */\n onFetchResponse?: HttpRpcClientOptions['onResponse'] | undefined\n /** The key of the HTTP transport. */\n key?: TransportConfig['key'] | undefined\n /** The name of the HTTP transport. */\n name?: TransportConfig['name'] | undefined\n /** The max number of times to retry. */\n retryCount?: TransportConfig['retryCount'] | undefined\n /** The base delay (in ms) between retries. */\n retryDelay?: TransportConfig['retryDelay'] | undefined\n /** The timeout (in ms) for the HTTP request. Default: 10_000 */\n timeout?: TransportConfig['timeout'] | undefined\n}\n\nexport type HttpTransport = Transport<\n 'http',\n {\n fetchOptions?: HttpTransportConfig['fetchOptions'] | undefined\n url?: string | undefined\n }\n>\n\nexport type HttpTransportErrorType =\n | CreateTransportErrorType\n | UrlRequiredErrorType\n | ErrorType\n\n/**\n * @description Creates a HTTP transport that connects to a JSON-RPC API.\n */\nexport function http(\n /** URL of the JSON-RPC API. Defaults to the chain's public RPC URL. */\n url?: string | undefined,\n config: HttpTransportConfig = {},\n): HttpTransport {\n const {\n batch,\n fetchOptions,\n key = 'http',\n name = 'HTTP JSON-RPC',\n onFetchRequest,\n onFetchResponse,\n retryDelay,\n } = config\n return ({ chain, retryCount: retryCount_, timeout: timeout_ }) => {\n const { batchSize = 1000, wait = 0 } =\n typeof batch === 'object' ? batch : {}\n const retryCount = config.retryCount ?? retryCount_\n const timeout = timeout_ ?? config.timeout ?? 10_000\n const url_ = url || chain?.rpcUrls.default.http[0]\n if (!url_) throw new UrlRequiredError()\n\n const rpcClient = getHttpRpcClient(url_, {\n fetchOptions,\n onRequest: onFetchRequest,\n onResponse: onFetchResponse,\n timeout,\n })\n\n return createTransport(\n {\n key,\n name,\n async request({ method, params }) {\n const body = { method, params }\n\n const { schedule } = createBatchScheduler({\n id: url_,\n wait,\n shouldSplitBatch(requests) {\n return requests.length > batchSize\n },\n fn: (body: RpcRequest[]) =>\n rpcClient.request({\n body,\n }),\n sort: (a, b) => a.id - b.id,\n })\n\n const fn = async (body: RpcRequest) =>\n batch\n ? schedule(body)\n : [\n await rpcClient.request({\n body,\n }),\n ]\n\n const [{ error, result }] = await fn(body)\n if (error)\n throw new RpcRequestError({\n body,\n error,\n url: url_,\n })\n return result\n },\n retryCount,\n retryDelay,\n timeout,\n type: 'http',\n },\n {\n fetchOptions,\n url: url_,\n },\n )\n }\n}\n","import { panicReasons } from '../../constants/solidity.js'\nimport { BaseError } from '../../errors/base.js'\nimport { ContractFunctionRevertedError } from '../../errors/contract.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\n/** @internal */\nexport type IsNullUniversalResolverErrorErrorType = ErrorType\n\n/*\n * @description Checks if error is a valid null result UniversalResolver error\n */\nexport function isNullUniversalResolverError(\n err: unknown,\n callType: 'resolve' | 'reverse',\n): boolean {\n if (!(err instanceof BaseError)) return false\n const cause = err.walk((e) => e instanceof ContractFunctionRevertedError)\n if (!(cause instanceof ContractFunctionRevertedError)) return false\n if (cause.data?.errorName === 'ResolverNotFound') return true\n if (cause.data?.errorName === 'ResolverWildcardNotSupported') return true\n if (cause.data?.errorName === 'ResolverNotContract') return true\n if (cause.data?.errorName === 'ResolverError') return true\n if (cause.data?.errorName === 'HttpError') return true\n // Backwards compatibility for older UniversalResolver contracts\n if (\n cause.reason?.includes(\n 'Wildcard on non-extended resolvers is not supported',\n )\n )\n return true\n // No primary name set for address.\n if (callType === 'reverse' && cause.reason === panicReasons[50]) return true\n return false\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsHexErrorType, isHex } from '../data/isHex.js'\n\nexport type EncodedLabelToLabelhashErrorType = IsHexErrorType | ErrorType\n\nexport function encodedLabelToLabelhash(label: string): Hex | null {\n if (label.length !== 66) return null\n if (label.indexOf('[') !== 0) return null\n if (label.indexOf(']') !== 65) return null\n const hash = `0x${label.slice(1, 65)}`\n if (!isHex(hash)) return null\n return hash\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport {\n type StringToBytesErrorType,\n type ToBytesErrorType,\n stringToBytes,\n toBytes,\n} from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n type EncodedLabelToLabelhashErrorType,\n encodedLabelToLabelhash,\n} from './encodedLabelToLabelhash.js'\n\nexport type NamehashErrorType =\n | BytesToHexErrorType\n | EncodedLabelToLabelhashErrorType\n | ToBytesErrorType\n | Keccak256ErrorType\n | StringToBytesErrorType\n | ConcatErrorType\n | ErrorType\n\n/**\n * @description Hashes ENS name\n *\n * - Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `namehash`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @example\n * namehash('wevm.eth')\n * '0xf246651c1b9a6b141d19c2604e9a58f567973833990f830d882534a747801359'\n *\n * @link https://eips.ethereum.org/EIPS/eip-137\n */\nexport function namehash(name: string) {\n let result = new Uint8Array(32).fill(0)\n if (!name) return bytesToHex(result)\n\n const labels = name.split('.')\n // Iterate in reverse order building up hash\n for (let i = labels.length - 1; i >= 0; i -= 1) {\n const hashFromEncodedLabel = encodedLabelToLabelhash(labels[i])\n const hashed = hashFromEncodedLabel\n ? toBytes(hashFromEncodedLabel)\n : keccak256(stringToBytes(labels[i]), 'bytes')\n result = keccak256(concat([result, hashed]), 'bytes')\n }\n\n return bytesToHex(result)\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\n\nexport type EncodeLabelhashErrorType = ErrorType\n\nexport function encodeLabelhash(hash: Hex): `[${string}]` {\n return `[${hash.slice(2)}]`\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport {\n type StringToBytesErrorType,\n stringToBytes,\n} from '../encoding/toBytes.js'\nimport { type BytesToHexErrorType, bytesToHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n type EncodedLabelToLabelhashErrorType,\n encodedLabelToLabelhash,\n} from './encodedLabelToLabelhash.js'\n\nexport type LabelhashErrorType =\n | BytesToHexErrorType\n | EncodedLabelToLabelhashErrorType\n | Keccak256ErrorType\n | StringToBytesErrorType\n | ErrorType\n\n/**\n * @description Hashes ENS label\n *\n * - Since ENS labels prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS labels](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `labelhash`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @example\n * labelhash('eth')\n * '0x4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0'\n */\nexport function labelhash(label: string) {\n const result = new Uint8Array(32).fill(0)\n if (!label) return bytesToHex(result)\n return encodedLabelToLabelhash(label) || keccak256(stringToBytes(label))\n}\n","// Adapted from https://github.com/mafintosh/dns-packet\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray } from '../../types/misc.js'\nimport {\n type StringToBytesErrorType,\n stringToBytes,\n} from '../encoding/toBytes.js'\nimport {\n type EncodeLabelhashErrorType,\n encodeLabelhash,\n} from './encodeLabelhash.js'\nimport { type LabelhashErrorType, labelhash } from './labelhash.js'\n\nexport type PacketToBytesErrorType =\n | EncodeLabelhashErrorType\n | LabelhashErrorType\n | StringToBytesErrorType\n | ErrorType\n\n/*\n * @description Encodes a DNS packet into a ByteArray containing a UDP payload.\n *\n * @example\n * packetToBytes('awkweb.eth')\n * '0x0661776b7765620365746800'\n *\n * @see https://docs.ens.domains/resolution/names#dns\n *\n */\nexport function packetToBytes(packet: string): ByteArray {\n // strip leading and trailing `.`\n const value = packet.replace(/^\\.|\\.$/gm, '')\n if (value.length === 0) return new Uint8Array(1)\n\n const bytes = new Uint8Array(stringToBytes(value).byteLength + 2)\n\n let offset = 0\n const list = value.split('.')\n for (let i = 0; i < list.length; i++) {\n let encoded = stringToBytes(list[i])\n // if the length is > 255, make the encoded label value a labelhash\n // this is compatible with the universal resolver\n if (encoded.byteLength > 255)\n encoded = stringToBytes(encodeLabelhash(labelhash(list[i])))\n bytes[offset] = encoded.length\n bytes.set(encoded, offset + 1)\n offset += encoded.length + 1\n }\n\n if (bytes.byteLength !== offset + 1) return bytes.slice(0, offset + 1)\n\n return bytes\n}\n","import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n addressResolverAbi,\n universalResolverResolveAbi,\n} from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type TrimErrorType, trim } from '../../utils/data/trim.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { type NamehashErrorType, namehash } from '../../utils/ens/namehash.js'\nimport {\n type PacketToBytesErrorType,\n packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type ReadContractParameters,\n readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsAddressParameters = Prettify<\n Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n /** ENSIP-9 compliant coinType used to resolve addresses for other chains */\n coinType?: number | undefined\n /** Universal Resolver gateway URLs to use for resolving CCIP-read requests. */\n gatewayUrls?: string[] | undefined\n /** Name to get the address for. */\n name: string\n /** Whether or not to throw errors propagated from the ENS Universal Resolver Contract. */\n strict?: boolean | undefined\n /** Address of ENS Universal Resolver Contract. */\n universalResolverAddress?: Address | undefined\n }\n>\n\nexport type GetEnsAddressReturnType = Address | null\n\nexport type GetEnsAddressErrorType =\n | GetChainContractAddressErrorType\n | EncodeFunctionDataErrorType\n | NamehashErrorType\n | ToHexErrorType\n | PacketToBytesErrorType\n | DecodeFunctionResultErrorType\n | TrimErrorType\n | ErrorType\n\n/**\n * Gets address for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAddress\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsAddressParameters}\n * @returns Address for ENS name or `null` if not found. {@link GetEnsAddressReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsAddress, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensAddress = await getEnsAddress(client, {\n * name: normalize('wevm.eth'),\n * })\n * // '0xd2135CfB216b74109775236E36d4b433F1DF507B'\n */\nexport async function getEnsAddress<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n blockNumber,\n blockTag,\n coinType,\n name,\n gatewayUrls,\n strict,\n universalResolverAddress: universalResolverAddress_,\n }: GetEnsAddressParameters,\n): Promise<GetEnsAddressReturnType> {\n let universalResolverAddress = universalResolverAddress_\n if (!universalResolverAddress) {\n if (!client.chain)\n throw new Error(\n 'client chain not configured. universalResolverAddress is required.',\n )\n\n universalResolverAddress = getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'ensUniversalResolver',\n })\n }\n\n try {\n const functionData = encodeFunctionData({\n abi: addressResolverAbi,\n functionName: 'addr',\n ...(coinType != null\n ? { args: [namehash(name), BigInt(coinType)] }\n : { args: [namehash(name)] }),\n })\n\n const readContractParameters = {\n address: universalResolverAddress,\n abi: universalResolverResolveAbi,\n functionName: 'resolve',\n args: [toHex(packetToBytes(name)), functionData],\n blockNumber,\n blockTag,\n } as const\n\n const readContractAction = getAction(client, readContract, 'readContract')\n\n const res = gatewayUrls\n ? await readContractAction({\n ...readContractParameters,\n args: [...readContractParameters.args, gatewayUrls],\n })\n : await readContractAction(readContractParameters)\n\n if (res[0] === '0x') return null\n\n const address = decodeFunctionResult({\n abi: addressResolverAbi,\n args: coinType != null ? [namehash(name), BigInt(coinType)] : undefined,\n functionName: 'addr',\n data: res[0],\n })\n\n if (address === '0x') return null\n if (trim(address) === '0x00') return null\n return address\n } catch (err) {\n if (strict) throw err\n if (isNullUniversalResolverError(err, 'resolve')) return null\n throw err\n }\n}\n","import { BaseError } from './base.js'\n\nexport type EnsAvatarInvalidMetadataErrorType =\n EnsAvatarInvalidMetadataError & {\n name: 'EnsAvatarInvalidMetadataError'\n }\nexport class EnsAvatarInvalidMetadataError extends BaseError {\n constructor({ data }: { data: any }) {\n super(\n 'Unable to extract image from metadata. The metadata may be malformed or invalid.',\n {\n metaMessages: [\n '- Metadata must be a JSON object with at least an `image`, `image_url` or `image_data` property.',\n '',\n `Provided data: ${JSON.stringify(data)}`,\n ],\n name: 'EnsAvatarInvalidMetadataError',\n },\n )\n }\n}\n\nexport type EnsAvatarInvalidNftUriErrorType = EnsAvatarInvalidNftUriError & {\n name: 'EnsAvatarInvalidNftUriError'\n}\nexport class EnsAvatarInvalidNftUriError extends BaseError {\n constructor({ reason }: { reason: string }) {\n super(`ENS NFT avatar URI is invalid. ${reason}`, {\n name: 'EnsAvatarInvalidNftUriError',\n })\n }\n}\n\nexport type EnsAvatarUriResolutionErrorType = EnsAvatarUriResolutionError & {\n name: 'EnsAvatarUriResolutionError'\n}\nexport class EnsAvatarUriResolutionError extends BaseError {\n constructor({ uri }: { uri: string }) {\n super(\n `Unable to resolve ENS avatar URI \"${uri}\". The URI may be malformed, invalid, or does not respond with a valid image.`,\n { name: 'EnsAvatarUriResolutionError' },\n )\n }\n}\n\nexport type EnsAvatarUnsupportedNamespaceErrorType =\n EnsAvatarUnsupportedNamespaceError & {\n name: 'EnsAvatarUnsupportedNamespaceError'\n }\nexport class EnsAvatarUnsupportedNamespaceError extends BaseError {\n constructor({ namespace }: { namespace: string }) {\n super(\n `ENS NFT avatar namespace \"${namespace}\" is not supported. Must be \"erc721\" or \"erc1155\".`,\n { name: 'EnsAvatarUnsupportedNamespaceError' },\n )\n }\n}\n","import type { Address } from 'abitype'\n\nimport {\n type ReadContractErrorType,\n readContract,\n} from '../../../actions/public/readContract.js'\nimport type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport {\n EnsAvatarInvalidMetadataError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n EnsAvatarUriResolutionError,\n type EnsAvatarUriResolutionErrorType,\n} from '../../../errors/ens.js'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { Chain } from '../../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../../types/ens.js'\n\ntype UriItem = {\n uri: string\n isOnChain: boolean\n isEncoded: boolean\n}\n\nconst networkRegex =\n /(?<protocol>https?:\\/\\/[^\\/]*|ipfs:\\/|ipns:\\/|ar:\\/)?(?<root>\\/)?(?<subpath>ipfs\\/|ipns\\/)?(?<target>[\\w\\-.]+)(?<subtarget>\\/.*)?/\nconst ipfsHashRegex =\n /^(Qm[1-9A-HJ-NP-Za-km-z]{44,}|b[A-Za-z2-7]{58,}|B[A-Z2-7]{58,}|z[1-9A-HJ-NP-Za-km-z]{48,}|F[0-9A-F]{50,})(\\/(?<target>[\\w\\-.]+))?(?<subtarget>\\/.*)?$/\nconst base64Regex = /^data:([a-zA-Z\\-/+]*);base64,([^\"].*)/\nconst dataURIRegex = /^data:([a-zA-Z\\-/+]*)?(;[a-zA-Z0-9].*?)?(,)/\n\ntype IsImageUriErrorType = ErrorType\n\n/** @internal */\nexport async function isImageUri(uri: string) {\n try {\n const res = await fetch(uri, { method: 'HEAD' })\n // retrieve content type header to check if content is image\n if (res.status === 200) {\n const contentType = res.headers.get('content-type')\n return contentType?.startsWith('image/')\n }\n return false\n } catch (error: any) {\n // if error is not cors related then fail\n if (typeof error === 'object' && typeof error.response !== 'undefined') {\n return false\n }\n // fail in NodeJS, since the error is not cors but any other network issue\n // biome-ignore lint/suspicious/noPrototypeBuiltins:\n if (!globalThis.hasOwnProperty('Image')) return false\n // in case of cors, use image api to validate if given url is an actual image\n return new Promise((resolve) => {\n const img = new Image()\n img.onload = () => {\n resolve(true)\n }\n img.onerror = () => {\n resolve(false)\n }\n img.src = uri\n })\n }\n}\n\ntype GetGatewayErrorType = ErrorType\n\n/** @internal */\nexport function getGateway(custom: string | undefined, defaultGateway: string) {\n if (!custom) return defaultGateway\n if (custom.endsWith('/')) return custom.slice(0, -1)\n return custom\n}\n\nexport type ResolveAvatarUriErrorType =\n | GetGatewayErrorType\n | EnsAvatarUriResolutionErrorType\n | ErrorType\n\nexport function resolveAvatarUri({\n uri,\n gatewayUrls,\n}: {\n uri: string\n gatewayUrls?: AssetGatewayUrls | undefined\n}): UriItem {\n const isEncoded = base64Regex.test(uri)\n if (isEncoded) return { uri, isOnChain: true, isEncoded }\n\n const ipfsGateway = getGateway(gatewayUrls?.ipfs, 'https://ipfs.io')\n const arweaveGateway = getGateway(gatewayUrls?.arweave, 'https://arweave.net')\n\n const networkRegexMatch = uri.match(networkRegex)\n const {\n protocol,\n subpath,\n target,\n subtarget = '',\n } = networkRegexMatch?.groups || {}\n\n const isIPNS = protocol === 'ipns:/' || subpath === 'ipns/'\n const isIPFS =\n protocol === 'ipfs:/' || subpath === 'ipfs/' || ipfsHashRegex.test(uri)\n\n if (uri.startsWith('http') && !isIPNS && !isIPFS) {\n let replacedUri = uri\n if (gatewayUrls?.arweave)\n replacedUri = uri.replace(/https:\\/\\/arweave.net/g, gatewayUrls?.arweave)\n return { uri: replacedUri, isOnChain: false, isEncoded: false }\n }\n\n if ((isIPNS || isIPFS) && target) {\n return {\n uri: `${ipfsGateway}/${isIPNS ? 'ipns' : 'ipfs'}/${target}${subtarget}`,\n isOnChain: false,\n isEncoded: false,\n }\n }\n\n if (protocol === 'ar:/' && target) {\n return {\n uri: `${arweaveGateway}/${target}${subtarget || ''}`,\n isOnChain: false,\n isEncoded: false,\n }\n }\n\n let parsedUri = uri.replace(dataURIRegex, '')\n if (parsedUri.startsWith('<svg')) {\n // if svg, base64 encode\n parsedUri = `data:image/svg+xml;base64,${btoa(parsedUri)}`\n }\n\n if (parsedUri.startsWith('data:') || parsedUri.startsWith('{')) {\n return {\n uri: parsedUri,\n isOnChain: true,\n isEncoded: false,\n }\n }\n\n throw new EnsAvatarUriResolutionError({ uri })\n}\n\nexport type GetJsonImageErrorType =\n | EnsAvatarInvalidMetadataErrorType\n | ErrorType\n\nexport function getJsonImage(data: any) {\n // validation check for json data, must include one of theses properties\n if (\n typeof data !== 'object' ||\n (!('image' in data) && !('image_url' in data) && !('image_data' in data))\n ) {\n throw new EnsAvatarInvalidMetadataError({ data })\n }\n\n return data.image || data.image_url || data.image_data\n}\n\nexport type GetMetadataAvatarUriErrorType =\n | EnsAvatarUriResolutionErrorType\n | ParseAvatarUriErrorType\n | GetJsonImageErrorType\n | ErrorType\n\nexport async function getMetadataAvatarUri({\n gatewayUrls,\n uri,\n}: {\n gatewayUrls?: AssetGatewayUrls | undefined\n uri: string\n}): Promise<string> {\n try {\n const res = await fetch(uri).then((res) => res.json())\n const image = await parseAvatarUri({\n gatewayUrls,\n uri: getJsonImage(res),\n })\n return image\n } catch {\n throw new EnsAvatarUriResolutionError({ uri })\n }\n}\n\nexport type ParseAvatarUriErrorType =\n | ResolveAvatarUriErrorType\n | IsImageUriErrorType\n | EnsAvatarUriResolutionErrorType\n | ErrorType\n\nexport async function parseAvatarUri({\n gatewayUrls,\n uri,\n}: {\n gatewayUrls?: AssetGatewayUrls | undefined\n uri: string\n}): Promise<string> {\n const { uri: resolvedURI, isOnChain } = resolveAvatarUri({ uri, gatewayUrls })\n if (isOnChain) return resolvedURI\n\n // check if resolvedURI is an image, if it is return the url\n const isImage = await isImageUri(resolvedURI)\n if (isImage) return resolvedURI\n\n throw new EnsAvatarUriResolutionError({ uri })\n}\n\ntype ParsedNft = {\n chainID: number\n namespace: string\n contractAddress: Address\n tokenID: string\n}\n\nexport type ParseNftUriErrorType = EnsAvatarInvalidNftUriErrorType | ErrorType\n\nexport function parseNftUri(uri_: string): ParsedNft {\n let uri = uri_\n // parse valid nft spec (CAIP-22/CAIP-29)\n // @see: https://github.com/ChainAgnostic/CAIPs/tree/master/CAIPs\n if (uri.startsWith('did:nft:')) {\n // convert DID to CAIP\n uri = uri.replace('did:nft:', '').replace(/_/g, '/')\n }\n\n const [reference, asset_namespace, tokenID] = uri.split('/')\n const [eip_namespace, chainID] = reference.split(':')\n const [erc_namespace, contractAddress] = asset_namespace.split(':')\n\n if (!eip_namespace || eip_namespace.toLowerCase() !== 'eip155')\n throw new EnsAvatarInvalidNftUriError({ reason: 'Only EIP-155 supported' })\n if (!chainID)\n throw new EnsAvatarInvalidNftUriError({ reason: 'Chain ID not found' })\n if (!contractAddress)\n throw new EnsAvatarInvalidNftUriError({\n reason: 'Contract address not found',\n })\n if (!tokenID)\n throw new EnsAvatarInvalidNftUriError({ reason: 'Token ID not found' })\n if (!erc_namespace)\n throw new EnsAvatarInvalidNftUriError({ reason: 'ERC namespace not found' })\n\n return {\n chainID: Number.parseInt(chainID),\n namespace: erc_namespace.toLowerCase(),\n contractAddress: contractAddress as Address,\n tokenID,\n }\n}\n\nexport type GetNftTokenUriErrorType =\n | ReadContractErrorType\n | EnsAvatarUnsupportedNamespaceErrorType\n | ErrorType\n\nexport async function getNftTokenUri<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n { nft }: { nft: ParsedNft },\n) {\n if (nft.namespace === 'erc721') {\n return readContract(client, {\n address: nft.contractAddress,\n abi: [\n {\n name: 'tokenURI',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'tokenId', type: 'uint256' }],\n outputs: [{ name: '', type: 'string' }],\n },\n ],\n functionName: 'tokenURI',\n args: [BigInt(nft.tokenID)],\n })\n }\n if (nft.namespace === 'erc1155') {\n return readContract(client, {\n address: nft.contractAddress,\n abi: [\n {\n name: 'uri',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: '_id', type: 'uint256' }],\n outputs: [{ name: '', type: 'string' }],\n },\n ],\n functionName: 'uri',\n args: [BigInt(nft.tokenID)],\n })\n }\n throw new EnsAvatarUnsupportedNamespaceError({ namespace: nft.namespace })\n}\n","import type { Client } from '../../../clients/createClient.js'\nimport type { Transport } from '../../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../../errors/utils.js'\nimport type { Chain } from '../../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../../types/ens.js'\n\nimport {\n type GetJsonImageErrorType,\n type GetMetadataAvatarUriErrorType,\n type GetNftTokenUriErrorType,\n type ParseAvatarUriErrorType,\n type ParseNftUriErrorType,\n type ResolveAvatarUriErrorType,\n getJsonImage,\n getMetadataAvatarUri,\n getNftTokenUri,\n parseAvatarUri,\n parseNftUri,\n resolveAvatarUri,\n} from './utils.js'\n\nexport type ParseAvatarRecordErrorType =\n | ParseNftAvatarUriErrorType\n | ParseAvatarUriErrorType\n | ErrorType\n\n/*\n * @description Parses an ENS avatar record.\n *\n * @example\n * parseAvatarRecord('eip155:1/erc1155:0xb32979486938aa9694bfc898f35dbed459f44424/10063')\n * 'https://ipfs.io/ipfs/QmSP4nq9fnN9dAiCj42ug9Wa79rqmQerZXZch82VqpiH7U/image.gif'\n *\n * @see https://docs.ens.domains/web/avatars\n *\n */\nexport async function parseAvatarRecord<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n gatewayUrls,\n record,\n }: {\n gatewayUrls?: AssetGatewayUrls | undefined\n record: string\n },\n): Promise<string> {\n if (/eip155:/i.test(record))\n return parseNftAvatarUri(client, { gatewayUrls, record })\n return parseAvatarUri({ uri: record, gatewayUrls })\n}\n\ntype ParseNftAvatarUriErrorType =\n | ParseNftUriErrorType\n | GetNftTokenUriErrorType\n | ResolveAvatarUriErrorType\n | ParseAvatarUriErrorType\n | GetJsonImageErrorType\n | GetMetadataAvatarUriErrorType\n | ErrorType\n\nasync function parseNftAvatarUri<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n gatewayUrls,\n record,\n }: {\n gatewayUrls?: AssetGatewayUrls | undefined\n record: string\n },\n): Promise<string> {\n // parse NFT URI into properties\n const nft = parseNftUri(record)\n // fetch tokenURI from the NFT contract\n const nftUri = await getNftTokenUri(client, { nft })\n // resolve the URI from the fetched tokenURI\n const {\n uri: resolvedNftUri,\n isOnChain,\n isEncoded,\n } = resolveAvatarUri({ uri: nftUri, gatewayUrls })\n\n // if the resolved URI is on chain, return the data\n if (\n isOnChain &&\n (resolvedNftUri.includes('data:application/json;base64,') ||\n resolvedNftUri.startsWith('{'))\n ) {\n const encodedJson = isEncoded\n ? // if it is encoded, decode it\n atob(resolvedNftUri.replace('data:application/json;base64,', ''))\n : // if it isn't encoded assume it is a JSON string, but it could be anything (it will error if it is)\n resolvedNftUri\n\n const decoded = JSON.parse(encodedJson)\n return parseAvatarUri({ uri: getJsonImage(decoded), gatewayUrls })\n }\n\n let uriTokenId = nft.tokenID\n if (nft.namespace === 'erc1155')\n uriTokenId = uriTokenId.replace('0x', '').padStart(64, '0')\n\n return getMetadataAvatarUri({\n gatewayUrls,\n uri: resolvedNftUri.replace(/(?:0x)?{id}/, uriTokenId),\n })\n}\n","import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n textResolverAbi,\n universalResolverResolveAbi,\n} from '../../constants/abis.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport { type NamehashErrorType, namehash } from '../../utils/ens/namehash.js'\nimport {\n type PacketToBytesErrorType,\n packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type ReadContractErrorType,\n type ReadContractParameters,\n readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsTextParameters = Prettify<\n Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n /** ENS name to get Text for. */\n name: string\n /** Universal Resolver gateway URLs to use for resolving CCIP-read requests. */\n gatewayUrls?: string[] | undefined\n /** Text record to retrieve. */\n key: string\n /** Whether or not to throw errors propagated from the ENS Universal Resolver Contract. */\n strict?: boolean | undefined\n /** Address of ENS Universal Resolver Contract. */\n universalResolverAddress?: Address | undefined\n }\n>\n\nexport type GetEnsTextReturnType = string | null\n\nexport type GetEnsTextErrorType =\n | GetChainContractAddressErrorType\n | ReadContractErrorType\n | ToHexErrorType\n | PacketToBytesErrorType\n | EncodeFunctionDataErrorType\n | NamehashErrorType\n | DecodeFunctionResultErrorType\n\n/**\n * Gets a text record for specified ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsTextParameters}\n * @returns Address for ENS resolver. {@link GetEnsTextReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsText, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const twitterRecord = await getEnsText(client, {\n * name: normalize('wevm.eth'),\n * key: 'com.twitter',\n * })\n * // 'wevm_dev'\n */\nexport async function getEnsText<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n blockNumber,\n blockTag,\n name,\n key,\n gatewayUrls,\n strict,\n universalResolverAddress: universalResolverAddress_,\n }: GetEnsTextParameters,\n): Promise<GetEnsTextReturnType> {\n let universalResolverAddress = universalResolverAddress_\n if (!universalResolverAddress) {\n if (!client.chain)\n throw new Error(\n 'client chain not configured. universalResolverAddress is required.',\n )\n\n universalResolverAddress = getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'ensUniversalResolver',\n })\n }\n\n try {\n const readContractParameters = {\n address: universalResolverAddress,\n abi: universalResolverResolveAbi,\n functionName: 'resolve',\n args: [\n toHex(packetToBytes(name)),\n encodeFunctionData({\n abi: textResolverAbi,\n functionName: 'text',\n args: [namehash(name), key],\n }),\n ],\n blockNumber,\n blockTag,\n } as const\n\n const readContractAction = getAction(client, readContract, 'readContract')\n\n const res = gatewayUrls\n ? await readContractAction({\n ...readContractParameters,\n args: [...readContractParameters.args, gatewayUrls],\n })\n : await readContractAction(readContractParameters)\n\n if (res[0] === '0x') return null\n\n const record = decodeFunctionResult({\n abi: textResolverAbi,\n functionName: 'text',\n data: res[0],\n })\n\n return record === '' ? null : record\n } catch (err) {\n if (strict) throw err\n if (isNullUniversalResolverError(err, 'resolve')) return null\n throw err\n }\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { AssetGatewayUrls } from '../../types/ens.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type ParseAvatarRecordErrorType,\n parseAvatarRecord,\n} from '../../utils/ens/avatar/parseAvatarRecord.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport {\n type GetEnsTextErrorType,\n type GetEnsTextParameters,\n getEnsText,\n} from './getEnsText.js'\n\nexport type GetEnsAvatarParameters = Prettify<\n Omit<GetEnsTextParameters, 'key'> & {\n /** Gateway urls to resolve IPFS and/or Arweave assets. */\n assetGatewayUrls?: AssetGatewayUrls | undefined\n }\n>\n\nexport type GetEnsAvatarReturnType = string | null\n\nexport type GetEnsAvatarErrorType =\n | GetEnsTextErrorType\n | ParseAvatarRecordErrorType\n | ErrorType\n\n/**\n * Gets the avatar of an ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAvatar\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls [`getEnsText`](https://viem.sh/docs/ens/actions/getEnsText) with `key` set to `'avatar'`.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsAvatarParameters}\n * @returns Avatar URI or `null` if not found. {@link GetEnsAvatarReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsAvatar, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensAvatar = await getEnsAvatar(client, {\n * name: normalize('wevm.eth'),\n * })\n * // 'https://ipfs.io/ipfs/Qma8mnp6xV3J2cRNf3mTth5C8nV11CAnceVinc3y8jSbio'\n */\nexport async function getEnsAvatar<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n blockNumber,\n blockTag,\n assetGatewayUrls,\n name,\n gatewayUrls,\n strict,\n universalResolverAddress,\n }: GetEnsAvatarParameters,\n): Promise<GetEnsAvatarReturnType> {\n const record = await getAction(\n client,\n getEnsText,\n 'getEnsText',\n )({\n blockNumber,\n blockTag,\n key: 'avatar',\n name,\n universalResolverAddress,\n gatewayUrls,\n strict,\n })\n if (!record) return null\n try {\n return await parseAvatarRecord(client, {\n record,\n gatewayUrls: assetGatewayUrls,\n })\n } catch {\n return null\n }\n}\n","import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { universalResolverReverseAbi } from '../../constants/abis.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport { isNullUniversalResolverError } from '../../utils/ens/errors.js'\nimport {\n type PacketToBytesErrorType,\n packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type ReadContractErrorType,\n type ReadContractParameters,\n readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsNameParameters = Prettify<\n Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n /** Address to get ENS name for. */\n address: Address\n /** Universal Resolver gateway URLs to use for resolving CCIP-read requests. */\n gatewayUrls?: string[] | undefined\n /** Whether or not to throw errors propagated from the ENS Universal Resolver Contract. */\n strict?: boolean | undefined\n /** Address of ENS Universal Resolver Contract. */\n universalResolverAddress?: Address | undefined\n }\n>\n\nexport type GetEnsNameReturnType = string | null\n\nexport type GetEnsNameErrorType =\n | GetChainContractAddressErrorType\n | ReadContractErrorType\n | ToHexErrorType\n | PacketToBytesErrorType\n | ErrorType\n\n/**\n * Gets primary name for specified address.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsName\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `reverse(bytes)` on ENS Universal Resolver Contract to \"reverse resolve\" the address to the primary ENS name.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsNameParameters}\n * @returns Name or `null` if not found. {@link GetEnsNameReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsName } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensName = await getEnsName(client, {\n * address: '0xd2135CfB216b74109775236E36d4b433F1DF507B',\n * })\n * // 'wevm.eth'\n */\nexport async function getEnsName<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n address,\n blockNumber,\n blockTag,\n gatewayUrls,\n strict,\n universalResolverAddress: universalResolverAddress_,\n }: GetEnsNameParameters,\n): Promise<GetEnsNameReturnType> {\n let universalResolverAddress = universalResolverAddress_\n if (!universalResolverAddress) {\n if (!client.chain)\n throw new Error(\n 'client chain not configured. universalResolverAddress is required.',\n )\n\n universalResolverAddress = getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'ensUniversalResolver',\n })\n }\n\n const reverseNode = `${address.toLowerCase().substring(2)}.addr.reverse`\n try {\n const readContractParameters = {\n address: universalResolverAddress,\n abi: universalResolverReverseAbi,\n functionName: 'reverse',\n args: [toHex(packetToBytes(reverseNode))],\n blockNumber,\n blockTag,\n } as const\n\n const readContractAction = getAction(client, readContract, 'readContract')\n\n const [name, resolvedAddress] = gatewayUrls\n ? await readContractAction({\n ...readContractParameters,\n args: [...readContractParameters.args, gatewayUrls],\n })\n : await readContractAction(readContractParameters)\n\n if (address.toLowerCase() !== resolvedAddress.toLowerCase()) return null\n return name\n } catch (err) {\n if (strict) throw err\n if (isNullUniversalResolverError(err, 'reverse')) return null\n throw err\n }\n}\n","import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport { type ToHexErrorType, toHex } from '../../utils/encoding/toHex.js'\nimport {\n type PacketToBytesErrorType,\n packetToBytes,\n} from '../../utils/ens/packetToBytes.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type ReadContractParameters,\n readContract,\n} from '../public/readContract.js'\n\nexport type GetEnsResolverParameters = Prettify<\n Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {\n /** Name to get the address for. */\n name: string\n /** Address of ENS Universal Resolver Contract. */\n universalResolverAddress?: Address | undefined\n }\n>\n\nexport type GetEnsResolverReturnType = Address\n\nexport type GetEnsResolverErrorType =\n | GetChainContractAddressErrorType\n | ToHexErrorType\n | PacketToBytesErrorType\n | ErrorType\n\n/**\n * Gets resolver for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * Calls `findResolver(bytes)` on ENS Universal Resolver Contract to retrieve the resolver of an ENS name.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param client - Client to use\n * @param parameters - {@link GetEnsResolverParameters}\n * @returns Address for ENS resolver. {@link GetEnsResolverReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getEnsResolver, normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const resolverAddress = await getEnsResolver(client, {\n * name: normalize('wevm.eth'),\n * })\n * // '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41'\n */\nexport async function getEnsResolver<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n blockNumber,\n blockTag,\n name,\n universalResolverAddress: universalResolverAddress_,\n }: GetEnsResolverParameters,\n) {\n let universalResolverAddress = universalResolverAddress_\n if (!universalResolverAddress) {\n if (!client.chain)\n throw new Error(\n 'client chain not configured. universalResolverAddress is required.',\n )\n\n universalResolverAddress = getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'ensUniversalResolver',\n })\n }\n\n const [resolverAddress] = await getAction(\n client,\n readContract,\n 'readContract',\n )({\n address: universalResolverAddress,\n abi: [\n {\n inputs: [{ type: 'bytes' }],\n name: 'findResolver',\n outputs: [{ type: 'address' }, { type: 'bytes32' }],\n stateMutability: 'view',\n type: 'function',\n },\n ],\n functionName: 'findResolver',\n args: [toHex(packetToBytes(name))],\n blockNumber,\n blockTag,\n })\n return resolverAddress\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateBlockFilterReturnType = Filter<'block'>\n\nexport type CreateBlockFilterErrorType = RequestErrorType | ErrorType\n\n/**\n * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new block hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createBlockFilter\n * - JSON-RPC Methods: [`eth_newBlockFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newBlockFilter)\n *\n * @param client - Client to use\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createBlockFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createBlockFilter(client)\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'block' }\n */\nexport async function createBlockFilter<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n): Promise<CreateBlockFilterReturnType> {\n const getRequest = createFilterRequestScope(client, {\n method: 'eth_newBlockFilter',\n })\n const id = await client.request({\n method: 'eth_newBlockFilter',\n })\n return { id, request: getRequest(id), type: 'block' }\n}\n","import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hex, LogTopic } from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreateEventFilterParameters<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n //\n _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n _args extends\n | MaybeExtractEventArgsFromAbi<abiEvents, _eventName>\n | undefined = undefined,\n> = {\n address?: Address | Address[] | undefined\n fromBlock?: fromBlock | BlockNumber | BlockTag | undefined\n toBlock?: toBlock | BlockNumber | BlockTag | undefined\n} & (MaybeExtractEventArgsFromAbi<\n abiEvents,\n _eventName\n> extends infer eventFilterArgs\n ?\n | {\n args:\n | eventFilterArgs\n | (_args extends eventFilterArgs ? _args : never)\n event: abiEvent\n events?: undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n args?: undefined\n event?: abiEvent | undefined\n events?: undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n args?: undefined\n event?: undefined\n events: abiEvents | undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n args?: undefined\n event?: undefined\n events?: undefined\n strict?: undefined\n }\n : {\n args?: undefined\n event?: undefined\n events?: undefined\n strict?: undefined\n })\n\nexport type CreateEventFilterReturnType<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n _args extends\n | MaybeExtractEventArgsFromAbi<abiEvents, _eventName>\n | undefined = undefined,\n> = Prettify<\n Filter<'event', abiEvents, _eventName, _args, strict, fromBlock, toBlock>\n>\n\nexport type CreateEventFilterErrorType =\n | EncodeEventTopicsErrorType\n | RequestErrorType\n | NumberToHexErrorType\n | ErrorType\n\n/**\n * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new events that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createEventFilter\n * - JSON-RPC Methods: [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter)\n *\n * @param client - Client to use\n * @param parameters - {@link CreateEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n * address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * })\n */\nexport async function createEventFilter<\n chain extends Chain | undefined,\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber<bigint> | BlockTag | undefined = undefined,\n toBlock extends BlockNumber<bigint> | BlockTag | undefined = undefined,\n _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n _args extends\n | MaybeExtractEventArgsFromAbi<abiEvents, _eventName>\n | undefined = undefined,\n>(\n client: Client<Transport, chain>,\n {\n address,\n args,\n event,\n events: events_,\n fromBlock,\n strict,\n toBlock,\n }: CreateEventFilterParameters<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock,\n _eventName,\n _args\n > = {} as any,\n): Promise<\n CreateEventFilterReturnType<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock,\n _eventName,\n _args\n >\n> {\n const events = events_ ?? (event ? [event] : undefined)\n\n const getRequest = createFilterRequestScope(client, {\n method: 'eth_newFilter',\n })\n\n let topics: LogTopic[] = []\n if (events) {\n const encoded = (events as AbiEvent[]).flatMap((event) =>\n encodeEventTopics({\n abi: [event],\n eventName: (event as AbiEvent).name,\n args,\n } as EncodeEventTopicsParameters),\n )\n // TODO: Clean up type casting\n topics = [encoded as LogTopic]\n if (event) topics = topics[0] as LogTopic[]\n }\n\n const id: Hex = await client.request({\n method: 'eth_newFilter',\n params: [\n {\n address,\n fromBlock:\n typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n ...(topics.length ? { topics } : {}),\n },\n ],\n })\n\n return {\n abi: events,\n args,\n eventName: event ? (event as AbiEvent).name : undefined,\n fromBlock,\n id,\n request: getRequest(id),\n strict: Boolean(strict),\n toBlock,\n type: 'event',\n } as unknown as CreateEventFilterReturnType<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock,\n _eventName,\n _args\n >\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'\n\nexport type CreatePendingTransactionFilterReturnType = Filter<'transaction'>\n\nexport type CreatePendingTransactionFilterErrorType =\n | RequestErrorType\n | ErrorType\n\n/**\n * Creates a Filter to listen for new pending transaction hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createPendingTransactionFilter\n * - JSON-RPC Methods: [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter)\n *\n * @param client - Client to use\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createPendingTransactionFilter(client)\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'transaction' }\n */\nexport async function createPendingTransactionFilter<\n transport extends Transport,\n chain extends Chain | undefined,\n>(\n client: Client<transport, chain>,\n): Promise<CreatePendingTransactionFilterReturnType> {\n const getRequest = createFilterRequestScope(client, {\n method: 'eth_newPendingTransactionFilter',\n })\n const id = await client.request({\n method: 'eth_newPendingTransactionFilter',\n })\n return { id, request: getRequest(id), type: 'transaction' }\n}\n","import type { Account } from '../../accounts/types.js'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\n\nexport type GetBlobBaseFeeReturnType = bigint\n\nexport type GetBlobBaseFeeErrorType = RequestErrorType | ErrorType\n\n/**\n * Returns the base fee per blob gas in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlobBaseFee\n * - JSON-RPC Methods: [`eth_blobBaseFee`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blobBaseFee)\n *\n * @param client - Client to use\n * @returns The blob base fee (in wei). {@link GetBlobBaseFeeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlobBaseFee } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const blobBaseFee = await getBlobBaseFee(client)\n */\nexport async function getBlobBaseFee<\n chain extends Chain | undefined,\n account extends Account | undefined,\n>(\n client: Client<Transport, chain, account>,\n): Promise<GetBlobBaseFeeReturnType> {\n const baseFee = await client.request({\n method: 'eth_blobBaseFee',\n })\n return BigInt(baseFee)\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Quantity } from '../../types/rpc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type HexToNumberErrorType,\n hexToNumber,\n} from '../../utils/encoding/fromHex.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetBlockTransactionCountParameters =\n | {\n /** Hash of the block. */\n blockHash?: Hash | undefined\n blockNumber?: undefined\n blockTag?: undefined\n }\n | {\n blockHash?: undefined\n /** The block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockHash?: undefined\n blockNumber?: undefined\n /** The block tag. Defaults to 'latest'. */\n blockTag?: BlockTag | undefined\n }\n\nexport type GetBlockTransactionCountReturnType = number\n\nexport type GetBlockTransactionCountErrorType =\n | NumberToHexErrorType\n | HexToNumberErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns the number of Transactions at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockTransactionCount\n * - JSON-RPC Methods:\n * - Calls [`eth_getBlockTransactionCountByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbynumber) for `blockNumber` & `blockTag`.\n * - Calls [`eth_getBlockTransactionCountByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbyhash) for `blockHash`.\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockTransactionCountParameters}\n * @returns The block transaction count. {@link GetBlockTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlockTransactionCount } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const count = await getBlockTransactionCount(client)\n */\nexport async function getBlockTransactionCount<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n blockHash,\n blockNumber,\n blockTag = 'latest',\n }: GetBlockTransactionCountParameters = {},\n): Promise<GetBlockTransactionCountReturnType> {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n let count: Quantity\n if (blockHash) {\n count = await client.request(\n {\n method: 'eth_getBlockTransactionCountByHash',\n params: [blockHash],\n },\n { dedupe: true },\n )\n } else {\n count = await client.request(\n {\n method: 'eth_getBlockTransactionCountByNumber',\n params: [blockNumberHex || blockTag],\n },\n { dedupe: Boolean(blockNumberHex) },\n )\n }\n\n return hexToNumber(count)\n}\n","import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetCodeParameters = {\n address: Address\n} & (\n | {\n blockNumber?: undefined\n blockTag?: BlockTag | undefined\n }\n | {\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n)\n\nexport type GetCodeReturnType = Hex | undefined\n\nexport type GetCodeErrorType =\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Retrieves the bytecode at an address.\n *\n * - Docs: https://viem.sh/docs/contract/getCode\n * - JSON-RPC Methods: [`eth_getCode`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getcode)\n *\n * @param client - Client to use\n * @param parameters - {@link GetCodeParameters}\n * @returns The contract's bytecode. {@link GetCodeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getCode } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const code = await getCode(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * })\n */\nexport async function getCode<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n { address, blockNumber, blockTag = 'latest' }: GetCodeParameters,\n): Promise<GetCodeReturnType> {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n const hex = await client.request(\n {\n method: 'eth_getCode',\n params: [address, blockNumberHex || blockTag],\n },\n { dedupe: Boolean(blockNumberHex) },\n )\n if (hex === '0x') return undefined\n return hex\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { FeeHistory } from '../../types/fee.js'\nimport type { RpcFeeHistory } from '../../types/rpc.js'\n\nexport type FormatFeeHistoryErrorType = ErrorType\n\nexport function formatFeeHistory(feeHistory: RpcFeeHistory): FeeHistory {\n return {\n baseFeePerGas: feeHistory.baseFeePerGas.map((value) => BigInt(value)),\n gasUsedRatio: feeHistory.gasUsedRatio,\n oldestBlock: BigInt(feeHistory.oldestBlock),\n reward: feeHistory.reward?.map((reward) =>\n reward.map((value) => BigInt(value)),\n ),\n }\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { FeeHistory } from '../../types/fee.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type FormatFeeHistoryErrorType,\n formatFeeHistory,\n} from '../../utils/formatters/feeHistory.js'\n\nexport type GetFeeHistoryParameters = {\n /**\n * Number of blocks in the requested range. Between 1 and 1024 blocks can be requested in a single query. Less than requested may be returned if not all blocks are available.\n */\n blockCount: number\n /**\n * A monotonically increasing list of percentile values to sample from each block's effective priority fees per gas in ascending order, weighted by gas used.\n */\n rewardPercentiles: number[]\n} & (\n | {\n blockNumber?: undefined\n /**\n * Highest number block of the requested range.\n * @default 'latest'\n */\n blockTag?: BlockTag | undefined\n }\n | {\n /** Highest number block of the requested range. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n)\nexport type GetFeeHistoryReturnType = FeeHistory\n\nexport type GetFeeHistoryErrorType =\n | NumberToHexErrorType\n | RequestErrorType\n | FormatFeeHistoryErrorType\n\n/**\n * Returns a collection of historical gas information.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFeeHistory\n * - JSON-RPC Methods: [`eth_feeHistory`](https://docs.alchemy.com/reference/eth-feehistory)\n *\n * @param client - Client to use\n * @param parameters - {@link GetFeeHistoryParameters}\n * @returns The gas estimate (in wei). {@link GetFeeHistoryReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getFeeHistory } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const feeHistory = await getFeeHistory(client, {\n * blockCount: 4,\n * rewardPercentiles: [25, 75],\n * })\n */\nexport async function getFeeHistory<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n blockCount,\n blockNumber,\n blockTag = 'latest',\n rewardPercentiles,\n }: GetFeeHistoryParameters,\n): Promise<GetFeeHistoryReturnType> {\n const blockNumberHex = blockNumber ? numberToHex(blockNumber) : undefined\n const feeHistory = await client.request(\n {\n method: 'eth_feeHistory',\n params: [\n numberToHex(blockCount),\n blockNumberHex || blockTag,\n rewardPercentiles,\n ],\n },\n { dedupe: Boolean(blockNumberHex) },\n )\n return formatFeeHistory(feeHistory)\n}\n","import type { Abi, AbiEvent, ExtractAbiEvent } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { DecodeEventLogErrorType } from '../../utils/abi/decodeEventLog.js'\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type FormatLogErrorType,\n formatLog,\n} from '../../utils/formatters/log.js'\n\nexport type GetFilterLogsParameters<\n abi extends Abi | readonly unknown[] | undefined = undefined,\n eventName extends string | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n> = {\n filter: Filter<'event', abi, eventName, any, strict, fromBlock, toBlock>\n}\nexport type GetFilterLogsReturnType<\n abi extends Abi | readonly unknown[] | undefined = undefined,\n eventName extends string | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n _AbiEvent extends AbiEvent | undefined = abi extends Abi\n ? eventName extends string\n ? ExtractAbiEvent<abi, eventName>\n : undefined\n : undefined,\n _Pending extends boolean =\n | (fromBlock extends 'pending' ? true : false)\n | (toBlock extends 'pending' ? true : false),\n> = Log<bigint, number, _Pending, _AbiEvent, strict, abi, eventName>[]\n\nexport type GetFilterLogsErrorType =\n | RequestErrorType\n | DecodeEventLogErrorType\n | FormatLogErrorType\n | ErrorType\n\n/**\n * Returns a list of event logs since the filter was created.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterLogs\n * - JSON-RPC Methods: [`eth_getFilterLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterlogs)\n *\n * `getFilterLogs` is only compatible with **event filters**.\n *\n * @param client - Client to use\n * @param parameters - {@link GetFilterLogsParameters}\n * @returns A list of event logs. {@link GetFilterLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createEventFilter, getFilterLogs } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createEventFilter(client, {\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await getFilterLogs(client, { filter })\n */\nexport async function getFilterLogs<\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[] | undefined,\n eventName extends string | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n>(\n _client: Client<Transport, chain>,\n {\n filter,\n }: GetFilterLogsParameters<abi, eventName, strict, fromBlock, toBlock>,\n): Promise<\n GetFilterLogsReturnType<abi, eventName, strict, fromBlock, toBlock>\n> {\n const strict = filter.strict ?? false\n\n const logs = await filter.request({\n method: 'eth_getFilterLogs',\n params: [filter.id],\n })\n\n const formattedLogs = logs.map((log) => formatLog(log))\n if (!filter.abi)\n return formattedLogs as GetFilterLogsReturnType<\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n return parseEventLogs({\n abi: filter.abi,\n logs: formattedLogs,\n strict,\n }) as unknown as GetFilterLogsReturnType<\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n}\n","import type { TypedData } from 'abitype'\n\nimport { stringify } from '../utils/stringify.js'\nimport { BaseError } from './base.js'\n\nexport type InvalidDomainErrorType = InvalidDomainError & {\n name: 'InvalidDomainError'\n}\nexport class InvalidDomainError extends BaseError {\n constructor({ domain }: { domain: unknown }) {\n super(`Invalid domain \"${stringify(domain)}\".`, {\n metaMessages: ['Must be a valid EIP-712 domain.'],\n })\n }\n}\n\nexport type InvalidPrimaryTypeErrorType = InvalidPrimaryTypeError & {\n name: 'InvalidPrimaryTypeError'\n}\nexport class InvalidPrimaryTypeError extends BaseError {\n constructor({\n primaryType,\n types,\n }: { primaryType: string; types: TypedData | Record<string, unknown> }) {\n super(\n `Invalid primary type \\`${primaryType}\\` must be one of \\`${JSON.stringify(Object.keys(types))}\\`.`,\n {\n docsPath: '/api/glossary/Errors#typeddatainvalidprimarytypeerror',\n metaMessages: ['Check that the primary type is a key in `types`.'],\n },\n )\n }\n}\n\nexport type InvalidStructTypeErrorType = InvalidStructTypeError & {\n name: 'InvalidStructTypeError'\n}\nexport class InvalidStructTypeError extends BaseError {\n constructor({ type }: { type: string }) {\n super(`Struct type \"${type}\" is invalid.`, {\n metaMessages: ['Struct type must not be a Solidity type.'],\n name: 'InvalidStructTypeError',\n })\n }\n}\n","// Implementation forked and adapted from https://github.com/MetaMask/eth-sig-util/blob/main/src/sign-typed-data.ts\n\nimport type { AbiParameter, TypedData, TypedDataDomain } from 'abitype'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { TypedDataDefinition } from '../../types/typedData.js'\nimport {\n type EncodeAbiParametersErrorType,\n encodeAbiParameters,\n} from '../abi/encodeAbiParameters.js'\nimport { concat } from '../data/concat.js'\nimport { type ToHexErrorType, toHex } from '../encoding/toHex.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport {\n type GetTypesForEIP712DomainErrorType,\n type ValidateTypedDataErrorType,\n getTypesForEIP712Domain,\n validateTypedData,\n} from '../typedData.js'\n\ntype MessageTypeProperty = {\n name: string\n type: string\n}\n\nexport type HashTypedDataParameters<\n typedData extends TypedData | Record<string, unknown> = TypedData,\n primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = TypedDataDefinition<typedData, primaryType>\n\nexport type HashTypedDataReturnType = Hex\n\nexport type HashTypedDataErrorType =\n | GetTypesForEIP712DomainErrorType\n | HashDomainErrorType\n | HashStructErrorType\n | ValidateTypedDataErrorType\n | ErrorType\n\nexport function hashTypedData<\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(\n parameters: HashTypedDataParameters<typedData, primaryType>,\n): HashTypedDataReturnType {\n const {\n domain = {},\n message,\n primaryType,\n } = parameters as HashTypedDataParameters\n const types = {\n EIP712Domain: getTypesForEIP712Domain({ domain }),\n ...parameters.types,\n }\n\n // Need to do a runtime validation check on addresses, byte ranges, integer ranges, etc\n // as we can't statically check this with TypeScript.\n validateTypedData({\n domain,\n message,\n primaryType,\n types,\n })\n\n const parts: Hex[] = ['0x1901']\n if (domain)\n parts.push(\n hashDomain({\n domain,\n types: types as Record<string, MessageTypeProperty[]>,\n }),\n )\n\n if (primaryType !== 'EIP712Domain')\n parts.push(\n hashStruct({\n data: message,\n primaryType,\n types: types as Record<string, MessageTypeProperty[]>,\n }),\n )\n\n return keccak256(concat(parts))\n}\n\nexport type HashDomainErrorType = HashStructErrorType | ErrorType\n\nexport function hashDomain({\n domain,\n types,\n}: {\n domain: TypedDataDomain\n types: Record<string, MessageTypeProperty[]>\n}) {\n return hashStruct({\n data: domain,\n primaryType: 'EIP712Domain',\n types,\n })\n}\n\nexport type HashStructErrorType =\n | EncodeDataErrorType\n | Keccak256ErrorType\n | ErrorType\n\nexport function hashStruct({\n data,\n primaryType,\n types,\n}: {\n data: Record<string, unknown>\n primaryType: string\n types: Record<string, readonly MessageTypeProperty[]>\n}) {\n const encoded = encodeData({\n data,\n primaryType,\n types,\n })\n return keccak256(encoded)\n}\n\ntype EncodeDataErrorType =\n | EncodeAbiParametersErrorType\n | EncodeFieldErrorType\n | HashTypeErrorType\n | ErrorType\n\nfunction encodeData({\n data,\n primaryType,\n types,\n}: {\n data: Record<string, unknown>\n primaryType: string\n types: Record<string, readonly MessageTypeProperty[]>\n}) {\n const encodedTypes: AbiParameter[] = [{ type: 'bytes32' }]\n const encodedValues: unknown[] = [hashType({ primaryType, types })]\n\n for (const field of types[primaryType]) {\n const [type, value] = encodeField({\n types,\n name: field.name,\n type: field.type,\n value: data[field.name],\n })\n encodedTypes.push(type)\n encodedValues.push(value)\n }\n\n return encodeAbiParameters(encodedTypes, encodedValues)\n}\n\ntype HashTypeErrorType =\n | ToHexErrorType\n | EncodeTypeErrorType\n | Keccak256ErrorType\n | ErrorType\n\nfunction hashType({\n primaryType,\n types,\n}: {\n primaryType: string\n types: Record<string, readonly MessageTypeProperty[]>\n}) {\n const encodedHashType = toHex(encodeType({ primaryType, types }))\n return keccak256(encodedHashType)\n}\n\ntype EncodeTypeErrorType = FindTypeDependenciesErrorType\n\nexport function encodeType({\n primaryType,\n types,\n}: {\n primaryType: string\n types: Record<string, readonly MessageTypeProperty[]>\n}) {\n let result = ''\n const unsortedDeps = findTypeDependencies({ primaryType, types })\n unsortedDeps.delete(primaryType)\n\n const deps = [primaryType, ...Array.from(unsortedDeps).sort()]\n for (const type of deps) {\n result += `${type}(${types[type]\n .map(({ name, type: t }) => `${t} ${name}`)\n .join(',')})`\n }\n\n return result\n}\n\ntype FindTypeDependenciesErrorType = ErrorType\n\nfunction findTypeDependencies(\n {\n primaryType: primaryType_,\n types,\n }: {\n primaryType: string\n types: Record<string, readonly MessageTypeProperty[]>\n },\n results: Set<string> = new Set(),\n): Set<string> {\n const match = primaryType_.match(/^\\w*/u)\n const primaryType = match?.[0]!\n if (results.has(primaryType) || types[primaryType] === undefined) {\n return results\n }\n\n results.add(primaryType)\n\n for (const field of types[primaryType]) {\n findTypeDependencies({ primaryType: field.type, types }, results)\n }\n return results\n}\n\ntype EncodeFieldErrorType =\n | Keccak256ErrorType\n | EncodeAbiParametersErrorType\n | ToHexErrorType\n | ErrorType\n\nfunction encodeField({\n types,\n name,\n type,\n value,\n}: {\n types: Record<string, readonly MessageTypeProperty[]>\n name: string\n type: string\n value: any\n}): [type: AbiParameter, value: any] {\n if (types[type] !== undefined) {\n return [\n { type: 'bytes32' },\n keccak256(encodeData({ data: value, primaryType: type, types })),\n ]\n }\n\n if (type === 'bytes') {\n const prepend = value.length % 2 ? '0' : ''\n value = `0x${prepend + value.slice(2)}`\n return [{ type: 'bytes32' }, keccak256(value)]\n }\n\n if (type === 'string') return [{ type: 'bytes32' }, keccak256(toHex(value))]\n\n if (type.lastIndexOf(']') === type.length - 1) {\n const parsedType = type.slice(0, type.lastIndexOf('['))\n const typeValuePairs = (value as [AbiParameter, any][]).map((item) =>\n encodeField({\n name,\n type: parsedType,\n types,\n value: item,\n }),\n )\n return [\n { type: 'bytes32' },\n keccak256(\n encodeAbiParameters(\n typeValuePairs.map(([t]) => t),\n typeValuePairs.map(([, v]) => v),\n ),\n ),\n ]\n }\n\n return [{ type }, value]\n}\n","import type { TypedData, TypedDataDomain, TypedDataParameter } from 'abitype'\n\nimport { BytesSizeMismatchError } from '../errors/abi.js'\nimport { InvalidAddressError } from '../errors/address.js'\nimport {\n InvalidDomainError,\n InvalidPrimaryTypeError,\n InvalidStructTypeError,\n} from '../errors/typedData.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Hex } from '../types/misc.js'\nimport type { TypedDataDefinition } from '../types/typedData.js'\nimport { type IsAddressErrorType, isAddress } from './address/isAddress.js'\nimport { type SizeErrorType, size } from './data/size.js'\nimport { type NumberToHexErrorType, numberToHex } from './encoding/toHex.js'\nimport { bytesRegex, integerRegex } from './regex.js'\nimport {\n type HashDomainErrorType,\n hashDomain,\n} from './signature/hashTypedData.js'\nimport { stringify } from './stringify.js'\n\nexport type SerializeTypedDataErrorType =\n | HashDomainErrorType\n | IsAddressErrorType\n | NumberToHexErrorType\n | SizeErrorType\n | ErrorType\n\nexport function serializeTypedData<\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(parameters: TypedDataDefinition<typedData, primaryType>) {\n const {\n domain: domain_,\n message: message_,\n primaryType,\n types,\n } = parameters as unknown as TypedDataDefinition\n\n const normalizeData = (\n struct: readonly TypedDataParameter[],\n data_: Record<string, unknown>,\n ) => {\n const data = { ...data_ }\n for (const param of struct) {\n const { name, type } = param\n if (type === 'address') data[name] = (data[name] as string).toLowerCase()\n }\n return data\n }\n\n const domain = (() => {\n if (!types.EIP712Domain) return {}\n if (!domain_) return {}\n return normalizeData(types.EIP712Domain, domain_)\n })()\n\n const message = (() => {\n if (primaryType === 'EIP712Domain') return undefined\n return normalizeData(types[primaryType], message_)\n })()\n\n return stringify({ domain, message, primaryType, types })\n}\n\nexport type ValidateTypedDataErrorType =\n | HashDomainErrorType\n | IsAddressErrorType\n | NumberToHexErrorType\n | SizeErrorType\n | ErrorType\n\nexport function validateTypedData<\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(parameters: TypedDataDefinition<typedData, primaryType>) {\n const { domain, message, primaryType, types } =\n parameters as unknown as TypedDataDefinition\n\n const validateData = (\n struct: readonly TypedDataParameter[],\n data: Record<string, unknown>,\n ) => {\n for (const param of struct) {\n const { name, type } = param\n const value = data[name]\n\n const integerMatch = type.match(integerRegex)\n if (\n integerMatch &&\n (typeof value === 'number' || typeof value === 'bigint')\n ) {\n const [_type, base, size_] = integerMatch\n // If number cannot be cast to a sized hex value, it is out of range\n // and will throw.\n numberToHex(value, {\n signed: base === 'int',\n size: Number.parseInt(size_) / 8,\n })\n }\n\n if (type === 'address' && typeof value === 'string' && !isAddress(value))\n throw new InvalidAddressError({ address: value })\n\n const bytesMatch = type.match(bytesRegex)\n if (bytesMatch) {\n const [_type, size_] = bytesMatch\n if (size_ && size(value as Hex) !== Number.parseInt(size_))\n throw new BytesSizeMismatchError({\n expectedSize: Number.parseInt(size_),\n givenSize: size(value as Hex),\n })\n }\n\n const struct = types[type]\n if (struct) {\n validateReference(type)\n validateData(struct, value as Record<string, unknown>)\n }\n }\n }\n\n // Validate domain types.\n if (types.EIP712Domain && domain) {\n if (typeof domain !== 'object') throw new InvalidDomainError({ domain })\n validateData(types.EIP712Domain, domain)\n }\n\n // Validate message types.\n if (primaryType !== 'EIP712Domain') {\n if (types[primaryType]) validateData(types[primaryType], message)\n else throw new InvalidPrimaryTypeError({ primaryType, types })\n }\n}\n\nexport type GetTypesForEIP712DomainErrorType = ErrorType\n\nexport function getTypesForEIP712Domain({\n domain,\n}: { domain?: TypedDataDomain | undefined }): TypedDataParameter[] {\n return [\n typeof domain?.name === 'string' && { name: 'name', type: 'string' },\n domain?.version && { name: 'version', type: 'string' },\n typeof domain?.chainId === 'number' && {\n name: 'chainId',\n type: 'uint256',\n },\n domain?.verifyingContract && {\n name: 'verifyingContract',\n type: 'address',\n },\n domain?.salt && { name: 'salt', type: 'bytes32' },\n ].filter(Boolean) as TypedDataParameter[]\n}\n\nexport type DomainSeparatorErrorType =\n | GetTypesForEIP712DomainErrorType\n | HashDomainErrorType\n | ErrorType\n\nexport function domainSeparator({ domain }: { domain: TypedDataDomain }): Hex {\n return hashDomain({\n domain,\n types: {\n EIP712Domain: getTypesForEIP712Domain({ domain }),\n },\n })\n}\n\n/** @internal */\nfunction validateReference(type: string) {\n // Struct type must not be a Solidity type.\n if (\n type === 'address' ||\n type === 'bool' ||\n type === 'string' ||\n type.startsWith('bytes') ||\n type.startsWith('uint') ||\n type.startsWith('int')\n )\n throw new InvalidStructTypeError({ type })\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type {\n Chain,\n ExtractChainFormatterReturnType,\n} from '../../types/chain.js'\nimport type { RpcTransactionReceipt } from '../../types/rpc.js'\nimport type { TransactionReceipt } from '../../types/transaction.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { hexToNumber } from '../encoding/fromHex.js'\n\nimport { type DefineFormatterErrorType, defineFormatter } from './formatter.js'\nimport { formatLog } from './log.js'\nimport { transactionType } from './transaction.js'\n\nexport type FormattedTransactionReceipt<\n chain extends Chain | undefined = undefined,\n> = ExtractChainFormatterReturnType<\n chain,\n 'transactionReceipt',\n TransactionReceipt\n>\n\nexport const receiptStatuses = {\n '0x0': 'reverted',\n '0x1': 'success',\n} as const\n\nexport type FormatTransactionReceiptErrorType = ErrorType\n\nexport function formatTransactionReceipt(\n transactionReceipt: ExactPartial<RpcTransactionReceipt>,\n) {\n const receipt = {\n ...transactionReceipt,\n blockNumber: transactionReceipt.blockNumber\n ? BigInt(transactionReceipt.blockNumber)\n : null,\n contractAddress: transactionReceipt.contractAddress\n ? transactionReceipt.contractAddress\n : null,\n cumulativeGasUsed: transactionReceipt.cumulativeGasUsed\n ? BigInt(transactionReceipt.cumulativeGasUsed)\n : null,\n effectiveGasPrice: transactionReceipt.effectiveGasPrice\n ? BigInt(transactionReceipt.effectiveGasPrice)\n : null,\n gasUsed: transactionReceipt.gasUsed\n ? BigInt(transactionReceipt.gasUsed)\n : null,\n logs: transactionReceipt.logs\n ? transactionReceipt.logs.map((log) => formatLog(log))\n : null,\n to: transactionReceipt.to ? transactionReceipt.to : null,\n transactionIndex: transactionReceipt.transactionIndex\n ? hexToNumber(transactionReceipt.transactionIndex)\n : null,\n status: transactionReceipt.status\n ? receiptStatuses[transactionReceipt.status]\n : null,\n type: transactionReceipt.type\n ? transactionType[\n transactionReceipt.type as keyof typeof transactionType\n ] || transactionReceipt.type\n : null,\n } as TransactionReceipt\n\n if (transactionReceipt.blobGasPrice)\n receipt.blobGasPrice = BigInt(transactionReceipt.blobGasPrice)\n if (transactionReceipt.blobGasUsed)\n receipt.blobGasUsed = BigInt(transactionReceipt.blobGasUsed)\n\n return receipt\n}\n\nexport type DefineTransactionReceiptErrorType =\n | DefineFormatterErrorType\n | ErrorType\n\nexport const defineTransactionReceipt = /*#__PURE__*/ defineFormatter(\n 'transactionReceipt',\n formatTransactionReceipt,\n)\n","export const presignMessagePrefix = '\\x19Ethereum Signed Message:\\n'\n","import { presignMessagePrefix } from '../../constants/strings.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex, SignableMessage } from '../../types/misc.js'\nimport { type ConcatErrorType, concat } from '../data/concat.js'\nimport { size } from '../data/size.js'\nimport {\n type BytesToHexErrorType,\n type StringToHexErrorType,\n bytesToHex,\n stringToHex,\n} from '../encoding/toHex.js'\n\nexport type ToPrefixedMessageErrorType =\n | ConcatErrorType\n | StringToHexErrorType\n | BytesToHexErrorType\n | ErrorType\n\nexport function toPrefixedMessage(message_: SignableMessage): Hex {\n const message = (() => {\n if (typeof message_ === 'string') return stringToHex(message_)\n if (typeof message_.raw === 'string') return message_.raw\n return bytesToHex(message_.raw)\n })()\n const prefix = stringToHex(`${presignMessagePrefix}${size(message)}`)\n return concat([prefix, message])\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, SignableMessage } from '../../types/misc.js'\nimport { type Keccak256ErrorType, keccak256 } from '../hash/keccak256.js'\nimport { toPrefixedMessage } from './toPrefixedMessage.js'\n\ntype To = 'hex' | 'bytes'\n\nexport type HashMessageReturnType<to extends To> =\n | (to extends 'bytes' ? ByteArray : never)\n | (to extends 'hex' ? Hex : never)\n\nexport type HashMessageErrorType = Keccak256ErrorType | ErrorType\n\nexport function hashMessage<to extends To = 'hex'>(\n message: SignableMessage,\n to_?: to | undefined,\n): HashMessageReturnType<to> {\n return keccak256(toPrefixedMessage(message), to_)\n}\n","export const erc6492MagicBytes =\n '0x6492649264926492649264926492649264926492649264926492649264926492' as const\n\nexport const zeroHash =\n '0x0000000000000000000000000000000000000000000000000000000000000000' as const\n","import { erc6492MagicBytes } from '../../constants/bytes.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type SliceHexErrorType, sliceHex } from '../data/slice.js'\n\nexport type IsErc6492SignatureParameters = Hex\nexport type IsErc6492SignatureReturnType = boolean\nexport type IsErc6492SignatureErrorType = SliceHexErrorType | ErrorType\n\n/** Whether or not the signature is an ERC-6492 formatted signature. */\nexport function isErc6492Signature(\n signature: IsErc6492SignatureParameters,\n): IsErc6492SignatureReturnType {\n return sliceHex(signature, -32) === erc6492MagicBytes\n}\n","import type { Address } from 'abitype'\nimport { erc6492MagicBytes } from '../../constants/bytes.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex } from '../../types/misc.js'\nimport { encodeAbiParameters } from '../abi/encodeAbiParameters.js'\nimport { concatHex } from '../data/concat.js'\nimport { hexToBytes } from '../encoding/toBytes.js'\n\ntype To = 'bytes' | 'hex'\n\nexport type SerializeErc6492SignatureParameters<to extends To = 'hex'> = {\n /** The ERC-4337 Account Factory address to use for counterfactual verification. */\n address: Address\n /** Calldata to pass to deploy account (if not deployed) for counterfactual verification. */\n data: Hex\n /** The original signature. */\n signature: Hex\n to?: to | To | undefined\n}\n\nexport type SerializeErc6492SignatureReturnType<to extends To = 'hex'> =\n | (to extends 'hex' ? Hex : never)\n | (to extends 'bytes' ? ByteArray : never)\n\nexport type SerializeErc6492SignatureErrorType = ErrorType\n\n/**\n * @description Serializes a ERC-6492 flavoured signature into hex format.\n *\n * @param signature ERC-6492 signature in object format.\n * @returns ERC-6492 signature in hex format.\n *\n * @example\n * serializeSignature({ address: '0x...', data: '0x...', signature: '0x...' })\n * // '0x000000000000000000000000cafebabecafebabecafebabecafebabecafebabe000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000004deadbeef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a461f509887bd19e312c0c58467ce8ff8e300d3c1a90b608a760c5b80318eaf15fe57c96f9175d6cd4daad4663763baa7e78836e067d0163e9a2ccf2ff753f5b1b000000000000000000000000000000000000000000000000000000000000006492649264926492649264926492649264926492649264926492649264926492'\n */\nexport function serializeErc6492Signature<to extends To = 'hex'>(\n parameters: SerializeErc6492SignatureParameters<to>,\n): SerializeErc6492SignatureReturnType<to> {\n const { address, data, signature, to = 'hex' } = parameters\n const signature_ = concatHex([\n encodeAbiParameters(\n [{ type: 'address' }, { type: 'bytes' }, { type: 'bytes' }],\n [address, data, signature],\n ),\n erc6492MagicBytes,\n ])\n\n if (to === 'hex') return signature_ as SerializeErc6492SignatureReturnType<to>\n return hexToBytes(signature_) as SerializeErc6492SignatureReturnType<to>\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { Proof } from '../../types/proof.js'\nimport type { RpcProof } from '../../types/rpc.js'\nimport type { ExactPartial } from '../../types/utils.js'\nimport { hexToNumber } from '../index.js'\n\nexport type FormatProofErrorType = ErrorType\n\nfunction formatStorageProof(storageProof: RpcProof['storageProof']) {\n return storageProof.map((proof) => ({\n ...proof,\n value: BigInt(proof.value),\n }))\n}\n\nexport function formatProof(proof: ExactPartial<RpcProof>) {\n return {\n ...proof,\n balance: proof.balance ? BigInt(proof.balance) : undefined,\n nonce: proof.nonce ? hexToNumber(proof.nonce) : undefined,\n storageProof: proof.storageProof\n ? formatStorageProof(proof.storageProof)\n : undefined,\n } as Proof\n}\n","import type { Address } from 'abitype'\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Proof } from '../../types/proof.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type FormatProofErrorType,\n formatProof,\n} from '../../utils/formatters/proof.js'\n\nexport type GetProofParameters = {\n /** Account address. */\n address: Address\n /** Array of storage-keys that should be proofed and included. */\n storageKeys: Hash[]\n} & (\n | {\n /** The block number. */\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n | {\n blockNumber?: undefined\n /**\n * The block tag.\n * @default 'latest'\n */\n blockTag?: BlockTag | undefined\n }\n)\n\nexport type GetProofReturnType = Proof\n\nexport type GetProofErrorType =\n | NumberToHexErrorType\n | FormatProofErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns the account and storage values of the specified account including the Merkle-proof.\n *\n * - Docs: https://viem.sh/docs/actions/public/getProof\n * - JSON-RPC Methods:\n * - Calls [`eth_getProof`](https://eips.ethereum.org/EIPS/eip-1186)\n *\n * @param client - Client to use\n * @param parameters - {@link GetProofParameters}\n * @returns Proof data. {@link GetProofReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getProof } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const block = await getProof(client, {\n * address: '0x...',\n * storageKeys: ['0x...'],\n * })\n */\nexport async function getProof<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n address,\n blockNumber,\n blockTag: blockTag_,\n storageKeys,\n }: GetProofParameters,\n): Promise<GetProofReturnType> {\n const blockTag = blockTag_ ?? 'latest'\n\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n const proof = await client.request({\n method: 'eth_getProof',\n params: [address, storageKeys, blockNumberHex || blockTag],\n })\n\n return formatProof(proof)\n}\n","import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\n\nexport type GetStorageAtParameters = {\n address: Address\n slot: Hex\n} & (\n | {\n blockNumber?: undefined\n blockTag?: BlockTag | undefined\n }\n | {\n blockNumber?: bigint | undefined\n blockTag?: undefined\n }\n)\n\nexport type GetStorageAtReturnType = Hex | undefined\n\nexport type GetStorageAtErrorType =\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns the value from a storage slot at a given address.\n *\n * - Docs: https://viem.sh/docs/contract/getStorageAt\n * - JSON-RPC Methods: [`eth_getStorageAt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getstorageat)\n *\n * @param client - Client to use\n * @param parameters - {@link GetStorageAtParameters}\n * @returns The value of the storage slot. {@link GetStorageAtReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getStorageAt } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const code = await getStorageAt(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * slot: toHex(0),\n * })\n */\nexport async function getStorageAt<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n { address, blockNumber, blockTag = 'latest', slot }: GetStorageAtParameters,\n): Promise<GetStorageAtReturnType> {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n const data = await client.request({\n method: 'eth_getStorageAt',\n params: [address, slot, blockNumberHex || blockTag],\n })\n return data\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { TransactionNotFoundError } from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RpcTransaction } from '../../types/rpc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type NumberToHexErrorType,\n numberToHex,\n} from '../../utils/encoding/toHex.js'\nimport {\n type FormattedTransaction,\n formatTransaction,\n} from '../../utils/formatters/transaction.js'\n\nexport type GetTransactionParameters<blockTag extends BlockTag = 'latest'> =\n | {\n /** The block hash */\n blockHash: Hash\n blockNumber?: undefined\n blockTag?: undefined\n hash?: undefined\n /** The index of the transaction on the block. */\n index: number\n }\n | {\n blockHash?: undefined\n /** The block number */\n blockNumber: bigint\n blockTag?: undefined\n hash?: undefined\n /** The index of the transaction on the block. */\n index: number\n }\n | {\n blockHash?: undefined\n blockNumber?: undefined\n /** The block tag. */\n blockTag: blockTag | BlockTag\n hash?: undefined\n /** The index of the transaction on the block. */\n index: number\n }\n | {\n blockHash?: undefined\n blockNumber?: undefined\n blockTag?: undefined\n /** The hash of the transaction. */\n hash: Hash\n index?: number | undefined\n }\n\nexport type GetTransactionReturnType<\n chain extends Chain | undefined = undefined,\n blockTag extends BlockTag = 'latest',\n> = Prettify<FormattedTransaction<chain, blockTag>>\n\nexport type GetTransactionErrorType =\n | NumberToHexErrorType\n | RequestErrorType\n | ErrorType\n\n/**\n * Returns information about a [Transaction](https://viem.sh/docs/glossary/terms#transaction) given a hash or block identifier.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransaction\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionByHash)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionParameters}\n * @returns The transaction information. {@link GetTransactionReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransaction } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transaction = await getTransaction(client, {\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransaction<\n chain extends Chain | undefined,\n blockTag extends BlockTag = 'latest',\n>(\n client: Client<Transport, chain>,\n {\n blockHash,\n blockNumber,\n blockTag: blockTag_,\n hash,\n index,\n }: GetTransactionParameters<blockTag>,\n): Promise<GetTransactionReturnType<chain, blockTag>> {\n const blockTag = blockTag_ || 'latest'\n\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n let transaction: RpcTransaction | null = null\n if (hash) {\n transaction = await client.request(\n {\n method: 'eth_getTransactionByHash',\n params: [hash],\n },\n { dedupe: true },\n )\n } else if (blockHash) {\n transaction = await client.request(\n {\n method: 'eth_getTransactionByBlockHashAndIndex',\n params: [blockHash, numberToHex(index)],\n },\n { dedupe: true },\n )\n } else if (blockNumberHex || blockTag) {\n transaction = await client.request(\n {\n method: 'eth_getTransactionByBlockNumberAndIndex',\n params: [blockNumberHex || blockTag, numberToHex(index)],\n },\n { dedupe: Boolean(blockNumberHex) },\n )\n }\n\n if (!transaction)\n throw new TransactionNotFoundError({\n blockHash,\n blockNumber,\n blockTag,\n hash,\n index,\n })\n\n const format =\n client.chain?.formatters?.transaction?.format || formatTransaction\n return format(transaction)\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { FormattedTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'\nimport { getAction } from '../../utils/getAction.js'\n\nimport {\n type GetBlockNumberErrorType,\n getBlockNumber,\n} from './getBlockNumber.js'\nimport {\n type GetTransactionErrorType,\n getTransaction,\n} from './getTransaction.js'\n\nexport type GetTransactionConfirmationsParameters<\n chain extends Chain | undefined = Chain,\n> =\n | {\n /** The transaction hash. */\n hash: Hash\n transactionReceipt?: undefined\n }\n | {\n hash?: undefined\n /** The transaction receipt. */\n transactionReceipt: FormattedTransactionReceipt<chain>\n }\n\nexport type GetTransactionConfirmationsReturnType = bigint\n\nexport type GetTransactionConfirmationsErrorType =\n | GetBlockNumberErrorType\n | GetTransactionErrorType\n | ErrorType\n\n/**\n * Returns the number of blocks passed (confirmations) since the transaction was processed on a block.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionConfirmations\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionConfirmations`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionConfirmations)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionConfirmationsParameters}\n * @returns The number of blocks passed since the transaction was processed. If confirmations is 0, then the Transaction has not been confirmed & processed yet. {@link GetTransactionConfirmationsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionConfirmations } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const confirmations = await getTransactionConfirmations(client, {\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransactionConfirmations<\n chain extends Chain | undefined,\n>(\n client: Client<Transport, chain>,\n { hash, transactionReceipt }: GetTransactionConfirmationsParameters<chain>,\n): Promise<GetTransactionConfirmationsReturnType> {\n const [blockNumber, transaction] = await Promise.all([\n getAction(client, getBlockNumber, 'getBlockNumber')({}),\n hash\n ? getAction(client, getTransaction, 'getTransaction')({ hash })\n : undefined,\n ])\n const transactionBlockNumber =\n transactionReceipt?.blockNumber || transaction?.blockNumber\n if (!transactionBlockNumber) return 0n\n return blockNumber - transactionBlockNumber! + 1n\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport {\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { RequestErrorType } from '../../utils/buildRequest.js'\nimport {\n type FormattedTransactionReceipt,\n formatTransactionReceipt,\n} from '../../utils/formatters/transactionReceipt.js'\n\nexport type GetTransactionReceiptParameters = {\n /** The hash of the transaction. */\n hash: Hash\n}\n\nexport type GetTransactionReceiptReturnType<\n chain extends Chain | undefined = undefined,\n> = FormattedTransactionReceipt<chain>\n\nexport type GetTransactionReceiptErrorType =\n | RequestErrorType\n | TransactionReceiptNotFoundErrorType\n | ErrorType\n\n/**\n * Returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt) given a [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactionreceipt)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionReceiptParameters}\n * @returns The transaction receipt. {@link GetTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionReceipt } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionReceipt = await getTransactionReceipt(client, {\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function getTransactionReceipt<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n { hash }: GetTransactionReceiptParameters,\n) {\n const receipt = await client.request(\n {\n method: 'eth_getTransactionReceipt',\n params: [hash],\n },\n { dedupe: true },\n )\n\n if (!receipt) throw new TransactionReceiptNotFoundError({ hash })\n\n const format =\n client.chain?.formatters?.transactionReceipt?.format ||\n formatTransactionReceipt\n return format(receipt) as GetTransactionReceiptReturnType<chain>\n}\n","import type { AbiStateMutability, Address, Narrow } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { multicall3Abi } from '../../constants/abis.js'\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js'\nimport { BaseError } from '../../errors/base.js'\nimport { RawContractError } from '../../errors/contract.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ContractFunctionParameters } from '../../types/contract.js'\nimport type { Hex } from '../../types/misc.js'\nimport type {\n MulticallContracts,\n MulticallResults,\n} from '../../types/multicall.js'\nimport {\n type DecodeFunctionResultErrorType,\n decodeFunctionResult,\n} from '../../utils/abi/decodeFunctionResult.js'\nimport {\n type EncodeFunctionDataErrorType,\n encodeFunctionData,\n} from '../../utils/abi/encodeFunctionData.js'\nimport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from '../../utils/chain/getChainContractAddress.js'\nimport {\n type GetContractErrorReturnType,\n getContractError,\n} from '../../utils/errors/getContractError.js'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport { getAction } from '../../utils/getAction.js'\nimport type { CallParameters } from './call.js'\nimport { type ReadContractErrorType, readContract } from './readContract.js'\n\nexport type MulticallParameters<\n contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n allowFailure extends boolean = true,\n options extends {\n optional?: boolean\n properties?: Record<string, any>\n } = {},\n> = Pick<CallParameters, 'blockNumber' | 'blockTag' | 'stateOverride'> & {\n allowFailure?: allowFailure | boolean | undefined\n batchSize?: number | undefined\n contracts: MulticallContracts<\n Narrow<contracts>,\n { mutability: AbiStateMutability } & options\n >\n multicallAddress?: Address | undefined\n}\n\nexport type MulticallReturnType<\n contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n allowFailure extends boolean = true,\n options extends {\n error?: Error\n } = { error: Error },\n> = MulticallResults<\n Narrow<contracts>,\n allowFailure,\n { mutability: AbiStateMutability } & options\n>\n\nexport type MulticallErrorType =\n | GetChainContractAddressErrorType\n | ReadContractErrorType\n | GetContractErrorReturnType<\n EncodeFunctionDataErrorType | DecodeFunctionResultErrorType\n >\n | ErrorType\n\n/**\n * Similar to [`readContract`](https://viem.sh/docs/contract/readContract), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).\n *\n * - Docs: https://viem.sh/docs/contract/multicall\n *\n * @param client - Client to use\n * @param parameters - {@link MulticallParameters}\n * @returns An array of results with accompanying status. {@link MulticallReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { multicall } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const abi = parseAbi([\n * 'function balanceOf(address) view returns (uint256)',\n * 'function totalSupply() view returns (uint256)',\n * ])\n * const results = await multicall(client, {\n * contracts: [\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'balanceOf',\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * },\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'totalSupply',\n * },\n * ],\n * })\n * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]\n */\nexport async function multicall<\n const contracts extends readonly unknown[],\n chain extends Chain | undefined,\n allowFailure extends boolean = true,\n>(\n client: Client<Transport, chain>,\n parameters: MulticallParameters<contracts, allowFailure>,\n): Promise<MulticallReturnType<contracts, allowFailure>> {\n const {\n allowFailure = true,\n batchSize: batchSize_,\n blockNumber,\n blockTag,\n multicallAddress: multicallAddress_,\n stateOverride,\n } = parameters\n const contracts = parameters.contracts as ContractFunctionParameters[]\n\n const batchSize =\n batchSize_ ??\n ((typeof client.batch?.multicall === 'object' &&\n client.batch.multicall.batchSize) ||\n 1_024)\n\n let multicallAddress = multicallAddress_\n if (!multicallAddress) {\n if (!client.chain)\n throw new Error(\n 'client chain not configured. multicallAddress is required.',\n )\n\n multicallAddress = getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'multicall3',\n })\n }\n\n type Aggregate3Calls = {\n allowFailure: boolean\n callData: Hex\n target: Address\n }[]\n\n const chunkedCalls: Aggregate3Calls[] = [[]]\n let currentChunk = 0\n let currentChunkSize = 0\n for (let i = 0; i < contracts.length; i++) {\n const { abi, address, args, functionName } = contracts[i]\n try {\n const callData = encodeFunctionData({ abi, args, functionName })\n\n currentChunkSize += (callData.length - 2) / 2\n // Check to see if we need to create a new chunk.\n if (\n // Check if batching is enabled.\n batchSize > 0 &&\n // Check if the current size of the batch exceeds the size limit.\n currentChunkSize > batchSize &&\n // Check if the current chunk is not already empty.\n chunkedCalls[currentChunk].length > 0\n ) {\n currentChunk++\n currentChunkSize = (callData.length - 2) / 2\n chunkedCalls[currentChunk] = []\n }\n\n chunkedCalls[currentChunk] = [\n ...chunkedCalls[currentChunk],\n {\n allowFailure: true,\n callData,\n target: address,\n },\n ]\n } catch (err) {\n const error = getContractError(err as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/multicall',\n functionName,\n })\n if (!allowFailure) throw error\n chunkedCalls[currentChunk] = [\n ...chunkedCalls[currentChunk],\n {\n allowFailure: true,\n callData: '0x' as Hex,\n target: address,\n },\n ]\n }\n }\n\n const aggregate3Results = await Promise.allSettled(\n chunkedCalls.map((calls) =>\n getAction(\n client,\n readContract,\n 'readContract',\n )({\n abi: multicall3Abi,\n address: multicallAddress!,\n args: [calls],\n blockNumber,\n blockTag,\n functionName: 'aggregate3',\n stateOverride,\n }),\n ),\n )\n\n const results = []\n for (let i = 0; i < aggregate3Results.length; i++) {\n const result = aggregate3Results[i]\n\n // If an error occurred in a `readContract` invocation (ie. network error),\n // then append the failure reason to each contract result.\n if (result.status === 'rejected') {\n if (!allowFailure) throw result.reason\n for (let j = 0; j < chunkedCalls[i].length; j++) {\n results.push({\n status: 'failure',\n error: result.reason,\n result: undefined,\n })\n }\n continue\n }\n\n // If the `readContract` call was successful, then decode the results.\n const aggregate3Result = result.value\n for (let j = 0; j < aggregate3Result.length; j++) {\n // Extract the response from `readContract`\n const { returnData, success } = aggregate3Result[j]\n\n // Extract the request call data from the original call.\n const { callData } = chunkedCalls[i][j]\n\n // Extract the contract config for this call from the `contracts` argument\n // for decoding.\n const { abi, address, functionName, args } = contracts[\n results.length\n ] as ContractFunctionParameters\n\n try {\n if (callData === '0x') throw new AbiDecodingZeroDataError()\n if (!success) throw new RawContractError({ data: returnData })\n const result = decodeFunctionResult({\n abi,\n args,\n data: returnData,\n functionName,\n })\n results.push(allowFailure ? { result, status: 'success' } : result)\n } catch (err) {\n const error = getContractError(err as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/multicall',\n functionName,\n })\n if (!allowFailure) throw error\n results.push({ error, result: undefined, status: 'failure' })\n }\n }\n }\n\n if (results.length !== contracts.length)\n throw new BaseError('multicall results mismatch')\n return results as MulticallReturnType<contracts, allowFailure>\n}\n","import { secp256k1 } from '@noble/curves/secp256k1'\n\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport { type HexToBigIntErrorType, hexToBigInt } from '../encoding/fromHex.js'\nimport { hexToBytes } from '../encoding/toBytes.js'\nimport type { ToHexErrorType } from '../encoding/toHex.js'\n\ntype To = 'bytes' | 'hex'\n\nexport type SerializeSignatureParameters<to extends To = 'hex'> = Signature & {\n to?: to | To | undefined\n}\n\nexport type SerializeSignatureReturnType<to extends To = 'hex'> =\n | (to extends 'hex' ? Hex : never)\n | (to extends 'bytes' ? ByteArray : never)\n\nexport type SerializeSignatureErrorType =\n | HexToBigIntErrorType\n | ToHexErrorType\n | ErrorType\n\n/**\n * @description Converts a signature into hex format.\n *\n * @param signature The signature to convert.\n * @returns The signature in hex format.\n *\n * @example\n * serializeSignature({\n * r: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf',\n * s: '0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8',\n * yParity: 1\n * })\n * // \"0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c\"\n */\nexport function serializeSignature<to extends To = 'hex'>({\n r,\n s,\n to = 'hex',\n v,\n yParity,\n}: SerializeSignatureParameters<to>): SerializeSignatureReturnType<to> {\n const yParity_ = (() => {\n if (yParity === 0 || yParity === 1) return yParity\n if (v && (v === 27n || v === 28n || v >= 35n)) return v % 2n === 0n ? 1 : 0\n throw new Error('Invalid `v` or `yParity` value')\n })()\n const signature = `0x${new secp256k1.Signature(\n hexToBigInt(r),\n hexToBigInt(s),\n ).toCompactHex()}${yParity_ === 0 ? '1b' : '1c'}` as const\n\n if (to === 'hex') return signature as SerializeSignatureReturnType<to>\n return hexToBytes(signature) as SerializeSignatureReturnType<to>\n}\n","import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { universalSignatureValidatorAbi } from '../../constants/abis.js'\nimport { universalSignatureValidatorByteCode } from '../../constants/contracts.js'\nimport { CallExecutionError } from '../../errors/contract.js'\nimport type { InvalidHexBooleanError } from '../../errors/encoding.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { OneOf } from '../../types/utils.js'\nimport {\n type EncodeDeployDataErrorType,\n encodeDeployData,\n} from '../../utils/abi/encodeDeployData.js'\nimport { getAddress } from '../../utils/address/getAddress.js'\nimport { isAddressEqual } from '../../utils/address/isAddressEqual.js'\nimport { type IsHexErrorType, isHex } from '../../utils/data/isHex.js'\nimport { type ToHexErrorType, bytesToHex } from '../../utils/encoding/toHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { encodeFunctionData, hexToBool } from '../../utils/index.js'\nimport { isErc6492Signature } from '../../utils/signature/isErc6492Signature.js'\nimport { recoverAddress } from '../../utils/signature/recoverAddress.js'\nimport { serializeErc6492Signature } from '../../utils/signature/serializeErc6492Signature.js'\nimport { serializeSignature } from '../../utils/signature/serializeSignature.js'\nimport { type CallErrorType, type CallParameters, call } from './call.js'\n\nexport type VerifyHashParameters = Pick<\n CallParameters,\n 'blockNumber' | 'blockTag'\n> & {\n /** The address that signed the original message. */\n address: Address\n /** The hash to be verified. */\n hash: Hex\n /** The signature that was generated by signing the message with the address's private key. */\n signature: Hex | ByteArray | Signature\n universalSignatureVerifierAddress?: Address | undefined\n} & OneOf<{ factory: Address; factoryData: Hex } | {}>\n\nexport type VerifyHashReturnType = boolean\n\nexport type VerifyHashErrorType =\n | CallErrorType\n | IsHexErrorType\n | ToHexErrorType\n | InvalidHexBooleanError\n | EncodeDeployDataErrorType\n | ErrorType\n\n/**\n * Verifies a message hash onchain using ERC-6492.\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyHashParameters}\n * @returns Whether or not the signature is valid. {@link VerifyHashReturnType}\n */\nexport async function verifyHash<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n parameters: VerifyHashParameters,\n): Promise<VerifyHashReturnType> {\n const {\n address,\n factory,\n factoryData,\n hash,\n signature,\n universalSignatureVerifierAddress = client.chain?.contracts\n ?.universalSignatureVerifier?.address,\n ...rest\n } = parameters\n\n const signatureHex = (() => {\n if (isHex(signature)) return signature\n if (typeof signature === 'object' && 'r' in signature && 's' in signature)\n return serializeSignature(signature)\n return bytesToHex(signature)\n })()\n\n const wrappedSignature = await (async () => {\n // If no `factory` or `factoryData` is provided, it is assumed that the\n // address is not a Smart Account, or the Smart Account is already deployed.\n if (!factory && !factoryData) return signatureHex\n\n // If the signature is already wrapped, return the signature.\n if (isErc6492Signature(signatureHex)) return signatureHex\n\n // If the Smart Account is not deployed, wrap the signature with a 6492 wrapper\n // to perform counterfactual validation.\n return serializeErc6492Signature({\n address: factory!,\n data: factoryData!,\n signature: signatureHex,\n })\n })()\n\n try {\n const args = universalSignatureVerifierAddress\n ? ({\n to: universalSignatureVerifierAddress,\n data: encodeFunctionData({\n abi: universalSignatureValidatorAbi,\n functionName: 'isValidSig',\n args: [address, hash, wrappedSignature],\n }),\n ...rest,\n } as unknown as CallParameters)\n : ({\n data: encodeDeployData({\n abi: universalSignatureValidatorAbi,\n args: [address, hash, wrappedSignature],\n bytecode: universalSignatureValidatorByteCode,\n }),\n ...rest,\n } as unknown as CallParameters)\n\n const { data } = await getAction(client, call, 'call')(args)\n\n return hexToBool(data ?? '0x0')\n } catch (error) {\n // Fallback attempt to verify the signature via ECDSA recovery.\n try {\n const verified = isAddressEqual(\n getAddress(address),\n await recoverAddress({ hash, signature }),\n )\n if (verified) return true\n } catch {}\n\n if (error instanceof CallExecutionError) {\n // if the execution fails, the signature was not valid and an internal method inside of the validator reverted\n // this can happen for many reasons, for example if signer can not be recovered from the signature\n // or if the signature has no valid format\n return false\n }\n\n throw error\n }\n}\n","import type { Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ByteArray,\n Hex,\n SignableMessage,\n Signature,\n} from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport { hashMessage } from '../../utils/signature/hashMessage.js'\nimport type { HashMessageErrorType } from '../../utils/signature/hashMessage.js'\nimport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n verifyHash,\n} from './verifyHash.js'\n\nexport type VerifyMessageParameters = Prettify<\n Omit<VerifyHashParameters, 'hash'> & {\n /** The address that signed the original message. */\n address: Address\n /** The message to be verified. */\n message: SignableMessage\n /** The signature that was generated by signing the message with the address's private key. */\n signature: Hex | ByteArray | Signature\n }\n>\n\nexport type VerifyMessageReturnType = boolean\n\nexport type VerifyMessageErrorType =\n | HashMessageErrorType\n | VerifyHashErrorType\n | ErrorType\n\n/**\n * Verify that a message was signed by the provided address.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyMessage}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}\n */\nexport async function verifyMessage<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n {\n address,\n message,\n factory,\n factoryData,\n signature,\n ...callRequest\n }: VerifyMessageParameters,\n): Promise<VerifyMessageReturnType> {\n const hash = hashMessage(message)\n return verifyHash(client, {\n address,\n factory: factory!,\n factoryData: factoryData!,\n hash,\n signature,\n ...callRequest,\n })\n}\n","import type { Address, TypedData } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { ByteArray, Hex, Signature } from '../../types/misc.js'\nimport type { TypedDataDefinition } from '../../types/typedData.js'\nimport {\n type HashTypedDataErrorType,\n hashTypedData,\n} from '../../utils/signature/hashTypedData.js'\nimport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n verifyHash,\n} from './verifyHash.js'\n\nexport type VerifyTypedDataParameters<\n typedData extends TypedData | Record<string, unknown> = TypedData,\n primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n> = Omit<VerifyHashParameters, 'hash'> &\n TypedDataDefinition<typedData, primaryType> & {\n /** The address to verify the typed data for. */\n address: Address\n /** The signature to verify */\n signature: Hex | ByteArray | Signature\n }\n\nexport type VerifyTypedDataReturnType = boolean\n\nexport type VerifyTypedDataErrorType =\n | HashTypedDataErrorType\n | VerifyHashErrorType\n | ErrorType\n\n/**\n * Verify that typed data was signed by the provided address.\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyTypedData}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifyTypedDataParameters}\n * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}\n */\nexport async function verifyTypedData<\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain',\n chain extends Chain | undefined,\n>(\n client: Client<Transport, chain>,\n parameters: VerifyTypedDataParameters<typedData, primaryType>,\n): Promise<VerifyTypedDataReturnType> {\n const {\n address,\n factory,\n factoryData,\n signature,\n message,\n primaryType,\n types,\n domain,\n ...callRequest\n } = parameters as VerifyTypedDataParameters\n const hash = hashTypedData({ message, primaryType, types, domain })\n return verifyHash(client, {\n address,\n factory: factory!,\n factoryData: factoryData!,\n hash,\n signature,\n ...callRequest,\n })\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { HasTransportType } from '../../types/transport.js'\nimport { hexToBigInt } from '../../utils/encoding/fromHex.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { observe } from '../../utils/observe.js'\nimport { type PollErrorType, poll } from '../../utils/poll.js'\nimport { stringify } from '../../utils/stringify.js'\n\nimport {\n type GetBlockNumberReturnType,\n getBlockNumber,\n} from './getBlockNumber.js'\n\nexport type OnBlockNumberParameter = GetBlockNumberReturnType\nexport type OnBlockNumberFn = (\n blockNumber: OnBlockNumberParameter,\n prevBlockNumber: OnBlockNumberParameter | undefined,\n) => void\n\nexport type WatchBlockNumberParameters<\n transport extends Transport = Transport,\n> = {\n /** The callback to call when a new block number is received. */\n onBlockNumber: OnBlockNumberFn\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: ((error: Error) => void) | undefined\n} & (\n | (HasTransportType<transport, 'webSocket'> extends true\n ? {\n emitMissed?: undefined\n emitOnBegin?: undefined\n /** Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`. */\n poll?: false | undefined\n pollingInterval?: undefined\n }\n : never)\n | {\n /** Whether or not to emit the missed block numbers to the callback. */\n emitMissed?: boolean | undefined\n /** Whether or not to emit the latest block number to the callback when the subscription opens. */\n emitOnBegin?: boolean | undefined\n poll?: true | undefined\n /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */\n pollingInterval?: number | undefined\n }\n)\n\nexport type WatchBlockNumberReturnType = () => void\n\nexport type WatchBlockNumberErrorType = PollErrorType | ErrorType\n\n/**\n * Watches and returns incoming block numbers.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n * - When `poll: true`, calls [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchBlockNumberParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, watchBlockNumber, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = watchBlockNumber(client, {\n * onBlockNumber: (blockNumber) => console.log(blockNumber),\n * })\n */\nexport function watchBlockNumber<\n chain extends Chain | undefined,\n transport extends Transport,\n>(\n client: Client<transport, chain>,\n {\n emitOnBegin = false,\n emitMissed = false,\n onBlockNumber,\n onError,\n poll: poll_,\n pollingInterval = client.pollingInterval,\n }: WatchBlockNumberParameters<transport>,\n): WatchBlockNumberReturnType {\n const enablePolling = (() => {\n if (typeof poll_ !== 'undefined') return poll_\n if (client.transport.type === 'webSocket') return false\n if (\n client.transport.type === 'fallback' &&\n client.transport.transports[0].config.type === 'webSocket'\n )\n return false\n return true\n })()\n\n let prevBlockNumber: GetBlockNumberReturnType | undefined\n\n const pollBlockNumber = () => {\n const observerId = stringify([\n 'watchBlockNumber',\n client.uid,\n emitOnBegin,\n emitMissed,\n pollingInterval,\n ])\n\n return observe(observerId, { onBlockNumber, onError }, (emit) =>\n poll(\n async () => {\n try {\n const blockNumber = await getAction(\n client,\n getBlockNumber,\n 'getBlockNumber',\n )({ cacheTime: 0 })\n\n if (prevBlockNumber) {\n // If the current block number is the same as the previous,\n // we can skip.\n if (blockNumber === prevBlockNumber) return\n\n // If we have missed out on some previous blocks, and the\n // `emitMissed` flag is truthy, let's emit those blocks.\n if (blockNumber - prevBlockNumber > 1 && emitMissed) {\n for (let i = prevBlockNumber + 1n; i < blockNumber; i++) {\n emit.onBlockNumber(i, prevBlockNumber)\n prevBlockNumber = i\n }\n }\n }\n\n // If the next block number is greater than the previous,\n // it is not in the past, and we can emit the new block number.\n if (!prevBlockNumber || blockNumber > prevBlockNumber) {\n emit.onBlockNumber(blockNumber, prevBlockNumber)\n prevBlockNumber = blockNumber\n }\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin,\n interval: pollingInterval,\n },\n ),\n )\n }\n\n const subscribeBlockNumber = () => {\n const observerId = stringify([\n 'watchBlockNumber',\n client.uid,\n emitOnBegin,\n emitMissed,\n ])\n\n return observe(observerId, { onBlockNumber, onError }, (emit) => {\n let active = true\n let unsubscribe = () => (active = false)\n ;(async () => {\n try {\n const transport = (() => {\n if (client.transport.type === 'fallback') {\n const transport = client.transport.transports.find(\n (transport: ReturnType<Transport>) =>\n transport.config.type === 'webSocket',\n )\n if (!transport) return client.transport\n return transport.value\n }\n return client.transport\n })()\n\n const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n params: ['newHeads'],\n onData(data: any) {\n if (!active) return\n const blockNumber = hexToBigInt(data.result?.number)\n emit.onBlockNumber(blockNumber, prevBlockNumber)\n prevBlockNumber = blockNumber\n },\n onError(error: Error) {\n emit.onError?.(error)\n },\n })\n unsubscribe = unsubscribe_\n if (!active) unsubscribe()\n } catch (err) {\n onError?.(err as Error)\n }\n })()\n return () => unsubscribe()\n })\n }\n\n return enablePolling ? pollBlockNumber() : subscribeBlockNumber()\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport { BlockNotFoundError } from '../../errors/block.js'\nimport {\n TransactionNotFoundError,\n TransactionReceiptNotFoundError,\n WaitForTransactionReceiptTimeoutError,\n} from '../../errors/transaction.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { Transaction } from '../../types/transaction.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { withResolvers } from '../../utils/promise/withResolvers.js'\nimport {\n type WithRetryParameters,\n withRetry,\n} from '../../utils/promise/withRetry.js'\nimport { stringify } from '../../utils/stringify.js'\n\nimport { type GetBlockErrorType, getBlock } from './getBlock.js'\nimport {\n type GetTransactionErrorType,\n type GetTransactionReturnType,\n getTransaction,\n} from './getTransaction.js'\nimport {\n type GetTransactionReceiptErrorType,\n type GetTransactionReceiptReturnType,\n getTransactionReceipt,\n} from './getTransactionReceipt.js'\nimport {\n type WatchBlockNumberErrorType,\n watchBlockNumber,\n} from './watchBlockNumber.js'\n\nexport type ReplacementReason = 'cancelled' | 'replaced' | 'repriced'\nexport type ReplacementReturnType<\n chain extends Chain | undefined = Chain | undefined,\n> = {\n reason: ReplacementReason\n replacedTransaction: Transaction\n transaction: Transaction\n transactionReceipt: GetTransactionReceiptReturnType<chain>\n}\n\nexport type WaitForTransactionReceiptReturnType<\n chain extends Chain | undefined = Chain | undefined,\n> = GetTransactionReceiptReturnType<chain>\n\nexport type WaitForTransactionReceiptParameters<\n chain extends Chain | undefined = Chain | undefined,\n> = {\n /**\n * The number of confirmations (blocks that have passed) to wait before resolving.\n * @default 1\n */\n confirmations?: number | undefined\n /** The hash of the transaction. */\n hash: Hash\n /** Optional callback to emit if the transaction has been replaced. */\n onReplaced?: ((response: ReplacementReturnType<chain>) => void) | undefined\n /**\n * Polling frequency (in ms). Defaults to the client's pollingInterval config.\n * @default client.pollingInterval\n */\n pollingInterval?: number | undefined\n /**\n * Number of times to retry if the transaction or block is not found.\n * @default 6 (exponential backoff)\n */\n retryCount?: WithRetryParameters['retryCount'] | undefined\n /**\n * Time to wait (in ms) between retries.\n * @default `({ count }) => ~~(1 << count) * 200` (exponential backoff)\n */\n retryDelay?: WithRetryParameters['delay'] | undefined\n /**\n * Optional timeout (in milliseconds) to wait before stopping polling.\n * @default 180_000\n */\n timeout?: number | undefined\n}\n\nexport type WaitForTransactionReceiptErrorType =\n | ObserveErrorType\n | GetBlockErrorType\n | GetTransactionErrorType\n | GetTransactionReceiptErrorType\n | WatchBlockNumberErrorType\n | ErrorType\n\n/**\n * Waits for the [Transaction](https://viem.sh/docs/glossary/terms#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt).\n *\n * - Docs: https://viem.sh/docs/actions/public/waitForTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n * - JSON-RPC Methods:\n * - Polls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt) on each block until it has been processed.\n * - If a Transaction has been replaced:\n * - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) and extracts the transactions\n * - Checks if one of the Transactions is a replacement\n * - If so, calls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt).\n *\n * The `waitForTransactionReceipt` action additionally supports Replacement detection (e.g. sped up Transactions).\n *\n * Transactions can be replaced when a user modifies their transaction in their wallet (to speed up or cancel). Transactions are replaced when they are sent from the same nonce.\n *\n * There are 3 types of Transaction Replacement reasons:\n *\n * - `repriced`: The gas price has been modified (e.g. different `maxFeePerGas`)\n * - `cancelled`: The Transaction has been cancelled (e.g. `value === 0n`)\n * - `replaced`: The Transaction has been replaced (e.g. different `value` or `data`)\n *\n * @param client - Client to use\n * @param parameters - {@link WaitForTransactionReceiptParameters}\n * @returns The transaction receipt. {@link WaitForTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, waitForTransactionReceipt, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionReceipt = await waitForTransactionReceipt(client, {\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\nexport async function waitForTransactionReceipt<\n chain extends Chain | undefined,\n>(\n client: Client<Transport, chain>,\n {\n confirmations = 1,\n hash,\n onReplaced,\n pollingInterval = client.pollingInterval,\n retryCount = 6,\n retryDelay = ({ count }) => ~~(1 << count) * 200, // exponential backoff\n timeout = 180_000,\n }: WaitForTransactionReceiptParameters<chain>,\n): Promise<WaitForTransactionReceiptReturnType<chain>> {\n const observerId = stringify(['waitForTransactionReceipt', client.uid, hash])\n\n let transaction: GetTransactionReturnType<chain> | undefined\n let replacedTransaction: GetTransactionReturnType<chain> | undefined\n let receipt: GetTransactionReceiptReturnType<chain>\n let retrying = false\n\n const { promise, resolve, reject } =\n withResolvers<WaitForTransactionReceiptReturnType<chain>>()\n\n const timer = timeout\n ? setTimeout(\n () => reject(new WaitForTransactionReceiptTimeoutError({ hash })),\n timeout,\n )\n : undefined\n\n const _unobserve = observe(\n observerId,\n { onReplaced, resolve, reject },\n (emit) => {\n const _unwatch = getAction(\n client,\n watchBlockNumber,\n 'watchBlockNumber',\n )({\n emitMissed: true,\n emitOnBegin: true,\n poll: true,\n pollingInterval,\n async onBlockNumber(blockNumber_) {\n const done = (fn: () => void) => {\n clearTimeout(timer)\n _unwatch()\n fn()\n _unobserve()\n }\n\n let blockNumber = blockNumber_\n\n if (retrying) return\n\n try {\n // If we already have a valid receipt, let's check if we have enough\n // confirmations. If we do, then we can resolve.\n if (receipt) {\n if (\n confirmations > 1 &&\n (!receipt.blockNumber ||\n blockNumber - receipt.blockNumber + 1n < confirmations)\n )\n return\n\n done(() => emit.resolve(receipt))\n return\n }\n\n // Get the transaction to check if it's been replaced.\n // We need to retry as some RPC Providers may be slow to sync\n // up mined transactions.\n if (!transaction) {\n retrying = true\n await withRetry(\n async () => {\n transaction = (await getAction(\n client,\n getTransaction,\n 'getTransaction',\n )({ hash })) as GetTransactionReturnType<chain>\n if (transaction.blockNumber)\n blockNumber = transaction.blockNumber\n },\n {\n delay: retryDelay,\n retryCount,\n },\n )\n retrying = false\n }\n\n // Get the receipt to check if it's been processed.\n receipt = await getAction(\n client,\n getTransactionReceipt,\n 'getTransactionReceipt',\n )({ hash })\n\n // Check if we have enough confirmations. If not, continue polling.\n if (\n confirmations > 1 &&\n (!receipt.blockNumber ||\n blockNumber - receipt.blockNumber + 1n < confirmations)\n )\n return\n\n done(() => emit.resolve(receipt))\n } catch (err) {\n // If the receipt is not found, the transaction will be pending.\n // We need to check if it has potentially been replaced.\n if (\n err instanceof TransactionNotFoundError ||\n err instanceof TransactionReceiptNotFoundError\n ) {\n if (!transaction) {\n retrying = false\n return\n }\n\n try {\n replacedTransaction = transaction\n\n // Let's retrieve the transactions from the current block.\n // We need to retry as some RPC Providers may be slow to sync\n // up mined blocks.\n retrying = true\n const block = await withRetry(\n () =>\n getAction(\n client,\n getBlock,\n 'getBlock',\n )({\n blockNumber,\n includeTransactions: true,\n }),\n {\n delay: retryDelay,\n retryCount,\n shouldRetry: ({ error }) =>\n error instanceof BlockNotFoundError,\n },\n )\n retrying = false\n\n const replacementTransaction = (\n block.transactions as {} as Transaction[]\n ).find(\n ({ from, nonce }) =>\n from === replacedTransaction!.from &&\n nonce === replacedTransaction!.nonce,\n )\n\n // If we couldn't find a replacement transaction, continue polling.\n if (!replacementTransaction) return\n\n // If we found a replacement transaction, return it's receipt.\n receipt = await getAction(\n client,\n getTransactionReceipt,\n 'getTransactionReceipt',\n )({\n hash: replacementTransaction.hash,\n })\n\n // Check if we have enough confirmations. If not, continue polling.\n if (\n confirmations > 1 &&\n (!receipt.blockNumber ||\n blockNumber - receipt.blockNumber + 1n < confirmations)\n )\n return\n\n let reason: ReplacementReason = 'replaced'\n if (\n replacementTransaction.to === replacedTransaction.to &&\n replacementTransaction.value === replacedTransaction.value\n ) {\n reason = 'repriced'\n } else if (\n replacementTransaction.from === replacementTransaction.to &&\n replacementTransaction.value === 0n\n ) {\n reason = 'cancelled'\n }\n\n done(() => {\n emit.onReplaced?.({\n reason,\n replacedTransaction: replacedTransaction! as any,\n transaction: replacementTransaction,\n transactionReceipt: receipt,\n })\n emit.resolve(receipt)\n })\n } catch (err_) {\n done(() => emit.reject(err_))\n }\n } else {\n done(() => emit.reject(err))\n }\n }\n },\n })\n },\n )\n\n return promise\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { HasTransportType } from '../../types/transport.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { observe } from '../../utils/observe.js'\nimport { type PollErrorType, poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\n\nimport { type GetBlockReturnType, getBlock } from './getBlock.js'\n\nexport type OnBlockParameter<\n chain extends Chain | undefined = Chain,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n> = GetBlockReturnType<chain, includeTransactions, blockTag>\n\nexport type OnBlock<\n chain extends Chain | undefined = Chain,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n> = (\n block: OnBlockParameter<chain, includeTransactions, blockTag>,\n prevBlock: OnBlockParameter<chain, includeTransactions, blockTag> | undefined,\n) => void\n\nexport type WatchBlocksParameters<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n> = {\n /** The callback to call when a new block is received. */\n onBlock: OnBlock<chain, includeTransactions, blockTag>\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: ((error: Error) => void) | undefined\n} & (\n | (HasTransportType<transport, 'webSocket'> extends true\n ? {\n blockTag?: undefined\n emitMissed?: undefined\n emitOnBegin?: undefined\n includeTransactions?: undefined\n /** Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`. */\n poll?: false | undefined\n pollingInterval?: undefined\n }\n : never)\n | {\n /** The block tag. Defaults to \"latest\". */\n blockTag?: blockTag | BlockTag | undefined\n /** Whether or not to emit the missed blocks to the callback. */\n emitMissed?: boolean | undefined\n /** Whether or not to emit the block to the callback when the subscription opens. */\n emitOnBegin?: boolean | undefined\n /** Whether or not to include transaction data in the response. */\n includeTransactions?: includeTransactions | undefined\n poll?: true | undefined\n /** Polling frequency (in ms). Defaults to the client's pollingInterval config. */\n pollingInterval?: number | undefined\n }\n)\n\nexport type WatchBlocksReturnType = () => void\n\nexport type WatchBlocksErrorType =\n | StringifyErrorType\n | PollErrorType\n | ErrorType\n\n/**\n * Watches and returns information for incoming blocks.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlocks\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n * - When `poll: true`, calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getBlockByNumber) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchBlocksParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlocksReturnType}\n *\n * @example\n * import { createPublicClient, watchBlocks, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = watchBlocks(client, {\n * onBlock: (block) => console.log(block),\n * })\n */\nexport function watchBlocks<\n transport extends Transport,\n chain extends Chain | undefined,\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n>(\n client: Client<transport, chain>,\n {\n blockTag = 'latest',\n emitMissed = false,\n emitOnBegin = false,\n onBlock,\n onError,\n includeTransactions: includeTransactions_,\n poll: poll_,\n pollingInterval = client.pollingInterval,\n }: WatchBlocksParameters<transport, chain, includeTransactions, blockTag>,\n): WatchBlocksReturnType {\n const enablePolling = (() => {\n if (typeof poll_ !== 'undefined') return poll_\n if (client.transport.type === 'webSocket') return false\n if (\n client.transport.type === 'fallback' &&\n client.transport.transports[0].config.type === 'webSocket'\n )\n return false\n return true\n })()\n const includeTransactions = includeTransactions_ ?? false\n\n let prevBlock:\n | GetBlockReturnType<chain, false | includeTransactions, 'latest'>\n | undefined\n\n const pollBlocks = () => {\n const observerId = stringify([\n 'watchBlocks',\n client.uid,\n blockTag,\n emitMissed,\n emitOnBegin,\n includeTransactions,\n pollingInterval,\n ])\n\n return observe(observerId, { onBlock, onError }, (emit) =>\n poll(\n async () => {\n try {\n const block = await getAction(\n client,\n getBlock,\n 'getBlock',\n )({\n blockTag,\n includeTransactions,\n })\n if (block.number && prevBlock?.number) {\n // If the current block number is the same as the previous,\n // we can skip.\n if (block.number === prevBlock.number) return\n\n // If we have missed out on some previous blocks, and the\n // `emitMissed` flag is truthy, let's emit those blocks.\n if (block.number - prevBlock.number > 1 && emitMissed) {\n for (let i = prevBlock?.number + 1n; i < block.number; i++) {\n const block = (await getAction(\n client,\n getBlock,\n 'getBlock',\n )({\n blockNumber: i,\n includeTransactions,\n })) as GetBlockReturnType<chain>\n emit.onBlock(block as any, prevBlock as any)\n prevBlock = block\n }\n }\n }\n\n if (\n // If no previous block exists, emit.\n !prevBlock?.number ||\n // If the block tag is \"pending\" with no block number, emit.\n (blockTag === 'pending' && !block?.number) ||\n // If the next block number is greater than the previous block number, emit.\n // We don't want to emit blocks in the past.\n (block.number && block.number > prevBlock.number)\n ) {\n emit.onBlock(block as any, prevBlock as any)\n prevBlock = block as any\n }\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin,\n interval: pollingInterval,\n },\n ),\n )\n }\n\n const subscribeBlocks = () => {\n let active = true\n let emitFetched = true\n let unsubscribe = () => (active = false)\n ;(async () => {\n try {\n if (emitOnBegin) {\n getAction(\n client,\n getBlock,\n 'getBlock',\n )({\n blockTag,\n includeTransactions,\n }).then((block) => {\n if (!active) return\n if (!emitFetched) return\n onBlock(block as any, undefined)\n emitFetched = false\n })\n }\n\n const transport = (() => {\n if (client.transport.type === 'fallback') {\n const transport = client.transport.transports.find(\n (transport: ReturnType<Transport>) =>\n transport.config.type === 'webSocket',\n )\n if (!transport) return client.transport\n return transport.value\n }\n return client.transport\n })()\n\n const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n params: ['newHeads'],\n async onData(data: any) {\n if (!active) return\n const block = (await getAction(\n client,\n getBlock,\n 'getBlock',\n )({\n blockNumber: data.blockNumber,\n includeTransactions,\n }).catch(() => {})) as GetBlockReturnType<chain>\n if (!active) return\n onBlock(block as any, prevBlock as any)\n emitFetched = false\n prevBlock = block\n },\n onError(error: Error) {\n onError?.(error)\n },\n })\n unsubscribe = unsubscribe_\n if (!active) unsubscribe()\n } catch (err) {\n onError?.(err as Error)\n }\n })()\n return () => unsubscribe()\n }\n\n return enablePolling ? pollBlocks() : subscribeBlocks()\n}\n","import type { AbiEvent, Address } from 'abitype'\n\nimport type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Log } from '../../types/log.js'\nimport type { LogTopic } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport {\n type EncodeEventTopicsParameters,\n encodeEventTopics,\n} from '../../utils/abi/encodeEventTopics.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\n\nimport {\n DecodeLogDataMismatch,\n DecodeLogTopicsMismatch,\n} from '../../errors/abi.js'\nimport { InvalidInputRpcError } from '../../errors/rpc.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { BlockNumber } from '../../types/block.js'\nimport { decodeEventLog } from '../../utils/abi/decodeEventLog.js'\nimport { formatLog } from '../../utils/formatters/log.js'\nimport { getAction } from '../../utils/getAction.js'\nimport {\n type CreateEventFilterParameters,\n createEventFilter,\n} from './createEventFilter.js'\nimport { getBlockNumber } from './getBlockNumber.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { type GetLogsParameters, getLogs } from './getLogs.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type WatchEventOnLogsParameter<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = Log<bigint, number, false, abiEvent, strict, abiEvents, eventName>[]\nexport type WatchEventOnLogsFn<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n //\n _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = (\n logs: WatchEventOnLogsParameter<abiEvent, abiEvents, strict, _eventName>,\n) => void\n\nexport type WatchEventParameters<\n abiEvent extends AbiEvent | undefined = undefined,\n abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n transport extends Transport = Transport,\n //\n _eventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n> = {\n /** The address of the contract. */\n address?: Address | Address[] | undefined\n /** Block to start listening from. */\n fromBlock?: BlockNumber<bigint> | undefined\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: ((error: Error) => void) | undefined\n /** The callback to call when new event logs are received. */\n onLogs: WatchEventOnLogsFn<abiEvent, abiEvents, strict, _eventName>\n} & GetPollOptions<transport> &\n (\n | {\n event: abiEvent\n events?: undefined\n args?: MaybeExtractEventArgsFromAbi<abiEvents, _eventName> | undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n event?: undefined\n events?: abiEvents | undefined\n args?: undefined\n /**\n * Whether or not the logs must match the indexed/non-indexed arguments on `event`.\n * @default false\n */\n strict?: strict | undefined\n }\n | {\n event?: undefined\n events?: undefined\n args?: undefined\n strict?: undefined\n }\n )\n\nexport type WatchEventReturnType = () => void\n\nexport type WatchEventErrorType =\n | StringifyErrorType\n | ObserveErrorType\n | ErrorType\n\n/**\n * Watches and returns emitted [Event Logs](https://viem.sh/docs/glossary/terms#event-log).\n *\n * - Docs: https://viem.sh/docs/actions/public/watchEvent\n * - JSON-RPC Methods:\n * - **RPC Provider supports `eth_newFilter`:**\n * - Calls [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter) to create a filter (called on initialize).\n * - On a polling interval, it will call [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges).\n * - **RPC Provider does not support `eth_newFilter`:**\n * - Calls [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) for each block between the polling interval.\n *\n * This Action will batch up all the Event Logs found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/actions/public/watchEvent#onLogs).\n *\n * `watchEvent` will attempt to create an [Event Filter](https://viem.sh/docs/actions/public/createEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param client - Client to use\n * @param parameters - {@link WatchEventParameters}\n * @returns A function that can be invoked to stop watching for new Event Logs. {@link WatchEventReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchEvent } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = watchEvent(client, {\n * onLogs: (logs) => console.log(logs),\n * })\n */\nexport function watchEvent<\n chain extends Chain | undefined,\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n transport extends Transport = Transport,\n _eventName extends string | undefined = undefined,\n>(\n client: Client<transport, chain>,\n {\n address,\n args,\n batch = true,\n event,\n events,\n fromBlock,\n onError,\n onLogs,\n poll: poll_,\n pollingInterval = client.pollingInterval,\n strict: strict_,\n }: WatchEventParameters<abiEvent, abiEvents, strict, transport>,\n): WatchEventReturnType {\n const enablePolling = (() => {\n if (typeof poll_ !== 'undefined') return poll_\n if (typeof fromBlock === 'bigint') return true\n if (client.transport.type === 'webSocket') return false\n if (\n client.transport.type === 'fallback' &&\n client.transport.transports[0].config.type === 'webSocket'\n )\n return false\n return true\n })()\n const strict = strict_ ?? false\n\n const pollEvent = () => {\n const observerId = stringify([\n 'watchEvent',\n address,\n args,\n batch,\n client.uid,\n event,\n pollingInterval,\n fromBlock,\n ])\n\n return observe(observerId, { onLogs, onError }, (emit) => {\n let previousBlockNumber: bigint\n if (fromBlock !== undefined) previousBlockNumber = fromBlock - 1n\n let filter: Filter<'event', abiEvents, _eventName, any>\n let initialized = false\n\n const unwatch = poll(\n async () => {\n if (!initialized) {\n try {\n filter = (await getAction(\n client,\n createEventFilter as any,\n 'createEventFilter',\n )({\n address,\n args,\n event: event!,\n events,\n strict,\n fromBlock,\n } as unknown as CreateEventFilterParameters)) as unknown as Filter<\n 'event',\n abiEvents,\n _eventName\n >\n } catch {}\n initialized = true\n return\n }\n\n try {\n let logs: Log[]\n if (filter) {\n logs = await getAction(\n client,\n getFilterChanges,\n 'getFilterChanges',\n )({ filter })\n } else {\n // If the filter doesn't exist, we will fall back to use `getLogs`.\n // The fall back exists because some RPC Providers do not support filters.\n\n // Fetch the block number to use for `getLogs`.\n const blockNumber = await getAction(\n client,\n getBlockNumber,\n 'getBlockNumber',\n )({})\n\n // If the block number has changed, we will need to fetch the logs.\n // If the block number doesn't exist, we are yet to reach the first poll interval,\n // so do not emit any logs.\n if (previousBlockNumber && previousBlockNumber !== blockNumber) {\n logs = await getAction(\n client,\n getLogs,\n 'getLogs',\n )({\n address,\n args,\n event: event!,\n events,\n fromBlock: previousBlockNumber + 1n,\n toBlock: blockNumber,\n } as unknown as GetLogsParameters)\n } else {\n logs = []\n }\n previousBlockNumber = blockNumber\n }\n\n if (logs.length === 0) return\n if (batch) emit.onLogs(logs as any)\n else for (const log of logs) emit.onLogs([log] as any)\n } catch (err) {\n // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.\n // Reinitialize the filter when this occurs\n if (filter && err instanceof InvalidInputRpcError)\n initialized = false\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin: true,\n interval: pollingInterval,\n },\n )\n\n return async () => {\n if (filter)\n await getAction(\n client,\n uninstallFilter,\n 'uninstallFilter',\n )({ filter })\n unwatch()\n }\n })\n }\n\n const subscribeEvent = () => {\n let active = true\n let unsubscribe = () => (active = false)\n ;(async () => {\n try {\n const transport = (() => {\n if (client.transport.type === 'fallback') {\n const transport = client.transport.transports.find(\n (transport: ReturnType<Transport>) =>\n transport.config.type === 'webSocket',\n )\n if (!transport) return client.transport\n return transport.value\n }\n return client.transport\n })()\n\n const events_ = events ?? (event ? [event] : undefined)\n let topics: LogTopic[] = []\n if (events_) {\n const encoded = (events_ as AbiEvent[]).flatMap((event) =>\n encodeEventTopics({\n abi: [event],\n eventName: (event as AbiEvent).name,\n args,\n } as EncodeEventTopicsParameters),\n )\n // TODO: Clean up type casting\n topics = [encoded as LogTopic]\n if (event) topics = topics[0] as LogTopic[]\n }\n\n const { unsubscribe: unsubscribe_ } = await transport.subscribe({\n params: ['logs', { address, topics }],\n onData(data: any) {\n if (!active) return\n const log = data.result\n try {\n const { eventName, args } = decodeEventLog({\n abi: events_ ?? [],\n data: log.data,\n topics: log.topics,\n strict,\n })\n const formatted = formatLog(log, { args, eventName })\n onLogs([formatted] as any)\n } catch (err) {\n let eventName: string | undefined\n let isUnnamed: boolean | undefined\n if (\n err instanceof DecodeLogDataMismatch ||\n err instanceof DecodeLogTopicsMismatch\n ) {\n // If strict mode is on, and log data/topics do not match event definition, skip.\n if (strict_) return\n eventName = err.abiItem.name\n isUnnamed = err.abiItem.inputs?.some(\n (x) => !('name' in x && x.name),\n )\n }\n\n // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).\n const formatted = formatLog(log, {\n args: isUnnamed ? [] : {},\n eventName,\n })\n onLogs([formatted] as any)\n }\n },\n onError(error: Error) {\n onError?.(error)\n },\n })\n unsubscribe = unsubscribe_\n if (!active) unsubscribe()\n } catch (err) {\n onError?.(err as Error)\n }\n })()\n return () => unsubscribe()\n }\n\n return enablePolling ? pollEvent() : subscribeEvent()\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Filter } from '../../types/filter.js'\nimport type { Hash } from '../../types/misc.js'\nimport type { GetPollOptions } from '../../types/transport.js'\nimport { getAction } from '../../utils/getAction.js'\nimport { type ObserveErrorType, observe } from '../../utils/observe.js'\nimport { poll } from '../../utils/poll.js'\nimport { type StringifyErrorType, stringify } from '../../utils/stringify.js'\n\nimport { createPendingTransactionFilter } from './createPendingTransactionFilter.js'\nimport { getFilterChanges } from './getFilterChanges.js'\nimport { uninstallFilter } from './uninstallFilter.js'\n\nexport type OnTransactionsParameter = Hash[]\nexport type OnTransactionsFn = (transactions: OnTransactionsParameter) => void\n\nexport type WatchPendingTransactionsParameters<\n transport extends Transport = Transport,\n> = {\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: ((error: Error) => void) | undefined\n /** The callback to call when new transactions are received. */\n onTransactions: OnTransactionsFn\n} & GetPollOptions<transport>\n\nexport type WatchPendingTransactionsReturnType = () => void\n\nexport type WatchPendingTransactionsErrorType =\n | StringifyErrorType\n | ObserveErrorType\n | ErrorType\n\n/**\n * Watches and returns pending transaction hashes.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchPendingTransactions\n * - JSON-RPC Methods:\n * - When `poll: true`\n * - Calls [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter) to initialize the filter.\n * - Calls [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getFilterChanges) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newPendingTransactions\"` event.\n *\n * This Action will batch up all the pending transactions found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchPendingTransactions#pollinginterval-optional), and invoke them via [`onTransactions`](https://viem.sh/docs/actions/public/watchPendingTransactions#ontransactions).\n *\n * @param client - Client to use\n * @param parameters - {@link WatchPendingTransactionsParameters}\n * @returns A function that can be invoked to stop watching for new pending transaction hashes. {@link WatchPendingTransactionsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { watchPendingTransactions } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = await watchPendingTransactions(client, {\n * onTransactions: (hashes) => console.log(hashes),\n * })\n */\nexport function watchPendingTransactions<\n transport extends Transport,\n chain extends Chain | undefined,\n>(\n client: Client<transport, chain>,\n {\n batch = true,\n onError,\n onTransactions,\n poll: poll_,\n pollingInterval = client.pollingInterval,\n }: WatchPendingTransactionsParameters<transport>,\n) {\n const enablePolling =\n typeof poll_ !== 'undefined' ? poll_ : client.transport.type !== 'webSocket'\n\n const pollPendingTransactions = () => {\n const observerId = stringify([\n 'watchPendingTransactions',\n client.uid,\n batch,\n pollingInterval,\n ])\n return observe(observerId, { onTransactions, onError }, (emit) => {\n let filter: Filter<'transaction'>\n\n const unwatch = poll(\n async () => {\n try {\n if (!filter) {\n try {\n filter = await getAction(\n client,\n createPendingTransactionFilter,\n 'createPendingTransactionFilter',\n )({})\n return\n } catch (err) {\n unwatch()\n throw err\n }\n }\n\n const hashes = await getAction(\n client,\n getFilterChanges,\n 'getFilterChanges',\n )({ filter })\n if (hashes.length === 0) return\n if (batch) emit.onTransactions(hashes)\n else for (const hash of hashes) emit.onTransactions([hash])\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin: true,\n interval: pollingInterval,\n },\n )\n\n return async () => {\n if (filter)\n await getAction(\n client,\n uninstallFilter,\n 'uninstallFilter',\n )({ filter })\n unwatch()\n }\n })\n }\n\n const subscribePendingTransactions = () => {\n let active = true\n let unsubscribe = () => (active = false)\n ;(async () => {\n try {\n const { unsubscribe: unsubscribe_ } = await client.transport.subscribe({\n params: ['newPendingTransactions'],\n onData(data: any) {\n if (!active) return\n const transaction = data.result\n onTransactions([transaction])\n },\n onError(error: Error) {\n onError?.(error)\n },\n })\n unsubscribe = unsubscribe_\n if (!active) unsubscribe()\n } catch (err) {\n onError?.(err as Error)\n }\n })()\n return () => unsubscribe()\n }\n\n return enablePolling\n ? pollPendingTransactions()\n : subscribePendingTransactions()\n}\n","import type { Address } from 'abitype'\n\nimport type { ExactPartial, Prettify } from '../../types/utils.js'\nimport type { SiweMessage } from './types.js'\n\n/**\n * @description Parses EIP-4361 formatted message into message fields object.\n *\n * @see https://eips.ethereum.org/EIPS/eip-4361\n *\n * @returns EIP-4361 fields object\n */\nexport function parseSiweMessage(\n message: string,\n): Prettify<ExactPartial<SiweMessage>> {\n const { scheme, statement, ...prefix } = (message.match(prefixRegex)\n ?.groups ?? {}) as {\n address: Address\n domain: string\n scheme?: string\n statement?: string\n }\n const { chainId, expirationTime, issuedAt, notBefore, requestId, ...suffix } =\n (message.match(suffixRegex)?.groups ?? {}) as {\n chainId: string\n expirationTime?: string\n issuedAt?: string\n nonce: string\n notBefore?: string\n requestId?: string\n uri: string\n version: '1'\n }\n const resources = message.split('Resources:')[1]?.split('\\n- ').slice(1)\n return {\n ...prefix,\n ...suffix,\n ...(chainId ? { chainId: Number(chainId) } : {}),\n ...(expirationTime ? { expirationTime: new Date(expirationTime) } : {}),\n ...(issuedAt ? { issuedAt: new Date(issuedAt) } : {}),\n ...(notBefore ? { notBefore: new Date(notBefore) } : {}),\n ...(requestId ? { requestId } : {}),\n ...(resources ? { resources } : {}),\n ...(scheme ? { scheme } : {}),\n ...(statement ? { statement } : {}),\n }\n}\n\n// https://regexr.com/80gdj\nconst prefixRegex =\n /^(?:(?<scheme>[a-zA-Z][a-zA-Z0-9+-.]*):\\/\\/)?(?<domain>[a-zA-Z0-9+-.]*(?::[0-9]{1,5})?) (?:wants you to sign in with your Ethereum account:\\n)(?<address>0x[a-fA-F0-9]{40})\\n\\n(?:(?<statement>.*)\\n\\n)?/\n\n// https://regexr.com/80gf9\nconst suffixRegex =\n /(?:URI: (?<uri>.+))\\n(?:Version: (?<version>.+))\\n(?:Chain ID: (?<chainId>\\d+))\\n(?:Nonce: (?<nonce>[a-zA-Z0-9]+))\\n(?:Issued At: (?<issuedAt>.+))(?:\\nExpiration Time: (?<expirationTime>.+))?(?:\\nNot Before: (?<notBefore>.+))?(?:\\nRequest ID: (?<requestId>.+))?/\n","import type { Address } from 'abitype'\n\nimport type { ExactPartial } from '../../types/utils.js'\nimport { isAddressEqual } from '../address/isAddressEqual.js'\nimport type { SiweMessage } from './types.js'\n\nexport type ValidateSiweMessageParameters = {\n /**\n * Ethereum address to check against.\n */\n address?: Address | undefined\n /**\n * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) authority to check against.\n */\n domain?: string | undefined\n /**\n * EIP-4361 message fields.\n */\n message: ExactPartial<SiweMessage>\n /**\n * Random string to check against.\n */\n nonce?: string | undefined\n /**\n * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) URI scheme to check against.\n */\n scheme?: string | undefined\n /**\n * Current time to check optional `expirationTime` and `notBefore` fields.\n *\n * @default new Date()\n */\n time?: Date | undefined\n}\n\nexport type ValidateSiweMessageReturnType = boolean\n\n/**\n * @description Validates EIP-4361 message.\n *\n * @see https://eips.ethereum.org/EIPS/eip-4361\n */\nexport function validateSiweMessage(\n parameters: ValidateSiweMessageParameters,\n): ValidateSiweMessageReturnType {\n const {\n address,\n domain,\n message,\n nonce,\n scheme,\n time = new Date(),\n } = parameters\n\n if (domain && message.domain !== domain) return false\n if (nonce && message.nonce !== nonce) return false\n if (scheme && message.scheme !== scheme) return false\n\n if (message.expirationTime && time >= message.expirationTime) return false\n if (message.notBefore && time < message.notBefore) return false\n\n try {\n if (!message.address) return false\n if (address && !isAddressEqual(message.address, address)) return false\n } catch {\n return false\n }\n\n return true\n}\n","import type { Client } from '../../clients/createClient.js'\nimport type { Transport } from '../../clients/transports/createTransport.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Chain } from '../../types/chain.js'\nimport type { Hex } from '../../types/misc.js'\nimport type { Prettify } from '../../types/utils.js'\nimport { hashMessage } from '../../utils/signature/hashMessage.js'\nimport type { HashMessageErrorType } from '../../utils/signature/hashMessage.js'\nimport { parseSiweMessage } from '../../utils/siwe/parseSiweMessage.js'\nimport {\n type ValidateSiweMessageParameters,\n validateSiweMessage,\n} from '../../utils/siwe/validateSiweMessage.js'\nimport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n verifyHash,\n} from '../public/verifyHash.js'\n\nexport type VerifySiweMessageParameters = Prettify<\n Pick<VerifyHashParameters, 'blockNumber' | 'blockTag'> &\n Pick<\n ValidateSiweMessageParameters,\n 'address' | 'domain' | 'nonce' | 'scheme' | 'time'\n > & {\n /**\n * EIP-4361 formatted message.\n */\n message: string\n /**\n * Signature to check against.\n */\n signature: Hex\n }\n>\n\nexport type VerifySiweMessageReturnType = boolean\n\nexport type VerifySiweMessageErrorType =\n | HashMessageErrorType\n | VerifyHashErrorType\n | ErrorType\n\n/**\n * Verifies [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message was signed.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/siwe/actions/verifySiweMessage}\n *\n * @param client - Client to use.\n * @param parameters - {@link VerifySiweMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifySiweMessageReturnType}\n */\nexport async function verifySiweMessage<chain extends Chain | undefined>(\n client: Client<Transport, chain>,\n parameters: VerifySiweMessageParameters,\n): Promise<VerifySiweMessageReturnType> {\n const {\n address,\n domain,\n message,\n nonce,\n scheme,\n signature,\n time = new Date(),\n ...callRequest\n } = parameters\n\n const parsed = parseSiweMessage(message)\n if (!parsed.address) return false\n\n const isValid = validateSiweMessage({\n address,\n domain,\n message: parsed,\n nonce,\n scheme,\n time,\n })\n if (!isValid) return false\n\n const hash = hashMessage(message)\n return verifyHash(client, {\n address: parsed.address,\n hash,\n signature,\n ...callRequest,\n })\n}\n","import type { Abi, AbiEvent, Address } from 'abitype'\n\nimport {\n type GetEnsAddressParameters,\n type GetEnsAddressReturnType,\n getEnsAddress,\n} from '../../actions/ens/getEnsAddress.js'\nimport {\n type GetEnsAvatarParameters,\n type GetEnsAvatarReturnType,\n getEnsAvatar,\n} from '../../actions/ens/getEnsAvatar.js'\nimport {\n type GetEnsNameParameters,\n type GetEnsNameReturnType,\n getEnsName,\n} from '../../actions/ens/getEnsName.js'\nimport {\n type GetEnsResolverParameters,\n type GetEnsResolverReturnType,\n getEnsResolver,\n} from '../../actions/ens/getEnsResolver.js'\nimport {\n type GetEnsTextParameters,\n type GetEnsTextReturnType,\n getEnsText,\n} from '../../actions/ens/getEnsText.js'\nimport {\n type CallParameters,\n type CallReturnType,\n call,\n} from '../../actions/public/call.js'\nimport {\n type CreateBlockFilterReturnType,\n createBlockFilter,\n} from '../../actions/public/createBlockFilter.js'\nimport {\n type CreateContractEventFilterParameters,\n type CreateContractEventFilterReturnType,\n createContractEventFilter,\n} from '../../actions/public/createContractEventFilter.js'\nimport {\n type CreateEventFilterParameters,\n type CreateEventFilterReturnType,\n createEventFilter,\n} from '../../actions/public/createEventFilter.js'\nimport {\n type CreatePendingTransactionFilterReturnType,\n createPendingTransactionFilter,\n} from '../../actions/public/createPendingTransactionFilter.js'\nimport {\n type EstimateContractGasParameters,\n type EstimateContractGasReturnType,\n estimateContractGas,\n} from '../../actions/public/estimateContractGas.js'\nimport {\n type EstimateFeesPerGasParameters,\n type EstimateFeesPerGasReturnType,\n estimateFeesPerGas,\n} from '../../actions/public/estimateFeesPerGas.js'\nimport {\n type EstimateGasParameters,\n type EstimateGasReturnType,\n estimateGas,\n} from '../../actions/public/estimateGas.js'\nimport {\n type EstimateMaxPriorityFeePerGasParameters,\n type EstimateMaxPriorityFeePerGasReturnType,\n estimateMaxPriorityFeePerGas,\n} from '../../actions/public/estimateMaxPriorityFeePerGas.js'\nimport {\n type GetBalanceParameters,\n type GetBalanceReturnType,\n getBalance,\n} from '../../actions/public/getBalance.js'\nimport {\n type GetBlobBaseFeeReturnType,\n getBlobBaseFee,\n} from '../../actions/public/getBlobBaseFee.js'\nimport {\n type GetBlockParameters,\n type GetBlockReturnType,\n getBlock,\n} from '../../actions/public/getBlock.js'\nimport {\n type GetBlockNumberParameters,\n type GetBlockNumberReturnType,\n getBlockNumber,\n} from '../../actions/public/getBlockNumber.js'\nimport {\n type GetBlockTransactionCountParameters,\n type GetBlockTransactionCountReturnType,\n getBlockTransactionCount,\n} from '../../actions/public/getBlockTransactionCount.js'\nimport {\n type GetChainIdReturnType,\n getChainId,\n} from '../../actions/public/getChainId.js'\nimport {\n type GetCodeParameters,\n type GetCodeReturnType,\n getCode,\n} from '../../actions/public/getCode.js'\nimport {\n type GetContractEventsParameters,\n type GetContractEventsReturnType,\n getContractEvents,\n} from '../../actions/public/getContractEvents.js'\nimport {\n type GetEip712DomainParameters,\n type GetEip712DomainReturnType,\n getEip712Domain,\n} from '../../actions/public/getEip712Domain.js'\nimport {\n type GetFeeHistoryParameters,\n type GetFeeHistoryReturnType,\n getFeeHistory,\n} from '../../actions/public/getFeeHistory.js'\nimport {\n type GetFilterChangesParameters,\n type GetFilterChangesReturnType,\n getFilterChanges,\n} from '../../actions/public/getFilterChanges.js'\nimport {\n type GetFilterLogsParameters,\n type GetFilterLogsReturnType,\n getFilterLogs,\n} from '../../actions/public/getFilterLogs.js'\nimport {\n type GetGasPriceReturnType,\n getGasPrice,\n} from '../../actions/public/getGasPrice.js'\nimport {\n type GetLogsParameters,\n type GetLogsReturnType,\n getLogs,\n} from '../../actions/public/getLogs.js'\nimport {\n type GetProofParameters,\n type GetProofReturnType,\n getProof,\n} from '../../actions/public/getProof.js'\nimport {\n type GetStorageAtParameters,\n type GetStorageAtReturnType,\n getStorageAt,\n} from '../../actions/public/getStorageAt.js'\nimport {\n type GetTransactionParameters,\n type GetTransactionReturnType,\n getTransaction,\n} from '../../actions/public/getTransaction.js'\nimport {\n type GetTransactionConfirmationsParameters,\n type GetTransactionConfirmationsReturnType,\n getTransactionConfirmations,\n} from '../../actions/public/getTransactionConfirmations.js'\nimport {\n type GetTransactionCountParameters,\n type GetTransactionCountReturnType,\n getTransactionCount,\n} from '../../actions/public/getTransactionCount.js'\nimport {\n type GetTransactionReceiptParameters,\n type GetTransactionReceiptReturnType,\n getTransactionReceipt,\n} from '../../actions/public/getTransactionReceipt.js'\nimport {\n type MulticallParameters,\n type MulticallReturnType,\n multicall,\n} from '../../actions/public/multicall.js'\nimport {\n type ReadContractParameters,\n type ReadContractReturnType,\n readContract,\n} from '../../actions/public/readContract.js'\nimport {\n type SimulateContractParameters,\n type SimulateContractReturnType,\n simulateContract,\n} from '../../actions/public/simulateContract.js'\nimport {\n type UninstallFilterParameters,\n type UninstallFilterReturnType,\n uninstallFilter,\n} from '../../actions/public/uninstallFilter.js'\nimport {\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from '../../actions/public/verifyMessage.js'\nimport {\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from '../../actions/public/verifyTypedData.js'\nimport {\n type WaitForTransactionReceiptParameters,\n type WaitForTransactionReceiptReturnType,\n waitForTransactionReceipt,\n} from '../../actions/public/waitForTransactionReceipt.js'\nimport {\n type WatchBlockNumberParameters,\n type WatchBlockNumberReturnType,\n watchBlockNumber,\n} from '../../actions/public/watchBlockNumber.js'\nimport {\n type WatchBlocksParameters,\n type WatchBlocksReturnType,\n watchBlocks,\n} from '../../actions/public/watchBlocks.js'\nimport {\n type WatchContractEventParameters,\n type WatchContractEventReturnType,\n watchContractEvent,\n} from '../../actions/public/watchContractEvent.js'\nimport {\n type WatchEventParameters,\n type WatchEventReturnType,\n watchEvent,\n} from '../../actions/public/watchEvent.js'\nimport {\n type WatchPendingTransactionsParameters,\n type WatchPendingTransactionsReturnType,\n watchPendingTransactions,\n} from '../../actions/public/watchPendingTransactions.js'\nimport {\n type VerifySiweMessageParameters,\n type VerifySiweMessageReturnType,\n verifySiweMessage,\n} from '../../actions/siwe/verifySiweMessage.js'\nimport {\n type PrepareTransactionRequestParameters,\n type PrepareTransactionRequestRequest,\n type PrepareTransactionRequestReturnType,\n prepareTransactionRequest,\n} from '../../actions/wallet/prepareTransactionRequest.js'\nimport {\n type SendRawTransactionParameters,\n type SendRawTransactionReturnType,\n sendRawTransaction,\n} from '../../actions/wallet/sendRawTransaction.js'\nimport type { Account } from '../../types/account.js'\nimport type { BlockNumber, BlockTag } from '../../types/block.js'\nimport type { Chain } from '../../types/chain.js'\nimport type {\n ContractEventName,\n ContractFunctionArgs,\n ContractFunctionName,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types/contract.js'\nimport type { FeeValuesType } from '../../types/fee.js'\nimport type { FilterType } from '../../types/filter.js'\nimport type { Client } from '../createClient.js'\nimport type { Transport } from '../transports/createTransport.js'\n\nexport type PublicActions<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n> = {\n /**\n * Executes a new message call immediately without submitting a transaction to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/call\n * - JSON-RPC Methods: [`eth_call`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call)\n *\n * @param args - {@link CallParameters}\n * @returns The call data. {@link CallReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const data = await client.call({\n * account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * data: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * })\n */\n call: (parameters: CallParameters<chain>) => Promise<CallReturnType>\n /**\n * Creates a Filter to listen for new block hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createBlockFilter\n * - JSON-RPC Methods: [`eth_newBlockFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newBlockFilter)\n *\n * @returns Filter. {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, createBlockFilter, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await createBlockFilter(client)\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'block' }\n */\n createBlockFilter: () => Promise<CreateBlockFilterReturnType>\n /**\n * Creates a Filter to retrieve event logs that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges) or [`getFilterLogs`](https://viem.sh/docs/actions/public/getFilterLogs).\n *\n * - Docs: https://viem.sh/docs/contract/createContractEventFilter\n *\n * @param args - {@link CreateContractEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateContractEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createContractEventFilter({\n * abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n * })\n */\n createContractEventFilter: <\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName<abi> | undefined,\n args extends MaybeExtractEventArgsFromAbi<abi, eventName> | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n >(\n args: CreateContractEventFilterParameters<\n abi,\n eventName,\n args,\n strict,\n fromBlock,\n toBlock\n >,\n ) => Promise<\n CreateContractEventFilterReturnType<\n abi,\n eventName,\n args,\n strict,\n fromBlock,\n toBlock\n >\n >\n /**\n * Creates a [`Filter`](https://viem.sh/docs/glossary/types#filter) to listen for new events that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createEventFilter\n * - JSON-RPC Methods: [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter)\n *\n * @param args - {@link CreateEventFilterParameters}\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateEventFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createEventFilter({\n * address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * })\n */\n createEventFilter: <\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n _EventName extends string | undefined = MaybeAbiEventName<abiEvent>,\n _Args extends\n | MaybeExtractEventArgsFromAbi<abiEvents, _EventName>\n | undefined = undefined,\n >(\n args?:\n | CreateEventFilterParameters<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock,\n _EventName,\n _Args\n >\n | undefined,\n ) => Promise<\n CreateEventFilterReturnType<\n abiEvent,\n abiEvents,\n strict,\n fromBlock,\n toBlock,\n _EventName,\n _Args\n >\n >\n /**\n * Creates a Filter to listen for new pending transaction hashes that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges).\n *\n * - Docs: https://viem.sh/docs/actions/public/createPendingTransactionFilter\n * - JSON-RPC Methods: [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter)\n *\n * @returns [`Filter`](https://viem.sh/docs/glossary/types#filter). {@link CreateBlockFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createPendingTransactionFilter()\n * // { id: \"0x345a6572337856574a76364e457a4366\", type: 'transaction' }\n */\n createPendingTransactionFilter: () => Promise<CreatePendingTransactionFilterReturnType>\n /**\n * Estimates the gas required to successfully execute a contract write function call.\n *\n * - Docs: https://viem.sh/docs/contract/estimateContractGas\n *\n * @remarks\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`estimateGas` action](https://viem.sh/docs/actions/public/estimateGas) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param args - {@link EstimateContractGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateContractGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gas = await client.estimateContractGas({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint() public']),\n * functionName: 'mint',\n * account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * })\n */\n estimateContractGas: <\n chain extends Chain | undefined,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n >,\n >(\n args: EstimateContractGasParameters<abi, functionName, args, chain>,\n ) => Promise<EstimateContractGasReturnType>\n /**\n * Estimates the gas necessary to complete a transaction without submitting it to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateGas\n * - JSON-RPC Methods: [`eth_estimateGas`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_estimategas)\n *\n * @param args - {@link EstimateGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gasEstimate = await client.estimateGas({\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * })\n */\n estimateGas: (\n args: EstimateGasParameters<chain>,\n ) => Promise<EstimateGasReturnType>\n /**\n * Returns the balance of an address in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBalance\n * - JSON-RPC Methods: [`eth_getBalance`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance)\n *\n * @remarks\n * You can convert the balance to ether units with [`formatEther`](https://viem.sh/docs/utilities/formatEther).\n *\n * ```ts\n * const balance = await getBalance(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * blockTag: 'safe'\n * })\n * const balanceAsEther = formatEther(balance)\n * // \"6.942\"\n * ```\n *\n * @param args - {@link GetBalanceParameters}\n * @returns The balance of the address in wei. {@link GetBalanceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const balance = await client.getBalance({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n * // 10000000000000000000000n (wei)\n */\n getBalance: (args: GetBalanceParameters) => Promise<GetBalanceReturnType>\n /**\n * Returns the base fee per blob gas in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlobBaseFee\n * - JSON-RPC Methods: [`eth_blobBaseFee`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blobBaseFee)\n *\n * @param client - Client to use\n * @returns The blob base fee (in wei). {@link GetBlobBaseFeeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlobBaseFee } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const blobBaseFee = await client.getBlobBaseFee()\n */\n getBlobBaseFee: () => Promise<GetBlobBaseFeeReturnType>\n /**\n * Returns information about a block at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlock\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods:\n * - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) for `blockNumber` & `blockTag`.\n * - Calls [`eth_getBlockByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash) for `blockHash`.\n *\n * @param args - {@link GetBlockParameters}\n * @returns Information about the block. {@link GetBlockReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const block = await client.getBlock()\n */\n getBlock: <\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n >(\n args?: GetBlockParameters<includeTransactions, blockTag> | undefined,\n ) => Promise<GetBlockReturnType<chain, includeTransactions, blockTag>>\n /**\n * Returns the number of the most recent block seen.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods: [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber)\n *\n * @param args - {@link GetBlockNumberParameters}\n * @returns The number of the block. {@link GetBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const blockNumber = await client.getBlockNumber()\n * // 69420n\n */\n getBlockNumber: (\n args?: GetBlockNumberParameters | undefined,\n ) => Promise<GetBlockNumberReturnType>\n /**\n * Returns the number of Transactions at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlockTransactionCount\n * - JSON-RPC Methods:\n * - Calls [`eth_getBlockTransactionCountByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbynumber) for `blockNumber` & `blockTag`.\n * - Calls [`eth_getBlockTransactionCountByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblocktransactioncountbyhash) for `blockHash`.\n *\n * @param args - {@link GetBlockTransactionCountParameters}\n * @returns The block transaction count. {@link GetBlockTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const count = await client.getBlockTransactionCount()\n */\n getBlockTransactionCount: (\n args?: GetBlockTransactionCountParameters | undefined,\n ) => Promise<GetBlockTransactionCountReturnType>\n /** @deprecated Use `getCode` instead. */\n getBytecode: (args: GetCodeParameters) => Promise<GetCodeReturnType>\n /**\n * Returns the chain ID associated with the current network.\n *\n * - Docs: https://viem.sh/docs/actions/public/getChainId\n * - JSON-RPC Methods: [`eth_chainId`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_chainid)\n *\n * @returns The current chain ID. {@link GetChainIdReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const chainId = await client.getChainId()\n * // 1\n */\n getChainId: () => Promise<GetChainIdReturnType>\n /**\n * Retrieves the bytecode at an address.\n *\n * - Docs: https://viem.sh/docs/contract/getCode\n * - JSON-RPC Methods: [`eth_getCode`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getcode)\n *\n * @param args - {@link GetBytecodeParameters}\n * @returns The contract's bytecode. {@link GetBytecodeReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const code = await client.getCode({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * })\n */\n getCode: (args: GetCodeParameters) => Promise<GetCodeReturnType>\n /**\n * Returns a list of event logs emitted by a contract.\n *\n * - Docs: https://viem.sh/docs/actions/public/getContractEvents\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param client - Client to use\n * @param parameters - {@link GetContractEventsParameters}\n * @returns A list of event logs. {@link GetContractEventsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { wagmiAbi } from './abi'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const logs = await client.getContractEvents(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: wagmiAbi,\n * eventName: 'Transfer'\n * })\n */\n getContractEvents: <\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName<abi> | undefined = undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n >(\n args: GetContractEventsParameters<\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >,\n ) => Promise<\n GetContractEventsReturnType<abi, eventName, strict, fromBlock, toBlock>\n >\n /**\n * Reads the EIP-712 domain from a contract, based on the ERC-5267 specification.\n *\n * @param client - A {@link Client} instance.\n * @param parameters - The parameters of the action. {@link GetEip712DomainParameters}\n * @returns The EIP-712 domain, fields, and extensions. {@link GetEip712DomainReturnType}\n *\n * @example\n * ```ts\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const domain = await client.getEip712Domain({\n * address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * })\n * // {\n * // domain: {\n * // name: 'ExampleContract',\n * // version: '1',\n * // chainId: 1,\n * // verifyingContract: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n * // },\n * // fields: '0x0f',\n * // extensions: [],\n * // }\n * ```\n */\n getEip712Domain: (\n args: GetEip712DomainParameters,\n ) => Promise<GetEip712DomainReturnType>\n /**\n * Gets address for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAddress\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * @remarks\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param args - {@link GetEnsAddressParameters}\n * @returns Address for ENS name or `null` if not found. {@link GetEnsAddressReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensAddress = await client.getEnsAddress({\n * name: normalize('wevm.eth'),\n * })\n * // '0xd2135CfB216b74109775236E36d4b433F1DF507B'\n */\n getEnsAddress: (\n args: GetEnsAddressParameters,\n ) => Promise<GetEnsAddressReturnType>\n /**\n * Gets the avatar of an ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsAvatar\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * @remarks\n * Calls [`getEnsText`](https://viem.sh/docs/ens/actions/getEnsText) with `key` set to `'avatar'`.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param args - {@link GetEnsAvatarParameters}\n * @returns Avatar URI or `null` if not found. {@link GetEnsAvatarReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensAvatar = await client.getEnsAvatar({\n * name: normalize('wevm.eth'),\n * })\n * // 'https://ipfs.io/ipfs/Qma8mnp6xV3J2cRNf3mTth5C8nV11CAnceVinc3y8jSbio'\n */\n getEnsAvatar: (\n args: GetEnsAvatarParameters,\n ) => Promise<GetEnsAvatarReturnType>\n /**\n * Gets primary name for specified address.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsName\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * @remarks\n * Calls `reverse(bytes)` on ENS Universal Resolver Contract to \"reverse resolve\" the address to the primary ENS name.\n *\n * @param args - {@link GetEnsNameParameters}\n * @returns Name or `null` if not found. {@link GetEnsNameReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const ensName = await client.getEnsName({\n * address: '0xd2135CfB216b74109775236E36d4b433F1DF507B',\n * })\n * // 'wevm.eth'\n */\n getEnsName: (args: GetEnsNameParameters) => Promise<GetEnsNameReturnType>\n /**\n * Gets resolver for ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * @remarks\n * Calls `findResolver(bytes)` on ENS Universal Resolver Contract to retrieve the resolver of an ENS name.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param args - {@link GetEnsResolverParameters}\n * @returns Address for ENS resolver. {@link GetEnsResolverReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const resolverAddress = await client.getEnsResolver({\n * name: normalize('wevm.eth'),\n * })\n * // '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41'\n */\n getEnsResolver: (\n args: GetEnsResolverParameters,\n ) => Promise<GetEnsResolverReturnType>\n /**\n * Gets a text record for specified ENS name.\n *\n * - Docs: https://viem.sh/docs/ens/actions/getEnsResolver\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/ens\n *\n * @remarks\n * Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize) function for this.\n *\n * @param args - {@link GetEnsTextParameters}\n * @returns Address for ENS resolver. {@link GetEnsTextReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { normalize } from 'viem/ens'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const twitterRecord = await client.getEnsText({\n * name: normalize('wevm.eth'),\n * key: 'com.twitter',\n * })\n * // 'wevm_dev'\n */\n getEnsText: (args: GetEnsTextParameters) => Promise<GetEnsTextReturnType>\n /**\n * Returns a collection of historical gas information.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFeeHistory\n * - JSON-RPC Methods: [`eth_feeHistory`](https://docs.alchemy.com/reference/eth-feehistory)\n *\n * @param args - {@link GetFeeHistoryParameters}\n * @returns The gas estimate (in wei). {@link GetFeeHistoryReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const feeHistory = await client.getFeeHistory({\n * blockCount: 4,\n * rewardPercentiles: [25, 75],\n * })\n */\n getFeeHistory: (\n args: GetFeeHistoryParameters,\n ) => Promise<GetFeeHistoryReturnType>\n /**\n * Returns an estimate for the fees per gas for a transaction to be included\n * in the next block.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateFeesPerGas\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateFeesPerGasParameters}\n * @returns An estimate (in wei) for the fees per gas. {@link EstimateFeesPerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const maxPriorityFeePerGas = await client.estimateFeesPerGas()\n * // { maxFeePerGas: ..., maxPriorityFeePerGas: ... }\n */\n estimateFeesPerGas: <\n chainOverride extends Chain | undefined = undefined,\n type extends FeeValuesType = 'eip1559',\n >(\n args?: EstimateFeesPerGasParameters<chain, chainOverride, type> | undefined,\n ) => Promise<EstimateFeesPerGasReturnType<type>>\n /**\n * Returns a list of logs or hashes based on a [Filter](/docs/glossary/terms#filter) since the last time it was called.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterChanges\n * - JSON-RPC Methods: [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges)\n *\n * @remarks\n * A Filter can be created from the following actions:\n *\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createContractEventFilter`](https://viem.sh/docs/contract/createContractEventFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * Depending on the type of filter, the return value will be different:\n *\n * - If the filter was created with `createContractEventFilter` or `createEventFilter`, it returns a list of logs.\n * - If the filter was created with `createPendingTransactionFilter`, it returns a list of transaction hashes.\n * - If the filter was created with `createBlockFilter`, it returns a list of block hashes.\n *\n * @param args - {@link GetFilterChangesParameters}\n * @returns Logs or hashes. {@link GetFilterChangesReturnType}\n *\n * @example\n * // Blocks\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createBlockFilter()\n * const hashes = await client.getFilterChanges({ filter })\n *\n * @example\n * // Contract Events\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createContractEventFilter({\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * abi: parseAbi(['event Transfer(address indexed, address indexed, uint256)']),\n * eventName: 'Transfer',\n * })\n * const logs = await client.getFilterChanges({ filter })\n *\n * @example\n * // Raw Events\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createEventFilter({\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await client.getFilterChanges({ filter })\n *\n * @example\n * // Transactions\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createPendingTransactionFilter()\n * const hashes = await client.getFilterChanges({ filter })\n */\n getFilterChanges: <\n filterType extends FilterType,\n const abi extends Abi | readonly unknown[] | undefined,\n eventName extends string | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n >(\n args: GetFilterChangesParameters<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >,\n ) => Promise<\n GetFilterChangesReturnType<\n filterType,\n abi,\n eventName,\n strict,\n fromBlock,\n toBlock\n >\n >\n /**\n * Returns a list of event logs since the filter was created.\n *\n * - Docs: https://viem.sh/docs/actions/public/getFilterLogs\n * - JSON-RPC Methods: [`eth_getFilterLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterlogs)\n *\n * @remarks\n * `getFilterLogs` is only compatible with **event filters**.\n *\n * @param args - {@link GetFilterLogsParameters}\n * @returns A list of event logs. {@link GetFilterLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const filter = await client.createEventFilter({\n * address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n * event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),\n * })\n * const logs = await client.getFilterLogs({ filter })\n */\n getFilterLogs: <\n const abi extends Abi | readonly unknown[] | undefined,\n eventName extends string | undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n >(\n args: GetFilterLogsParameters<abi, eventName, strict, fromBlock, toBlock>,\n ) => Promise<\n GetFilterLogsReturnType<abi, eventName, strict, fromBlock, toBlock>\n >\n /**\n * Returns the current price of gas (in wei).\n *\n * - Docs: https://viem.sh/docs/actions/public/getGasPrice\n * - JSON-RPC Methods: [`eth_gasPrice`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gasprice)\n *\n * @returns The gas price (in wei). {@link GetGasPriceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gasPrice = await client.getGasPrice()\n */\n getGasPrice: () => Promise<GetGasPriceReturnType>\n /**\n * Returns a list of event logs matching the provided parameters.\n *\n * - Docs: https://viem.sh/docs/actions/public/getLogs\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/logs_event-logs\n * - JSON-RPC Methods: [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs)\n *\n * @param args - {@link GetLogsParameters}\n * @returns A list of event logs. {@link GetLogsReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbiItem } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const logs = await client.getLogs()\n */\n getLogs: <\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n fromBlock extends BlockNumber | BlockTag | undefined = undefined,\n toBlock extends BlockNumber | BlockTag | undefined = undefined,\n >(\n args?:\n | GetLogsParameters<abiEvent, abiEvents, strict, fromBlock, toBlock>\n | undefined,\n ) => Promise<\n GetLogsReturnType<abiEvent, abiEvents, strict, fromBlock, toBlock>\n >\n /**\n * Returns the account and storage values of the specified account including the Merkle-proof.\n *\n * - Docs: https://viem.sh/docs/actions/public/getProof\n * - JSON-RPC Methods:\n * - Calls [`eth_getProof`](https://eips.ethereum.org/EIPS/eip-1186)\n *\n * @param client - Client to use\n * @param parameters - {@link GetProofParameters}\n * @returns Proof data. {@link GetProofReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const block = await client.getProof({\n * address: '0x...',\n * storageKeys: ['0x...'],\n * })\n */\n getProof: (args: GetProofParameters) => Promise<GetProofReturnType>\n /**\n * Returns an estimate for the max priority fee per gas (in wei) for a transaction\n * to be included in the next block.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateMaxPriorityFeePerGas\n *\n * @param client - Client to use\n * @returns An estimate (in wei) for the max priority fee per gas. {@link EstimateMaxPriorityFeePerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const maxPriorityFeePerGas = await client.estimateMaxPriorityFeePerGas()\n * // 10000000n\n */\n estimateMaxPriorityFeePerGas: <\n chainOverride extends Chain | undefined = undefined,\n >(\n args?:\n | EstimateMaxPriorityFeePerGasParameters<chain, chainOverride>\n | undefined,\n ) => Promise<EstimateMaxPriorityFeePerGasReturnType>\n /**\n * Returns the value from a storage slot at a given address.\n *\n * - Docs: https://viem.sh/docs/contract/getStorageAt\n * - JSON-RPC Methods: [`eth_getStorageAt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getstorageat)\n *\n * @param args - {@link GetStorageAtParameters}\n * @returns The value of the storage slot. {@link GetStorageAtReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getStorageAt } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const code = await client.getStorageAt({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * slot: toHex(0),\n * })\n */\n getStorageAt: (\n args: GetStorageAtParameters,\n ) => Promise<GetStorageAtReturnType>\n /**\n * Returns information about a [Transaction](https://viem.sh/docs/glossary/terms#transaction) given a hash or block identifier.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransaction\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionByHash)\n *\n * @param args - {@link GetTransactionParameters}\n * @returns The transaction information. {@link GetTransactionReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transaction = await client.getTransaction({\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\n getTransaction: <blockTag extends BlockTag = 'latest'>(\n args: GetTransactionParameters<blockTag>,\n ) => Promise<GetTransactionReturnType<chain, blockTag>>\n /**\n * Returns the number of blocks passed (confirmations) since the transaction was processed on a block.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionConfirmations\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionConfirmations`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionConfirmations)\n *\n * @param args - {@link GetTransactionConfirmationsParameters}\n * @returns The number of blocks passed since the transaction was processed. If confirmations is 0, then the Transaction has not been confirmed & processed yet. {@link GetTransactionConfirmationsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const confirmations = await client.getTransactionConfirmations({\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\n getTransactionConfirmations: (\n args: GetTransactionConfirmationsParameters<chain>,\n ) => Promise<GetTransactionConfirmationsReturnType>\n /**\n * Returns the number of [Transactions](https://viem.sh/docs/glossary/terms#transaction) an Account has broadcast / sent.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionCount\n * - JSON-RPC Methods: [`eth_getTransactionCount`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount)\n *\n * @param args - {@link GetTransactionCountParameters}\n * @returns The number of transactions an account has sent. {@link GetTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionCount = await client.getTransactionCount({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\n getTransactionCount: (\n args: GetTransactionCountParameters,\n ) => Promise<GetTransactionCountReturnType>\n /**\n * Returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt) given a [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_fetching-transactions\n * - JSON-RPC Methods: [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt)\n *\n * @param args - {@link GetTransactionReceiptParameters}\n * @returns The transaction receipt. {@link GetTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionReceipt = await client.getTransactionReceipt({\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\n getTransactionReceipt: (\n args: GetTransactionReceiptParameters,\n ) => Promise<GetTransactionReceiptReturnType<chain>>\n /**\n * Similar to [`readContract`](https://viem.sh/docs/contract/readContract), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).\n *\n * - Docs: https://viem.sh/docs/contract/multicall\n *\n * @param args - {@link MulticallParameters}\n * @returns An array of results with accompanying status. {@link MulticallReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const abi = parseAbi([\n * 'function balanceOf(address) view returns (uint256)',\n * 'function totalSupply() view returns (uint256)',\n * ])\n * const result = await client.multicall({\n * contracts: [\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'balanceOf',\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * },\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'totalSupply',\n * },\n * ],\n * })\n * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]\n */\n multicall: <\n const contracts extends readonly unknown[],\n allowFailure extends boolean = true,\n >(\n args: MulticallParameters<contracts, allowFailure>,\n ) => Promise<MulticallReturnType<contracts, allowFailure>>\n /**\n * Prepares a transaction request for signing.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest\n *\n * @param args - {@link PrepareTransactionRequestParameters}\n * @returns The transaction request. {@link PrepareTransactionRequestReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const request = await client.prepareTransactionRequest({\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x0000000000000000000000000000000000000000',\n * value: 1n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createWalletClient({\n * account: privateKeyToAccount('0x…'),\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const request = await client.prepareTransactionRequest({\n * to: '0x0000000000000000000000000000000000000000',\n * value: 1n,\n * })\n */\n prepareTransactionRequest: <\n const request extends PrepareTransactionRequestRequest<\n chain,\n chainOverride\n >,\n chainOverride extends Chain | undefined = undefined,\n accountOverride extends Account | Address | undefined = undefined,\n >(\n args: PrepareTransactionRequestParameters<\n chain,\n account,\n chainOverride,\n accountOverride,\n request\n >,\n ) => Promise<\n PrepareTransactionRequestReturnType<\n chain,\n account,\n chainOverride,\n accountOverride,\n request\n >\n >\n /**\n * Calls a read-only function on a contract, and returns the response.\n *\n * - Docs: https://viem.sh/docs/contract/readContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_reading-contracts\n *\n * @remarks\n * A \"read-only\" function (constant function) on a Solidity contract is denoted by a `view` or `pure` keyword. They can only read the state of the contract, and cannot make any changes to it. Since read-only methods do not change the state of the contract, they do not require any gas to be executed, and can be called by any user without the need to pay for gas.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param args - {@link ReadContractParameters}\n * @returns The response from the contract. Type is inferred. {@link ReadContractReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { readContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await client.readContract({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function balanceOf(address) view returns (uint256)']),\n * functionName: 'balanceOf',\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // 424122n\n */\n readContract: <\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'pure' | 'view'>,\n const args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n >(\n args: ReadContractParameters<abi, functionName, args>,\n ) => Promise<ReadContractReturnType<abi, functionName, args>>\n /**\n * Sends a **signed** transaction to the network\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction\n * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionParameters}\n * @returns The transaction hash. {@link SendRawTransactionReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n *\n * const hash = await client.sendRawTransaction({\n * serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\n sendRawTransaction: (\n args: SendRawTransactionParameters,\n ) => Promise<SendRawTransactionReturnType>\n /**\n * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.\n *\n * - Docs: https://viem.sh/docs/contract/simulateContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n *\n * @remarks\n * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param args - {@link SimulateContractParameters}\n * @returns The simulation result and write request. {@link SimulateContractReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await client.simulateContract({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint(uint32) view returns (uint32)']),\n * functionName: 'mint',\n * args: ['69420'],\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\n simulateContract: <\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n const args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n >,\n chainOverride extends Chain | undefined,\n accountOverride extends Account | Address | undefined = undefined,\n >(\n args: SimulateContractParameters<\n abi,\n functionName,\n args,\n chain,\n chainOverride,\n accountOverride\n >,\n ) => Promise<\n SimulateContractReturnType<\n abi,\n functionName,\n args,\n chain,\n account,\n chainOverride,\n accountOverride\n >\n >\n /**\n * Verify that a message was signed by the provided address.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyMessage}\n *\n * @param parameters - {@link VerifyMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}\n */\n verifyMessage: (\n args: VerifyMessageParameters,\n ) => Promise<VerifyMessageReturnType>\n /**\n * Verifies [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message was signed.\n *\n * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).\n *\n * - Docs {@link https://viem.sh/docs/siwe/actions/verifySiweMessage}\n *\n * @param parameters - {@link VerifySiweMessageParameters}\n * @returns Whether or not the signature is valid. {@link VerifySiweMessageReturnType}\n */\n verifySiweMessage: (\n args: VerifySiweMessageParameters,\n ) => Promise<VerifySiweMessageReturnType>\n /**\n * Verify that typed data was signed by the provided address.\n *\n * - Docs {@link https://viem.sh/docs/actions/public/verifyTypedData}\n *\n * @param parameters - {@link VerifyTypedDataParameters}\n * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}\n */\n verifyTypedData: (\n args: VerifyTypedDataParameters,\n ) => Promise<VerifyTypedDataReturnType>\n /**\n * Destroys a Filter that was created from one of the following Actions:\n *\n * - [`createBlockFilter`](https://viem.sh/docs/actions/public/createBlockFilter)\n * - [`createEventFilter`](https://viem.sh/docs/actions/public/createEventFilter)\n * - [`createPendingTransactionFilter`](https://viem.sh/docs/actions/public/createPendingTransactionFilter)\n *\n * - Docs: https://viem.sh/docs/actions/public/uninstallFilter\n * - JSON-RPC Methods: [`eth_uninstallFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_uninstallFilter)\n *\n * @param args - {@link UninstallFilterParameters}\n * @returns A boolean indicating if the Filter was successfully uninstalled. {@link UninstallFilterReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createPendingTransactionFilter, uninstallFilter } from 'viem/public'\n *\n * const filter = await client.createPendingTransactionFilter()\n * const uninstalled = await client.uninstallFilter({ filter })\n * // true\n */\n uninstallFilter: (\n args: UninstallFilterParameters,\n ) => Promise<UninstallFilterReturnType>\n /**\n * Waits for the [Transaction](https://viem.sh/docs/glossary/terms#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt). If the Transaction reverts, then the action will throw an error.\n *\n * - Docs: https://viem.sh/docs/actions/public/waitForTransactionReceipt\n * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n * - JSON-RPC Methods:\n * - Polls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt) on each block until it has been processed.\n * - If a Transaction has been replaced:\n * - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) and extracts the transactions\n * - Checks if one of the Transactions is a replacement\n * - If so, calls [`eth_getTransactionReceipt`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getTransactionReceipt).\n *\n * @remarks\n * The `waitForTransactionReceipt` action additionally supports Replacement detection (e.g. sped up Transactions).\n *\n * Transactions can be replaced when a user modifies their transaction in their wallet (to speed up or cancel). Transactions are replaced when they are sent from the same nonce.\n *\n * There are 3 types of Transaction Replacement reasons:\n *\n * - `repriced`: The gas price has been modified (e.g. different `maxFeePerGas`)\n * - `cancelled`: The Transaction has been cancelled (e.g. `value === 0n`)\n * - `replaced`: The Transaction has been replaced (e.g. different `value` or `data`)\n *\n * @param args - {@link WaitForTransactionReceiptParameters}\n * @returns The transaction receipt. {@link WaitForTransactionReceiptReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionReceipt = await client.waitForTransactionReceipt({\n * hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',\n * })\n */\n waitForTransactionReceipt: (\n args: WaitForTransactionReceiptParameters<chain>,\n ) => Promise<WaitForTransactionReceiptReturnType<chain>>\n /**\n * Watches and returns incoming block numbers.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlockNumber\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n * - When `poll: true`, calls [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param args - {@link WatchBlockNumberParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlockNumberReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = await client.watchBlockNumber({\n * onBlockNumber: (blockNumber) => console.log(blockNumber),\n * })\n */\n watchBlockNumber: (\n args: WatchBlockNumberParameters,\n ) => WatchBlockNumberReturnType\n /**\n * Watches and returns information for incoming blocks.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchBlocks\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks\n * - JSON-RPC Methods:\n * - When `poll: true`, calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getBlockByNumber) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newHeads\"` event.\n *\n * @param args - {@link WatchBlocksParameters}\n * @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlocksReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = await client.watchBlocks({\n * onBlock: (block) => console.log(block),\n * })\n */\n watchBlocks: <\n includeTransactions extends boolean = false,\n blockTag extends BlockTag = 'latest',\n >(\n args: WatchBlocksParameters<\n transport,\n chain,\n includeTransactions,\n blockTag\n >,\n ) => WatchBlocksReturnType\n /**\n * Watches and returns emitted contract event logs.\n *\n * - Docs: https://viem.sh/docs/contract/watchContractEvent\n *\n * @remarks\n * This Action will batch up all the event logs found within the [`pollingInterval`](https://viem.sh/docs/contract/watchContractEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/contract/watchContractEvent#onLogs).\n *\n * `watchContractEvent` will attempt to create an [Event Filter](https://viem.sh/docs/contract/createContractEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchContractEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param args - {@link WatchContractEventParameters}\n * @returns A function that can be invoked to stop watching for new event logs. {@link WatchContractEventReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = client.watchContractEvent({\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['event Transfer(address indexed from, address indexed to, uint256 value)']),\n * eventName: 'Transfer',\n * args: { from: '0xc961145a54C96E3aE9bAA048c4F4D6b04C13916b' },\n * onLogs: (logs) => console.log(logs),\n * })\n */\n watchContractEvent: <\n const abi extends Abi | readonly unknown[],\n eventName extends ContractEventName<abi>,\n strict extends boolean | undefined = undefined,\n >(\n args: WatchContractEventParameters<abi, eventName, strict, transport>,\n ) => WatchContractEventReturnType\n /**\n * Watches and returns emitted [Event Logs](https://viem.sh/docs/glossary/terms#event-log).\n *\n * - Docs: https://viem.sh/docs/actions/public/watchEvent\n * - JSON-RPC Methods:\n * - **RPC Provider supports `eth_newFilter`:**\n * - Calls [`eth_newFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter) to create a filter (called on initialize).\n * - On a polling interval, it will call [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getfilterchanges).\n * - **RPC Provider does not support `eth_newFilter`:**\n * - Calls [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) for each block between the polling interval.\n *\n * @remarks\n * This Action will batch up all the Event Logs found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchEvent#pollinginterval-optional), and invoke them via [`onLogs`](https://viem.sh/docs/actions/public/watchEvent#onLogs).\n *\n * `watchEvent` will attempt to create an [Event Filter](https://viem.sh/docs/actions/public/createEventFilter) and listen to changes to the Filter per polling interval, however, if the RPC Provider does not support Filters (e.g. `eth_newFilter`), then `watchEvent` will fall back to using [`getLogs`](https://viem.sh/docs/actions/public/getLogs) instead.\n *\n * @param args - {@link WatchEventParameters}\n * @returns A function that can be invoked to stop watching for new Event Logs. {@link WatchEventReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = client.watchEvent({\n * onLogs: (logs) => console.log(logs),\n * })\n */\n watchEvent: <\n const abiEvent extends AbiEvent | undefined = undefined,\n const abiEvents extends\n | readonly AbiEvent[]\n | readonly unknown[]\n | undefined = abiEvent extends AbiEvent ? [abiEvent] : undefined,\n strict extends boolean | undefined = undefined,\n >(\n args: WatchEventParameters<abiEvent, abiEvents, strict, transport>,\n ) => WatchEventReturnType\n /**\n * Watches and returns pending transaction hashes.\n *\n * - Docs: https://viem.sh/docs/actions/public/watchPendingTransactions\n * - JSON-RPC Methods:\n * - When `poll: true`\n * - Calls [`eth_newPendingTransactionFilter`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newpendingtransactionfilter) to initialize the filter.\n * - Calls [`eth_getFilterChanges`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getFilterChanges) on a polling interval.\n * - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `\"newPendingTransactions\"` event.\n *\n * @remarks\n * This Action will batch up all the pending transactions found within the [`pollingInterval`](https://viem.sh/docs/actions/public/watchPendingTransactions#pollinginterval-optional), and invoke them via [`onTransactions`](https://viem.sh/docs/actions/public/watchPendingTransactions#ontransactions).\n *\n * @param args - {@link WatchPendingTransactionsParameters}\n * @returns A function that can be invoked to stop watching for new pending transaction hashes. {@link WatchPendingTransactionsReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const unwatch = await client.watchPendingTransactions({\n * onTransactions: (hashes) => console.log(hashes),\n * })\n */\n watchPendingTransactions: (\n args: WatchPendingTransactionsParameters<transport>,\n ) => WatchPendingTransactionsReturnType\n}\n\nexport function publicActions<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n account extends Account | undefined = Account | undefined,\n>(\n client: Client<transport, chain, account>,\n): PublicActions<transport, chain, account> {\n return {\n call: (args) => call(client, args),\n createBlockFilter: () => createBlockFilter(client),\n createContractEventFilter: (args) =>\n createContractEventFilter(client, args),\n createEventFilter: (args) => createEventFilter(client, args),\n createPendingTransactionFilter: () =>\n createPendingTransactionFilter(client),\n estimateContractGas: (args) => estimateContractGas(client, args as any),\n estimateGas: (args) => estimateGas(client, args),\n getBalance: (args) => getBalance(client, args),\n getBlobBaseFee: () => getBlobBaseFee(client),\n getBlock: (args) => getBlock(client, args),\n getBlockNumber: (args) => getBlockNumber(client, args),\n getBlockTransactionCount: (args) => getBlockTransactionCount(client, args),\n getBytecode: (args) => getCode(client, args),\n getChainId: () => getChainId(client),\n getCode: (args) => getCode(client, args),\n getContractEvents: (args) => getContractEvents(client, args),\n getEip712Domain: (args) => getEip712Domain(client, args),\n getEnsAddress: (args) => getEnsAddress(client, args),\n getEnsAvatar: (args) => getEnsAvatar(client, args),\n getEnsName: (args) => getEnsName(client, args),\n getEnsResolver: (args) => getEnsResolver(client, args),\n getEnsText: (args) => getEnsText(client, args),\n getFeeHistory: (args) => getFeeHistory(client, args),\n estimateFeesPerGas: (args) => estimateFeesPerGas(client, args),\n getFilterChanges: (args) => getFilterChanges(client, args),\n getFilterLogs: (args) => getFilterLogs(client, args),\n getGasPrice: () => getGasPrice(client),\n getLogs: (args) => getLogs(client, args as any),\n getProof: (args) => getProof(client, args),\n estimateMaxPriorityFeePerGas: (args) =>\n estimateMaxPriorityFeePerGas(client, args),\n getStorageAt: (args) => getStorageAt(client, args),\n getTransaction: (args) => getTransaction(client, args),\n getTransactionConfirmations: (args) =>\n getTransactionConfirmations(client, args),\n getTransactionCount: (args) => getTransactionCount(client, args),\n getTransactionReceipt: (args) => getTransactionReceipt(client, args),\n multicall: (args) => multicall(client, args),\n prepareTransactionRequest: (args) =>\n prepareTransactionRequest(client as any, args as any) as any,\n readContract: (args) => readContract(client, args),\n sendRawTransaction: (args) => sendRawTransaction(client, args),\n simulateContract: (args) => simulateContract(client, args),\n verifyMessage: (args) => verifyMessage(client, args),\n verifySiweMessage: (args) => verifySiweMessage(client, args),\n verifyTypedData: (args) => verifyTypedData(client, args),\n uninstallFilter: (args) => uninstallFilter(client, args),\n waitForTransactionReceipt: (args) =>\n waitForTransactionReceipt(client, args),\n watchBlocks: (args) => watchBlocks(client, args),\n watchBlockNumber: (args) => watchBlockNumber(client, args),\n watchContractEvent: (args) => watchContractEvent(client, args),\n watchEvent: (args) => watchEvent(client, args),\n watchPendingTransactions: (args) => watchPendingTransactions(client, args),\n }\n}\n","import type { Address } from 'abitype'\nimport type { ErrorType } from '../errors/utils.js'\nimport type { Account, ParseAccount } from '../types/account.js'\nimport type { Chain } from '../types/chain.js'\nimport type { PublicRpcSchema, RpcSchema } from '../types/eip1193.js'\nimport type { Prettify } from '../types/utils.js'\nimport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n createClient,\n} from './createClient.js'\nimport { type PublicActions, publicActions } from './decorators/public.js'\nimport type { Transport } from './transports/createTransport.js'\n\nexport type PublicClientConfig<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n accountOrAddress extends Account | Address | undefined = undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n Pick<\n ClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n | 'batch'\n | 'cacheTime'\n | 'ccipRead'\n | 'chain'\n | 'key'\n | 'name'\n | 'pollingInterval'\n | 'rpcSchema'\n | 'transport'\n >\n>\n\nexport type PublicClient<\n transport extends Transport = Transport,\n chain extends Chain | undefined = Chain | undefined,\n accountOrAddress extends Account | undefined = undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n> = Prettify<\n Client<\n transport,\n chain,\n accountOrAddress,\n rpcSchema extends RpcSchema\n ? [...PublicRpcSchema, ...rpcSchema]\n : PublicRpcSchema,\n PublicActions<transport, chain>\n >\n>\n\nexport type CreatePublicClientErrorType = CreateClientErrorType | ErrorType\n\n/**\n * Creates a Public Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\n *\n * - Docs: https://viem.sh/docs/clients/public\n *\n * A Public Client is an interface to \"public\" [JSON-RPC API](https://ethereum.org/en/developers/docs/apis/json-rpc/) methods such as retrieving block numbers, transactions, reading from smart contracts, etc through [Public Actions](/docs/actions/public/introduction).\n *\n * @param config - {@link PublicClientConfig}\n * @returns A Public Client. {@link PublicClient}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n */\nexport function createPublicClient<\n transport extends Transport,\n chain extends Chain | undefined = undefined,\n accountOrAddress extends Account | Address | undefined = undefined,\n rpcSchema extends RpcSchema | undefined = undefined,\n>(\n parameters: PublicClientConfig<transport, chain, accountOrAddress, rpcSchema>,\n): PublicClient<transport, chain, ParseAccount<accountOrAddress>, rpcSchema> {\n const { key = 'public', name = 'Public Client' } = parameters\n const client = createClient({\n ...parameters,\n key,\n name,\n type: 'publicClient',\n })\n return client.extend(publicActions) as any\n}\n","import type {\n IAgentRuntime,\n Goal,\n Objective,\n UUID,\n} from \"./types.ts\";\n\nexport const getGoals = async ({\n runtime,\n roomId,\n userId,\n onlyInProgress = true,\n count = 5,\n}: {\n runtime: IAgentRuntime;\n roomId: UUID;\n userId?: UUID;\n onlyInProgress?: boolean;\n count?: number;\n}) => {\n return runtime.databaseAdapter.getGoals({\n agentId: runtime.agentId,\n roomId,\n userId,\n onlyInProgress,\n count,\n });\n};\n\nexport const formatGoalsAsString = ({ goals }: { goals: Goal[] }) => {\n const goalStrings = goals.map((goal: Goal) => {\n const header = `Goal: ${goal.name}\\nid: ${goal.id}`;\n const objectives =\n \"Objectives:\\n\" +\n goal.objectives\n .map((objective: Objective) => {\n return `- ${objective.completed ? \"[x]\" : \"[ ]\"} ${objective.description} ${objective.completed ? \" (DONE)\" : \" (IN PROGRESS)\"}`;\n })\n .join(\"\\n\");\n return `${header}\\n${objectives}`;\n });\n return goalStrings.join(\"\\n\");\n};\n\nexport const updateGoal = async ({\n runtime,\n goal,\n}: {\n runtime: IAgentRuntime;\n goal: Goal;\n}) => {\n return runtime.databaseAdapter.updateGoal(goal);\n};\n\nexport const createGoal = async ({\n runtime,\n goal,\n}: {\n runtime: IAgentRuntime;\n goal: Goal;\n}) => {\n return runtime.databaseAdapter.createGoal(goal);\n};\n","import { embed, getEmbeddingZeroVector } from \"./embedding.ts\";\nimport elizaLogger from \"./logger.ts\";\nimport type {\n IAgentRuntime,\n IMemoryManager,\n Memory,\n UUID,\n} from \"./types.ts\";\n\nconst defaultMatchThreshold = 0.1;\nconst defaultMatchCount = 10;\n\n/**\n * Manage memories in the database.\n */\nexport class MemoryManager implements IMemoryManager {\n /**\n * The AgentRuntime instance associated with this manager.\n */\n runtime: IAgentRuntime;\n\n /**\n * The name of the database table this manager operates on.\n */\n tableName: string;\n\n /**\n * Constructs a new MemoryManager instance.\n * @param opts Options for the manager.\n * @param opts.tableName The name of the table this manager will operate on.\n * @param opts.runtime The AgentRuntime instance associated with this manager.\n */\n constructor(opts: { tableName: string; runtime: IAgentRuntime }) {\n this.runtime = opts.runtime;\n this.tableName = opts.tableName;\n }\n\n /**\n * Adds an embedding vector to a memory object. If the memory already has an embedding, it is returned as is.\n * @param memory The memory object to add an embedding to.\n * @returns A Promise resolving to the memory object, potentially updated with an embedding vector.\n */\n /**\n * Adds an embedding vector to a memory object if one doesn't already exist.\n * The embedding is generated from the memory's text content using the runtime's\n * embedding model. If the memory has no text content, an error is thrown.\n *\n * @param memory The memory object to add an embedding to\n * @returns The memory object with an embedding vector added\n * @throws Error if the memory content is empty\n */\n async addEmbeddingToMemory(memory: Memory): Promise<Memory> {\n // Return early if embedding already exists\n if (memory.embedding) {\n return memory;\n }\n\n const memoryText = memory.content.text;\n\n // Validate memory has text content\n if (!memoryText) {\n throw new Error(\n \"Cannot generate embedding: Memory content is empty\"\n );\n }\n\n try {\n // Generate embedding from text content\n memory.embedding = await embed(this.runtime, memoryText);\n } catch (error) {\n elizaLogger.error(\"Failed to generate embedding:\", error);\n // Fallback to zero vector if embedding fails\n memory.embedding = getEmbeddingZeroVector().slice();\n }\n\n return memory;\n }\n\n /**\n * Retrieves a list of memories by user IDs, with optional deduplication.\n * @param opts Options including user IDs, count, and uniqueness.\n * @param opts.roomId The room ID to retrieve memories for.\n * @param opts.count The number of memories to retrieve.\n * @param opts.unique Whether to retrieve unique memories only.\n * @returns A Promise resolving to an array of Memory objects.\n */\n async getMemories({\n roomId,\n count = 10,\n unique = true,\n start,\n end,\n }: {\n roomId: UUID;\n count?: number;\n unique?: boolean;\n start?: number;\n end?: number;\n }): Promise<Memory[]> {\n return await this.runtime.databaseAdapter.getMemories({\n roomId,\n count,\n unique,\n tableName: this.tableName,\n agentId: this.runtime.agentId,\n start,\n end,\n });\n }\n\n async getCachedEmbeddings(content: string): Promise<\n {\n embedding: number[];\n levenshtein_score: number;\n }[]\n > {\n return await this.runtime.databaseAdapter.getCachedEmbeddings({\n query_table_name: this.tableName,\n query_threshold: 2,\n query_input: content,\n query_field_name: \"content\",\n query_field_sub_name: \"text\",\n query_match_count: 10,\n });\n }\n\n /**\n * Searches for memories similar to a given embedding vector.\n * @param embedding The embedding vector to search with.\n * @param opts Options including match threshold, count, user IDs, and uniqueness.\n * @param opts.match_threshold The similarity threshold for matching memories.\n * @param opts.count The maximum number of memories to retrieve.\n * @param opts.roomId The room ID to retrieve memories for.\n * @param opts.unique Whether to retrieve unique memories only.\n * @returns A Promise resolving to an array of Memory objects that match the embedding.\n */\n async searchMemoriesByEmbedding(\n embedding: number[],\n opts: {\n match_threshold?: number;\n count?: number;\n roomId: UUID;\n unique?: boolean;\n }\n ): Promise<Memory[]> {\n const {\n match_threshold = defaultMatchThreshold,\n count = defaultMatchCount,\n roomId,\n unique,\n } = opts;\n\n const result = await this.runtime.databaseAdapter.searchMemories({\n tableName: this.tableName,\n roomId,\n agentId: this.runtime.agentId,\n embedding: embedding,\n match_threshold: match_threshold,\n match_count: count,\n unique: !!unique,\n });\n\n return result;\n }\n\n /**\n * Creates a new memory in the database, with an option to check for similarity before insertion.\n * @param memory The memory object to create.\n * @param unique Whether to check for similarity before insertion.\n * @returns A Promise that resolves when the operation completes.\n */\n async createMemory(memory: Memory, unique = false): Promise<void> {\n // TODO: check memory.agentId == this.runtime.agentId\n\n const existingMessage =\n await this.runtime.databaseAdapter.getMemoryById(memory.id);\n\n if (existingMessage) {\n elizaLogger.debug(\"Memory already exists, skipping\");\n return;\n }\n\n elizaLogger.log(\"Creating Memory\", memory.id, memory.content.text);\n\n await this.runtime.databaseAdapter.createMemory(\n memory,\n this.tableName,\n unique\n );\n }\n\n async getMemoriesByRoomIds(params: { roomIds: UUID[], limit?: number; }): Promise<Memory[]> {\n return await this.runtime.databaseAdapter.getMemoriesByRoomIds({\n tableName: this.tableName,\n agentId: this.runtime.agentId,\n roomIds: params.roomIds,\n limit: params.limit\n });\n }\n\n async getMemoryById(id: UUID): Promise<Memory | null> {\n const result = await this.runtime.databaseAdapter.getMemoryById(id);\n if (result && result.agentId !== this.runtime.agentId) return null;\n return result;\n }\n\n /**\n * Removes a memory from the database by its ID.\n * @param memoryId The ID of the memory to remove.\n * @returns A Promise that resolves when the operation completes.\n */\n async removeMemory(memoryId: UUID): Promise<void> {\n await this.runtime.databaseAdapter.removeMemory(\n memoryId,\n this.tableName\n );\n }\n\n /**\n * Removes all memories associated with a set of user IDs.\n * @param roomId The room ID to remove memories for.\n * @returns A Promise that resolves when the operation completes.\n */\n async removeAllMemories(roomId: UUID): Promise<void> {\n await this.runtime.databaseAdapter.removeAllMemories(\n roomId,\n this.tableName\n );\n }\n\n /**\n * Counts the number of memories associated with a set of user IDs, with an option for uniqueness.\n * @param roomId The room ID to count memories for.\n * @param unique Whether to count unique memories only.\n * @returns A Promise resolving to the count of memories.\n */\n async countMemories(roomId: UUID, unique = true): Promise<number> {\n return await this.runtime.databaseAdapter.countMemories(\n roomId,\n unique,\n this.tableName\n );\n }\n}\n","import type {\n IAgentRuntime,\n Actor,\n Content,\n Memory,\n UUID,\n} from \"./types.ts\";\n\n/**\n * Get details for a list of actors.\n */\nexport async function getActorDetails({\n runtime,\n roomId,\n}: {\n runtime: IAgentRuntime;\n roomId: UUID;\n}) {\n const participantIds =\n await runtime.databaseAdapter.getParticipantsForRoom(roomId);\n const actors = await Promise.all(\n participantIds.map(async (userId) => {\n const account =\n await runtime.databaseAdapter.getAccountById(userId);\n if (account) {\n return {\n id: account.id,\n name: account.name,\n username: account.username,\n details: account.details,\n };\n }\n return null;\n })\n );\n\n return actors.filter((actor): actor is Actor => actor !== null);\n}\n\n/**\n * Format actors into a string\n * @param actors - list of actors\n * @returns string\n */\nexport function formatActors({ actors }: { actors: Actor[] }) {\n const actorStrings = actors.map((actor: Actor) => {\n const header = `${actor.name}${actor.details?.tagline ? \": \" + actor.details?.tagline : \"\"}${actor.details?.summary ? \"\\n\" + actor.details?.summary : \"\"}`;\n return header;\n });\n const finalActorStrings = actorStrings.join(\"\\n\");\n return finalActorStrings;\n}\n\n/**\n * Format messages into a string\n * @param messages - list of messages\n * @param actors - list of actors\n * @returns string\n */\nexport const formatMessages = ({\n messages,\n actors,\n}: {\n messages: Memory[];\n actors: Actor[];\n}) => {\n const messageStrings = messages\n .reverse()\n .filter((message: Memory) => message.userId)\n .map((message: Memory) => {\n const messageContent = (message.content as Content).text;\n const messageAction = (message.content as Content).action;\n const formattedName =\n actors.find((actor: Actor) => actor.id === message.userId)\n ?.name || \"Unknown User\";\n\n const attachments = (message.content as Content).attachments;\n\n const attachmentString =\n attachments && attachments.length > 0\n ? ` (Attachments: ${attachments.map((media) => `[${media.id} - ${media.title} (${media.url})]`).join(\", \")})`\n : \"\";\n\n const timestamp = formatTimestamp(message.createdAt);\n\n const shortId = message.userId.slice(-5);\n\n return `(${timestamp}) [${shortId}] ${formattedName}: ${messageContent}${attachmentString}${messageAction && messageAction !== \"null\" ? ` (${messageAction})` : \"\"}`;\n })\n .join(\"\\n\");\n return messageStrings;\n};\n\nexport const formatTimestamp = (messageDate: number) => {\n const now = new Date();\n const diff = now.getTime() - messageDate;\n\n const absDiff = Math.abs(diff);\n const seconds = Math.floor(absDiff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (absDiff < 60000) {\n return \"just now\";\n } else if (minutes < 60) {\n return `${minutes} minute${minutes !== 1 ? \"s\" : \"\"} ago`;\n } else if (hours < 24) {\n return `${hours} hour${hours !== 1 ? \"s\" : \"\"} ago`;\n } else {\n return `${days} day${days !== 1 ? \"s\" : \"\"} ago`;\n }\n};\n","import { formatTimestamp } from \"./messages.ts\";\nimport type { Actor, Memory } from \"./types.ts\";\n\nexport const formatPosts = ({\n messages,\n actors,\n conversationHeader = true,\n}: {\n messages: Memory[];\n actors: Actor[];\n conversationHeader?: boolean;\n}) => {\n // Group messages by roomId\n const groupedMessages: { [roomId: string]: Memory[] } = {};\n messages.forEach((message) => {\n if (message.roomId) {\n if (!groupedMessages[message.roomId]) {\n groupedMessages[message.roomId] = [];\n }\n groupedMessages[message.roomId].push(message);\n }\n });\n\n // Sort messages within each roomId by createdAt (oldest to newest)\n Object.values(groupedMessages).forEach((roomMessages) => {\n roomMessages.sort((a, b) => a.createdAt - b.createdAt);\n });\n\n // Sort rooms by the newest message's createdAt\n const sortedRooms = Object.entries(groupedMessages).sort(\n ([, messagesA], [, messagesB]) =>\n messagesB[messagesB.length - 1].createdAt -\n messagesA[messagesA.length - 1].createdAt\n );\n\n const formattedPosts = sortedRooms.map(([roomId, roomMessages]) => {\n const messageStrings = roomMessages\n .filter((message: Memory) => message.userId)\n .map((message: Memory) => {\n const actor = actors.find(\n (actor: Actor) => actor.id === message.userId\n );\n const userName = actor?.name || \"Unknown User\";\n const displayName = actor?.username || \"unknown\";\n\n return `Name: ${userName} (@${displayName})\nID: ${message.id}${message.content.inReplyTo ? `\\nIn reply to: ${message.content.inReplyTo}` : \"\"}\nDate: ${formatTimestamp(message.createdAt)}\nText:\n${message.content.text}`;\n });\n\n const header = conversationHeader\n ? `Conversation: ${roomId.slice(-5)}\\n`\n : \"\";\n return `${header}${messageStrings.join(\"\\n\\n\")}`;\n });\n\n return formattedPosts.join(\"\\n\\n\");\n};\n","import type { IAgentRuntime, State, Memory } from \"./types.ts\";\n\n/**\n * Formats provider outputs into a string which can be injected into the context.\n * @param runtime The AgentRuntime object.\n * @param message The incoming message object.\n * @param state The current state object.\n * @returns A string that concatenates the outputs of each provider.\n */\nexport async function getProviders(\n runtime: IAgentRuntime,\n message: Memory,\n state?: State\n) {\n const providerResults = (\n await Promise.all(\n runtime.providers.map(async (provider) => {\n return await provider.get(runtime, message, state);\n })\n )\n ).filter((result) => result != null && result !== \"\");\n\n return providerResults.join(\"\\n\");\n}\n","import type { IAgentRuntime, Relationship, UUID } from \"./types.ts\";\n\nexport async function createRelationship({\n runtime,\n userA,\n userB,\n}: {\n runtime: IAgentRuntime;\n userA: UUID;\n userB: UUID;\n}): Promise<boolean> {\n return runtime.databaseAdapter.createRelationship({\n userA,\n userB,\n });\n}\n\nexport async function getRelationship({\n runtime,\n userA,\n userB,\n}: {\n runtime: IAgentRuntime;\n userA: UUID;\n userB: UUID;\n}) {\n return runtime.databaseAdapter.getRelationship({\n userA,\n userB,\n });\n}\n\nexport async function getRelationships({\n runtime,\n userId,\n}: {\n runtime: IAgentRuntime;\n userId: UUID;\n}) {\n return runtime.databaseAdapter.getRelationships({ userId });\n}\n\nexport async function formatRelationships({\n runtime,\n userId,\n}: {\n runtime: IAgentRuntime;\n userId: UUID;\n}) {\n const relationships = await getRelationships({ runtime, userId });\n\n const formattedRelationships = relationships.map(\n (relationship: Relationship) => {\n const { userA, userB } = relationship;\n\n if (userA === userId) {\n return userB;\n }\n\n return userA;\n }\n );\n\n return formattedRelationships;\n}\n","import { readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { names, uniqueNamesGenerator } from \"unique-names-generator\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n composeActionExamples,\n formatActionNames,\n formatActions,\n} from \"./actions.ts\";\nimport { addHeader, composeContext } from \"./context.ts\";\nimport {\n evaluationTemplate,\n formatEvaluatorExamples,\n formatEvaluatorNames,\n formatEvaluators,\n} from \"./evaluators.ts\";\nimport { generateText } from \"./generation.ts\";\nimport { formatGoalsAsString, getGoals } from \"./goals.ts\";\nimport { elizaLogger } from \"./index.ts\";\nimport knowledge from \"./knowledge.ts\";\nimport { MemoryManager } from \"./memory.ts\";\nimport { formatActors, formatMessages, getActorDetails } from \"./messages.ts\";\nimport { parseJsonArrayFromText } from \"./parsing.ts\";\nimport { formatPosts } from \"./posts.ts\";\nimport { getProviders } from \"./providers.ts\";\nimport { RAGKnowledgeManager } from \"./ragknowledge.ts\";\nimport settings from \"./settings.ts\";\nimport {\n type Character,\n type Goal,\n type HandlerCallback,\n type IAgentRuntime,\n type ICacheManager,\n type IDatabaseAdapter,\n type IMemoryManager,\n type IRAGKnowledgeManager,\n // type IVerifiableInferenceAdapter,\n type KnowledgeItem,\n // RAGKnowledgeItem,\n //Media,\n ModelClass,\n ModelProviderName,\n type Plugin,\n type Provider,\n type Adapter,\n type Service,\n type ServiceType,\n type State,\n type UUID,\n type Action,\n type Actor,\n type Evaluator,\n type Memory,\n type DirectoryItem,\n type ClientInstance,\n} from \"./types.ts\";\nimport { stringToUuid } from \"./uuid.ts\";\nimport { glob } from \"glob\";\nimport { existsSync } from \"fs\";\n/**\n * Represents the runtime environment for an agent, handling message processing,\n * action registration, and interaction with external services like OpenAI and Supabase.\n */\n\nfunction isDirectoryItem(item: any): item is DirectoryItem {\n return (\n typeof item === \"object\" &&\n item !== null &&\n \"directory\" in item &&\n typeof item.directory === \"string\"\n );\n}\n\nexport class AgentRuntime implements IAgentRuntime {\n /**\n * Default count for recent messages to be kept in memory.\n * @private\n */\n readonly #conversationLength = 32 as number;\n /**\n * The ID of the agent\n */\n agentId: UUID;\n /**\n * The base URL of the server where the agent's requests are processed.\n */\n serverUrl = \"http://localhost:7998\";\n\n /**\n * The database adapter used for interacting with the database.\n */\n databaseAdapter: IDatabaseAdapter;\n\n /**\n * Authentication token used for securing requests.\n */\n token: string | null;\n\n /**\n * Custom actions that the agent can perform.\n */\n actions: Action[] = [];\n\n /**\n * Evaluators used to assess and guide the agent's responses.\n */\n evaluators: Evaluator[] = [];\n\n /**\n * Context providers used to provide context for message generation.\n */\n providers: Provider[] = [];\n\n /**\n * Database adapters used to interact with the database.\n */\n adapters: Adapter[] = [];\n\n plugins: Plugin[] = [];\n\n /**\n * The model to use for generateText.\n */\n modelProvider: ModelProviderName;\n\n /**\n * The model to use for generateImage.\n */\n imageModelProvider: ModelProviderName;\n\n /**\n * The model to use for describing images.\n */\n imageVisionModelProvider: ModelProviderName;\n\n /**\n * Fetch function to use\n * Some environments may not have access to the global fetch function and need a custom fetch override.\n */\n fetch = fetch;\n\n /**\n * The character to use for the agent\n */\n character: Character;\n\n /**\n * Store messages that are sent and received by the agent.\n */\n messageManager: IMemoryManager;\n\n /**\n * Store and recall descriptions of users based on conversations.\n */\n descriptionManager: IMemoryManager;\n\n /**\n * Manage the creation and recall of static information (documents, historical game lore, etc)\n */\n loreManager: IMemoryManager;\n\n /**\n * Hold large documents that can be referenced\n */\n documentsManager: IMemoryManager;\n\n /**\n * Searchable document fragments\n */\n knowledgeManager: IMemoryManager;\n\n ragKnowledgeManager: IRAGKnowledgeManager;\n\n private readonly knowledgeRoot: string;\n\n services: Map<ServiceType, Service> = new Map();\n memoryManagers: Map<string, IMemoryManager> = new Map();\n cacheManager: ICacheManager;\n clients: ClientInstance[] = [];\n\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter;\n\n registerMemoryManager(manager: IMemoryManager): void {\n if (!manager.tableName) {\n throw new Error(\"Memory manager must have a tableName\");\n }\n\n if (this.memoryManagers.has(manager.tableName)) {\n elizaLogger.warn(\n `Memory manager ${manager.tableName} is already registered. Skipping registration.`,\n );\n return;\n }\n\n this.memoryManagers.set(manager.tableName, manager);\n }\n\n getMemoryManager(tableName: string): IMemoryManager | null {\n return this.memoryManagers.get(tableName) || null;\n }\n\n getService<T extends Service>(service: ServiceType): T | null {\n const serviceInstance = this.services.get(service);\n if (!serviceInstance) {\n elizaLogger.error(`Service ${service} not found`);\n return null;\n }\n return serviceInstance as T;\n }\n\n async registerService(service: Service): Promise<void> {\n const serviceType = service.serviceType;\n elizaLogger.log(`${this.character.name}(${this.agentId}) - Registering service:`, serviceType);\n\n if (this.services.has(serviceType)) {\n elizaLogger.warn(\n `${this.character.name}(${this.agentId}) - Service ${serviceType} is already registered. Skipping registration.`\n );\n return;\n }\n\n // Add the service to the services map\n this.services.set(serviceType, service);\n elizaLogger.success(`${this.character.name}(${this.agentId}) - Service ${serviceType} registered successfully`);\n }\n\n /**\n * Creates an instance of AgentRuntime.\n * @param opts - The options for configuring the AgentRuntime.\n * @param opts.conversationLength - The number of messages to hold in the recent message cache.\n * @param opts.token - The JWT token, can be a JWT token if outside worker, or an OpenAI token if inside worker.\n * @param opts.serverUrl - The URL of the worker.\n * @param opts.actions - Optional custom actions.\n * @param opts.evaluators - Optional custom evaluators.\n * @param opts.services - Optional custom services.\n * @param opts.memoryManagers - Optional custom memory managers.\n * @param opts.providers - Optional context providers.\n * @param opts.model - The model to use for generateText.\n * @param opts.embeddingModel - The model to use for embedding.\n * @param opts.agentId - Optional ID of the agent.\n * @param opts.databaseAdapter - The database adapter used for interacting with the database.\n * @param opts.fetch - Custom fetch function to use for making requests.\n */\n\n constructor(opts: {\n conversationLength?: number; // number of messages to hold in the recent message cache\n agentId?: UUID; // ID of the agent\n character?: Character; // The character to use for the agent\n token: string; // JWT token, can be a JWT token if outside worker, or an OpenAI token if inside worker\n serverUrl?: string; // The URL of the worker\n actions?: Action[]; // Optional custom actions\n evaluators?: Evaluator[]; // Optional custom evaluators\n plugins?: Plugin[];\n providers?: Provider[];\n modelProvider: ModelProviderName;\n\n services?: Service[]; // Map of service name to service instance\n managers?: IMemoryManager[]; // Map of table name to memory manager\n databaseAdapter?: IDatabaseAdapter; // The database adapter used for interacting with the database\n fetch?: typeof fetch | unknown;\n speechModelPath?: string;\n cacheManager?: ICacheManager;\n logging?: boolean;\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter;\n }) {\n // use the character id if it exists, otherwise use the agentId if it is passed in, otherwise use the character name\n this.agentId =\n opts.character?.id ??\n opts?.agentId ??\n stringToUuid(opts.character?.name ?? uuidv4());\n this.character = opts.character;\n\n if(!this.character) {\n throw new Error(\"Character input is required\");\n }\n\n elizaLogger.info(`${this.character.name}(${this.agentId}) - Initializing AgentRuntime with options:`, {\n character: opts.character?.name,\n modelProvider: opts.modelProvider,\n characterModelProvider: opts.character?.modelProvider,\n });\n\n elizaLogger.debug(\n `[AgentRuntime] Process working directory: ${process.cwd()}`,\n );\n\n // Define the root path once\n this.knowledgeRoot = join(\n process.cwd(),\n \"..\",\n \"characters\",\n \"knowledge\",\n );\n\n elizaLogger.debug(\n `[AgentRuntime] Process knowledgeRoot: ${this.knowledgeRoot}`,\n );\n\n this.#conversationLength =\n opts.conversationLength ?? this.#conversationLength;\n\n this.databaseAdapter = opts.databaseAdapter;\n\n elizaLogger.success(`Agent ID: ${this.agentId}`);\n\n this.fetch = (opts.fetch as typeof fetch) ?? this.fetch;\n\n this.cacheManager = opts.cacheManager;\n\n this.messageManager = new MemoryManager({\n runtime: this,\n tableName: \"messages\",\n });\n\n this.descriptionManager = new MemoryManager({\n runtime: this,\n tableName: \"descriptions\",\n });\n\n this.loreManager = new MemoryManager({\n runtime: this,\n tableName: \"lore\",\n });\n\n this.documentsManager = new MemoryManager({\n runtime: this,\n tableName: \"documents\",\n });\n\n this.knowledgeManager = new MemoryManager({\n runtime: this,\n tableName: \"fragments\",\n });\n\n this.ragKnowledgeManager = new RAGKnowledgeManager({\n runtime: this,\n tableName: \"knowledge\",\n knowledgeRoot: this.knowledgeRoot,\n });\n\n (opts.managers ?? []).forEach((manager: IMemoryManager) => {\n this.registerMemoryManager(manager);\n });\n\n (opts.services ?? []).forEach((service: Service) => {\n this.registerService(service);\n });\n\n this.serverUrl = opts.serverUrl ?? this.serverUrl;\n\n elizaLogger.info(`${this.character.name}(${this.agentId}) - Setting Model Provider:`, {\n characterModelProvider: this.character.modelProvider,\n optsModelProvider: opts.modelProvider,\n currentModelProvider: this.modelProvider,\n finalSelection:\n this.character.modelProvider ??\n opts.modelProvider ??\n this.modelProvider,\n });\n\n this.modelProvider =\n this.character.modelProvider ??\n opts.modelProvider ??\n this.modelProvider;\n\n this.imageModelProvider =\n this.character.imageModelProvider ?? this.modelProvider;\n \n this.imageVisionModelProvider =\n this.character.imageVisionModelProvider ?? this.modelProvider;\n \n elizaLogger.info(\n `${this.character.name}(${this.agentId}) - Selected model provider:`,\n this.modelProvider\n );\n\n elizaLogger.info(\n `${this.character.name}(${this.agentId}) - Selected image model provider:`,\n this.imageModelProvider\n );\n\n elizaLogger.info(\n `${this.character.name}(${this.agentId}) - Selected image vision model provider:`,\n this.imageVisionModelProvider\n );\n\n // Validate model provider\n if (!Object.values(ModelProviderName).includes(this.modelProvider)) {\n elizaLogger.error(\"Invalid model provider:\", this.modelProvider);\n elizaLogger.error(\n \"Available providers:\",\n Object.values(ModelProviderName),\n );\n throw new Error(`Invalid model provider: ${this.modelProvider}`);\n }\n\n if (!this.serverUrl) {\n elizaLogger.warn(\"No serverUrl provided, defaulting to localhost\");\n }\n\n this.token = opts.token;\n\n this.plugins = [\n ...(opts.character?.plugins ?? []),\n ...(opts.plugins ?? []),\n ];\n\n this.plugins.forEach((plugin) => {\n plugin.actions?.forEach((action) => {\n this.registerAction(action);\n });\n\n plugin.evaluators?.forEach((evaluator) => {\n this.registerEvaluator(evaluator);\n });\n\n plugin.services?.forEach((service) => {\n this.registerService(service);\n });\n\n plugin.providers?.forEach((provider) => {\n this.registerContextProvider(provider);\n });\n\n plugin.adapters?.forEach((adapter) => {\n this.registerAdapter(adapter);\n });\n });\n\n (opts.actions ?? []).forEach((action) => {\n this.registerAction(action);\n });\n\n (opts.providers ?? []).forEach((provider) => {\n this.registerContextProvider(provider);\n });\n\n (opts.evaluators ?? []).forEach((evaluator: Evaluator) => {\n this.registerEvaluator(evaluator);\n });\n\n // this.verifiableInferenceAdapter = opts.verifiableInferenceAdapter;\n }\n\n private async initializeDatabase() {\n // By convention, we create a user and room using the agent id.\n // Memories related to it are considered global context for the agent.\n this.ensureRoomExists(this.agentId);\n this.ensureUserExists(\n this.agentId,\n this.character.username || this.character.name,\n this.character.name,\n ).then(() => {\n // postgres needs the user to exist before you can add a participant\n this.ensureParticipantExists(this.agentId, this.agentId);\n });\n }\n\n async initialize() {\n this.initializeDatabase();\n\n for (const [serviceType, service] of this.services.entries()) {\n try {\n await service.initialize(this);\n this.services.set(serviceType, service);\n elizaLogger.success(\n `${this.character.name}(${this.agentId}) - Service ${serviceType} initialized successfully`\n );\n } catch (error) {\n elizaLogger.error(\n `${this.character.name}(${this.agentId}) - Failed to initialize service ${serviceType}:`,\n error\n );\n throw error;\n }\n }\n\n // should already be initiailized\n /*\n for (const plugin of this.plugins) {\n if (plugin.services)\n await Promise.all(\n plugin.services?.map((service) => service.initialize(this)),\n );\n }\n */\n\n if (\n this.character &&\n this.character.knowledge &&\n this.character.knowledge.length > 0\n ) {\n elizaLogger.info(\n `[RAG Check] RAG Knowledge enabled: ${this.character.settings.ragKnowledge ? true : false}`,\n );\n elizaLogger.info(\n `[RAG Check] Knowledge items:`,\n this.character.knowledge,\n );\n\n if (this.character.settings.ragKnowledge) {\n // Type guards with logging for each knowledge type\n const [directoryKnowledge, pathKnowledge, stringKnowledge] =\n this.character.knowledge.reduce(\n (acc, item) => {\n if (typeof item === \"object\") {\n if (isDirectoryItem(item)) {\n elizaLogger.debug(\n `[RAG Filter] Found directory item: ${JSON.stringify(item)}`,\n );\n acc[0].push(item);\n } else if (\"path\" in item) {\n elizaLogger.debug(\n `[RAG Filter] Found path item: ${JSON.stringify(item)}`,\n );\n acc[1].push(item);\n }\n } else if (typeof item === \"string\") {\n elizaLogger.debug(\n `[RAG Filter] Found string item: ${item.slice(0, 100)}...`,\n );\n acc[2].push(item);\n }\n return acc;\n },\n [[], [], []] as [\n Array<{ directory: string; shared?: boolean }>,\n Array<{ path: string; shared?: boolean }>,\n Array<string>,\n ],\n );\n\n elizaLogger.info(\n `[RAG Summary] Found ${directoryKnowledge.length} directories, ${pathKnowledge.length} paths, and ${stringKnowledge.length} strings`,\n );\n\n // Process each type of knowledge\n if (directoryKnowledge.length > 0) {\n elizaLogger.info(\n `[RAG Process] Processing directory knowledge sources:`,\n );\n for (const dir of directoryKnowledge) {\n elizaLogger.info(\n ` - Directory: ${dir.directory} (shared: ${!!dir.shared})`,\n );\n await this.processCharacterRAGDirectory(dir);\n }\n }\n\n if (pathKnowledge.length > 0) {\n elizaLogger.info(\n `[RAG Process] Processing individual file knowledge sources`,\n );\n await this.processCharacterRAGKnowledge(pathKnowledge);\n }\n\n if (stringKnowledge.length > 0) {\n elizaLogger.info(\n `[RAG Process] Processing direct string knowledge`,\n );\n await this.processCharacterRAGKnowledge(stringKnowledge);\n }\n } else {\n // Non-RAG mode: only process string knowledge\n const stringKnowledge = this.character.knowledge.filter(\n (item): item is string => typeof item === \"string\",\n );\n await this.processCharacterKnowledge(stringKnowledge);\n }\n\n // After all new knowledge is processed, clean up any deleted files\n elizaLogger.info(\n `[RAG Cleanup] Starting cleanup of deleted knowledge files`,\n );\n await this.ragKnowledgeManager.cleanupDeletedKnowledgeFiles();\n elizaLogger.info(`[RAG Cleanup] Cleanup complete`);\n }\n }\n\n async stop() {\n elizaLogger.debug(\"runtime::stop - character\", this.character.name);\n // stop services, they don't have a stop function\n // just initialize\n\n // plugins\n // have actions, providers, evaluators (no start/stop)\n // services (just initialized), clients\n\n // client have a start\n for (const c of this.clients) {\n elizaLogger.log(\n \"runtime::stop - requesting\",\n c,\n \"client stop for\",\n this.character.name,\n );\n c.stop(this);\n }\n // we don't need to unregister with directClient\n // don't need to worry about knowledge\n }\n\n /**\n * Processes character knowledge by creating document memories and fragment memories.\n * This function takes an array of knowledge items, creates a document memory for each item if it doesn't exist,\n * then chunks the content into fragments, embeds each fragment, and creates fragment memories.\n * @param knowledge An array of knowledge items containing id, path, and content.\n */\n private async processCharacterKnowledge(items: string[]) {\n for (const item of items) {\n const knowledgeId = stringToUuid(item);\n const existingDocument =\n await this.documentsManager.getMemoryById(knowledgeId);\n if (existingDocument) {\n continue;\n }\n\n elizaLogger.info(\n \"Processing knowledge for \",\n this.character.name,\n \" - \",\n item.slice(0, 100),\n );\n\n await knowledge.set(this, {\n id: knowledgeId,\n content: {\n text: item,\n },\n });\n }\n }\n\n /**\n * Processes character knowledge by creating document memories and fragment memories.\n * This function takes an array of knowledge items, creates a document knowledge for each item if it doesn't exist,\n * then chunks the content into fragments, embeds each fragment, and creates fragment knowledge.\n * An array of knowledge items or objects containing id, path, and content.\n */\n private async processCharacterRAGKnowledge(\n items: (string | { path: string; shared?: boolean })[],\n ) {\n let hasError = false;\n\n for (const item of items) {\n if (!item) continue;\n\n try {\n // Check if item is marked as shared\n let isShared = false;\n let contentItem = item;\n\n // Only treat as shared if explicitly marked\n if (typeof item === \"object\" && \"path\" in item) {\n isShared = item.shared === true;\n contentItem = item.path;\n } else {\n contentItem = item;\n }\n\n // const knowledgeId = stringToUuid(contentItem);\n const knowledgeId = this.ragKnowledgeManager.generateScopedId(\n contentItem,\n isShared,\n );\n const fileExtension = contentItem\n .split(\".\")\n .pop()\n ?.toLowerCase();\n\n // Check if it's a file or direct knowledge\n if (\n fileExtension &&\n [\"md\", \"txt\", \"pdf\"].includes(fileExtension)\n ) {\n try {\n const filePath = join(this.knowledgeRoot, contentItem);\n // Get existing knowledge first with more detailed logging\n elizaLogger.debug(\"[RAG Query]\", {\n knowledgeId,\n agentId: this.agentId,\n relativePath: contentItem,\n fullPath: filePath,\n isShared,\n knowledgeRoot: this.knowledgeRoot,\n });\n\n // Get existing knowledge first\n const existingKnowledge =\n await this.ragKnowledgeManager.getKnowledge({\n id: knowledgeId,\n agentId: this.agentId, // Keep agentId as it's used in OR query\n });\n\n elizaLogger.debug(\"[RAG Query Result]\", {\n relativePath: contentItem,\n fullPath: filePath,\n knowledgeId,\n isShared,\n exists: existingKnowledge.length > 0,\n knowledgeCount: existingKnowledge.length,\n firstResult: existingKnowledge[0]\n ? {\n id: existingKnowledge[0].id,\n agentId: existingKnowledge[0].agentId,\n contentLength:\n existingKnowledge[0].content.text\n .length,\n }\n : null,\n results: existingKnowledge.map((k) => ({\n id: k.id,\n agentId: k.agentId,\n isBaseKnowledge: !k.id.includes(\"chunk\"),\n })),\n });\n\n // Read file content\n const content: string = await readFile(\n filePath,\n \"utf8\",\n );\n if (!content) {\n hasError = true;\n continue;\n }\n\n if (existingKnowledge.length > 0) {\n const existingContent =\n existingKnowledge[0].content.text;\n\n elizaLogger.debug(\"[RAG Compare]\", {\n path: contentItem,\n knowledgeId,\n isShared,\n existingContentLength: existingContent.length,\n newContentLength: content.length,\n contentSample: content.slice(0, 100),\n existingContentSample: existingContent.slice(\n 0,\n 100,\n ),\n matches: existingContent === content,\n });\n\n if (existingContent === content) {\n elizaLogger.info(\n `${isShared ? \"Shared knowledge\" : \"Knowledge\"} ${contentItem} unchanged, skipping`,\n );\n continue;\n }\n\n // Content changed, remove old knowledge before adding new\n elizaLogger.info(\n `${isShared ? \"Shared knowledge\" : \"Knowledge\"} ${contentItem} changed, updating...`,\n );\n await this.ragKnowledgeManager.removeKnowledge(\n knowledgeId,\n );\n await this.ragKnowledgeManager.removeKnowledge(\n `${knowledgeId}-chunk-*` as UUID,\n );\n }\n\n elizaLogger.info(\n `Processing ${fileExtension.toUpperCase()} file content for`,\n this.character.name,\n \"-\",\n contentItem,\n );\n\n await this.ragKnowledgeManager.processFile({\n path: contentItem,\n content: content,\n type: fileExtension as \"pdf\" | \"md\" | \"txt\",\n isShared: isShared,\n });\n } catch (error: any) {\n hasError = true;\n elizaLogger.error(\n `Failed to read knowledge file ${contentItem}. Error details:`,\n error?.message || error || \"Unknown error\",\n );\n continue;\n }\n } else {\n // Handle direct knowledge string\n elizaLogger.info(\n \"Processing direct knowledge for\",\n this.character.name,\n \"-\",\n contentItem.slice(0, 100),\n );\n\n const existingKnowledge =\n await this.ragKnowledgeManager.getKnowledge({\n id: knowledgeId,\n agentId: this.agentId,\n });\n\n if (existingKnowledge.length > 0) {\n elizaLogger.info(\n `Direct knowledge ${knowledgeId} already exists, skipping`,\n );\n continue;\n }\n\n await this.ragKnowledgeManager.createKnowledge({\n id: knowledgeId,\n agentId: this.agentId,\n content: {\n text: contentItem,\n metadata: {\n type: \"direct\",\n },\n },\n });\n }\n } catch (error: any) {\n hasError = true;\n elizaLogger.error(\n `Error processing knowledge item ${item}:`,\n error?.message || error || \"Unknown error\",\n );\n continue;\n }\n }\n\n if (hasError) {\n elizaLogger.warn(\n \"Some knowledge items failed to process, but continuing with available knowledge\",\n );\n }\n }\n\n /**\n * Processes directory-based RAG knowledge by recursively loading and processing files.\n * @param dirConfig The directory configuration containing path and shared flag\n */\n private async processCharacterRAGDirectory(dirConfig: {\n directory: string;\n shared?: boolean;\n }) {\n if (!dirConfig.directory) {\n elizaLogger.error(\"[RAG Directory] No directory specified\");\n return;\n }\n\n // Sanitize directory path to prevent traversal attacks\n const sanitizedDir = dirConfig.directory.replace(/\\.\\./g, \"\");\n const dirPath = join(this.knowledgeRoot, sanitizedDir);\n\n try {\n // Check if directory exists\n const dirExists = existsSync(dirPath);\n if (!dirExists) {\n elizaLogger.error(\n `[RAG Directory] Directory does not exist: ${sanitizedDir}`,\n );\n return;\n }\n\n elizaLogger.debug(`[RAG Directory] Searching in: ${dirPath}`);\n // Use glob to find all matching files in directory\n const files = await glob(\"**/*.{md,txt,pdf}\", {\n cwd: dirPath,\n nodir: true,\n absolute: false,\n });\n\n if (files.length === 0) {\n elizaLogger.warn(\n `No matching files found in directory: ${dirConfig.directory}`,\n );\n return;\n }\n\n elizaLogger.info(\n `[RAG Directory] Found ${files.length} files in ${dirConfig.directory}`,\n );\n\n // Process files in batches to avoid memory issues\n const BATCH_SIZE = 5;\n for (let i = 0; i < files.length; i += BATCH_SIZE) {\n const batch = files.slice(i, i + BATCH_SIZE);\n\n await Promise.all(\n batch.map(async (file) => {\n try {\n const relativePath = join(sanitizedDir, file);\n\n elizaLogger.debug(\n `[RAG Directory] Processing file ${i + 1}/${files.length}:`,\n {\n file,\n relativePath,\n shared: dirConfig.shared,\n },\n );\n\n await this.processCharacterRAGKnowledge([\n {\n path: relativePath,\n shared: dirConfig.shared,\n },\n ]);\n } catch (error) {\n elizaLogger.error(\n `[RAG Directory] Failed to process file: ${file}`,\n error instanceof Error\n ? {\n name: error.name,\n message: error.message,\n stack: error.stack,\n }\n : error,\n );\n }\n }),\n );\n\n elizaLogger.debug(\n `[RAG Directory] Completed batch ${Math.min(i + BATCH_SIZE, files.length)}/${files.length} files`,\n );\n }\n\n elizaLogger.success(\n `[RAG Directory] Successfully processed directory: ${sanitizedDir}`,\n );\n } catch (error) {\n elizaLogger.error(\n `[RAG Directory] Failed to process directory: ${sanitizedDir}`,\n error instanceof Error\n ? {\n name: error.name,\n message: error.message,\n stack: error.stack,\n }\n : error,\n );\n throw error; // Re-throw to let caller handle it\n }\n }\n\n getSetting(key: string) {\n // check if the key is in the character.settings.secrets object\n if (this.character.settings?.secrets?.[key]) {\n return this.character.settings.secrets[key];\n }\n // if not, check if it's in the settings object\n if (this.character.settings?.[key]) {\n return this.character.settings[key];\n }\n\n // if not, check if it's in the settings object\n if (settings[key]) {\n return settings[key];\n }\n\n return null;\n }\n\n /**\n * Get the number of messages that are kept in the conversation buffer.\n * @returns The number of recent messages to be kept in memory.\n */\n getConversationLength() {\n return this.#conversationLength;\n }\n\n /**\n * Register an action for the agent to perform.\n * @param action The action to register.\n */\n registerAction(action: Action) {\n elizaLogger.success(`${this.character.name}(${this.agentId}) - Registering action: ${action.name}`);\n this.actions.push(action);\n }\n\n /**\n * Register an evaluator to assess and guide the agent's responses.\n * @param evaluator The evaluator to register.\n */\n registerEvaluator(evaluator: Evaluator) {\n this.evaluators.push(evaluator);\n }\n\n /**\n * Register a context provider to provide context for message generation.\n * @param provider The context provider to register.\n */\n registerContextProvider(provider: Provider) {\n this.providers.push(provider);\n }\n\n /**\n * Register an adapter for the agent to use.\n * @param adapter The adapter to register.\n */\n registerAdapter(adapter: Adapter) {\n this.adapters.push(adapter);\n }\n\n /**\n * Process the actions of a message.\n * @param message The message to process.\n * @param content The content of the message to process actions from.\n */\n async processActions(\n message: Memory,\n responses: Memory[],\n state?: State,\n callback?: HandlerCallback,\n ): Promise<void> {\n for (const response of responses) {\n if (!response.content?.action) {\n elizaLogger.warn(\"No action found in the response content.\");\n continue;\n }\n\n const normalizedAction = response.content.action\n .toLowerCase()\n .replace(\"_\", \"\");\n\n elizaLogger.success(`Normalized action: ${normalizedAction}`);\n\n let action = this.actions.find(\n (a: { name: string }) =>\n a.name\n .toLowerCase()\n .replace(\"_\", \"\")\n .includes(normalizedAction) ||\n normalizedAction.includes(\n a.name.toLowerCase().replace(\"_\", \"\"),\n ),\n );\n\n if (!action) {\n elizaLogger.info(\"Attempting to find action in similes.\");\n for (const _action of this.actions) {\n const simileAction = _action.similes.find(\n (simile) =>\n simile\n .toLowerCase()\n .replace(\"_\", \"\")\n .includes(normalizedAction) ||\n normalizedAction.includes(\n simile.toLowerCase().replace(\"_\", \"\"),\n ),\n );\n if (simileAction) {\n action = _action;\n elizaLogger.success(\n `Action found in similes: ${action.name}`,\n );\n break;\n }\n }\n }\n\n if (!action) {\n elizaLogger.error(\n \"No action found for\",\n response.content.action,\n );\n continue;\n }\n\n if (!action.handler) {\n elizaLogger.error(`Action ${action.name} has no handler.`);\n continue;\n }\n\n try {\n elizaLogger.info(\n `Executing handler for action: ${action.name}`,\n );\n await action.handler(this, message, state, {}, callback);\n } catch (error) {\n elizaLogger.error(error);\n }\n }\n }\n\n /**\n * Evaluate the message and state using the registered evaluators.\n * @param message The message to evaluate.\n * @param state The state of the agent.\n * @param didRespond Whether the agent responded to the message.~\n * @param callback The handler callback\n * @returns The results of the evaluation.\n */\n async evaluate(\n message: Memory,\n state: State,\n didRespond?: boolean,\n callback?: HandlerCallback,\n ) {\n const evaluatorPromises = this.evaluators.map(\n async (evaluator: Evaluator) => {\n elizaLogger.log(\"Evaluating\", evaluator.name);\n if (!evaluator.handler) {\n return null;\n }\n if (!didRespond && !evaluator.alwaysRun) {\n return null;\n }\n const result = await evaluator.validate(this, message, state);\n if (result) {\n return evaluator;\n }\n return null;\n },\n );\n\n const resolvedEvaluators = await Promise.all(evaluatorPromises);\n const evaluatorsData = resolvedEvaluators.filter(\n (evaluator): evaluator is Evaluator => evaluator !== null,\n );\n\n // if there are no evaluators this frame, return\n if (!evaluatorsData || evaluatorsData.length === 0) {\n return [];\n }\n\n const context = composeContext({\n state: {\n ...state,\n evaluators: formatEvaluators(evaluatorsData),\n evaluatorNames: formatEvaluatorNames(evaluatorsData),\n },\n template:\n this.character.templates?.evaluationTemplate ||\n evaluationTemplate,\n });\n\n const result = await generateText({\n runtime: this,\n context,\n modelClass: ModelClass.SMALL,\n // verifiableInferenceAdapter: this.verifiableInferenceAdapter,\n });\n\n const evaluators = parseJsonArrayFromText(\n result,\n ) as unknown as string[];\n\n for (const evaluator of this.evaluators) {\n if (!evaluators?.includes(evaluator.name)) continue;\n\n if (evaluator.handler)\n await evaluator.handler(this, message, state, {}, callback);\n }\n\n return evaluators;\n }\n\n /**\n * Ensure the existence of a participant in the room. If the participant does not exist, they are added to the room.\n * @param userId - The user ID to ensure the existence of.\n * @throws An error if the participant cannot be added.\n */\n async ensureParticipantExists(userId: UUID, roomId: UUID) {\n const participants =\n await this.databaseAdapter.getParticipantsForAccount(userId);\n\n if (participants?.length === 0) {\n await this.databaseAdapter.addParticipant(userId, roomId);\n }\n }\n\n /**\n * Ensure the existence of a user in the database. If the user does not exist, they are added to the database.\n * @param userId - The user ID to ensure the existence of.\n * @param userName - The user name to ensure the existence of.\n * @returns\n */\n\n async ensureUserExists(\n userId: UUID,\n userName: string | null,\n name: string | null,\n email?: string | null,\n source?: string | null,\n ) {\n const account = await this.databaseAdapter.getAccountById(userId);\n if (!account) {\n await this.databaseAdapter.createAccount({\n id: userId,\n name: name || this.character.name || \"Unknown User\",\n username: userName || this.character.username || \"Unknown\",\n // TODO: We might not need these account pieces\n email: email || this.character.email || userId,\n // When invoke ensureUserExists and saving account.details\n // Performing a complete JSON.stringify on character will cause a TypeError: Converting circular structure to JSON error in some more complex plugins.\n details: this.character ? Object.assign({}, this.character, {\n source,\n plugins: this.character?.plugins?.map((plugin) => plugin.name),\n }) : { summary: \"\" },\n });\n elizaLogger.success(`User ${userName} created successfully.`);\n }\n }\n\n async ensureParticipantInRoom(userId: UUID, roomId: UUID) {\n const participants =\n await this.databaseAdapter.getParticipantsForRoom(roomId);\n if (!participants.includes(userId)) {\n await this.databaseAdapter.addParticipant(userId, roomId);\n if (userId === this.agentId) {\n elizaLogger.log(\n `Agent ${this.character.name} linked to room ${roomId} successfully.`,\n );\n } else {\n elizaLogger.log(\n `User ${userId} linked to room ${roomId} successfully.`,\n );\n }\n }\n }\n\n async ensureConnection(\n userId: UUID,\n roomId: UUID,\n userName?: string,\n userScreenName?: string,\n source?: string,\n ) {\n await Promise.all([\n this.ensureUserExists(\n this.agentId,\n this.character.username ?? \"Agent\",\n this.character.name ?? \"Agent\",\n source,\n ),\n this.ensureUserExists(\n userId,\n userName ?? \"User\" + userId,\n userScreenName ?? \"User\" + userId,\n source,\n ),\n this.ensureRoomExists(roomId),\n ]);\n\n await Promise.all([\n this.ensureParticipantInRoom(userId, roomId),\n this.ensureParticipantInRoom(this.agentId, roomId),\n ]);\n }\n\n /**\n * Ensure the existence of a room between the agent and a user. If no room exists, a new room is created and the user\n * and agent are added as participants. The room ID is returned.\n * @param userId - The user ID to create a room with.\n * @returns The room ID of the room between the agent and the user.\n * @throws An error if the room cannot be created.\n */\n async ensureRoomExists(roomId: UUID) {\n const room = await this.databaseAdapter.getRoom(roomId);\n if (!room) {\n await this.databaseAdapter.createRoom(roomId);\n elizaLogger.log(`Room ${roomId} created successfully.`);\n }\n }\n\n /**\n * Compose the state of the agent into an object that can be passed or used for response generation.\n * @param message The message to compose the state from.\n * @returns The state of the agent.\n */\n async composeState(\n message: Memory,\n additionalKeys: { [key: string]: unknown } = {},\n ) {\n const { userId, roomId } = message;\n\n const conversationLength = this.getConversationLength();\n\n const [actorsData, recentMessagesData, goalsData]: [\n Actor[],\n Memory[],\n Goal[],\n ] = await Promise.all([\n getActorDetails({ runtime: this, roomId }),\n this.messageManager.getMemories({\n roomId,\n count: conversationLength,\n unique: false,\n }),\n getGoals({\n runtime: this,\n count: 10,\n onlyInProgress: false,\n roomId,\n }),\n ]);\n\n const goals = formatGoalsAsString({ goals: goalsData });\n\n const actors = formatActors({ actors: actorsData ?? [] });\n\n const recentMessages = formatMessages({\n messages: recentMessagesData,\n actors: actorsData,\n });\n\n const recentPosts = formatPosts({\n messages: recentMessagesData,\n actors: actorsData,\n conversationHeader: false,\n });\n\n // const lore = formatLore(loreData);\n\n const senderName = actorsData?.find(\n (actor: Actor) => actor.id === userId,\n )?.name;\n\n // TODO: We may wish to consolidate and just accept character.name here instead of the actor name\n const agentName =\n actorsData?.find((actor: Actor) => actor.id === this.agentId)\n ?.name || this.character.name;\n\n let allAttachments = message.content.attachments || [];\n\n if (recentMessagesData && Array.isArray(recentMessagesData)) {\n const lastMessageWithAttachment = recentMessagesData.find(\n (msg) =>\n msg.content.attachments &&\n msg.content.attachments.length > 0,\n );\n\n if (lastMessageWithAttachment) {\n const lastMessageTime =\n lastMessageWithAttachment?.createdAt ?? Date.now();\n const oneHourBeforeLastMessage =\n lastMessageTime - 60 * 60 * 1000; // 1 hour before last message\n\n allAttachments = recentMessagesData.reverse().flatMap((msg) => {\n const msgTime = msg.createdAt ?? Date.now();\n const isWithinTime = msgTime >= oneHourBeforeLastMessage;\n const attachments = msg.content.attachments || [];\n if (!isWithinTime) {\n attachments.forEach((attachment) => {\n attachment.text = \"[Hidden]\";\n });\n }\n return attachments;\n });\n }\n }\n\n const formattedAttachments = allAttachments\n .map(\n (attachment) =>\n `ID: ${attachment.id}\nName: ${attachment.title}\nURL: ${attachment.url}\nType: ${attachment.source}\nDescription: ${attachment.description}\nText: ${attachment.text}\n `,\n )\n .join(\"\\n\");\n\n // randomly get 3 bits of lore and join them into a paragraph, divided by \\n\n let lore = \"\";\n // Assuming this.lore is an array of lore bits\n if (this.character.lore && this.character.lore.length > 0) {\n const shuffledLore = [...this.character.lore].sort(\n () => Math.random() - 0.5,\n );\n const selectedLore = shuffledLore.slice(0, 10);\n lore = selectedLore.join(\"\\n\");\n }\n\n const formattedCharacterPostExamples = this.character.postExamples\n .sort(() => 0.5 - Math.random())\n .map((post) => {\n const messageString = `${post}`;\n return messageString;\n })\n .slice(0, 50)\n .join(\"\\n\");\n\n const formattedCharacterMessageExamples = this.character.messageExamples\n .sort(() => 0.5 - Math.random())\n .slice(0, 5)\n .map((example) => {\n const exampleNames = Array.from({ length: 5 }, () =>\n uniqueNamesGenerator({ dictionaries: [names] }),\n );\n\n return example\n .map((message) => {\n let messageString = `${message.user}: ${message.content.text}`;\n exampleNames.forEach((name, index) => {\n const placeholder = `{{user${index + 1}}}`;\n messageString = messageString.replaceAll(\n placeholder,\n name,\n );\n });\n return messageString;\n })\n .join(\"\\n\");\n })\n .join(\"\\n\\n\");\n\n const getRecentInteractions = async (\n userA: UUID,\n userB: UUID,\n ): Promise<Memory[]> => {\n // Find all rooms where userA and userB are participants\n const rooms = await this.databaseAdapter.getRoomsForParticipants([\n userA,\n userB,\n ]);\n\n // Check the existing memories in the database\n return this.messageManager.getMemoriesByRoomIds({\n // filter out the current room id from rooms\n roomIds: rooms.filter((room) => room !== roomId),\n limit: 20,\n });\n };\n\n const recentInteractions =\n userId !== this.agentId\n ? await getRecentInteractions(userId, this.agentId)\n : [];\n\n const getRecentMessageInteractions = async (\n recentInteractionsData: Memory[],\n ): Promise<string> => {\n // Format the recent messages\n const formattedInteractions = await Promise.all(\n recentInteractionsData.map(async (message) => {\n const isSelf = message.userId === this.agentId;\n let sender: string;\n if (isSelf) {\n sender = this.character.name;\n } else {\n const accountId =\n await this.databaseAdapter.getAccountById(\n message.userId,\n );\n sender = accountId?.username || \"unknown\";\n }\n return `${sender}: ${message.content.text}`;\n }),\n );\n\n return formattedInteractions.join(\"\\n\");\n };\n\n const formattedMessageInteractions =\n await getRecentMessageInteractions(recentInteractions);\n\n const getRecentPostInteractions = async (\n recentInteractionsData: Memory[],\n actors: Actor[],\n ): Promise<string> => {\n const formattedInteractions = formatPosts({\n messages: recentInteractionsData,\n actors,\n conversationHeader: true,\n });\n\n return formattedInteractions;\n };\n\n const formattedPostInteractions = await getRecentPostInteractions(\n recentInteractions,\n actorsData,\n );\n\n // if bio is a string, use it. if its an array, pick one at random\n let bio = this.character.bio || \"\";\n if (Array.isArray(bio)) {\n // get three random bio strings and join them with \" \"\n bio = bio\n .sort(() => 0.5 - Math.random())\n .slice(0, 3)\n .join(\" \");\n }\n\n let knowledgeData = [];\n let formattedKnowledge = \"\";\n\n if (this.character.settings?.ragKnowledge) {\n const recentContext = recentMessagesData\n .sort((a, b) => b.createdAt - a.createdAt) // Sort by timestamp descending (newest first)\n .slice(0, 3) // Get the 3 most recent messages\n .reverse() // Reverse to get chronological order\n .map((msg) => msg.content.text)\n .join(\" \");\n\n knowledgeData = await this.ragKnowledgeManager.getKnowledge({\n query: message.content.text,\n conversationContext: recentContext,\n limit: 8,\n });\n\n formattedKnowledge = formatKnowledge(knowledgeData);\n } else {\n knowledgeData = await knowledge.get(this, message);\n\n formattedKnowledge = formatKnowledge(knowledgeData);\n }\n\n const initialState = {\n agentId: this.agentId,\n agentName,\n bio,\n lore,\n adjective:\n this.character.adjectives &&\n this.character.adjectives.length > 0\n ? this.character.adjectives[\n Math.floor(\n Math.random() * this.character.adjectives.length,\n )\n ]\n : \"\",\n knowledge: formattedKnowledge,\n knowledgeData: knowledgeData,\n ragKnowledgeData: knowledgeData,\n // Recent interactions between the sender and receiver, formatted as messages\n recentMessageInteractions: formattedMessageInteractions,\n // Recent interactions between the sender and receiver, formatted as posts\n recentPostInteractions: formattedPostInteractions,\n // Raw memory[] array of interactions\n recentInteractionsData: recentInteractions,\n // randomly pick one topic\n topic:\n this.character.topics && this.character.topics.length > 0\n ? this.character.topics[\n Math.floor(\n Math.random() * this.character.topics.length,\n )\n ]\n : null,\n topics:\n this.character.topics && this.character.topics.length > 0\n ? `${this.character.name} is interested in ` +\n this.character.topics\n .sort(() => 0.5 - Math.random())\n .slice(0, 5)\n .map((topic, index, array) => {\n if (index === array.length - 2) {\n return topic + \" and \";\n }\n // if last topic, don't add a comma\n if (index === array.length - 1) {\n return topic;\n }\n return topic + \", \";\n })\n .join(\"\")\n : \"\",\n characterPostExamples:\n formattedCharacterPostExamples &&\n formattedCharacterPostExamples.replaceAll(\"\\n\", \"\").length > 0\n ? addHeader(\n `# Example Posts for ${this.character.name}`,\n formattedCharacterPostExamples,\n )\n : \"\",\n characterMessageExamples:\n formattedCharacterMessageExamples &&\n formattedCharacterMessageExamples.replaceAll(\"\\n\", \"\").length >\n 0\n ? addHeader(\n `# Example Conversations for ${this.character.name}`,\n formattedCharacterMessageExamples,\n )\n : \"\",\n messageDirections:\n this.character?.style?.all?.length > 0 ||\n this.character?.style?.chat.length > 0\n ? addHeader(\n \"# Message Directions for \" + this.character.name,\n (() => {\n const all = this.character?.style?.all || [];\n const chat = this.character?.style?.chat || [];\n return [...all, ...chat].join(\"\\n\");\n })(),\n )\n : \"\",\n\n postDirections:\n this.character?.style?.all?.length > 0 ||\n this.character?.style?.post.length > 0\n ? addHeader(\n \"# Post Directions for \" + this.character.name,\n (() => {\n const all = this.character?.style?.all || [];\n const post = this.character?.style?.post || [];\n return [...all, ...post].join(\"\\n\");\n })(),\n )\n : \"\",\n\n //old logic left in for reference\n //food for thought. how could we dynamically decide what parts of the character to add to the prompt other than random? rag? prompt the llm to decide?\n /*\n postDirections:\n this.character?.style?.all?.length > 0 ||\n this.character?.style?.post.length > 0\n ? addHeader(\n \"# Post Directions for \" + this.character.name,\n (() => {\n const all = this.character?.style?.all || [];\n const post = this.character?.style?.post || [];\n const shuffled = [...all, ...post].sort(\n () => 0.5 - Math.random()\n );\n return shuffled\n .slice(0, conversationLength / 2)\n .join(\"\\n\");\n })()\n )\n : \"\",*/\n // Agent runtime stuff\n senderName,\n actors:\n actors && actors.length > 0\n ? addHeader(\"# Actors\", actors)\n : \"\",\n actorsData,\n roomId,\n goals:\n goals && goals.length > 0\n ? addHeader(\n \"# Goals\\n{{agentName}} should prioritize accomplishing the objectives that are in progress.\",\n goals,\n )\n : \"\",\n goalsData,\n recentMessages:\n recentMessages && recentMessages.length > 0\n ? addHeader(\"# Conversation Messages\", recentMessages)\n : \"\",\n recentPosts:\n recentPosts && recentPosts.length > 0\n ? addHeader(\"# Posts in Thread\", recentPosts)\n : \"\",\n recentMessagesData,\n attachments:\n formattedAttachments && formattedAttachments.length > 0\n ? addHeader(\"# Attachments\", formattedAttachments)\n : \"\",\n ...additionalKeys,\n } as State;\n\n const actionPromises = this.actions.map(async (action: Action) => {\n const result = await action.validate(this, message, initialState);\n if (result) {\n return action;\n }\n return null;\n });\n\n const evaluatorPromises = this.evaluators.map(async (evaluator) => {\n const result = await evaluator.validate(\n this,\n message,\n initialState,\n );\n if (result) {\n return evaluator;\n }\n return null;\n });\n\n const [resolvedEvaluators, resolvedActions, providers] =\n await Promise.all([\n Promise.all(evaluatorPromises),\n Promise.all(actionPromises),\n getProviders(this, message, initialState),\n ]);\n\n const evaluatorsData = resolvedEvaluators.filter(\n Boolean,\n ) as Evaluator[];\n const actionsData = resolvedActions.filter(Boolean) as Action[];\n\n const actionState = {\n actionNames:\n \"Possible response actions: \" + formatActionNames(actionsData),\n actions:\n actionsData.length > 0\n ? addHeader(\n \"# Available Actions\",\n formatActions(actionsData),\n )\n : \"\",\n actionExamples:\n actionsData.length > 0\n ? addHeader(\n \"# Action Examples\",\n composeActionExamples(actionsData, 10),\n )\n : \"\",\n evaluatorsData,\n evaluators:\n evaluatorsData.length > 0\n ? formatEvaluators(evaluatorsData)\n : \"\",\n evaluatorNames:\n evaluatorsData.length > 0\n ? formatEvaluatorNames(evaluatorsData)\n : \"\",\n evaluatorExamples:\n evaluatorsData.length > 0\n ? formatEvaluatorExamples(evaluatorsData)\n : \"\",\n providers: addHeader(\n `# Additional Information About ${this.character.name} and The World`,\n providers,\n ),\n };\n\n return { ...initialState, ...actionState } as State;\n }\n\n async updateRecentMessageState(state: State): Promise<State> {\n const conversationLength = this.getConversationLength();\n const recentMessagesData = await this.messageManager.getMemories({\n roomId: state.roomId,\n count: conversationLength,\n unique: false,\n });\n\n const recentMessages = formatMessages({\n actors: state.actorsData ?? [],\n messages: recentMessagesData.map((memory: Memory) => {\n const newMemory = { ...memory };\n delete newMemory.embedding;\n return newMemory;\n }),\n });\n\n let allAttachments = [];\n\n if (recentMessagesData && Array.isArray(recentMessagesData)) {\n const lastMessageWithAttachment = recentMessagesData.find(\n (msg) =>\n msg.content.attachments &&\n msg.content.attachments.length > 0,\n );\n\n if (lastMessageWithAttachment) {\n const lastMessageTime =\n lastMessageWithAttachment?.createdAt ?? Date.now();\n const oneHourBeforeLastMessage =\n lastMessageTime - 60 * 60 * 1000; // 1 hour before last message\n\n allAttachments = recentMessagesData\n .filter((msg) => {\n const msgTime = msg.createdAt ?? Date.now();\n return msgTime >= oneHourBeforeLastMessage;\n })\n .flatMap((msg) => msg.content.attachments || []);\n }\n }\n\n const formattedAttachments = allAttachments\n .map(\n (attachment) =>\n `ID: ${attachment.id}\nName: ${attachment.title}\nURL: ${attachment.url}\nType: ${attachment.source}\nDescription: ${attachment.description}\nText: ${attachment.text}\n `,\n )\n .join(\"\\n\");\n\n return {\n ...state,\n recentMessages: addHeader(\n \"# Conversation Messages\",\n recentMessages,\n ),\n recentMessagesData,\n attachments: formattedAttachments,\n } as State;\n }\n}\n\nconst formatKnowledge = (knowledge: KnowledgeItem[]) => {\n // Group related content in a more natural way\n return knowledge.map(item => {\n // Get the main content text\n const text = item.content.text;\n \n // Clean up formatting but maintain natural text flow\n const cleanedText = text\n .trim()\n .replace(/\\n{3,}/g, '\\n\\n'); // Replace excessive newlines\n \n return cleanedText;\n }).join('\\n\\n'); // Separate distinct pieces with double newlines\n};\n","import { sha1 } from \"js-sha1\";\nimport type { UUID } from \"./types.ts\";\nimport { z } from \"zod\";\n\nexport const uuidSchema = z.string().uuid() as z.ZodType<UUID>;\n\nexport function validateUuid(value: unknown): UUID | null {\n const result = uuidSchema.safeParse(value);\n return result.success ? result.data : null;\n}\n\nexport function stringToUuid(target: string | number): UUID {\n if (typeof target === \"number\") {\n target = (target as number).toString();\n }\n\n if (typeof target !== \"string\") {\n throw TypeError(\"Value must be string\");\n }\n\n const _uint8ToHex = (ubyte: number): string => {\n const first = ubyte >> 4;\n const second = ubyte - (first << 4);\n const HEX_DIGITS = \"0123456789abcdef\".split(\"\");\n return HEX_DIGITS[first] + HEX_DIGITS[second];\n };\n\n const _uint8ArrayToHex = (buf: Uint8Array): string => {\n let out = \"\";\n for (let i = 0; i < buf.length; i++) {\n out += _uint8ToHex(buf[i]);\n }\n return out;\n };\n\n const escapedStr = encodeURIComponent(target);\n const buffer = new Uint8Array(escapedStr.length);\n for (let i = 0; i < escapedStr.length; i++) {\n buffer[i] = escapedStr[i].charCodeAt(0);\n }\n\n const hash = sha1(buffer);\n const hashBuffer = new Uint8Array(hash.length / 2);\n for (let i = 0; i < hash.length; i += 2) {\n hashBuffer[i / 2] = Number.parseInt(hash.slice(i, i + 2), 16);\n }\n\n return (_uint8ArrayToHex(hashBuffer.slice(0, 4)) +\n \"-\" +\n _uint8ArrayToHex(hashBuffer.slice(4, 6)) +\n \"-\" +\n _uint8ToHex(hashBuffer[6] & 0x0f) +\n _uint8ToHex(hashBuffer[7]) +\n \"-\" +\n _uint8ToHex((hashBuffer[8] & 0x3f) | 0x80) +\n _uint8ToHex(hashBuffer[9]) +\n \"-\" +\n _uint8ArrayToHex(hashBuffer.slice(10, 16))) as UUID;\n}\n","var util;\n(function (util) {\n util.assertEqual = (val) => val;\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === errorMap ? undefined : errorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" &&\n (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nvar _ZodEnum_cache, _ZodNativeEnum_cache;\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (this._key instanceof Array) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n var _a, _b;\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message !== null && message !== void 0 ? message : ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: (_a = message !== null && message !== void 0 ? message : required_error) !== null && _a !== void 0 ? _a : ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n var _a, _b;\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if ((_b = (_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\"\n ? refinementData(val, ctx)\n : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n // let regex = `\\\\d{2}:\\\\d{2}:\\\\d{2}`;\n let regex = `([01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d`;\n if (args.precision) {\n regex = `${regex}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n regex = `${regex}(\\\\.\\\\d+)?`;\n }\n return regex;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (!decoded.typ || !decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n var _a, _b;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch (_a) {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever &&\n this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach((key) => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nclass ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args\n .parseAsync(args, params)\n .catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodEnum_cache.set(this, void 0);\n }\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\").has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\n_ZodEnum_cache = new WeakMap();\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodNativeEnum_cache.set(this, void 0);\n }\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\").has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\n_ZodNativeEnum_cache = new WeakMap();\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nclass ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result)\n ? result.then((data) => freeze(data))\n : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\nfunction custom(check, params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n var _a, _b;\n if (!check(data)) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n }\n });\n return ZodAny.create();\n}\nconst late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n get objectUtil () { return objectUtil; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n datetimeRegex: datetimeRegex,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n ZodReadonly: ZodReadonly,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, datetimeRegex, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n","import type { AgentRuntime } from \"./runtime.ts\";\nimport { embed, getEmbeddingZeroVector } from \"./embedding.ts\";\nimport type { KnowledgeItem, UUID, Memory } from \"./types.ts\";\nimport { stringToUuid } from \"./uuid.ts\";\nimport { splitChunks } from \"./generation.ts\";\nimport elizaLogger from \"./logger.ts\";\n\nasync function get(\n runtime: AgentRuntime,\n message: Memory\n): Promise<KnowledgeItem[]> {\n // Add validation for message\n if (!message?.content?.text) {\n elizaLogger.warn(\"Invalid message for knowledge query:\", {\n message,\n content: message?.content,\n text: message?.content?.text,\n });\n return [];\n }\n\n const processed = preprocess(message.content.text);\n elizaLogger.debug(\"Knowledge query:\", {\n original: message.content.text,\n processed,\n length: processed?.length,\n });\n\n // Validate processed text\n if (!processed || processed.trim().length === 0) {\n elizaLogger.warn(\"Empty processed text for knowledge query\");\n return [];\n }\n\n const embedding = await embed(runtime, processed);\n const fragments = await runtime.knowledgeManager.searchMemoriesByEmbedding(\n embedding,\n {\n roomId: message.agentId,\n count: 5,\n match_threshold: 0.1,\n }\n );\n\n const uniqueSources = [\n ...new Set(\n fragments.map((memory) => {\n elizaLogger.log(\n `Matched fragment: ${memory.content.text} with similarity: ${memory.similarity}`\n );\n return memory.content.source;\n })\n ),\n ];\n\n const knowledgeDocuments = await Promise.all(\n uniqueSources.map((source) =>\n runtime.documentsManager.getMemoryById(source as UUID)\n )\n );\n\n return knowledgeDocuments\n .filter((memory) => memory !== null)\n .map((memory) => ({ id: memory.id, content: memory.content }));\n}\n\nasync function set(\n runtime: AgentRuntime,\n item: KnowledgeItem,\n chunkSize = 512,\n bleed = 20\n) {\n await runtime.documentsManager.createMemory({\n id: item.id,\n agentId: runtime.agentId,\n roomId: runtime.agentId,\n userId: runtime.agentId,\n createdAt: Date.now(),\n content: item.content,\n embedding: getEmbeddingZeroVector(),\n });\n\n const preprocessed = preprocess(item.content.text);\n const fragments = await splitChunks(preprocessed, chunkSize, bleed);\n\n for (const fragment of fragments) {\n const embedding = await embed(runtime, fragment);\n await runtime.knowledgeManager.createMemory({\n // We namespace the knowledge base uuid to avoid id\n // collision with the document above.\n id: stringToUuid(item.id + fragment),\n roomId: runtime.agentId,\n agentId: runtime.agentId,\n userId: runtime.agentId,\n createdAt: Date.now(),\n content: {\n source: item.id,\n text: fragment,\n },\n embedding,\n });\n }\n}\n\nexport function preprocess(content: string): string {\n elizaLogger.debug(\"Preprocessing text:\", {\n input: content,\n length: content?.length,\n });\n\n if (!content || typeof content !== \"string\") {\n elizaLogger.warn(\"Invalid input for preprocessing\");\n return \"\";\n }\n\n return (\n content\n // Remove code blocks and their content\n .replace(/```[\\s\\S]*?```/g, \"\")\n // Remove inline code\n .replace(/`.*?`/g, \"\")\n // Convert headers to plain text with emphasis\n .replace(/#{1,6}\\s*(.*)/g, \"$1\")\n // Remove image links but keep alt text\n .replace(/!\\[(.*?)\\]\\(.*?\\)/g, \"$1\")\n // Remove links but keep text\n .replace(/\\[(.*?)\\]\\(.*?\\)/g, \"$1\")\n // Simplify URLs: remove protocol and simplify to domain+path\n .replace(/(https?:\\/\\/)?(www\\.)?([^\\s]+\\.[^\\s]+)/g, \"$3\")\n // Remove Discord mentions specifically\n .replace(/<@[!&]?\\d+>/g, \"\")\n // Remove HTML tags\n .replace(/<[^>]*>/g, \"\")\n // Remove horizontal rules\n .replace(/^\\s*[-*_]{3,}\\s*$/gm, \"\")\n // Remove comments\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\/\\/.*/g, \"\")\n // Normalize whitespace\n .replace(/\\s+/g, \" \")\n // Remove multiple newlines\n .replace(/\\n{3,}/g, \"\\n\\n\")\n // Remove special characters except those common in URLs\n .replace(/[^a-zA-Z0-9\\s\\-_./:?=&]/g, \"\")\n .trim()\n .toLowerCase()\n );\n}\n\nexport default {\n get,\n set,\n preprocess,\n};\n","import { embed } from \"./embedding.ts\";\nimport { splitChunks } from \"./generation.ts\";\nimport elizaLogger from \"./logger.ts\";\nimport {\n type IAgentRuntime,\n type IRAGKnowledgeManager,\n type RAGKnowledgeItem,\n type UUID,\n KnowledgeScope,\n} from \"./types.ts\";\nimport { stringToUuid } from \"./uuid.ts\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\n\n/**\n * Manage knowledge in the database.\n */\nexport class RAGKnowledgeManager implements IRAGKnowledgeManager {\n /**\n * The AgentRuntime instance associated with this manager.\n */\n runtime: IAgentRuntime;\n\n /**\n * The name of the database table this manager operates on.\n */\n tableName: string;\n\n /**\n * The root directory where RAG knowledge files are located (internal)\n */\n knowledgeRoot: string;\n\n /**\n * Constructs a new KnowledgeManager instance.\n * @param opts Options for the manager.\n * @param opts.tableName The name of the table this manager will operate on.\n * @param opts.runtime The AgentRuntime instance associated with this manager.\n */\n constructor(opts: {\n tableName: string;\n runtime: IAgentRuntime;\n knowledgeRoot: string;\n }) {\n this.runtime = opts.runtime;\n this.tableName = opts.tableName;\n this.knowledgeRoot = opts.knowledgeRoot;\n }\n\n private readonly defaultRAGMatchThreshold = 0.85;\n private readonly defaultRAGMatchCount = 8;\n\n /**\n * Common English stop words to filter out from query analysis\n */\n private readonly stopWords = new Set([\n \"a\",\n \"an\",\n \"and\",\n \"are\",\n \"as\",\n \"at\",\n \"be\",\n \"by\",\n \"does\",\n \"for\",\n \"from\",\n \"had\",\n \"has\",\n \"have\",\n \"he\",\n \"her\",\n \"his\",\n \"how\",\n \"hey\",\n \"i\",\n \"in\",\n \"is\",\n \"it\",\n \"its\",\n \"of\",\n \"on\",\n \"or\",\n \"that\",\n \"the\",\n \"this\",\n \"to\",\n \"was\",\n \"what\",\n \"when\",\n \"where\",\n \"which\",\n \"who\",\n \"will\",\n \"with\",\n \"would\",\n \"there\",\n \"their\",\n \"they\",\n \"your\",\n \"you\",\n ]);\n\n /**\n * Filters out stop words and returns meaningful terms\n */\n private getQueryTerms(query: string): string[] {\n return query\n .toLowerCase()\n .split(\" \")\n .filter((term) => term.length > 2) // Filter very short words\n .filter((term) => !this.stopWords.has(term)); // Filter stop words\n }\n\n /**\n * Preprocesses text content for better RAG performance.\n * @param content The text content to preprocess.\n * @returns The preprocessed text.\n */\n\n private preprocess(content: string): string {\n if (!content || typeof content !== \"string\") {\n elizaLogger.warn(\"Invalid input for preprocessing\");\n return \"\";\n }\n\n return (\n content\n .replace(/```[\\s\\S]*?```/g, \"\")\n .replace(/`.*?`/g, \"\")\n .replace(/#{1,6}\\s*(.*)/g, \"$1\")\n .replace(/!\\[(.*?)\\]\\(.*?\\)/g, \"$1\")\n .replace(/\\[(.*?)\\]\\(.*?\\)/g, \"$1\")\n .replace(/(https?:\\/\\/)?(www\\.)?([^\\s]+\\.[^\\s]+)/g, \"$3\")\n .replace(/<@[!&]?\\d+>/g, \"\")\n .replace(/<[^>]*>/g, \"\")\n .replace(/^\\s*[-*_]{3,}\\s*$/gm, \"\")\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\/\\/.*/g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n // .replace(/[^a-zA-Z0-9\\s\\-_./:?=&]/g, \"\") --this strips out CJK characters\n .trim()\n .toLowerCase()\n );\n }\n\n private hasProximityMatch(text: string, terms: string[]): boolean {\n if (!text || !terms.length) {\n return false;\n }\n \n const words = text.toLowerCase().split(\" \").filter(w => w.length > 0);\n \n // Find all positions for each term (not just first occurrence)\n const allPositions = terms.flatMap(term => \n words.reduce((positions, word, idx) => {\n if (word.includes(term)) positions.push(idx);\n return positions;\n }, [] as number[])\n ).sort((a, b) => a - b);\n \n if (allPositions.length < 2) return false;\n \n // Check proximity\n for (let i = 0; i < allPositions.length - 1; i++) {\n if (Math.abs(allPositions[i] - allPositions[i + 1]) <= 5) {\n elizaLogger.debug(\"[Proximity Match]\", {\n terms,\n positions: allPositions,\n matchFound: `${allPositions[i]} - ${allPositions[i + 1]}`\n });\n return true;\n }\n }\n \n return false;\n }\n\n async getKnowledge(params: {\n query?: string;\n id?: UUID;\n conversationContext?: string;\n limit?: number;\n agentId?: UUID;\n }): Promise<RAGKnowledgeItem[]> {\n const agentId = params.agentId || this.runtime.agentId;\n\n // If id is provided, do direct lookup first\n if (params.id) {\n const directResults =\n await this.runtime.databaseAdapter.getKnowledge({\n id: params.id,\n agentId: agentId,\n });\n\n if (directResults.length > 0) {\n return directResults;\n }\n }\n\n // If no id or no direct results, perform semantic search\n if (params.query) {\n try {\n const processedQuery = this.preprocess(params.query);\n\n // Build search text with optional context\n let searchText = processedQuery;\n if (params.conversationContext) {\n const relevantContext = this.preprocess(\n params.conversationContext\n );\n searchText = `${relevantContext} ${processedQuery}`;\n }\n\n const embeddingArray = await embed(this.runtime, searchText);\n\n const embedding = new Float32Array(embeddingArray);\n\n // Get results with single query\n const results =\n await this.runtime.databaseAdapter.searchKnowledge({\n agentId: this.runtime.agentId,\n embedding: embedding,\n match_threshold: this.defaultRAGMatchThreshold,\n match_count:\n (params.limit || this.defaultRAGMatchCount) * 2,\n searchText: processedQuery,\n });\n\n // Enhanced reranking with sophisticated scoring\n const rerankedResults = results\n .map((result) => {\n let score = result.similarity;\n\n // Check for direct query term matches\n const queryTerms = this.getQueryTerms(processedQuery);\n\n const matchingTerms = queryTerms.filter((term) =>\n result.content.text.toLowerCase().includes(term)\n );\n\n if (matchingTerms.length > 0) {\n // Much stronger boost for matches\n score *=\n 1 +\n (matchingTerms.length / queryTerms.length) * 2; // Double the boost\n\n if (\n this.hasProximityMatch(\n result.content.text,\n matchingTerms\n )\n ) {\n score *= 1.5; // Stronger proximity boost\n }\n } else {\n // More aggressive penalty\n if (!params.conversationContext) {\n score *= 0.3; // Stronger penalty\n }\n }\n\n return {\n ...result,\n score,\n matchedTerms: matchingTerms, // Add for debugging\n };\n })\n .sort((a, b) => b.score - a.score);\n\n // Filter and return results\n return rerankedResults\n .filter(\n (result) =>\n result.score >= this.defaultRAGMatchThreshold\n )\n .slice(0, params.limit || this.defaultRAGMatchCount);\n } catch (error) {\n console.log(`[RAG Search Error] ${error}`);\n return [];\n }\n }\n\n // If neither id nor query provided, return empty array\n return [];\n }\n\n async createKnowledge(item: RAGKnowledgeItem): Promise<void> {\n if (!item.content.text) {\n elizaLogger.warn(\"Empty content in knowledge item\");\n return;\n }\n\n try {\n // Process main document\n const processedContent = this.preprocess(item.content.text);\n const mainEmbeddingArray = await embed(\n this.runtime,\n processedContent\n );\n\n const mainEmbedding = new Float32Array(mainEmbeddingArray);\n\n // Create main document\n await this.runtime.databaseAdapter.createKnowledge({\n id: item.id,\n agentId: this.runtime.agentId,\n content: {\n text: item.content.text,\n metadata: {\n ...item.content.metadata,\n isMain: true,\n },\n },\n embedding: mainEmbedding,\n createdAt: Date.now(),\n });\n\n // Generate and store chunks\n const chunks = await splitChunks(processedContent, 512, 20);\n\n for (const [index, chunk] of chunks.entries()) {\n const chunkEmbeddingArray = await embed(this.runtime, chunk);\n const chunkEmbedding = new Float32Array(chunkEmbeddingArray);\n const chunkId = `${item.id}-chunk-${index}` as UUID;\n\n await this.runtime.databaseAdapter.createKnowledge({\n id: chunkId,\n agentId: this.runtime.agentId,\n content: {\n text: chunk,\n metadata: {\n ...item.content.metadata,\n isChunk: true,\n originalId: item.id,\n chunkIndex: index,\n },\n },\n embedding: chunkEmbedding,\n createdAt: Date.now(),\n });\n }\n } catch (error) {\n elizaLogger.error(`Error processing knowledge ${item.id}:`, error);\n throw error;\n }\n }\n\n async searchKnowledge(params: {\n agentId: UUID;\n embedding: Float32Array | number[];\n match_threshold?: number;\n match_count?: number;\n searchText?: string;\n }): Promise<RAGKnowledgeItem[]> {\n const {\n match_threshold = this.defaultRAGMatchThreshold,\n match_count = this.defaultRAGMatchCount,\n embedding,\n searchText,\n } = params;\n\n const float32Embedding = Array.isArray(embedding)\n ? new Float32Array(embedding)\n : embedding;\n\n return await this.runtime.databaseAdapter.searchKnowledge({\n agentId: params.agentId || this.runtime.agentId,\n embedding: float32Embedding,\n match_threshold,\n match_count,\n searchText,\n });\n }\n\n async removeKnowledge(id: UUID): Promise<void> {\n await this.runtime.databaseAdapter.removeKnowledge(id);\n }\n\n async clearKnowledge(shared?: boolean): Promise<void> {\n await this.runtime.databaseAdapter.clearKnowledge(\n this.runtime.agentId,\n shared ? shared : false\n );\n }\n\n /**\n * Lists all knowledge entries for an agent without semantic search or reranking.\n * Used primarily for administrative tasks like cleanup.\n *\n * @param agentId The agent ID to fetch knowledge entries for\n * @returns Array of RAGKnowledgeItem entries\n */\n async listAllKnowledge(agentId: UUID): Promise<RAGKnowledgeItem[]> {\n elizaLogger.debug(\n `[Knowledge List] Fetching all entries for agent: ${agentId}`\n );\n\n try {\n // Only pass the required agentId parameter\n const results = await this.runtime.databaseAdapter.getKnowledge({\n agentId: agentId,\n });\n\n elizaLogger.debug(\n `[Knowledge List] Found ${results.length} entries`\n );\n return results;\n } catch (error) {\n elizaLogger.error(\n \"[Knowledge List] Error fetching knowledge entries:\",\n error\n );\n throw error;\n }\n }\n\n async cleanupDeletedKnowledgeFiles() {\n try {\n elizaLogger.debug(\n \"[Cleanup] Starting knowledge cleanup process, agent: \",\n this.runtime.agentId\n );\n\n elizaLogger.debug(\n `[Cleanup] Knowledge root path: ${this.knowledgeRoot}`\n );\n\n const existingKnowledge = await this.listAllKnowledge(\n this.runtime.agentId\n );\n // Only process parent documents, ignore chunks\n const parentDocuments = existingKnowledge.filter(\n (item) =>\n !item.id.includes(\"chunk\") && item.content.metadata?.source // Must have a source path\n );\n\n elizaLogger.debug(\n `[Cleanup] Found ${parentDocuments.length} parent documents to check`\n );\n\n for (const item of parentDocuments) {\n const relativePath = item.content.metadata?.source;\n const filePath = join(this.knowledgeRoot, relativePath);\n\n elizaLogger.debug(\n `[Cleanup] Checking joined file path: ${filePath}`\n );\n\n if (!existsSync(filePath)) {\n elizaLogger.warn(\n `[Cleanup] File not found, starting removal process: ${filePath}`\n );\n\n const idToRemove = item.id;\n elizaLogger.debug(\n `[Cleanup] Using ID for removal: ${idToRemove}`\n );\n\n try {\n // Just remove the parent document - this will cascade to chunks\n await this.removeKnowledge(idToRemove);\n\n // // Clean up the cache\n // const baseCacheKeyWithWildcard = `${this.generateKnowledgeCacheKeyBase(\n // idToRemove,\n // item.content.metadata?.isShared || false\n // )}*`;\n // await this.cacheManager.deleteByPattern({\n // keyPattern: baseCacheKeyWithWildcard,\n // });\n\n elizaLogger.success(\n `[Cleanup] Successfully removed knowledge for file: ${filePath}`\n );\n } catch (deleteError) {\n elizaLogger.error(\n `[Cleanup] Error during deletion process for ${filePath}:`,\n deleteError instanceof Error\n ? {\n message: deleteError.message,\n stack: deleteError.stack,\n name: deleteError.name,\n }\n : deleteError\n );\n }\n }\n }\n\n elizaLogger.debug(\"[Cleanup] Finished knowledge cleanup process\");\n } catch (error) {\n elizaLogger.error(\n \"[Cleanup] Error cleaning up deleted knowledge files:\",\n error\n );\n }\n }\n\n public generateScopedId(path: string, isShared: boolean): UUID {\n // Prefix the path with scope before generating UUID to ensure different IDs for shared vs private\n const scope = isShared ? KnowledgeScope.SHARED : KnowledgeScope.PRIVATE;\n const scopedPath = `${scope}-${path}`;\n return stringToUuid(scopedPath);\n }\n\n async processFile(file: {\n path: string;\n content: string;\n type: \"pdf\" | \"md\" | \"txt\";\n isShared?: boolean;\n }): Promise<void> {\n const timeMarker = (label: string) => {\n const time = (Date.now() - startTime) / 1000;\n elizaLogger.info(`[Timing] ${label}: ${time.toFixed(2)}s`);\n };\n\n const startTime = Date.now();\n const content = file.content;\n\n try {\n const fileSizeKB = new TextEncoder().encode(content).length / 1024;\n elizaLogger.info(\n `[File Progress] Starting ${file.path} (${fileSizeKB.toFixed(2)} KB)`\n );\n\n // Generate scoped ID for the file\n const scopedId = this.generateScopedId(\n file.path,\n file.isShared || false\n );\n\n // Step 1: Preprocessing\n //const preprocessStart = Date.now();\n const processedContent = this.preprocess(content);\n timeMarker(\"Preprocessing\");\n\n // Step 2: Main document embedding\n const mainEmbeddingArray = await embed(\n this.runtime,\n processedContent\n );\n const mainEmbedding = new Float32Array(mainEmbeddingArray);\n timeMarker(\"Main embedding\");\n\n // Step 3: Create main document\n await this.runtime.databaseAdapter.createKnowledge({\n id: scopedId,\n agentId: this.runtime.agentId,\n content: {\n text: content,\n metadata: {\n source: file.path,\n type: file.type,\n isShared: file.isShared || false,\n },\n },\n embedding: mainEmbedding,\n createdAt: Date.now(),\n });\n timeMarker(\"Main document storage\");\n\n // Step 4: Generate chunks\n const chunks = await splitChunks(processedContent, 512, 20);\n const totalChunks = chunks.length;\n elizaLogger.info(`Generated ${totalChunks} chunks`);\n timeMarker(\"Chunk generation\");\n\n // Step 5: Process chunks with larger batches\n const BATCH_SIZE = 10; // Increased batch size\n let processedChunks = 0;\n\n for (let i = 0; i < chunks.length; i += BATCH_SIZE) {\n const batchStart = Date.now();\n const batch = chunks.slice(\n i,\n Math.min(i + BATCH_SIZE, chunks.length)\n );\n\n // Process embeddings in parallel\n const embeddings = await Promise.all(\n batch.map((chunk) => embed(this.runtime, chunk))\n );\n\n // Batch database operations\n await Promise.all(\n embeddings.map(async (embeddingArray, index) => {\n const chunkId =\n `${scopedId}-chunk-${i + index}` as UUID;\n const chunkEmbedding = new Float32Array(embeddingArray);\n\n await this.runtime.databaseAdapter.createKnowledge({\n id: chunkId,\n agentId: this.runtime.agentId,\n content: {\n text: batch[index],\n metadata: {\n source: file.path,\n type: file.type,\n isShared: file.isShared || false,\n isChunk: true,\n originalId: scopedId,\n chunkIndex: i + index,\n originalPath: file.path,\n },\n },\n embedding: chunkEmbedding,\n createdAt: Date.now(),\n });\n })\n );\n\n processedChunks += batch.length;\n const batchTime = (Date.now() - batchStart) / 1000;\n elizaLogger.info(\n `[Batch Progress] ${file.path}: Processed ${processedChunks}/${totalChunks} chunks (${batchTime.toFixed(2)}s for batch)`\n );\n }\n\n const totalTime = (Date.now() - startTime) / 1000;\n elizaLogger.info(\n `[Complete] Processed ${file.path} in ${totalTime.toFixed(2)}s`\n );\n } catch (error) {\n if (\n file.isShared &&\n error?.code === \"SQLITE_CONSTRAINT_PRIMARYKEY\"\n ) {\n elizaLogger.info(\n `Shared knowledge ${file.path} already exists in database, skipping creation`\n );\n return;\n }\n elizaLogger.error(`Error processing file ${file.path}:`, error);\n throw error;\n }\n }\n}\n","import { z } from \"zod\";\nimport { ModelProviderName } from \"./types\";\nimport elizaLogger from \"./logger\";\n\n// TODO: TO COMPLETE\nexport const envSchema = z.object({\n // API Keys with specific formats\n OPENAI_API_KEY: z\n .string()\n .startsWith(\"sk-\", \"OpenAI API key must start with 'sk-'\"),\n REDPILL_API_KEY: z.string().min(1, \"REDPILL API key is required\"),\n GROK_API_KEY: z.string().min(1, \"GROK API key is required\"),\n GROQ_API_KEY: z\n .string()\n .startsWith(\"gsk_\", \"GROQ API key must start with 'gsk_'\"),\n OPENROUTER_API_KEY: z.string().min(1, \"OpenRouter API key is required\"),\n GOOGLE_GENERATIVE_AI_API_KEY: z\n .string()\n .min(1, \"Gemini API key is required\"),\n ELEVENLABS_XI_API_KEY: z.string().min(1, \"ElevenLabs API key is required\"),\n});\n\n// Type inference\nexport type EnvConfig = z.infer<typeof envSchema>;\n\n// Validation function\nexport function validateEnv(): EnvConfig {\n try {\n return envSchema.parse(process.env);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const errorMessages = error.errors\n .map((err) => `${err.path}: ${err.message}`)\n .join(\"\\n\");\n throw new Error(`Environment validation failed:\\n${errorMessages}`);\n }\n throw error;\n }\n}\n\n// Helper schemas for nested types\nconst MessageExampleSchema = z.object({\n user: z.string(),\n content: z\n .object({\n text: z.string(),\n action: z.string().optional(),\n source: z.string().optional(),\n url: z.string().optional(),\n inReplyTo: z.string().uuid().optional(),\n attachments: z.array(z.any()).optional(),\n })\n .and(z.record(z.string(), z.unknown())), // For additional properties\n});\n\nconst PluginSchema = z.object({\n name: z.string(),\n description: z.string(),\n actions: z.array(z.any()).optional(),\n providers: z.array(z.any()).optional(),\n evaluators: z.array(z.any()).optional(),\n services: z.array(z.any()).optional(),\n clients: z.array(z.any()).optional(),\n});\n\n// Main Character schema\nexport const CharacterSchema = z.object({\n id: z.string().uuid().optional(),\n name: z.string(),\n system: z.string().optional(),\n modelProvider: z.nativeEnum(ModelProviderName),\n modelEndpointOverride: z.string().optional(),\n templates: z.record(z.string()).optional(),\n bio: z.union([z.string(), z.array(z.string())]),\n lore: z.array(z.string()),\n messageExamples: z.array(z.array(MessageExampleSchema)),\n postExamples: z.array(z.string()),\n topics: z.array(z.string()),\n adjectives: z.array(z.string()),\n knowledge: z\n .array(\n z.union([\n z.string(), // Direct knowledge strings\n z.object({\n // Individual file config\n path: z.string(),\n shared: z.boolean().optional(),\n }),\n z.object({\n // Directory config\n directory: z.string(),\n shared: z.boolean().optional(),\n }),\n ])\n )\n .optional(),\n plugins: z.union([z.array(z.string()), z.array(PluginSchema)]),\n settings: z\n .object({\n secrets: z.record(z.string()).optional(),\n voice: z\n .object({\n model: z.string().optional(),\n url: z.string().optional(),\n })\n .optional(),\n model: z.string().optional(),\n modelConfig: z.object({\n maxInputTokens: z.number().optional(),\n maxOutputTokens: z.number().optional(),\n temperature: z.number().optional(),\n frequency_penalty: z.number().optional(),\n presence_penalty:z.number().optional()\n })\n .optional(),\n embeddingModel: z.string().optional(),\n })\n .optional(),\n clientConfig: z\n .object({\n discord: z\n .object({\n shouldIgnoreBotMessages: z.boolean().optional(),\n shouldIgnoreDirectMessages: z.boolean().optional(),\n })\n .optional(),\n telegram: z\n .object({\n shouldIgnoreBotMessages: z.boolean().optional(),\n shouldIgnoreDirectMessages: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n style: z.object({\n all: z.array(z.string()),\n chat: z.array(z.string()),\n post: z.array(z.string()),\n }),\n twitterProfile: z\n .object({\n username: z.string(),\n screenName: z.string(),\n bio: z.string(),\n nicknames: z.array(z.string()).optional(),\n })\n .optional(),\n nft: z\n .object({\n prompt: z.string().optional(),\n })\n .optional(),\n extends: z.array(z.string()).optional(),\n});\n\n// Type inference\nexport type CharacterConfig = z.infer<typeof CharacterSchema>;\n\n// Validation function\nexport function validateCharacterConfig(json: unknown): CharacterConfig {\n try {\n return CharacterSchema.parse(json);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const groupedErrors = error.errors.reduce(\n (acc, err) => {\n const path = err.path.join(\".\");\n if (!acc[path]) {\n acc[path] = [];\n }\n acc[path].push(err.message);\n return acc;\n },\n {} as Record<string, string[]>\n );\n\n Object.entries(groupedErrors).forEach(([field, messages]) => {\n elizaLogger.error(\n `Validation errors in ${field}: ${messages.join(\" - \")}`\n );\n });\n\n throw new Error(\n \"Character configuration validation failed. Check logs for details.\"\n );\n }\n throw error;\n }\n}\n","import path from \"path\";\nimport fs from \"fs/promises\";\nimport type {\n CacheOptions,\n ICacheManager,\n IDatabaseCacheAdapter,\n UUID,\n} from \"./types\";\n\nexport interface ICacheAdapter {\n get(key: string): Promise<string | undefined>;\n set(key: string, value: string): Promise<void>;\n delete(key: string): Promise<void>;\n}\n\nexport class MemoryCacheAdapter implements ICacheAdapter {\n data: Map<string, string>;\n\n constructor(initalData?: Map<string, string>) {\n this.data = initalData ?? new Map<string, string>();\n }\n\n async get(key: string): Promise<string | undefined> {\n return this.data.get(key);\n }\n\n async set(key: string, value: string): Promise<void> {\n this.data.set(key, value);\n }\n\n async delete(key: string): Promise<void> {\n this.data.delete(key);\n }\n}\n\nexport class FsCacheAdapter implements ICacheAdapter {\n constructor(private dataDir: string) {}\n\n async get(key: string): Promise<string | undefined> {\n try {\n return await fs.readFile(path.join(this.dataDir, key), \"utf8\");\n } catch {\n // console.error(error);\n return undefined;\n }\n }\n\n async set(key: string, value: string): Promise<void> {\n try {\n const filePath = path.join(this.dataDir, key);\n // Ensure the directory exists\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, value, \"utf8\");\n } catch (error) {\n console.error(error);\n }\n }\n\n async delete(key: string): Promise<void> {\n try {\n const filePath = path.join(this.dataDir, key);\n await fs.unlink(filePath);\n } catch {\n // console.error(error);\n }\n }\n}\n\nexport class DbCacheAdapter implements ICacheAdapter {\n constructor(\n private db: IDatabaseCacheAdapter,\n private agentId: UUID\n ) {}\n\n async get(key: string): Promise<string | undefined> {\n return this.db.getCache({ agentId: this.agentId, key });\n }\n\n async set(key: string, value: string): Promise<void> {\n await this.db.setCache({ agentId: this.agentId, key, value });\n }\n\n async delete(key: string): Promise<void> {\n await this.db.deleteCache({ agentId: this.agentId, key });\n }\n}\n\nexport class CacheManager<CacheAdapter extends ICacheAdapter = ICacheAdapter>\n implements ICacheManager\n{\n adapter: CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async get<T = unknown>(key: string): Promise<T | undefined> {\n const data = await this.adapter.get(key);\n\n if (data) {\n const { value, expires } = JSON.parse(data) as {\n value: T;\n expires: number;\n };\n\n if (!expires || expires > Date.now()) {\n return value;\n }\n\n this.adapter.delete(key).catch(() => {});\n }\n\n return undefined;\n }\n\n async set<T>(key: string, value: T, opts?: CacheOptions): Promise<void> {\n return this.adapter.set(\n key,\n JSON.stringify({ value, expires: opts?.expires ?? 0 })\n );\n }\n\n async delete(key: string): Promise<void> {\n return this.adapter.delete(key);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,YAAY;AACnB,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAE9B,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,KAAK,QAAQ,UAAU;AAGzC,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ,WAAW,eAAe,EAAE,CAAC;;;ACRhE,SAAS,OAAO,4BAA4B;AAUrC,IAAM,wBAAwB,CAAC,aAAuB,UAAkB;AAC3E,QAAM,OAA4B,YAAY,IAAI,CAAC,WAAmB;AAAA,IAClE,GAAG,OAAO;AAAA,EACd,CAAC;AAED,QAAM,iBAAoC,CAAC;AAC3C,MAAI,SAAS,KAAK;AAClB,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,UAAM,WAAW,IAAI;AACrB,UAAM,WAAW,KAAK,QAAQ;AAC9B,QAAI,SAAS,QAAQ;AACjB,YAAM,OAAO,CAAC,EAAE,KAAK,OAAO,IAAI,SAAS;AACzC,qBAAe,CAAC,IAAI,SAAS,OAAO,MAAM,CAAC,EAAE,CAAC;AAAA,IAClD,OAAO;AACH;AAAA,IACJ;AAEA,QAAI,SAAS,UAAU,GAAG;AACtB,WAAK,OAAO,UAAU,CAAC;AACvB;AAAA,IACJ;AAAA,EACJ;AAEA,QAAM,oBAAoB,eAAe,IAAI,CAAC,YAAY;AACtD,UAAM,eAAe,MAAM;AAAA,MAAK,EAAE,QAAQ,EAAE;AAAA,MAAG,MAC3C,qBAAqB,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC;AAAA,IAClD;AAEA,WAAO;AAAA,EAAK,QACP,IAAI,CAAC,YAAY;AACd,UAAI,gBAAgB,GAAG,QAAQ,IAAI,KAAK,QAAQ,QAAQ,IAAI,GAAG,QAAQ,QAAQ,SAAS,KAAK,QAAQ,QAAQ,MAAM,MAAM,EAAE;AAC3H,eAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,wBAAgB,cAAc;AAAA,UAC1B,SAAS,IAAI,CAAC;AAAA,UACd,aAAa,CAAC;AAAA,QAClB;AAAA,MACJ;AACA,aAAO;AAAA,IACX,CAAC,EACA,KAAK,IAAI,CAAC;AAAA,EACnB,CAAC;AAED,SAAO,kBAAkB,KAAK,IAAI;AACtC;AAOO,SAAS,kBAAkB,SAAmB;AACjD,SAAO,QACF,KAAK,MAAM,MAAM,KAAK,OAAO,CAAC,EAC9B,IAAI,CAAC,WAAmB,GAAG,OAAO,IAAI,EAAE,EACxC,KAAK,IAAI;AAClB;AAOO,SAAS,cAAc,SAAmB;AAC7C,SAAO,QACF,KAAK,MAAM,MAAM,KAAK,OAAO,CAAC,EAC9B,IAAI,CAAC,WAAmB,GAAG,OAAO,IAAI,KAAK,OAAO,WAAW,EAAE,EAC/D,KAAK,KAAK;AACnB;;;AC7EA,OAAO,gBAAgB;AAEvB,SAAS,SAAAA,QAAO,wBAAAC,6BAA4B;AAkCrC,IAAM,iBAAiB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACJ,MAIM;AACF,QAAM,cACF,OAAO,aAAa,aAAa,SAAS,EAAE,MAAM,CAAC,IAAI;AAE3D,MAAI,qBAAqB,cAAc;AACnC,UAAM,mBAAmB,WAAW,QAAQ,WAAW;AACvD,WAAO,iBAAiB,KAAK;AAAA,EACjC;AAGA,QAAM,MAAM,YAAY,QAAQ,YAAY,CAAC,UAAU;AACnD,UAAM,MAAM,MAAM,QAAQ,UAAU,EAAE;AACtC,WAAO,MAAM,GAAG,KAAK;AAAA,EACzB,CAAC;AACD,SAAO;AACX;AAqBO,IAAM,YAAY,CAAC,QAAgB,SAAiB;AACvD,SAAO,KAAK,SAAS,IAAI,GAAG,SAAS,SAAS,OAAO,MAAM,GAAG,IAAI;AAAA,IAAO;AAC7E;AAsBO,IAAM,oBAAoB,CAAC,UAAkB,WAAmB;AACnE,QAAM,eAAe,MAAM;AAAA,IAAK,EAAE,OAAO;AAAA,IAAG,MACxCA,sBAAqB,EAAE,cAAc,CAACD,MAAK,EAAE,CAAC;AAAA,EAClD;AACA,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,aAAS,OAAO,WAAW,SAAS,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC;AAAA,EAClE;AAEA,SAAO;AACX;;;AChHO,IAAM,iBAAN,MAAqB;AAAA,EAUxB,YACqBE,UAIb,CAAC,GACP;AALmB,kBAAAA;AAMjB,SAAK,mBAAmBA,QAAO,oBAAoB;AACnD,SAAK,eAAeA,QAAO,gBAAgB;AAC3C,SAAK,sBAAsBA,QAAO,uBAAuB;AAAA,EAC7D;AAAA,EAnBQ,QAA6B;AAAA,EAC7B,eAAe;AAAA,EACf;AAAA,EACA,oBAAoB;AAAA,EAEX;AAAA,EACA;AAAA,EACA;AAAA,EAcjB,MAAM,QAAW,WAAyC;AACtD,QAAI,KAAK,UAAU,QAAQ;AACvB,UAAI,KAAK,IAAI,KAAK,KAAK,mBAAmB,KAAK,KAAK,cAAc;AAC9D,aAAK,QAAQ;AACb,aAAK,oBAAoB;AAAA,MAC7B,OAAO;AACH,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC7C;AAAA,IACJ;AAEA,QAAI;AACA,YAAM,SAAS,MAAM,UAAU;AAE/B,UAAI,KAAK,UAAU,aAAa;AAC5B,aAAK;AACL,YAAI,KAAK,qBAAqB,KAAK,qBAAqB;AACpD,eAAK,MAAM;AAAA,QACf;AAAA,MACJ;AAEA,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,WAAK,cAAc;AACnB,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEQ,gBAAsB;AAC1B,SAAK;AACL,SAAK,kBAAkB,KAAK,IAAI;AAEhC,QACI,KAAK,UAAU,UACf,KAAK,gBAAgB,KAAK,kBAC5B;AACE,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEQ,QAAc;AAClB,SAAK,QAAQ;AACb,SAAK,eAAe;AACpB,SAAK,kBAAkB;AAAA,EAC3B;AAAA,EAEA,WAA4C;AACxC,WAAO,KAAK;AAAA,EAChB;AACJ;;;ACxEA,OAAO,UAA0B;AACjC,OAAO,YAAY;;;ACAnB,IAAM,mBAAmB;AAElB,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhC,IAAM,sBAAsB;AAAA;AAAA;AAAA;AAK5B,IAAM,6BAA6B,CACtC,SACuC;AACvC,QAAM,QAAQ,KACT,MAAM,IAAI,EAAE,CAAC,EACb,KAAK,EACL,QAAQ,KAAK,EAAE,EACf,YAAY,EACZ,QAAQ,KAAK,EAAE,EACf,MAAM,0BAA0B;AACrC,SAAO,QACA,MAAM,CAAC,EAAE,YAAY,IACtB,KAAK,SAAS,SAAS,IACvB,YACA,KAAK,SAAS,QAAQ,IACtB,WACA,KAAK,SAAS,MAAM,IACpB,SACA;AACV;AAEO,IAAM,gBAAgB;AAWtB,IAAM,uBAAuB,CAAC,SAAiB;AAClD,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,cAAc,CAAC,OAAO,KAAK,QAAQ,KAAK,KAAK,MAAM,QAAQ;AACjE,QAAM,WAAW,CAAC,MAAM,KAAK,SAAS,KAAK,KAAK,OAAO,SAAS;AAEhE,QAAM,iBAAiB,KAAK,KAAK,EAAE,YAAY;AAE/C,MAAI,YAAY,SAAS,cAAc,GAAG;AACtC,WAAO;AAAA,EACX,WAAW,SAAS,SAAS,cAAc,GAAG;AAC1C,WAAO;AAAA,EACX;AAEA,SAAO;AACX;AAEO,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmB1B,SAAS,uBAAuB,MAAc;AACjD,MAAI,WAAW;AAGf,QAAM,iBAAiB,KAAK,MAAM,gBAAgB;AAElD,MAAI,gBAAgB;AAChB,QAAI;AAEA,YAAM,iBAAiB,eAAe,CAAC,EAAE;AAAA,QACrC;AAAA,QACA;AAAA,MACJ;AACA,iBAAW,KAAK,MAAM,cAAc;AAAA,IACxC,SAAS,GAAG;AACR,cAAQ,MAAM,uBAAuB,CAAC;AACtC,cAAQ,MAAM,wBAAwB,eAAe,CAAC,CAAC;AAAA,IAC3D;AAAA,EACJ;AAGA,MAAI,CAAC,UAAU;AACX,UAAM,eAAe;AACrB,UAAM,aAAa,KAAK,MAAM,YAAY;AAE1C,QAAI,YAAY;AACZ,UAAI;AAEA,cAAM,iBAAiB,WAAW,CAAC,EAAE;AAAA,UACjC;AAAA,UACA;AAAA,QACJ;AACA,mBAAW,KAAK,MAAM,cAAc;AAAA,MACxC,SAAS,GAAG;AACR,gBAAQ,MAAM,uBAAuB,CAAC;AACtC,gBAAQ,MAAM,wBAAwB,WAAW,CAAC,CAAC;AAAA,MACvD;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,MAAM,QAAQ,QAAQ,GAAG;AACzB,WAAO;AAAA,EACX;AAEA,SAAO;AACX;AAYO,SAAS,wBACZ,MAC0B;AAC1B,MAAI,WAAW;AACf,QAAM,iBAAiB,KAAK,MAAM,gBAAgB;AAElD,MAAI,gBAAgB;AAChB,WAAO,kBAAkB,IAAI;AAC7B,UAAM,cAAc,oBAAoB,IAAI;AAC5C,QAAI;AACA,iBAAW,KAAK,MAAM,WAAW;AAAA,IACrC,SAAS,GAAG;AACR,cAAQ,MAAM,uBAAuB,CAAC;AACtC,cAAQ,MAAM,oBAAoB,IAAI;AACtC,aAAO,kBAAkB,IAAI;AAAA,IACjC;AAAA,EACJ,OAAO;AACH,UAAM,gBAAgB;AACtB,UAAM,cAAc,KAAK,MAAM,aAAa;AAE5C,QAAI,aAAa;AACb,aAAO,kBAAkB,IAAI;AAC7B,YAAM,cAAc,oBAAoB,IAAI;AAC5C,UAAI;AACA,mBAAW,KAAK,MAAM,WAAW;AAAA,MACrC,SAAS,GAAG;AACR,gBAAQ,MAAM,uBAAuB,CAAC;AACtC,gBAAQ,MAAM,oBAAoB,IAAI;AACtC,eAAO,kBAAkB,IAAI;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ;AAEA,MACI,OAAO,aAAa,YACpB,aAAa,QACb,CAAC,MAAM,QAAQ,QAAQ,GACzB;AACE,WAAO;AAAA,EACX,WAAW,OAAO,aAAa,YAAY,MAAM,QAAQ,QAAQ,GAAG;AAChE,WAAO,uBAAuB,IAAI;AAAA,EACtC,OAAO;AACH,WAAO;AAAA,EACX;AACJ;AAQO,SAAS,kBACZ,UACA,qBACqC;AACrC,aAAW,SAAS,KAAK;AACzB,QAAM,aAAoD,CAAC;AAE3D,MAAI,CAAC,uBAAuB,oBAAoB,WAAW,GAAG;AAE1D,UAAM,UAAU,SAAS,SAAS,6BAA6B;AAC/D,eAAW,SAAS,SAAS;AACzB,iBAAW,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC;AAAA,IAClC;AAAA,EACJ,OAAO;AAEH,wBAAoB,QAAQ,CAAC,cAAc;AACvC,YAAM,QAAQ,SAAS;AAAA,QACnB,IAAI,OAAO,IAAI,SAAS,wBAAwB,GAAG;AAAA,MACvD;AACA,UAAI,OAAO;AACP,mBAAW,SAAS,IAAI,MAAM,CAAC;AAAA,MACnC;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,SAAO,OAAO,QAAQ,UAAU,EAAE,SAAS,IAAI,aAAa;AAChE;AAiBO,IAAM,sBAAsB,CAAC,QAAgB;AAEhD,QAAM,IAAI,QAAQ,SAAS,GAAG,EAAE,QAAQ,SAAS,GAAG,EAAE,KAAK;AAG3D,QAAM,IAAI;AAAA,IACR;AAAA,IACA;AAAA,EACF;AAGA,QAAM,IAAI;AAAA,IACR;AAAA,IACA,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,OAAO,KAAK;AAAA,EACxC;AAGA,QAAM,IAAI,QAAQ,8CAA8C,UAAU;AAG1E,QAAM,IAAI,QAAQ,kBAAkB,GAAG;AACvC,SAAO;AACX;AAUO,SAAS,kBAAkB,UAA0B;AACxD,SAAO,SACF,QAAQ,eAAe,EAAE,EACzB,QAAQ,WAAW,EAAE,EACrB,QAAQ,iBAAiB,EAAE,EAC3B,KAAK;AACd;AAEO,IAAM,2BAA2B;AAEjC,IAAM,8BAA8B,CACvC,SAC8B;AAC9B,QAAM,UAA0B;AAAA,IAC5B,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,EACX;AAGA,QAAM,cAAc;AACpB,QAAM,iBAAiB;AACvB,QAAM,eAAe;AACrB,QAAM,eAAe;AAGrB,UAAQ,OAAO,YAAY,KAAK,IAAI;AACpC,UAAQ,UAAU,eAAe,KAAK,IAAI;AAC1C,UAAQ,QAAQ,aAAa,KAAK,IAAI;AACtC,UAAQ,QAAQ,aAAa,KAAK,IAAI;AAGtC,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,aAAW,QAAQ,OAAO;AACtB,UAAM,UAAU,KAAK,KAAK;AAC1B,QAAI,YAAY,SAAU,SAAQ,OAAO;AACzC,QAAI,YAAY,YAAa,SAAQ,UAAU;AAC/C,QAAI,YAAY,UAAW,SAAQ,QAAQ;AAC3C,QAAI,YAAY,UAAW,SAAQ,QAAQ;AAAA,EAC/C;AAEA,SAAO,EAAE,QAAQ;AACrB;AAKO,SAAS,2BACZ,MACA,WACM;AACN,MAAI,KAAK,UAAU,WAAW;AAC1B,WAAO;AAAA,EACX;AAGA,QAAM,kBAAkB,KAAK,YAAY,KAAK,YAAY,CAAC;AAC3D,MAAI,oBAAoB,IAAI;AACxB,UAAM,oBAAoB,KAAK,MAAM,GAAG,kBAAkB,CAAC,EAAE,KAAK;AAClE,QAAI,kBAAkB,SAAS,GAAG;AAC9B,aAAO;AAAA,IACX;AAAA,EACJ;AAGA,QAAM,iBAAiB,KAAK,YAAY,KAAK,YAAY,CAAC;AAC1D,MAAI,mBAAmB,IAAI;AACvB,UAAM,mBAAmB,KAAK,MAAM,GAAG,cAAc,EAAE,KAAK;AAC5D,QAAI,iBAAiB,SAAS,GAAG;AAC7B,aAAO,mBAAmB;AAAA,IAC9B;AAAA,EACJ;AAGA,QAAM,gBAAgB,KAAK,MAAM,GAAG,YAAY,CAAC,EAAE,KAAK;AACxD,SAAO,gBAAgB;AAC3B;;;ADnVA,IAAM,eAAuC;AAAA,EACzC,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,UAAU;AAAA,EACV,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AACX;AAEA,IAAM,MAAM,qBAAqB,SAAS,KAAK,eAAe,KAAK;AAEnE,IAAM,eAAe,MAAM;AACvB,MAAI,KAAK;AACL,WAAO;AAAA,EACX;AACA,SAAO,OAAO;AAAA,IACV,UAAU;AAAA,IACV,eAAe;AAAA,IACf,QAAQ;AAAA,EACZ,CAAC;AACL;AAEA,IAAM,eAAe,SAAS,KAAK,qBAAqB;AAExD,IAAM,UAAU;AAAA,EACZ,OAAO;AAAA,EACP;AAAA,EACA,OAAO;AAAA,IACH,UACI,WACA,QACI;AACJ,YAAM,CAAC,MAAM,GAAG,IAAI,IAAI;AAExB,UAAI,OAAO,SAAS,UAAU;AAC1B,cAAM,eAAe,KAAK;AAAA,UAAI,CAAC,QAC3B,OAAO,QAAQ,WAAW,MAAM,KAAK,UAAU,GAAG;AAAA,QACtD;AACA,cAAM,UAAU,aAAa,KAAK,GAAG;AACrC,eAAO,MAAM,MAAM,CAAC,MAAM,OAAO,CAAC;AAAA,MACtC,OAAO;AACH,cAAM,UAAU,CAAC;AACjB,cAAM,eAAe,CAAC,MAAM,GAAG,IAAI,EAAE;AAAA,UAAI,CAAC,QACtC,OAAO,QAAQ,WAAW,MAAM;AAAA,QACpC;AACA,cAAM,UAAU,aACX,OAAO,CAAC,SAAS,OAAO,SAAS,QAAQ,EACzC,KAAK,GAAG;AACb,cAAM,YAAY,aAAa;AAAA,UAC3B,CAAC,SAAS,OAAO,SAAS;AAAA,QAC9B;AAEA,eAAO,OAAO,SAAS,GAAG,SAAS;AAEnC,eAAO,MAAM,MAAM,CAAC,SAAS,OAAO,CAAC;AAAA,MACzC;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,IAAM,cAAc,KAAK,SAAS,aAAa,CAAC;AAEvD,IAAO,iBAAQ;;;AEpDR,IAAe,kBAAf,MAAqE;AAAA;AAAA;AAAA;AAAA,EAIxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUV,YAAY,sBAIT;AACC,SAAK,iBAAiB,IAAI,eAAe,oBAAoB;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyYA,MAAgB,mBACZ,WACA,SACU;AACV,QAAI;AACA,aAAO,MAAM,KAAK,eAAe,QAAQ,SAAS;AAAA,IACtD,SAAS,OAAO;AACZ,kBAAY,MAAM,4BAA4B,OAAO,KAAK;AAAA,QACtD,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC5D,OAAO,KAAK,eAAe,SAAS;AAAA,MACxC,CAAC;AACD,YAAM;AAAA,IACV;AAAA,EACJ;AACJ;;;AC3cA,SAAS,cAAc;AACvB,OAAO,QAAQ;AACf,OAAOC,WAAU;AAGjB,eAAY,KAAK,+BAA+B;AAAA,EAC5C,sBAAsB,QAAQ,IAAI;AAAA,EAClC,sBAAsB,QAAQ,IAAI;AAAA,EAClC,wBACI,QAAQ,IAAI,0BAA0B;AAC9C,CAAC;AAGD,eAAY,KAAK,+BAA+B;AAAA,EAC5C,gBAAgB,QAAQ,IAAI;AAAA,EAC5B,MAAM,QAAQ;AAAA,EACd,eAAe,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,cAAc,CAAC;AAAA,EACxE,KAAK,QAAQ,IAAI;AACrB,CAAC;AAUD,IAAI,sBAAgC,CAAC;AAMrC,IAAM,YAAY,MAAe;AAC7B,SACI,OAAO,WAAW,eAAe,OAAO,OAAO,aAAa;AAEpE;AAQO,SAAS,mBAAmB,WAAW,QAAQ,IAAI,GAAG;AACzD,MAAI,UAAU,EAAG,QAAO;AAExB,MAAI,aAAa;AAGjB,SAAO,eAAeC,MAAK,MAAM,UAAU,EAAE,MAAM;AAC/C,UAAM,UAAUA,MAAK,KAAK,YAAY,MAAM;AAE5C,QAAI,GAAG,WAAW,OAAO,GAAG;AACxB,aAAO;AAAA,IACX;AAGA,iBAAaA,MAAK,QAAQ,UAAU;AAAA,EACxC;AAGA,QAAM,cAAcA,MAAK,KAAKA,MAAK,MAAM,UAAU,EAAE,MAAM,MAAM;AACjE,SAAO,GAAG,WAAW,WAAW,IAAI,cAAc;AACtD;AAMO,SAAS,kBAAkBC,WAAoB;AAClD,wBAAsB,EAAE,GAAGA,UAAS;AACxC;AAQO,SAAS,gBAA0B;AAEtC,MAAI,UAAU,GAAG;AACb,WAAO;AAAA,EACX;AAGA,QAAM,UAAU,mBAAmB;AAGnC,QAAM,SAAS,OAAO,UAAU,EAAE,MAAM,QAAQ,IAAI,CAAC,CAAC;AAEtD,MAAI,CAAC,OAAO,OAAO;AACf,mBAAY,IAAI,0BAA0B,OAAO,EAAE;AAAA,EACvD;AAGA,QAAM,qBAAqB,wBAAwB,QAAQ,GAAe;AAG1E,SAAO,QAAQ,kBAAkB,EAAE,QAAQ,CAAC,CAAC,WAAWA,SAAQ,MAAM;AAClE,YAAQ,IAAI,gBAAgB,SAAS,EAAE,IAAI,KAAK,UAAUA,SAAQ;AAAA,EACtE,CAAC;AAED,SAAO,QAAQ;AACnB;AAQO,SAAS,eACZ,KACA,cACkB;AAClB,MAAI,UAAU,GAAG;AACb,WAAO,oBAAoB,GAAG,KAAK;AAAA,EACvC;AACA,SAAO,QAAQ,IAAI,GAAG,KAAK;AAC/B;AAOO,SAAS,eAAe,KAAsB;AACjD,MAAI,UAAU,GAAG;AACb,WAAO,OAAO;AAAA,EAClB;AACA,SAAO,OAAO,QAAQ;AAC1B;AAGO,IAAM,WAAW,UAAU,IAAI,sBAAsB,cAAc;AAE1E,eAAY,KAAK,oBAAoB;AAAA,EACjC,sBAAsB,SAAS;AAAA,EAC/B,2BAA2B,OAAO,SAAS;AAAA,EAC3C,sBAAsB,SAAS;AAAA,EAC/B,2BAA2B,OAAO,SAAS;AAAA,EAC3C,wBACI,SAAS,0BAA0B;AAC3C,CAAC;AAED,IAAO,mBAAQ;AAGf,SAAS,wBAAwB,KAAmC;AAChE,QAAM,aAAiC,CAAC;AAExC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC5C,QAAI,CAAC,MAAO;AAEZ,UAAM,CAAC,WAAW,GAAG,IAAI,IAAI,IAAI,MAAM,GAAG;AAC1C,QAAI,CAAC,aAAa,KAAK,WAAW,EAAG;AAErC,UAAM,aAAa,KAAK,KAAK,GAAG;AAChC,eAAW,SAAS,IAAI,WAAW,SAAS,KAAK,CAAC;AAClD,eAAW,SAAS,EAAE,UAAU,IAAI;AAAA,EACxC;AAEA,SAAO;AACX;;;ACrEO,IAAK,aAAL,kBAAKC,gBAAL;AACH,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,iBAAc;AAHN,SAAAA;AAAA,GAAA;AAgCL,IAAK,aAAL,kBAAKC,gBAAL;AACH,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,WAAQ;AALA,SAAAA;AAAA,GAAA;AAgHL,IAAK,oBAAL,kBAAKC,uBAAL;AACH,EAAAA,mBAAA,YAAS;AACT,EAAAA,mBAAA,eAAY;AACZ,EAAAA,mBAAA,eAAY;AACZ,EAAAA,mBAAA,UAAO;AACP,EAAAA,mBAAA,UAAO;AACP,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,cAAW;AACX,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,cAAW;AACX,EAAAA,mBAAA,YAAS;AACT,EAAAA,mBAAA,aAAU;AACV,EAAAA,mBAAA,mBAAgB;AAChB,EAAAA,mBAAA,aAAU;AACV,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,YAAS;AACT,EAAAA,mBAAA,aAAU;AACV,EAAAA,mBAAA,eAAY;AACZ,EAAAA,mBAAA,SAAM;AACN,EAAAA,mBAAA,aAAU;AACV,EAAAA,mBAAA,iBAAc;AACd,EAAAA,mBAAA,eAAY;AACZ,EAAAA,mBAAA,aAAU;AACV,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,YAAS;AACT,EAAAA,mBAAA,YAAS;AACT,EAAAA,mBAAA,iBAAc;AACd,EAAAA,mBAAA,oBAAiB;AACjB,EAAAA,mBAAA,cAAW;AACX,EAAAA,mBAAA,YAAS;AACT,EAAAA,mBAAA,cAAW;AACX,EAAAA,mBAAA,YAAS;AACT,EAAAA,mBAAA,aAAU;AACV,EAAAA,mBAAA,WAAQ;AACR,EAAAA,mBAAA,cAAW;AACX,EAAAA,mBAAA,YAAS;AAnCD,SAAAA;AAAA,GAAA;AAs+BL,IAAK,aAAL,kBAAKC,gBAAL;AACH,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,gBAAa;AAHL,SAAAA;AAAA,GAAA;AAYL,IAAe,UAAf,MAAe,SAAQ;AAAA,EAC1B,OAAe,WAA2B;AAAA,EAE1C,WAAW,cAA2B;AAClC,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACtE;AAAA,EAEA,OAAc,cAAoC;AAC9C,QAAI,CAAC,SAAQ,UAAU;AACnB,eAAQ,WAAW,IAAK,KAAa;AAAA,IACzC;AACA,WAAO,SAAQ;AAAA,EACnB;AAAA,EAEA,IAAI,cAA2B;AAC3B,WAAQ,KAAK,YAA+B;AAAA,EAChD;AAIJ;AA0LO,IAAK,kBAAL,kBAAKC,qBAAL;AACH,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,kBAAe;AACf,EAAAA,iBAAA,sBAAmB;AAHX,SAAAA;AAAA,GAAA;AAML,IAAK,eAAL,kBAAKC,kBAAL;AACH,EAAAA,cAAA,UAAO;AACP,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AAHA,SAAAA;AAAA,GAAA;AA+CL,IAAK,cAAL,kBAAKC,iBAAL;AACH,EAAAA,aAAA,uBAAoB;AACpB,EAAAA,aAAA,mBAAgB;AAChB,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,qBAAkB;AAClB,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,uBAAoB;AACpB,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,wBAAqB;AACrB,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,qBAAkB;AAClB,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,sBAAmB;AACnB,EAAAA,aAAA,wBAAqB;AAlBb,SAAAA;AAAA,GAAA;AAqBL,IAAK,eAAL,kBAAKC,kBAAL;AACH,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,UAAO;AAHC,SAAAA;AAAA,GAAA;AA4CL,IAAK,gBAAL,kBAAKC,mBAAL;AACH,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,cAAW;AAFH,SAAAA;AAAA,GAAA;AAKL,IAAK,wBAAL,kBAAKC,2BAAL;AACH,EAAAA,uBAAA,YAAS;AACT,EAAAA,uBAAA,cAAW;AACX,EAAAA,uBAAA,WAAQ;AAHA,SAAAA;AAAA,GAAA;AAML,IAAK,qBAAL,kBAAKC,wBAAL;AACH,EAAAA,oBAAA,YAAS;AACT,EAAAA,oBAAA,eAAY;AAFJ,SAAAA;AAAA,GAAA;AAIL,IAAK,iBAAL,kBAAKC,oBAAL;AACH,EAAAA,gBAAA,YAAS;AACT,EAAAA,gBAAA,aAAU;AAFF,SAAAA;AAAA,GAAA;AAKL,IAAK,iBAAL,kBAAKC,oBAAL;AACH,EAAAA,gBAAA,eAAY;AADJ,SAAAA;AAAA,GAAA;;;ACljDL,IAAM,SAAiB;AAAA,EAC1B,sBAAyB,GAAG;AAAA,IACxB,UAAU,iBAAS,kBAAkB;AAAA,IACrC,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,QACrC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,uBAAuB;AAAA,QACtC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,QACrC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MACI,iBAAS,0BAA0B;AAAA,QACvC,YAAY;AAAA,MAChB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,MACzC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,4BAA4B,GAAG;AAAA,IAC3B,UAAU,iBAAS;AAAA,IACnB,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,mBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,mBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,mBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,4BAA4B,GAAG;AAAA,IAC3B,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,yBAAyB;AAAA,QACtC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,0BACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MAEA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,yBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,oCAAgC,GAAG;AAAA,IAC/B,UAAU;AAAA;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,kBAAuB,GAAG;AAAA,IACtB,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,oBAAoB;AAAA,QACnC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,qBAAqB;AAAA,QACpC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,oBAAoB;AAAA,QACnC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MAAM,iBAAS,wBAAwB;AAAA;AAAA,MAC3C;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,kBAAuB,GAAG;AAAA,IACtB,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,oBAAoB;AAAA,QACnC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,qBAAqB;AAAA,QACpC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,oBAAoB;AAAA,QACjC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MAAM,iBAAS,wBAAwB;AAAA,MAC3C;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,+BAA6B,GAAG;AAAA,IAC5B,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MAAM;AAAA,MACV;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,0BAA2B,GAAG;AAAA,IAC1B,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MAAM;AAAA,MACV;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,+BAA6B,GAAG;AAAA,IAC5B,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,MAAM,CAAC,cAAc,YAAY;AAAA,QACjC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM;AAAA;AAAA,QACN,MAAM,CAAC,cAAc,YAAY;AAAA,QACjC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA;AAAA,QACN,MAAM,CAAC,cAAc,YAAY;AAAA,QACjC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,0BAA2B,GAAG;AAAA,IAC1B,UAAU,iBAAS,uBAAuB;AAAA,IAC1C,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,wBAAwB,iBAAS,kBAAkB;AAAA,QAClE,MAAM,CAAC,cAAc,YAAY;AAAA,QACjC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,yBAAyB,iBAAS,kBAAkB;AAAA,QACnE,MAAM,CAAC,cAAc,YAAY;AAAA,QACjC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,wBAAwB,iBAAS,kBAAkB;AAAA,QAClE,MAAM,CAAC,cAAc,YAAY;AAAA,QACjC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,sBAAyB,GAAG;AAAA,IACxB,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,sBACT,iBAAS,gBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,uBACT,iBAAS,gBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,sBACT,iBAAS,gBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MACI,iBAAS,0BACT,iBAAS,gBACT;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,wBAA0B,GAAG;AAAA,IACzB,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,uBACT,iBAAS,iBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,wBACT,iBAAS,iBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,uBACT,iBAAS,iBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,wBAA0B,GAAG;AAAA,IACzB,UAAU;AAAA;AAAA;AAAA,IAGV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,uBACT,iBAAS,iBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,wBACT,iBAAS,iBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MAEA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,uBACT,iBAAS,iBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MAEA,4BAAqB,GAAG;AAAA,QACpB,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,8BAA6B,GAAG;AAAA,IAC5B,UAAU;AAAA;AAAA;AAAA,IAGV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,0BACT,iBAAS,oBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,2BACT,iBAAS,oBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,0BACT,iBAAS,oBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,sBAAyB,GAAG;AAAA,IACxB,UAAU,iBAAS,qBAAqB;AAAA,IACxC,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,sBACT,iBAAS,gBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,uBACT,iBAAS,gBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MAEA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,sBACT,iBAAS,gBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MAEA,4BAAqB,GAAG;AAAA,QACpB,MAAM,iBAAS,0BAA0B;AAAA,QACzC,YAAY;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,wBAA0B,GAAG;AAAA,IACzB,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,uBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,wBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,uBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,uBAAuB;AAAA,QACtC,OAAO;AAAA,MACX;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MAAM;AAAA,QACN,YAAY;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,4BAA4B,GAAG;AAAA,IAC3B,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,yBAAyB;AAAA,QACxC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,0BAA0B;AAAA,QACzC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,yBAAyB;AAAA,QACxC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,kBAAsB,GAAG;AAAA,IACrB,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG,EAAE,MAAM,oBAAoB,OAAO,GAAG;AAAA,IAC9D;AAAA,EACJ;AAAA,EACA,wBAA0B,GAAG;AAAA,IACzB,UAAU,iBAAS;AAAA,IACnB,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,iBACT,iBAAS,uBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,iBACT,iBAAS,wBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,iBACT,iBAAS,uBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,aAAa;AAAA,MACjB;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MAAM,iBAAS,2BAA2B;AAAA,QAC1C,YAAY;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,gCAA8B,GAAG;AAAA,IAC7B,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,4BAA4B,GAAG;AAAA,IAC3B,UACI,iBAAS,qBACT;AAAA,IACJ,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,yBACT,iBAAS,mBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,0BACT,iBAAS,mBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,yBACT,iBAAS,mBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MAAM,iBAAS,6BAA6B;AAAA,MAChD;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,wBAA0B,GAAG;AAAA,IACzB,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,uBAAuB;AAAA,QACtC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,wBAAwB;AAAA,QACvC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,uBAAuB;AAAA,QACtC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,8BAA6B,GAAG;AAAA,IAC5B,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,0BACT,iBAAS,oBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,2BACT,iBAAS,oBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,0BACT,iBAAS,oBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,0BAA0B;AAAA,MAC7C;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,sBAAyB,GAAG;AAAA,IACxB,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,QACrC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,uBAAuB;AAAA,QACtC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,QACrC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,MACzC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,sBAAyB,GAAG;AAAA,IACxB,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,QACrC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,uBAAuB;AAAA,QACtC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,QACrC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,gCAA8B,GAAG;AAAA,IAC7B,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,2BACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,4BACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,2BACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,2BACT;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,sCAAiC,GAAG;AAAA,IAChC,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,8BACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,+BACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,8BACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,0BAA2B,GAAG;AAAA,IAC1B,UAAU,iBAAS,wBAAwB;AAAA,IAC3C,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,wBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,yBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,wBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,wBAAwB;AAAA,MACzC;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,sBAAyB,GAAG;AAAA,IACxB,UAAU;AAAA,IACV,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,QACrC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,uBAAuB;AAAA,QACtC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,QACrC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,0BAA2B,GAAG;AAAA,IAC1B,UAAU,iBAAS,oBAAoB;AAAA,IACvC,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,wBAAwB;AAAA,QACvC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,yBAAyB;AAAA,QACxC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,wBAAwB;AAAA,QACvC,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,wBAA0B,GAAG;AAAA,IACzB,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,uBAAuB;AAAA,QACtC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,MAAM,CAAC;AAAA,MACX;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MAAM,iBAAS,wBAAwB;AAAA,QACvC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,MAAM,CAAC;AAAA,MACX;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,uBAAuB;AAAA,QACtC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,MAAM,CAAC;AAAA,MACX;AAAA,MACA,4BAAqB,GAAG;AAAA,QACpB,MACI,iBAAS,2BACT;AAAA,MACR;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,uBAAuB;AAAA,MAC1C;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,oBAAwB,GAAG;AAAA,IACvB,UAAU,iBAAS,iBAAiB;AAAA,IACpC,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,qBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,sBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,qBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,2BAA2B,GAAG;AAAA,IAC1B,UAAU,iBAAS,iBAAiB;AAAA,IACpC,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,yBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,0BACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,yBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,sBAAyB,GAAG;AAAA,IACxB,UAAU,iBAAS,kBAAkB;AAAA,IACrC,OAAO;AAAA,MACH,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,sBACT,iBAAS,gBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,sBAAkB,GAAG;AAAA,QACjB,MACI,iBAAS,uBACT,iBAAS,gBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MACI,iBAAS,sBACT,iBAAS,gBACT;AAAA,QACJ,MAAM,CAAC;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACjB;AAAA,MACA,oBAAiB,GAAG;AAAA,QAChB,MAAM,iBAAS,sBAAsB;AAAA,MACzC;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,SAAS,iBACZ,UACA,MACyB;AACzB,SAAO,OAAO,QAAQ,GAAG,MAAM,IAAI;AACvC;AAEO,SAAS,sBACZ,UAC8B;AAC9B,SAAO,OAAO,QAAQ,GAAG,yBAAsB;AAGnD;AAEO,SAAS,0BACZ,UACkC;AAClC,SAAO,OAAO,QAAQ,GAAG,iCAA0B;AAGvD;AAEO,SAAS,YAAY,UAA6B;AACrD,SAAO,OAAO,QAAQ,EAAE;AAC5B;;;ACluCA,OAAOC,WAAU;AACjB,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,eAAe,sBAAsB;AAG9C,IAAM,6BAAN,MAAM,4BAA2B;AAAA,EAC7B,OAAe;AAAA,EACP,QAA8B;AAAA,EAC9B,cAAoC;AAAA,EACpC,qBAAqB;AAAA,EAErB,cAAc;AAAA,EAAC;AAAA,EAEvB,OAAc,cAA0C;AACpD,QAAI,CAAC,4BAA2B,UAAU;AACtC,kCAA2B,WACvB,IAAI,4BAA2B;AAAA,IACvC;AACA,WAAO,4BAA2B;AAAA,EACtC;AAAA,EAEA,MAAc,cAA+B;AACzC,UAAMC,cAAaC,eAAc,YAAY,GAAG;AAChD,UAAMC,aAAYC,MAAK,QAAQH,WAAU;AACzC,UAAM,WAAWG,MAAK,QAAQD,YAAW,IAAI;AAC7C,WAAO,SAAS,SAAS,SAAS,IAC5B,SAAS,MAAM,SAAS,EAAE,CAAC,IAAI,YAC/BC,MAAK,QAAQD,YAAW,IAAI;AAAA,EACtC;AAAA,EAEA,MAAa,aAA4B;AAErC,QAAI,KAAK,OAAO;AACZ;AAAA,IACJ;AAGA,QAAI,KAAK,aAAa;AAClB,aAAO,KAAK;AAAA,IAChB;AAGA,QAAI,KAAK,oBAAoB;AAEzB,aAAO,KAAK,oBAAoB;AAC5B,cAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AAAA,MAC3D;AACA;AAAA,IACJ;AAEA,SAAK,qBAAqB;AAE1B,QAAI;AACA,WAAK,cAAc,KAAK,gBAAgB;AACxC,YAAM,KAAK;AAAA,IACf,UAAE;AACE,WAAK,qBAAqB;AAC1B,WAAK,cAAc;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,MAAc,kBAAiC;AAC3C,UAAM,SACF,OAAO,YAAY,eACnB,QAAQ,YAAY,QACpB,QAAQ,SAAS,QAAQ;AAE7B,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC9D;AAEA,QAAI;AACA,YAAME,MAAK,MAAM,OAAO,IAAI;AAC5B,YAAM,WAAY,MAAM,KAAK,YAAY,IAAK;AAE9C,UAAI,CAACA,IAAG,WAAW,QAAQ,GAAG;AAC1B,QAAAA,IAAG,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,MAC9C;AAEA,qBAAY,MAAM,qCAAqC;AAEvD,WAAK,QAAQ,MAAM,cAAc,KAAK;AAAA,QAClC;AAAA,QACA,OAAO,eAAe;AAAA,QACtB,WAAW;AAAA,MACf,CAAC;AAED,qBAAY,MAAM,oCAAoC;AAAA,IAC1D,SAAS,OAAO;AACZ,qBAAY,MAAM,mCAAmC,KAAK;AAC1D,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAa,kBAAkB,OAAkC;AAC7D,QAAI,CAAC,KAAK,OAAO;AACb,YAAM,KAAK,WAAW;AAAA,IAC1B;AAEA,QAAI,CAAC,KAAK,OAAO;AACb,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAChD;AAEA,QAAI;AAEA,YAAM,YAAY,MAAM,KAAK,MAAM,WAAW,KAAK;AAYnD,aAAO,KAAK,iBAAiB,SAAS;AAAA,IAC1C,SAAS,OAAO;AACZ,qBAAY,MAAM,gCAAgC,KAAK;AACvD,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEQ,iBAAiB,WAA+B;AACpD,QAAI;AAEJ,QACI,YAAY,OAAO,SAAS,KAC5B,UAAU,gBAAgB,cAC5B;AACE,uBAAiB,MAAM,KAAK,SAAS;AAAA,IACzC,WACI,MAAM,QAAQ,SAAS,KACvB,YAAY,OAAO,UAAU,CAAC,CAAC,KAC/B,UAAU,CAAC,EAAE,gBAAgB,cAC/B;AACE,uBAAiB,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,IAC5C,WAAW,MAAM,QAAQ,SAAS,GAAG;AACjC,uBAAiB;AAAA,IACrB,OAAO;AACH,YAAM,IAAI,MAAM,gCAAgC,OAAO,SAAS,EAAE;AAAA,IACtE;AAEA,qBAAiB,eAAe,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;AAEpD,QAAI,CAAC,MAAM,QAAQ,cAAc,KAAK,eAAe,CAAC,MAAM,QAAW;AACnE,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,eAAe,WAAW,KAAK;AAC/B,qBAAY;AAAA,QACR,mCAAmC,eAAe,MAAM;AAAA,MAC5D;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAa,QAAuB;AAChC,QAAI,KAAK,OAAO;AAEZ,WAAK,QAAQ;AAAA,IACjB;AACA,SAAK,cAAc;AACnB,SAAK,qBAAqB;AAAA,EAC9B;AAAA;AAAA,EAGA,OAAc,gBAAsB;AAChC,QAAI,4BAA2B,UAAU;AACrC,kCAA2B,SAAS,MAAM;AAC1C,kCAA2B,WAAW;AAAA,IAC1C;AAAA,EACJ;AACJ;AAEA,IAAO,gCAAQ;;;ACnKR,IAAM,oBAAoB;AAAA,EAC7B,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,KAAK;AACT;AAWO,IAAM,qBAAqB,OAAwB;AAAA,EACtD,YACI,iBAAS,sBAAsB,YAAY,MAAM,SAC3C,+CAAkD,EAAE,aACpD,iBAAS,sBAAsB,YAAY,MAAM,SAC/C,+CAAkD,EAAE,aACpD,iBAAS,uBAAuB,YAAY,MAAM,SAChD,iDAAmD,EAC9C,aACL,iBAAS,uBAAuB,YAAY,MAAM,SAChD,iDAAmD,EAC9C,aACL;AAAA;AAAA,EAChB,OACI,iBAAS,sBAAsB,YAAY,MAAM,SAC3C,+CAAkD,EAAE,OACpD,iBAAS,sBAAsB,YAAY,MAAM,SAC/C,+CAAkD,EAAE,OACpD,iBAAS,uBAAuB,YAAY,MAAM,SAChD,iDAAmD,EAAE,OACrD,iBAAS,uBAAuB,YAAY,MAAM,SAChD,iDAAmD,EAAE,OACrD;AAAA,EAChB,UACI,iBAAS,sBAAsB,YAAY,MAAM,SAC3C,WACA,iBAAS,sBAAsB,YAAY,MAAM,SAC/C,WACA,iBAAS,uBAAuB,YAAY,MAAM,SAChD,YACA,iBAAS,uBAAuB,YAAY,MAAM,SAChD,YACA;AACpB;AAEA,eAAe,mBACX,OACAC,UACiB;AAEjB,QAAM,eAAeA,SAAQ,SAAS,SAAS,KAAK,IAC9CA,SAAQ,WACR,GAAGA,SAAQ,QAAQ,GAAGA,SAAQ,WAAW,QAAQ,EAAE;AAGzD,QAAM,UAAU,GAAG,YAAY;AAE/B,QAAM,iBAAiB;AAAA,IACnB,QAAQ;AAAA,IACR,SAAS;AAAA,MACL,gBAAgB;AAAA,MAChB,GAAIA,SAAQ,SACN;AAAA,QACI,eAAe,UAAUA,SAAQ,MAAM;AAAA,MAC3C,IACA,CAAC;AAAA,IACX;AAAA,IACA,MAAM,KAAK,UAAU;AAAA,MACjB;AAAA,MACA,OAAOA,SAAQ;AAAA,MACf,YACIA,SAAQ,cACRA,SAAQ,UACR,mBAAmB,EAAE;AAAA;AAAA,IAC7B,CAAC;AAAA,EACL;AAEA,MAAI;AACA,UAAM,WAAW,MAAM,MAAM,SAAS,cAAc;AAEpD,QAAI,CAAC,SAAS,IAAI;AACd,qBAAY,MAAM,iBAAiB,MAAM,SAAS,KAAK,CAAC;AACxD,YAAM,IAAI;AAAA,QACN,wBAAwB,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,MAClE;AAAA,IACJ;AAMA,UAAM,OAA0B,MAAM,SAAS,KAAK;AACpD,WAAO,MAAM,OAAO,CAAC,EAAE;AAAA,EAC3B,SAAS,GAAG;AACR,mBAAY,MAAM,uBAAuB,CAAC;AAC1C,UAAM;AAAA,EACV;AACJ;AAEO,SAAS,iBAAiB,SAA4C;AACzE,QAAM,SACF,OAAO,YAAY,eACnB,QAAQ,YAAY,QACpB,QAAQ,SAAS,QAAQ;AAM7B,QAAM,UACF,UACA,QAAQ,UAAU,2CAClB,QAAQ,UAAU,6CAClB,QAAQ,UAAU,6CAClB,CAAC,iBAAS;AAEd,SAAO,UAAU,UAAU;AAC/B;AAEO,SAAS,yBAAmC;AAC/C,MAAI,qBAAqB;AAEzB,MAAI,iBAAS,sBAAsB,YAAY,MAAM,QAAQ;AACzD,yBAAqB;AAAA;AAAA,IAErB,EAAE;AAAA,EACN,WAAW,iBAAS,sBAAsB,YAAY,MAAM,QAAQ;AAChE,yBAAqB;AAAA;AAAA,IAErB,EAAE;AAAA,EACN,WAAW,iBAAS,uBAAuB,YAAY,MAAM,QAAQ;AACjE,yBAAqB;AAAA;AAAA,IAErB,EAAE;AAAA,EACN,WAAW,iBAAS,uBAAuB,YAAY,MAAM,QAAQ;AACjE,yBAAqB;AAAA;AAAA,IAErB,EAAE;AAAA,EACN;AAEA,SAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC;AAC3C;AAiBA,eAAsB,MAAM,SAAwB,OAAe;AAC/D,iBAAY,MAAM,sBAAsB;AAAA,IACpC,eAAe,QAAQ,UAAU;AAAA,IACjC,WAAW,QAAQ,IAAI;AAAA,IACvB,OAAO,OAAO,MAAM,GAAG,EAAE,IAAI;AAAA,IAC7B,WAAW,OAAO;AAAA,IAClB,aAAa,OAAO;AAAA,IACpB,UAAU,OAAO,UAAU;AAAA,IAC3B,SAAS,CAAC;AAAA,EACd,CAAC;AAGD,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAClE,mBAAY,KAAK,4BAA4B;AAAA,MACzC;AAAA,MACA,MAAM,OAAO;AAAA,MACb,QAAQ,OAAO;AAAA,IACnB,CAAC;AACD,WAAO,CAAC;AAAA,EACZ;AAGA,QAAM,kBAAkB,MAAM,wBAAwB,SAAS,KAAK;AACpE,MAAI,gBAAiB,QAAO;AAE5B,QAAMC,UAAS,mBAAmB;AAClC,QAAM,SAAS,OAAO,YAAY,eAAe,QAAQ,UAAU;AAGnE,MAAIA,QAAO,aAAa,kBAAkB,QAAQ;AAC9C,WAAO,MAAM,mBAAmB,OAAO;AAAA,MACnC,OAAOA,QAAO;AAAA,MACd,UAAU,iBAAS,kBAAkB;AAAA,MACrC,QAAQ,iBAAS;AAAA,MACjB,YAAYA,QAAO;AAAA,IACvB,CAAC;AAAA,EACL;AAEA,MAAIA,QAAO,aAAa,kBAAkB,QAAQ;AAC9C,WAAO,MAAM,mBAAmB,OAAO;AAAA,MACnC,OAAOA,QAAO;AAAA,MACd,UACI,QAAQ,UAAU,yBAClB,iCAAoC;AAAA,MACxC,UAAU;AAAA,MACV,YAAYA,QAAO;AAAA,IACvB,CAAC;AAAA,EACL;AAEA,MAAIA,QAAO,YAAY,kBAAkB,SAAS;AAC9C,WAAO,MAAM,mBAAmB,OAAO;AAAA,MACnC,OAAOA,QAAO;AAAA,MACd,UACI,QAAQ,UAAU,yBAClB,mCAAqC,KACrC,iBAAS,4BACT,iBAAS,6BACT,iBAAS;AAAA,MACb,QAAQ,iBAAS,mBAAmB,QAAQ;AAAA,MAC5C,YAAYA,QAAO;AAAA,IACvB,CAAC;AAAA,EACL;AAEA,MAAIA,QAAO,aAAa,kBAAkB,SAAS;AAC/C,WAAO,MAAM,mBAAmB,OAAO;AAAA,MACnC,OAAOA,QAAO;AAAA,MACd,UAAU,mCAAqC;AAAA,MAC/C,QAAQ,QAAQ;AAAA,MAChB,YAAYA,QAAO;AAAA,IACvB,CAAC;AAAA,EACL;AAGA,MAAI,QAAQ;AACR,QAAI;AACA,aAAO,MAAM,kBAAkB,KAAK;AAAA,IACxC,SAAS,OAAO;AACZ,qBAAY;AAAA,QACR;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAGA,SAAO,MAAM,mBAAmB,OAAO;AAAA,IACnC,OAAOA,QAAO;AAAA,IACd,UACI,QAAQ,UAAU,yBAClB,YAAY,QAAQ,UAAU,aAAa;AAAA,IAC/C,QAAQ,QAAQ;AAAA,IAChB,YAAYA,QAAO;AAAA,EACvB,CAAC;AAED,iBAAe,kBAAkBC,QAAkC;AAC/D,mBAAY,MAAM,2CAA2C;AAE7D,QAAI;AACA,YAAM,mBAAmB,8BAA2B,YAAY;AAChE,aAAO,MAAM,iBAAiB,kBAAkBA,MAAK;AAAA,IACzD,SAAS,OAAO;AACZ,qBAAY,MAAM,2BAA2B,KAAK;AAClD,YAAM;AAAA,IACV;AAAA,EACJ;AAEA,iBAAe,wBACXC,UACAD,QACF;AACE,QAAI,CAACA,QAAO;AACR,qBAAY,IAAI,2CAA2C;AAC3D,aAAO;AAAA,IACX;AAEA,UAAM,yBACF,MAAMC,SAAQ,eAAe,oBAAoBD,MAAK;AAC1D,QAAI,uBAAuB,SAAS,GAAG;AACnC,aAAO,uBAAuB,CAAC,EAAE;AAAA,IACrC;AACA,WAAO;AAAA,EACX;AACJ;;;AC/SA,SAAS,SAAAE,QAAO,wBAAAC,6BAA4B;AAOrC,IAAM,qBACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcA;AAOG,SAAS,qBAAqB,YAAyB;AAC1D,SAAO,WACF,IAAI,CAAC,cAAyB,IAAI,UAAU,IAAI,GAAG,EACnD,KAAK,KAAK;AACnB;AAOO,SAAS,iBAAiB,YAAyB;AACtD,SAAO,WACF;AAAA,IACG,CAAC,cACG,IAAI,UAAU,IAAI,KAAK,UAAU,WAAW;AAAA,EACpD,EACC,KAAK,KAAK;AACnB;AAOO,SAAS,wBAAwB,YAAyB;AAC7D,SAAO,WACF,IAAI,CAAC,cAAc;AAChB,WAAO,UAAU,SACZ,IAAI,CAAC,YAAY;AACd,YAAM,eAAe,MAAM;AAAA,QAAK,EAAE,QAAQ,EAAE;AAAA,QAAG,MAC3CC,sBAAqB,EAAE,cAAc,CAACC,MAAK,EAAE,CAAC;AAAA,MAClD;AAEA,UAAI,mBAAmB,QAAQ;AAC/B,UAAI,mBAAmB,QAAQ;AAE/B,mBAAa,QAAQ,CAAC,MAAMC,WAAU;AAClC,cAAM,cAAc,SAASA,SAAQ,CAAC;AACtC,2BAAmB,iBAAiB;AAAA,UAChC;AAAA,UACA;AAAA,QACJ;AACA,2BAAmB,iBAAiB;AAAA,UAChC;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAED,YAAM,oBAAoB,QAAQ,SAC7B,IAAI,CAAC,YAA2B;AAC7B,YAAI,gBAAgB,GAAG,QAAQ,IAAI,KAAK,QAAQ,QAAQ,IAAI;AAC5D,qBAAa,QAAQ,CAAC,MAAMA,WAAU;AAClC,gBAAM,cAAc,SAASA,SAAQ,CAAC;AACtC,0BAAgB,cAAc;AAAA,YAC1B;AAAA,YACA;AAAA,UACJ;AAAA,QACJ,CAAC;AACD,eACI,iBACC,QAAQ,QAAQ,SACX,KAAK,QAAQ,QAAQ,MAAM,MAC3B;AAAA,MAEd,CAAC,EACA,KAAK,IAAI;AAEd,aAAO;AAAA,EAAa,gBAAgB;AAAA;AAAA;AAAA,EAAkB,iBAAiB;AAAA;AAAA;AAAA,EAAiB,gBAAgB;AAAA,IAC5G,CAAC,EACA,KAAK,MAAM;AAAA,EACpB,CAAC,EACA,KAAK,MAAM;AACpB;AAOO,SAAS,mCAAmC,YAAyB;AACxE,SAAO,WACF;AAAA,IAAI,CAAC,cACF,UAAU,SACL;AAAA,MACG,CAAC,UAAUA,WACP,GAAG,UAAU,IAAI,YAAYA,SAAQ,CAAC,KAAK,UAAU,WAAW;AAAA,IACxE,EACC,KAAK,IAAI;AAAA,EAClB,EACC,KAAK,MAAM;AACpB;;;ACxHA,SAAS,uBAAuB;AAChC,SAAS,gCAAgC;AACzC,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AACxB;AAAA,EACI,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,OAIb;AACP,SAAS,cAAc;AACvB,SAAS,oBAAoB;AAC7B,OAAO,YAAY;AACnB,SAAS,wBAA4C;AAErD,OAAO,cAAc;AAiCrB,SAAS,WAAW;AAEpB,OAAO,eAAe;;;ACtChB,SAAU,UAUd,QACA,UAIA,MAA+D;AAE/D,QAAM,kBAAkB,OAAO,SAAS,IAAI;AAC5C,MAAI,OAAO,oBAAoB;AAC7B,WAAO;AAET,QAAM,kBAAkB,OAAO,IAAI;AACnC,MAAI,OAAO,oBAAoB;AAC7B,WAAO;AAET,SAAO,CAAC,WAAW,SAAS,QAAQ,MAAM;AAC5C;;;ACpCM,IAAO,8BAAP,cAA2C,UAAS;EACxD,YAAY,MAAY;AACtB,UAAM,gBAAgB,IAAI,uBAAuB;MAC/C,MAAM;KACP;EACH;;;;AC0BF,IAAM,WAAW;AA0CX,SAAU,kBAId,YAAuD;AAEvD,QAAM,EAAE,KAAAC,MAAK,WAAW,KAAI,IAAK;AAEjC,MAAI,UAAUA,KAAI,CAAC;AACnB,MAAI,WAAW;AACb,UAAM,OAAO,WAAW,EAAE,KAAAA,MAAK,MAAM,UAAS,CAAE;AAChD,QAAI,CAAC;AAAM,YAAM,IAAI,sBAAsB,WAAW,EAAE,SAAQ,CAAE;AAClE,cAAU;EACZ;AAEA,MAAI,QAAQ,SAAS;AACnB,UAAM,IAAI,sBAAsB,QAAW,EAAE,SAAQ,CAAE;AAEzD,QAAM,aAAa,cAAc,OAAO;AACxC,QAAM,YAAY,gBAAgB,UAA6B;AAE/D,MAAI,SAAiC,CAAA;AACrC,MAAI,QAAQ,YAAY,SAAS;AAC/B,UAAM,gBAAgB,QAAQ,QAAQ,OACpC,CAAC,UAAU,aAAa,SAAS,MAAM,OAAO;AAEhD,UAAM,QAAQ,MAAM,QAAQ,IAAI,IAC5B,OACA,OAAO,OAAO,IAAI,EAAE,SAAS,IAC1B,eAAe,IAAI,CAAC,MAAY,KAAa,EAAE,IAAI,CAAC,KAAK,CAAA,IAC1D,CAAA;AAEN,QAAI,MAAM,SAAS,GAAG;AACpB,eACE,eAAe,IAAI,CAAC,OAAO,MAAK;AAC9B,YAAI,MAAM,QAAQ,MAAM,CAAC,CAAC;AACxB,iBAAO,MAAM,CAAC,EAAE,IAAI,CAAC,GAAQ,MAC3B,UAAU,EAAE,OAAO,OAAO,MAAM,CAAC,EAAE,CAAC,EAAC,CAAE,CAAC;AAE5C,eAAO,MAAM,CAAC,IAAI,UAAU,EAAE,OAAO,OAAO,MAAM,CAAC,EAAC,CAAE,IAAI;MAC5D,CAAC,KAAK,CAAA;IACV;EACF;AACA,SAAO,CAAC,WAAW,GAAG,MAAM;AAC9B;AASA,SAAS,UAAU,EACjB,OACA,MAAK,GACqE;AAC1E,MAAI,MAAM,SAAS,YAAY,MAAM,SAAS;AAC5C,WAAO,UAAU,QAAQ,KAAe,CAAC;AAC3C,MAAI,MAAM,SAAS,WAAW,MAAM,KAAK,MAAM,kBAAkB;AAC/D,UAAM,IAAI,4BAA4B,MAAM,IAAI;AAClD,SAAO,oBAAoB,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC;AAC7C;;;AC9GM,SAAU,yBACd,QACA,EAAE,OAAM,GAAsC;AAE9C,QAAM,aAA4C,CAAA;AAElD,MAAI,OAAO,UAAU,SAAS;AAC5B,WAAO,UAAU,aACf,CAAC,EACC,QAAQ,SACR,UAAU,IACV,QACA,UAAS,MACuB;AAChC,UAAI,WAAW,aAAa,WAAW;AACrC,mBAAW,EAAS,IAAI,UAAU;IACtC,CAAC;AAGL,SAAQ,CAAC,OACP,WAAW,EAAE,KAAK,OAAO;AAC7B;;;ACgDA,eAAsB,0BASpB,QACA,YAOC;AAWD,QAAM,EAAE,SAAS,KAAAC,MAAK,MAAM,WAAW,WAAW,QAAQ,QAAO,IAC/D;AAEF,QAAM,aAAa,yBAAyB,QAAQ;IAClD,QAAQ;GACT;AAED,QAAM,SAAS,YACX,kBAAkB;IAChB,KAAAA;IACA;IACA;GACyC,IAC3C;AACJ,QAAM,KAAU,MAAM,OAAO,QAAQ;IACnC,QAAQ;IACR,QAAQ;MACN;QACE;QACA,WACE,OAAO,cAAc,WAAW,YAAY,SAAS,IAAI;QAC3D,SAAS,OAAO,YAAY,WAAW,YAAY,OAAO,IAAI;QAC9D;;;GAGL;AAED,SAAO;IACL,KAAAA;IACA;IACA;IACA;IACA,SAAS,WAAW,EAAE;IACtB,QAAQ,QAAQ,MAAM;IACtB,MAAM;;AASV;;;ACzJA,IAAM,gCAAgC;AAYhC,SAAU,iBACd,KACA,EACE,KAAAC,MACA,SACA,MACA,UAAAC,WACA,cACA,OAAM,GAQP;AAED,QAAM,QACJ,eAAe,mBACX,MACA,eAAe,YACb,IAAI,KAAK,CAACC,SAAQ,UAAWA,IAAa,KAAK,IAAI,KAAI,IACvD,CAAA;AAER,QAAM,EAAE,MAAM,MAAM,SAAS,SAAS,aAAY,IAChD;AAEF,QAAM,SAAS,MAAK;AAClB,QAAI,eAAe;AACjB,aAAO,IAAI,8BAA8B,EAAE,aAAY,CAAE;AAC3D,QACE,CAAC,+BAA+B,iBAAiB,IAAI,EAAE,SAAS,IAAI,MACnE,QAAQ,WAAW,WAAW,eAC/B;AACA,aAAO,IAAI,8BAA8B;QACvC,KAAAF;QACA,MAAM,OAAO,SAAS,WAAW,KAAK,OAAO;QAC7C;QACA,SACE,iBAAiB,kBACb,UACC,gBAAgB;OACxB;IACH;AACA,WAAO;EACT,GAAE;AAEF,SAAO,IAAI,+BAA+B,OAAoB;IAC5D,KAAAA;IACA;IACA,iBAAiB;IACjB,UAAAC;IACA;IACA;GACD;AACH;;;AC5DM,SAAU,mBAAmB,WAAc;AAC/C,QAAM,UAAU,UAAU,KAAK,UAAU,UAAU,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE;AACrE,SAAO,gBAAgB,KAAK,OAAO,EAAE;AACvC;;;ACNA,eAAsB,iBAAiB,EACrC,MACA,UAAS,GACkB;AAC3B,QAAM,UAAU,MAAM,IAAI,IAAI,OAAO,MAAM,IAAI;AAE/C,QAAM,EAAE,WAAAE,WAAS,IAAK,MAAM,OAAO,yBAAyB;AAC5D,QAAM,cAAc,MAAK;AAEvB,QAAI,OAAO,cAAc,YAAY,OAAO,aAAa,OAAO,WAAW;AACzE,YAAM,EAAE,GAAG,GAAG,GAAG,QAAO,IAAK;AAC7B,YAAMC,cAAa,OAAO,WAAW,CAAC;AACtC,YAAMC,eAAc,cAAcD,WAAU;AAC5C,aAAO,IAAID,WAAU,UACnB,YAAY,CAAC,GACb,YAAY,CAAC,CAAC,EACd,eAAeE,YAAW;IAC9B;AAGA,UAAM,eAAe,MAAM,SAAS,IAAI,YAAY,MAAM,SAAS;AACnE,UAAM,aAAa,YAAY,KAAK,aAAa,MAAM,GAAG,CAAC,EAAE;AAC7D,UAAM,cAAc,cAAc,UAAU;AAC5C,WAAOF,WAAU,UAAU,YACzB,aAAa,UAAU,GAAG,GAAG,CAAC,EAC9B,eAAe,WAAW;EAC9B,GAAE;AAEF,QAAM,YAAY,WACf,iBAAiB,QAAQ,UAAU,CAAC,CAAC,EACrC,MAAM,KAAK;AACd,SAAO,KAAK,SAAS;AACvB;AAEA,SAAS,cAAc,YAAkB;AACvC,MAAI,eAAe,KAAK,eAAe;AAAG,WAAO;AACjD,MAAI,eAAe;AAAI,WAAO;AAC9B,MAAI,eAAe;AAAI,WAAO;AAC9B,QAAM,IAAI,MAAM,0BAA0B;AAC5C;;;AC5CA,eAAsB,eAAe,EACnC,MACA,UAAS,GACgB;AACzB,SAAO,mBAAmB,MAAM,iBAAiB,EAAE,MAAY,UAAS,CAAE,CAAC;AAC7E;;;ACSM,SAAU,MACd,OACA,KAA0B,OAAK;AAE/B,QAAM,YAAY,aAAa,KAAK;AACpC,QAAM,SAAS,aAAa,IAAI,WAAW,UAAU,MAAM,CAAC;AAC5D,YAAU,OAAO,MAAM;AAEvB,MAAI,OAAO;AAAO,WAAO,WAAW,OAAO,KAAK;AAChD,SAAO,OAAO;AAChB;AAoBA,SAAS,aACP,OAAsD;AAEtD,MAAI,MAAM,QAAQ,KAAK;AACrB,WAAO,iBAAiB,MAAM,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;AAC3D,SAAO,kBAAkB,KAAY;AACvC;AAEA,SAAS,iBAAiB,MAAiB;AACzC,QAAM,aAAa,KAAK,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC;AAE5D,QAAM,mBAAmB,gBAAgB,UAAU;AACnD,QAAM,UAAU,MAAK;AACnB,QAAI,cAAc;AAAI,aAAO,IAAI;AACjC,WAAO,IAAI,mBAAmB;EAChC,GAAE;AAEF,SAAO;IACL;IACA,OAAO,QAAc;AACnB,UAAI,cAAc,IAAI;AACpB,eAAO,SAAS,MAAO,UAAU;MACnC,OAAO;AACL,eAAO,SAAS,MAAO,KAAK,gBAAgB;AAC5C,YAAI,qBAAqB;AAAG,iBAAO,UAAU,UAAU;iBAC9C,qBAAqB;AAAG,iBAAO,WAAW,UAAU;iBACpD,qBAAqB;AAAG,iBAAO,WAAW,UAAU;;AACxD,iBAAO,WAAW,UAAU;MACnC;AACA,iBAAW,EAAE,OAAM,KAAM,MAAM;AAC7B,eAAO,MAAM;MACf;IACF;;AAEJ;AAEA,SAAS,kBAAkB,YAA2B;AACpD,QAAM,QACJ,OAAO,eAAe,WAAW,WAAW,UAAU,IAAI;AAE5D,QAAM,oBAAoB,gBAAgB,MAAM,MAAM;AACtD,QAAM,UAAU,MAAK;AACnB,QAAI,MAAM,WAAW,KAAK,MAAM,CAAC,IAAI;AAAM,aAAO;AAClD,QAAI,MAAM,UAAU;AAAI,aAAO,IAAI,MAAM;AACzC,WAAO,IAAI,oBAAoB,MAAM;EACvC,GAAE;AAEF,SAAO;IACL;IACA,OAAO,QAAc;AACnB,UAAI,MAAM,WAAW,KAAK,MAAM,CAAC,IAAI,KAAM;AACzC,eAAO,UAAU,KAAK;MACxB,WAAW,MAAM,UAAU,IAAI;AAC7B,eAAO,SAAS,MAAO,MAAM,MAAM;AACnC,eAAO,UAAU,KAAK;MACxB,OAAO;AACL,eAAO,SAAS,MAAO,KAAK,iBAAiB;AAC7C,YAAI,sBAAsB;AAAG,iBAAO,UAAU,MAAM,MAAM;iBACjD,sBAAsB;AAAG,iBAAO,WAAW,MAAM,MAAM;iBACvD,sBAAsB;AAAG,iBAAO,WAAW,MAAM,MAAM;;AAC3D,iBAAO,WAAW,MAAM,MAAM;AACnC,eAAO,UAAU,KAAK;MACxB;IACF;;AAEJ;AAEA,SAAS,gBAAgB,QAAc;AACrC,MAAI,SAAS,KAAK;AAAG,WAAO;AAC5B,MAAI,SAAS,KAAK;AAAI,WAAO;AAC7B,MAAI,SAAS,KAAK;AAAI,WAAO;AAC7B,MAAI,SAAS,KAAK;AAAI,WAAO;AAC7B,QAAM,IAAI,UAAU,sBAAsB;AAC5C;;;AC3FM,SAAU,kBACd,YAA2C;AAE3C,QAAM,EAAE,SAAS,iBAAiB,OAAO,GAAE,IAAK;AAChD,QAAM,OAAO,UACX,UAAU;IACR;IACA,MAAM;MACJ,UAAU,YAAY,OAAO,IAAI;MACjC;MACA,QAAQ,YAAY,KAAK,IAAI;KAC9B;GACF,CAAC;AAEJ,MAAI,OAAO;AAAS,WAAO,WAAW,IAAI;AAC1C,SAAO;AACT;;;ACVA,eAAsB,4BAGpB,YAAgE;AAEhE,QAAM,EAAE,eAAe,UAAS,IAAK;AAErC,SAAO,eAAe;IACpB,MAAM,kBAAkB,aAA8B;IACtD,WAAY,aAAa;GAC1B;AACH;;;AChDM,IAAO,4BAAP,cAAyC,UAAS;EAGtD,YACE,OACA,EACE,SACA,UAAAG,WACA,OACA,MACA,KACA,UACA,cACA,sBACA,OACA,IACA,MAAK,GAKN;AAED,UAAM,aAAa,YAAY;MAC7B,MAAM,SAAS;MACf;MACA,OACE,OAAO,UAAU,eACjB,GAAG,YAAY,KAAK,CAAC,IAAI,OAAO,gBAAgB,UAAU,KAAK;MACjE;MACA;MACA,UACE,OAAO,aAAa,eAAe,GAAG,WAAW,QAAQ,CAAC;MAC5D,cACE,OAAO,iBAAiB,eACxB,GAAG,WAAW,YAAY,CAAC;MAC7B,sBACE,OAAO,yBAAyB,eAChC,GAAG,WAAW,oBAAoB,CAAC;MACrC;KACD;AAED,UAAM,MAAM,cAAc;MACxB;MACA,UAAAA;MACA,cAAc;QACZ,GAAI,MAAM,eAAe,CAAC,GAAG,MAAM,cAAc,GAAG,IAAI,CAAA;QACxD;QACA;QACA,OAAO,OAAO;MAChB,MAAM;KACP;AAlDM,WAAA,eAAA,MAAA,SAAA;;;;;;AAmDP,SAAK,QAAQ;EACf;;;;AC3CI,SAAU,oBACd,KACA,EACE,UAAAC,WACA,GAAG,KAAI,GAKR;AAED,QAAM,SAAS,MAAK;AAClB,UAAMC,SAAQ,aACZ,KACA,IAA8B;AAEhC,QAAIA,kBAAiB;AAAkB,aAAO;AAC9C,WAAOA;EACT,GAAE;AACF,SAAO,IAAI,0BAA0B,OAAO;IAC1C,UAAAD;IACA,GAAG;GACJ;AACH;;;ACvCM,IAAO,qBAAP,cAAkC,UAAS;EAC/C,cAAA;AACE,UAAM,+CAA+C;MACnD,MAAM;KACP;EACH;;AAMI,IAAO,+BAAP,cAA4C,UAAS;EACzD,cAAA;AACE,UAAM,yCAAyC;MAC7C,MAAM;KACP;EACH;;AAMI,IAAO,0BAAP,cAAuC,UAAS;EACpD,YAAY,EAAE,qBAAoB,GAAoC;AACpE,UACE,sEAAsE,WACpE,oBAAoB,CACrB,WACD,EAAE,MAAM,0BAAyB,CAAE;EAEvC;;;;AC7BI,IAAO,qBAAP,cAAkC,UAAS;EAC/C,YAAY,EACV,WACA,YAAW,GAIZ;AACC,QAAI,aAAa;AACjB,QAAI;AAAW,mBAAa,kBAAkB,SAAS;AACvD,QAAI;AAAa,mBAAa,oBAAoB,WAAW;AAC7D,UAAM,GAAG,UAAU,wBAAwB,EAAE,MAAM,qBAAoB,CAAE;EAC3E;;;;ACmBK,IAAM,kBAAkB;EAC7B,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;;AAKH,SAAU,kBAAkB,aAAyC;AACzE,QAAM,eAAe;IACnB,GAAG;IACH,WAAW,YAAY,YAAY,YAAY,YAAY;IAC3D,aAAa,YAAY,cACrB,OAAO,YAAY,WAAW,IAC9B;IACJ,SAAS,YAAY,UAAU,YAAY,YAAY,OAAO,IAAI;IAClE,KAAK,YAAY,MAAM,OAAO,YAAY,GAAG,IAAI;IACjD,UAAU,YAAY,WAAW,OAAO,YAAY,QAAQ,IAAI;IAChE,kBAAkB,YAAY,mBAC1B,OAAO,YAAY,gBAAgB,IACnC;IACJ,cAAc,YAAY,eACtB,OAAO,YAAY,YAAY,IAC/B;IACJ,sBAAsB,YAAY,uBAC9B,OAAO,YAAY,oBAAoB,IACvC;IACJ,OAAO,YAAY,QAAQ,YAAY,YAAY,KAAK,IAAI;IAC5D,IAAI,YAAY,KAAK,YAAY,KAAK;IACtC,kBAAkB,YAAY,mBAC1B,OAAO,YAAY,gBAAgB,IACnC;IACJ,MAAM,YAAY,OACb,gBAAwB,YAAY,IAAI,IACzC;IACJ,SAAS,YAAY,OAAO,YAAY,OAAO;IAC/C,OAAO,YAAY,QAAQ,OAAO,YAAY,KAAK,IAAI;IACvD,GAAG,YAAY,IAAI,OAAO,YAAY,CAAC,IAAI;;AAG7C,MAAI,YAAY;AACd,iBAAa,oBAAoB,wBAC/B,YAAY,iBAAiB;AAGjC,eAAa,WAAW,MAAK;AAE3B,QAAI,YAAY;AAAS,aAAO,OAAO,YAAY,OAAO;AAG1D,QAAI,OAAO,aAAa,MAAM,UAAU;AACtC,UAAI,aAAa,MAAM,MAAM,aAAa,MAAM;AAAK,eAAO;AAC5D,UAAI,aAAa,MAAM,MAAM,aAAa,MAAM;AAAK,eAAO;AAC5D,UAAI,aAAa,KAAK;AAAK,eAAO,aAAa,IAAI,OAAO,KAAK,IAAI;IACrE;AAEA,WAAO;EACT,GAAE;AAEF,MAAI,aAAa,SAAS,UAAU;AAClC,WAAO,aAAa;AACpB,WAAO,aAAa;AACpB,WAAO,aAAa;AACpB,WAAO,aAAa;AACpB,WAAO,aAAa;EACtB;AACA,MAAI,aAAa,SAAS,WAAW;AACnC,WAAO,aAAa;AACpB,WAAO,aAAa;AACpB,WAAO,aAAa;EACtB;AACA,MAAI,aAAa,SAAS,WAAW;AACnC,WAAO,aAAa;EACtB;AACA,SAAO;AACT;AAWA,SAAS,wBACP,mBAAuC;AAEvC,SAAO,kBAAkB,IAAI,CAAC,mBAAmB;IAC/C,iBAAkB,cAAsB;IACxC,SAAS,OAAO,cAAc,OAAO;IACrC,OAAO,OAAO,cAAc,KAAK;IACjC,GAAG,cAAc;IACjB,GAAG,cAAc;IACjB,SAAS,OAAO,cAAc,OAAO;IACrC;AACJ;;;AC/FM,SAAU,YAAY,OAA6B;AACvD,QAAM,gBAAgB,MAAM,gBAAgB,CAAA,GAAI,IAAI,CAAC,gBAAe;AAClE,QAAI,OAAO,gBAAgB;AAAU,aAAO;AAC5C,WAAO,kBAAkB,WAAW;EACtC,CAAC;AACD,SAAO;IACL,GAAG;IACH,eAAe,MAAM,gBAAgB,OAAO,MAAM,aAAa,IAAI;IACnE,aAAa,MAAM,cAAc,OAAO,MAAM,WAAW,IAAI;IAC7D,YAAY,MAAM,aAAa,OAAO,MAAM,UAAU,IAAI;IAC1D,eAAe,MAAM,gBACjB,OAAO,MAAM,aAAa,IAC1B;IACJ,UAAU,MAAM,WAAW,OAAO,MAAM,QAAQ,IAAI;IACpD,SAAS,MAAM,UAAU,OAAO,MAAM,OAAO,IAAI;IACjD,MAAM,MAAM,OAAO,MAAM,OAAO;IAChC,WAAW,MAAM,YAAY,MAAM,YAAY;IAC/C,OAAO,MAAM,QAAQ,MAAM,QAAQ;IACnC,QAAQ,MAAM,SAAS,OAAO,MAAM,MAAM,IAAI;IAC9C,MAAM,MAAM,OAAO,OAAO,MAAM,IAAI,IAAI;IACxC,WAAW,MAAM,YAAY,OAAO,MAAM,SAAS,IAAI;IACvD;IACA,iBAAiB,MAAM,kBACnB,OAAO,MAAM,eAAe,IAC5B;;AAER;;;ACqBA,eAAsB,SAMpB,QACA,EACE,WACA,aACA,UAAU,WACV,qBAAqB,qBAAoB,IACY,CAAA,GAAE;AAEzD,QAAM,WAAW,aAAa;AAC9B,QAAM,sBAAsB,wBAAwB;AAEpD,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AAEzD,MAAI,QAAyB;AAC7B,MAAI,WAAW;AACb,YAAQ,MAAM,OAAO,QACnB;MACE,QAAQ;MACR,QAAQ,CAAC,WAAW,mBAAmB;OAEzC,EAAE,QAAQ,KAAI,CAAE;EAEpB,OAAO;AACL,YAAQ,MAAM,OAAO,QACnB;MACE,QAAQ;MACR,QAAQ,CAAC,kBAAkB,UAAU,mBAAmB;OAE1D,EAAE,QAAQ,QAAQ,cAAc,EAAC,CAAE;EAEvC;AAEA,MAAI,CAAC;AAAO,UAAM,IAAI,mBAAmB,EAAE,WAAW,YAAW,CAAE;AAEnE,QAAM,SAAS,OAAO,OAAO,YAAY,OAAO,UAAU;AAC1D,SAAO,OAAO,KAAK;AACrB;;;ACrGA,eAAsB,YAGpB,QAAyC;AACzC,QAAM,WAAW,MAAM,OAAO,QAAQ;IACpC,QAAQ;GACT;AACD,SAAO,OAAO,QAAQ;AACxB;;;ACoBA,eAAsB,6BAIpB,QACA,MAEa;AAEb,SAAO,sCAAsC,QAAQ,IAAW;AAClE;AAEA,eAAsB,sCAIpB,QACA,MASC;AAED,QAAM,EAAE,OAAO,QAAQ,QAAQ,OAAO,OAAO,QAAO,IAAK,QAAQ,CAAA;AAEjE,MAAI;AACF,UAAM,uBACJ,OAAO,MAAM,wBAAwB,OAAO,MAAM;AAEpD,QAAI,OAAO,yBAAyB,YAAY;AAC9C,YAAM,QACJ,UAAW,MAAM,UAAU,QAAQ,UAAU,UAAU,EAAE,CAAA,CAAE;AAC7D,YAAM,wBAAwB,MAAM,qBAAqB;QACvD;QACA;QACA;OACwB;AAC1B,UAAI,0BAA0B;AAAM,cAAM,IAAI,MAAK;AACnD,aAAO;IACT;AAEA,QAAI,OAAO,yBAAyB;AAAa,aAAO;AAExD,UAAM,0BAA0B,MAAM,OAAO,QAAQ;MACnD,QAAQ;KACT;AACD,WAAO,YAAY,uBAAuB;EAC5C,QAAQ;AAIN,UAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,QAAQ,IAAI;MAC1C,SACI,QAAQ,QAAQ,MAAM,IACtB,UAAU,QAAQ,UAAU,UAAU,EAAE,CAAA,CAAE;MAC9C,UAAU,QAAQ,aAAa,aAAa,EAAE,CAAA,CAAE;KACjD;AAED,QAAI,OAAO,MAAM,kBAAkB;AACjC,YAAM,IAAI,6BAA4B;AAExC,UAAM,uBAAuB,WAAW,MAAM;AAE9C,QAAI,uBAAuB;AAAI,aAAO;AACtC,WAAO;EACT;AACF;;;AC/CA,eAAsB,mBAKpB,QACA,MAA2E;AAE3E,SAAO,4BAA4B,QAAQ,IAAW;AACxD;AAEA,eAAsB,4BAKpB,QACA,MAGC;AAED,QAAM,EACJ,OAAO,QACP,QAAQ,OAAO,OACf,SACA,OAAO,UAAS,IACd,QAAQ,CAAA;AAEZ,QAAM,oBAAoB,OAAO,YAAW;AAC1C,QAAI,OAAO,OAAO,MAAM,sBAAsB;AAC5C,aAAO,MAAM,KAAK,kBAAkB;QAClC,OAAO;QACP;QACA;OACwB;AAC5B,WAAO,OAAO,MAAM,qBAAqB;EAC3C,GAAE;AACF,MAAI,oBAAoB;AAAG,UAAM,IAAI,mBAAkB;AAEvD,QAAM,WAAW,kBAAkB,SAAQ,EAAG,MAAM,GAAG,EAAE,CAAC,GAAG,UAAU;AACvE,QAAM,cAAc,MAAM;AAC1B,QAAM,WAAW,CAAC,SACf,OAAO,OAAO,KAAK,KAAK,oBAAoB,WAAW,CAAC,IACzD,OAAO,WAAW;AAEpB,QAAM,QAAQ,SACV,SACA,MAAM,UAAU,QAAQ,UAAU,UAAU,EAAE,CAAA,CAAE;AAEpD,MAAI,OAAO,OAAO,MAAM,uBAAuB,YAAY;AACzD,UAAM,OAAQ,MAAM,MAAM,KAAK,mBAAmB;MAChD,OAAO;MACP;MACA;MACA;MACA;KACsC;AAExC,QAAI,SAAS;AAAM,aAAO;EAC5B;AAEA,MAAI,SAAS,WAAW;AACtB,QAAI,OAAO,MAAM,kBAAkB;AACjC,YAAM,IAAI,6BAA4B;AAExC,UAAM,uBACJ,OAAO,SAAS,yBAAyB,WACrC,QAAQ,uBACR,MAAM,sCACJ,QACA;MACE;MACA;MACA;KACD;AAGT,UAAM,gBAAgB,SAAS,MAAM,aAAa;AAClD,UAAM,eACJ,SAAS,gBAAgB,gBAAgB;AAE3C,WAAO;MACL;MACA;;EAEJ;AAEA,QAAM,WACJ,SAAS,YACT,SAAS,MAAM,UAAU,QAAQ,aAAa,aAAa,EAAE,CAAA,CAAE,CAAC;AAClE,SAAO;IACL;;AAEJ;;;ACjHA,eAAsB,oBAIpB,QACA,EAAE,SAAS,WAAW,UAAU,YAAW,GAAiC;AAE5E,QAAM,QAAQ,MAAM,OAAO,QACzB;IACE,QAAQ;IACR,QAAQ,CAAC,SAAS,cAAc,YAAY,WAAW,IAAI,QAAQ;KAErE,EAAE,QAAQ,QAAQ,WAAW,EAAC,CAAE;AAElC,SAAO,YAAY,KAAK;AAC1B;;;ACpCM,SAAU,mBAMd,YAAmD;AAEnD,QAAM,EAAE,IAAG,IAAK;AAEhB,QAAM,KACJ,WAAW,OAAO,OAAO,WAAW,MAAM,CAAC,MAAM,WAAW,QAAQ;AACtE,QAAM,QACJ,OAAO,WAAW,MAAM,CAAC,MAAM,WAC3B,WAAW,MAAM,IAAI,CAAC,MAAM,WAAW,CAAQ,CAAC,IAChD,WAAW;AAGjB,QAAM,cAA2B,CAAA;AACjC,aAAW,QAAQ;AACjB,gBAAY,KAAK,WAAW,KAAK,IAAI,oBAAoB,IAAI,CAAC,CAAC;AAEjE,SAAQ,OAAO,UACX,cACA,YAAY,IAAI,CAAC,MACf,WAAW,CAAC,CAAC;AAErB;;;ACbM,SAAU,cAOd,YAA2D;AAE3D,QAAM,EAAE,IAAG,IAAK;AAEhB,QAAM,KACJ,WAAW,OAAO,OAAO,WAAW,MAAM,CAAC,MAAM,WAAW,QAAQ;AAEtE,QAAM,QACJ,OAAO,WAAW,MAAM,CAAC,MAAM,WAC3B,WAAW,MAAM,IAAI,CAAC,MAAM,WAAW,CAAQ,CAAC,IAChD,WAAW;AAEjB,QAAM,cACJ,OAAO,WAAW,YAAY,CAAC,MAAM,WACjC,WAAW,YAAY,IAAI,CAAC,MAAM,WAAW,CAAQ,CAAC,IACtD,WAAW;AAGjB,QAAM,SAAsB,CAAA;AAC5B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,aAAa,YAAY,CAAC;AAChC,WAAO,KAAK,WAAW,KAAK,IAAI,oBAAoB,MAAM,UAAU,CAAC,CAAC;EACxE;AAEA,SAAQ,OAAO,UACX,SACA,OAAO,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC;AACrC;;;ACtFA,SAAS,aAAa,MAAgB,YAAoB,OAAe,MAAa;AACpF,MAAI,OAAO,KAAK,iBAAiB;AAAY,WAAO,KAAK,aAAa,YAAY,OAAO,IAAI;AAC7F,QAAM,OAAO,OAAO,EAAE;AACtB,QAAM,WAAW,OAAO,UAAU;AAClC,QAAM,KAAK,OAAQ,SAAS,OAAQ,QAAQ;AAC5C,QAAM,KAAK,OAAO,QAAQ,QAAQ;AAClC,QAAM,IAAI,OAAO,IAAI;AACrB,QAAM,IAAI,OAAO,IAAI;AACrB,OAAK,UAAU,aAAa,GAAG,IAAI,IAAI;AACvC,OAAK,UAAU,aAAa,GAAG,IAAI,IAAI;AACzC;AAKO,IAAM,MAAM,CAAC,GAAW,GAAW,MAAe,IAAI,IAAM,CAAC,IAAI;AAKjE,IAAM,MAAM,CAAC,GAAW,GAAW,MAAe,IAAI,IAAM,IAAI,IAAM,IAAI;AAM3E,IAAgB,SAAhB,cAAoD,KAAO;EAc/D,YACW,UACF,WACE,WACA,MAAa;AAEtB,UAAK;AALI,SAAA,WAAA;AACF,SAAA,YAAA;AACE,SAAA,YAAA;AACA,SAAA,OAAA;AATD,SAAA,WAAW;AACX,SAAA,SAAS;AACT,SAAA,MAAM;AACN,SAAA,YAAY;AASpB,SAAK,SAAS,IAAI,WAAW,QAAQ;AACrC,SAAK,OAAO,WAAW,KAAK,MAAM;EACpC;EACA,OAAO,MAAW;AAChB,YAAQ,IAAI;AACZ,UAAM,EAAE,MAAM,QAAAE,SAAQ,SAAQ,IAAK;AACnC,WAAOC,SAAQ,IAAI;AACnB,UAAM,MAAM,KAAK;AACjB,aAAS,MAAM,GAAG,MAAM,OAAO;AAC7B,YAAM,OAAO,KAAK,IAAI,WAAW,KAAK,KAAK,MAAM,GAAG;AAEpD,UAAI,SAAS,UAAU;AACrB,cAAM,WAAW,WAAW,IAAI;AAChC,eAAO,YAAY,MAAM,KAAK,OAAO;AAAU,eAAK,QAAQ,UAAU,GAAG;AACzE;MACF;AACA,MAAAD,QAAO,IAAI,KAAK,SAAS,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG;AACnD,WAAK,OAAO;AACZ,aAAO;AACP,UAAI,KAAK,QAAQ,UAAU;AACzB,aAAK,QAAQ,MAAM,CAAC;AACpB,aAAK,MAAM;MACb;IACF;AACA,SAAK,UAAU,KAAK;AACpB,SAAK,WAAU;AACf,WAAO;EACT;EACA,WAAW,KAAe;AACxB,YAAQ,IAAI;AACZ,YAAQ,KAAK,IAAI;AACjB,SAAK,WAAW;AAIhB,UAAM,EAAE,QAAAA,SAAQ,MAAM,UAAU,KAAI,IAAK;AACzC,QAAI,EAAE,IAAG,IAAK;AAEd,IAAAA,QAAO,KAAK,IAAI;AAChB,SAAK,OAAO,SAAS,GAAG,EAAE,KAAK,CAAC;AAGhC,QAAI,KAAK,YAAY,WAAW,KAAK;AACnC,WAAK,QAAQ,MAAM,CAAC;AACpB,YAAM;IACR;AAEA,aAAS,IAAI,KAAK,IAAI,UAAU;AAAK,MAAAA,QAAO,CAAC,IAAI;AAIjD,iBAAa,MAAM,WAAW,GAAG,OAAO,KAAK,SAAS,CAAC,GAAG,IAAI;AAC9D,SAAK,QAAQ,MAAM,CAAC;AACpB,UAAM,QAAQ,WAAW,GAAG;AAC5B,UAAM,MAAM,KAAK;AAEjB,QAAI,MAAM;AAAG,YAAM,IAAI,MAAM,6CAA6C;AAC1E,UAAM,SAAS,MAAM;AACrB,UAAM,QAAQ,KAAK,IAAG;AACtB,QAAI,SAAS,MAAM;AAAQ,YAAM,IAAI,MAAM,oCAAoC;AAC/E,aAAS,IAAI,GAAG,IAAI,QAAQ;AAAK,YAAM,UAAU,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI;EACxE;EACA,SAAM;AACJ,UAAM,EAAE,QAAAA,SAAQ,UAAS,IAAK;AAC9B,SAAK,WAAWA,OAAM;AACtB,UAAM,MAAMA,QAAO,MAAM,GAAG,SAAS;AACrC,SAAK,QAAO;AACZ,WAAO;EACT;EACA,WAAW,IAAM;AACf,WAAA,KAAO,IAAK,KAAK,YAAmB;AACpC,OAAG,IAAI,GAAG,KAAK,IAAG,CAAE;AACpB,UAAM,EAAE,UAAU,QAAAA,SAAQ,QAAQ,UAAU,WAAW,IAAG,IAAK;AAC/D,OAAG,SAAS;AACZ,OAAG,MAAM;AACT,OAAG,WAAW;AACd,OAAG,YAAY;AACf,QAAI,SAAS;AAAU,SAAG,OAAO,IAAIA,OAAM;AAC3C,WAAO;EACT;;;;AC3HF,IAAM,WAA2B,oBAAI,YAAY;EAC/C;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;CACrF;AAKD,IAAM,YAA4B,oBAAI,YAAY;EAChD;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;CACrF;AAID,IAAM,WAA2B,oBAAI,YAAY,EAAE;AAC7C,IAAO,SAAP,cAAsB,OAAc;EAYxC,cAAA;AACE,UAAM,IAAI,IAAI,GAAG,KAAK;AAVxB,SAAA,IAAI,UAAU,CAAC,IAAI;AACnB,SAAA,IAAI,UAAU,CAAC,IAAI;AACnB,SAAA,IAAI,UAAU,CAAC,IAAI;AACnB,SAAA,IAAI,UAAU,CAAC,IAAI;AACnB,SAAA,IAAI,UAAU,CAAC,IAAI;AACnB,SAAA,IAAI,UAAU,CAAC,IAAI;AACnB,SAAA,IAAI,UAAU,CAAC,IAAI;AACnB,SAAA,IAAI,UAAU,CAAC,IAAI;EAInB;EACU,MAAG;AACX,UAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAC,IAAK;AACnC,WAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAChC;;EAEU,IACR,GAAW,GAAW,GAAW,GAAW,GAAW,GAAW,GAAW,GAAS;AAEtF,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;EACf;EACU,QAAQ,MAAgB,QAAc;AAE9C,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK,UAAU;AAAG,eAAS,CAAC,IAAI,KAAK,UAAU,QAAQ,KAAK;AACpF,aAAS,IAAI,IAAI,IAAI,IAAI,KAAK;AAC5B,YAAM,MAAM,SAAS,IAAI,EAAE;AAC3B,YAAM,KAAK,SAAS,IAAI,CAAC;AACzB,YAAM,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,IAAK,QAAQ;AACnD,YAAM,KAAK,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAK,OAAO;AACjD,eAAS,CAAC,IAAK,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAK;IACjE;AAEA,QAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAC,IAAK;AACjC,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,YAAM,SAAS,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;AACpD,YAAM,KAAM,IAAI,SAAS,IAAI,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,SAAS,CAAC,IAAK;AACrE,YAAM,SAAS,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;AACpD,YAAM,KAAM,SAAS,IAAI,GAAG,GAAG,CAAC,IAAK;AACrC,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAK,IAAI,KAAM;AACf,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAK,KAAK,KAAM;IAClB;AAEA,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,SAAK,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EACjC;EACU,aAAU;AAClB,aAAS,KAAK,CAAC;EACjB;EACA,UAAO;AACL,SAAK,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/B,SAAK,OAAO,KAAK,CAAC;EACpB;;AAsBK,IAAM,SAAyB,gCAAgB,MAAM,IAAI,OAAM,CAAE;;;AC3GlE,SAAUE,QACd,OACA,KAAoB;AAEpB,QAAM,KAAK,OAAO;AAClB,QAAM,QAAQ,OACZ,MAAM,OAAO,EAAE,QAAQ,MAAK,CAAE,IAAI,QAAQ,KAAK,IAAI,KAAK;AAE1D,MAAI,OAAO;AAAS,WAAO;AAC3B,SAAO,MAAM,KAAK;AACpB;;;ACeM,SAAU,0BAMd,YAA+D;AAE/D,QAAM,EAAE,YAAY,UAAU,EAAC,IAAK;AACpC,QAAM,KAAK,WAAW,OAAO,OAAO,eAAe,WAAW,QAAQ;AAEtE,QAAM,gBAAgBC,QAAO,YAAY,OAAO;AAChD,gBAAc,IAAI,CAAC,OAAO,GAAG,CAAC;AAC9B,SACE,OAAO,UAAU,gBAAgB,WAAW,aAAa;AAE7D;;;ACbM,SAAU,6BAMd,YAAmE;AAEnE,QAAM,EAAE,aAAa,QAAO,IAAK;AAEjC,QAAM,KACJ,WAAW,OAAO,OAAO,YAAY,CAAC,MAAM,WAAW,QAAQ;AAEjE,QAAM,SAA+B,CAAA;AACrC,aAAW,cAAc,aAAa;AACpC,WAAO,KACL,0BAA0B;MACxB;MACA;MACA;KACD,CAAQ;EAEb;AACA,SAAO;AACT;;;ACrEA,IAAM,sBAAsB;AAGrB,IAAM,uBAAuB;AAG7B,IAAM,uBAAuB;AAG7B,IAAM,eAAe,uBAAuB;AAG5C,IAAM,yBACX,eAAe;AAEf;AAEA,IAAI,uBAAuB;;;ACZvB,IAAO,wBAAP,cAAqC,UAAS;EAClD,YAAY,EAAE,SAAS,MAAAC,MAAI,GAAqC;AAC9D,UAAM,2BAA2B;MAC/B,cAAc,CAAC,QAAQ,OAAO,UAAU,UAAUA,KAAI,QAAQ;MAC9D,MAAM;KACP;EACH;;AAMI,IAAO,iBAAP,cAA8B,UAAS;EAC3C,cAAA;AACE,UAAM,gCAAgC,EAAE,MAAM,iBAAgB,CAAE;EAClE;;;;AC+BI,SAAU,QAKd,YAAuC;AACvC,QAAM,KACJ,WAAW,OAAO,OAAO,WAAW,SAAS,WAAW,QAAQ;AAClE,QAAM,OACJ,OAAO,WAAW,SAAS,WACvB,WAAW,WAAW,IAAI,IAC1B,WAAW;AAGjB,QAAM,QAAQ,KAAK,IAAI;AACvB,MAAI,CAAC;AAAO,UAAM,IAAI,eAAc;AACpC,MAAI,QAAQ;AACV,UAAM,IAAI,sBAAsB;MAC9B,SAAS;MACT,MAAM;KACP;AAEH,QAAM,QAAQ,CAAA;AAEd,MAAI,SAAS;AACb,MAAI,WAAW;AACf,SAAO,QAAQ;AACb,UAAM,OAAO,aAAa,IAAI,WAAW,YAAY,CAAC;AAEtD,QAAIC,QAAO;AACX,WAAOA,QAAO,sBAAsB;AAClC,YAAM,QAAQ,KAAK,MAAM,UAAU,YAAY,uBAAuB,EAAE;AAGxE,WAAK,SAAS,CAAI;AAGlB,WAAK,UAAU,KAAK;AAIpB,UAAI,MAAM,SAAS,IAAI;AACrB,aAAK,SAAS,GAAI;AAClB,iBAAS;AACT;MACF;AAEA,MAAAA;AACA,kBAAY;IACd;AAEA,UAAM,KAAK,IAAI;EACjB;AAEA,SACE,OAAO,UACH,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,IACxB,MAAM,IAAI,CAAC,MAAM,WAAW,EAAE,KAAK,CAAC;AAE5C;;;AChCM,SAAU,eAYd,YAAqD;AAErD,QAAM,EAAE,MAAM,KAAK,GAAE,IAAK;AAC1B,QAAM,QAAQ,WAAW,SAAS,QAAQ,EAAE,MAAa,GAAE,CAAE;AAC7D,QAAM,cACJ,WAAW,eAAe,mBAAmB,EAAE,OAAO,KAAW,GAAE,CAAE;AACvE,QAAM,SACJ,WAAW,UAAU,cAAc,EAAE,OAAO,aAAa,KAAW,GAAE,CAAE;AAE1E,QAAM,WAAyB,CAAA;AAC/B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AAChC,aAAS,KAAK;MACZ,MAAM,MAAM,CAAC;MACb,YAAY,YAAY,CAAC;MACzB,OAAO,OAAO,CAAC;KAChB;AAEH,SAAO;AACT;;;ACrEM,SAAU,mBAId,aAAwB;AACxB,MAAI,YAAY;AACd,WAAO,YAAY;AAErB,MAAI,OAAO,YAAY,sBAAsB;AAC3C,WAAO;AAET,MACE,OAAO,YAAY,UAAU,eAC7B,OAAO,YAAY,wBAAwB,eAC3C,OAAO,YAAY,qBAAqB,eACxC,OAAO,YAAY,aAAa;AAEhC,WAAO;AAET,MACE,OAAO,YAAY,iBAAiB,eACpC,OAAO,YAAY,yBAAyB,aAC5C;AACA,WAAO;EACT;AAEA,MAAI,OAAO,YAAY,aAAa,aAAa;AAC/C,QAAI,OAAO,YAAY,eAAe;AAAa,aAAO;AAC1D,WAAO;EACT;AAEA,QAAM,IAAI,oCAAoC,EAAE,YAAW,CAAE;AAC/D;;;ACnCA,eAAsB,WAGpB,QAAyC;AACzC,QAAM,aAAa,MAAM,OAAO,QAC9B;IACE,QAAQ;KAEV,EAAE,QAAQ,KAAI,CAAE;AAElB,SAAO,YAAY,UAAU;AAC/B;;;ACmBO,IAAM,oBAAoB;EAC/B;EACA;EACA;EACA;EACA;EACA;;AA0JF,eAAsB,0BAOpB,QACA,MAMC;AAUD,QAAM,EACJ,SAAS,WAAW,OAAO,SAC3B,OACA,OACA,KACA,KACA,OACA,cACA,aAAa,mBACb,KAAI,IACF;AACJ,QAAM,UAAU,WAAW,aAAa,QAAQ,IAAI;AAEpD,QAAM,UAAU,EAAE,GAAG,MAAM,GAAI,UAAU,EAAE,MAAM,SAAS,QAAO,IAAK,CAAA,EAAG;AAEzE,MAAI;AACJ,iBAAeC,YAAQ;AACrB,QAAI;AAAO,aAAO;AAClB,YAAQ,MAAM,UACZ,QACA,UACA,UAAU,EACV,EAAE,UAAU,SAAQ,CAAE;AACxB,WAAO;EACT;AAEA,MAAI;AACJ,iBAAeC,cAAU;AACvB,QAAI;AAAS,aAAO;AACpB,QAAI;AAAO,aAAO,MAAM;AACxB,QAAI,OAAO,KAAK,YAAY;AAAa,aAAO,KAAK;AACrD,UAAM,WAAW,MAAM,UAAU,QAAQ,YAAa,YAAY,EAAE,CAAA,CAAE;AACtE,cAAU;AACV,WAAO;EACT;AAEA,OACG,WAAW,SAAS,qBAAqB,KACxC,WAAW,SAAS,UAAU,MAChC,SACA,KACA;AACA,UAAM,cAAc,mBAAmB,EAAE,OAAO,IAAG,CAAE;AAErD,QAAI,WAAW,SAAS,qBAAqB,GAAG;AAC9C,YAAM,kBAAkB,6BAA6B;QACnD;QACA,IAAI;OACL;AACD,cAAQ,sBAAsB;IAChC;AACA,QAAI,WAAW,SAAS,UAAU,GAAG;AACnC,YAAM,SAAS,cAAc,EAAE,OAAO,aAAa,IAAG,CAAE;AACxD,YAAM,WAAW,eAAe;QAC9B;QACA;QACA;QACA,IAAI;OACL;AACD,cAAQ,WAAW;IACrB;EACF;AAEA,MAAI,WAAW,SAAS,SAAS;AAAG,YAAQ,UAAU,MAAMA,YAAU;AAEtE,MAAI,WAAW,SAAS,OAAO,KAAK,OAAO,UAAU,eAAe,SAAS;AAC3E,QAAI,cAAc;AAChB,YAAMC,WAAU,MAAMD,YAAU;AAChC,cAAQ,QAAQ,MAAM,aAAa,QAAQ;QACzC,SAAS,QAAQ;QACjB,SAAAC;QACA;OACD;IACH,OAAO;AACL,cAAQ,QAAQ,MAAM,UACpB,QACA,qBACA,qBAAqB,EACrB;QACA,SAAS,QAAQ;QACjB,UAAU;OACX;IACH;EACF;AAEA,OACG,WAAW,SAAS,MAAM,KAAK,WAAW,SAAS,MAAM,MAC1D,OAAO,SAAS,aAChB;AACA,QAAI;AACF,cAAQ,OAAO,mBACb,OAAkC;IAEtC,QAAQ;AAEN,YAAMC,SAAQ,MAAMH,UAAQ;AAC5B,cAAQ,OACN,OAAOG,QAAO,kBAAkB,WAAW,YAAY;IAC3D;EACF;AAEA,MAAI,WAAW,SAAS,MAAM,GAAG;AAG/B,QAAI,QAAQ,SAAS,YAAY,QAAQ,SAAS,WAAW;AAE3D,UACE,OAAO,QAAQ,iBAAiB,eAChC,OAAO,QAAQ,yBAAyB,aACxC;AACA,cAAMA,SAAQ,MAAMH,UAAQ;AAC5B,cAAM,EAAE,cAAc,qBAAoB,IACxC,MAAM,4BAA4B,QAAQ;UACxC,OAAOG;UACP;UACA;SACD;AAEH,YACE,OAAO,KAAK,yBAAyB,eACrC,KAAK,gBACL,KAAK,eAAe;AAEpB,gBAAM,IAAI,wBAAwB;YAChC;WACD;AAEH,gBAAQ,uBAAuB;AAC/B,gBAAQ,eAAe;MACzB;IACF,OAAO;AAEL,UACE,OAAO,KAAK,iBAAiB,eAC7B,OAAO,KAAK,yBAAyB;AAErC,cAAM,IAAI,6BAA4B;AAExC,YAAMA,SAAQ,MAAMH,UAAQ;AAC5B,YAAM,EAAE,UAAU,UAAS,IAAK,MAAM,4BACpC,QACA;QACE,OAAOG;QACP;QACA;QACA,MAAM;OACP;AAEH,cAAQ,WAAW;IACrB;EACF;AAEA,MAAI,WAAW,SAAS,KAAK,KAAK,OAAO,QAAQ;AAC/C,YAAQ,MAAM,MAAM,UAClB,QACA,aACA,aAAa,EACb;MACA,GAAG;MACH,SAAS,UACL,EAAE,SAAS,QAAQ,SAAS,MAAM,WAAU,IAC5C;KACoB;AAE5B,gBAAc,OAAkC;AAEhD,SAAO,QAAQ;AAEf,SAAO;AACT;;;AC/VA,eAAsB,WACpB,QACA,EAAE,SAAS,aAAa,WAAW,SAAQ,GAAwB;AAEnE,QAAM,iBAAiB,cAAc,YAAY,WAAW,IAAI;AAEhE,QAAM,UAAU,MAAM,OAAO,QAAQ;IACnC,QAAQ;IACR,QAAQ,CAAC,SAAS,kBAAkB,QAAQ;GAC7C;AACD,SAAO,OAAO,OAAO;AACvB;;;ACoBA,eAAsB,YAIpB,QACA,MAAkC;AAElC,QAAM,EAAE,SAAS,WAAW,OAAO,QAAO,IAAK;AAC/C,QAAM,UAAU,WAAW,aAAa,QAAQ,IAAI;AAEpD,MAAI;AA0EF,QAAS,kBAAT,SAAyB,YAIxB;AACC,YAAM,EAAE,OAAAC,QAAO,SAAAC,UAAS,kBAAAC,kBAAgB,IAAK;AAC7C,aAAO,OAAO,QAAQ;QACpB,QAAQ;QACR,QAAQA,oBACJ,CAACD,UAASD,UAAS,UAAUE,iBAAgB,IAC7CF,SACE,CAACC,UAASD,MAAK,IACf,CAACC,QAAO;OACf;IACH;AAvFA,UAAM,EACJ,YACA,mBACA,OACA,qBACA,aACA,UACA,MACA,KACA,UACA,kBACA,cACA,sBACA,OACA,OACA,eACA,GAAG,KAAI,IACJ,MAAM,0BAA0B,QAAQ;MAC3C,GAAG;MACH;;;QAGE,SAAS,SAAS,UAAU,SAAY,CAAC,qBAAqB;;KAC1B;AAExC,UAAM,iBAAiB,cAAc,YAAY,WAAW,IAAI;AAChE,UAAM,QAAQ,kBAAkB;AAEhC,UAAM,mBAAmB,uBAAuB,aAAa;AAE7D,UAAM,KAAK,OAAO,YAAW;AAE3B,UAAI,KAAK;AAAI,eAAO,KAAK;AAIzB,UAAI,qBAAqB,kBAAkB,SAAS;AAClD,eAAO,MAAM,4BAA4B;UACvC,eAAe,kBAAkB,CAAC;SACnC,EAAE,MAAM,MAAK;AACZ,gBAAM,IAAI,UACR,4DAA4D;QAEhE,CAAC;AAGH,aAAO;IACT,GAAE;AAEF,kBAAc,IAA+B;AAE7C,UAAM,cAAc,OAAO,OAAO,YAAY,oBAAoB;AAClE,UAAM,SAAS,eAAe;AAE9B,UAAM,UAAU,OAAO;;MAErB,GAAG,QAAQ,MAAM,EAAE,QAAQ,YAAW,CAAE;MACxC,MAAM,SAAS;MACf;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;KACqB;AAkBvB,QAAI,WAAW,OACb,MAAM,gBAAgB,EAAE,OAAO,SAAS,iBAAgB,CAAE,CAAC;AAM7D,QAAI,mBAAmB;AACrB,YAAME,SAAQ,MAAM,WAAW,QAAQ,EAAE,SAAS,QAAQ,KAAI,CAAE;AAChE,YAAM,YAAY,MAAM,QAAQ,IAC9B,kBAAkB,IAAI,OAAO,kBAAiB;AAC5C,cAAM,EAAE,gBAAe,IAAK;AAC5B,cAAMC,YAAW,MAAM,gBAAgB;UACrC;UACA,SAAS;YACP,mBAAmB;YACnB;YACA,MAAM,SAAS;YACf,IAAI;YACJ,OAAO,YAAYD,MAAK;;UAE1B;SACD,EAAE,MAAM,MAAM,OAAQ;AACvB,eAAO,KAAK,OAAOC,SAAQ;MAC7B,CAAC,CAAC;AAEJ,kBAAY,UAAU,OAAO,CAAC,KAAK,SAAS,MAAM,MAAM,EAAE;IAC5D;AAEA,WAAO;EACT,SAAS,KAAK;AACZ,UAAM,oBAAoB,KAAkB;MAC1C,GAAG;MACH;MACA,OAAO,OAAO;KACf;EACH;AACF;;;AC7IA,eAAsB,oBAOpB,QACA,YAAyE;AAEzE,QAAM,EAAE,KAAAC,MAAK,SAAS,MAAM,cAAc,YAAY,GAAG,QAAO,IAC9D;AACF,QAAM,OAAO,mBAAmB;IAC9B,KAAAA;IACA;IACA;GAC+B;AACjC,MAAI;AACF,UAAM,MAAM,MAAM,UAChB,QACA,aACA,aAAa,EACb;MACA,MAAM,GAAG,IAAI,GAAG,aAAa,WAAW,QAAQ,MAAM,EAAE,IAAI,EAAE;MAC9D,IAAI;MACJ,GAAG;KACgC;AACrC,WAAO;EACT,SAAS,OAAO;AACd,UAAM,UAAU,QAAQ,UAAU,aAAa,QAAQ,OAAO,IAAI;AAClE,UAAM,iBAAiB,OAAoB;MACzC,KAAAA;MACA;MACA;MACA,UAAU;MACV;MACA,QAAQ,SAAS;KAClB;EACH;AACF;;;ACzCA,IAAMC,YAAW;AAEX,SAAU,eAOd,YAA0E;AAE1E,QAAM,EACJ,KAAAC,MACA,MACA,QAAQ,SACR,OAAM,IACJ;AAEJ,QAAM,SAAS,WAAW;AAC1B,QAAM,CAAC,WAAW,GAAG,SAAS,IAAI;AAClC,MAAI,CAAC;AAAW,UAAM,IAAI,kCAAkC,EAAE,UAAAD,UAAQ,CAAE;AAExE,QAAM,WAAW,MAAK;AACpB,QAAIC,KAAI,WAAW;AAAG,aAAOA,KAAI,CAAC;AAClC,WAAOA,KAAI,KACT,CAAC,MACC,EAAE,SAAS,WACX,cAAc,gBAAgB,cAAc,CAAC,CAAoB,CAAC;EAExE,GAAE;AAEF,MAAI,EAAE,WAAW,UAAU,YAAY,QAAQ,SAAS;AACtD,UAAM,IAAI,+BAA+B,WAAW,EAAE,UAAAD,UAAQ,CAAE;AAElE,QAAM,EAAE,MAAM,OAAM,IAAK;AACzB,QAAM,YAAY,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE,KAAK;AAE9D,MAAI,OAAY,YAAY,CAAA,IAAK,CAAA;AAGjC,QAAM,gBAAgB,OAAO,OAAO,CAAC,MAAM,aAAa,KAAK,EAAE,OAAO;AACtE,WAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,UAAM,QAAQ,cAAc,CAAC;AAC7B,UAAM,QAAQ,UAAU,CAAC;AACzB,QAAI,CAAC;AACH,YAAM,IAAI,wBAAwB;QAChC;QACA;OACD;AACH,SAAK,YAAY,IAAI,MAAM,QAAQ,CAAC,IAAI,YAAY,EAAE,OAAO,OAAO,MAAK,CAAE;EAC7E;AAGA,QAAM,mBAAmB,OAAO,OAAO,CAAC,MAAM,EAAE,aAAa,KAAK,EAAE,QAAQ;AAC5E,MAAI,iBAAiB,SAAS,GAAG;AAC/B,QAAI,QAAQ,SAAS,MAAM;AACzB,UAAI;AACF,cAAM,cAAc,oBAAoB,kBAAkB,IAAI;AAC9D,YAAI,aAAa;AACf,cAAI;AAAW,mBAAO,CAAC,GAAG,MAAM,GAAG,WAAW;eACzC;AACH,qBAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAChD,mBAAK,iBAAiB,CAAC,EAAE,IAAK,IAAI,YAAY,CAAC;YACjD;UACF;QACF;MACF,SAAS,KAAK;AACZ,YAAI,QAAQ;AACV,cACE,eAAe,oCACf,eAAe;AAEf,kBAAM,IAAI,sBAAsB;cAC9B;cACA;cACA,QAAQ;cACR,MAAM,KAAK,IAAI;aAChB;AACH,gBAAM;QACR;MACF;IACF,WAAW,QAAQ;AACjB,YAAM,IAAI,sBAAsB;QAC9B;QACA,MAAM;QACN,QAAQ;QACR,MAAM;OACP;IACH;EACF;AAEA,SAAO;IACL,WAAW;IACX,MAAM,OAAO,OAAO,IAAI,EAAE,SAAS,IAAI,OAAO;;AAElD;AAEA,SAAS,YAAY,EAAE,OAAO,MAAK,GAAuC;AACxE,MACE,MAAM,SAAS,YACf,MAAM,SAAS,WACf,MAAM,SAAS,WACf,MAAM,KAAK,MAAM,kBAAkB;AAEnC,WAAO;AACT,QAAM,aAAa,oBAAoB,CAAC,KAAK,GAAG,KAAK,KAAK,CAAA;AAC1D,SAAO,WAAW,CAAC;AACrB;;;AC1GM,SAAU,eAQd,YAA4D;AAE5D,QAAM,EAAE,KAAAE,MAAK,MAAM,MAAM,SAAS,KAAI,IAAK;AAE3C,QAAM,aAAa,MAAK;AACtB,QAAI,CAAC,WAAW;AAAW,aAAO;AAClC,QAAI,MAAM,QAAQ,WAAW,SAAS;AAAG,aAAO,WAAW;AAC3D,WAAO,CAAC,WAAW,SAAmB;EACxC,GAAE;AAEF,SAAO,KACJ,IAAI,CAAC,QAAO;AACX,QAAI;AACF,YAAM,UAAWA,KAAY,KAC3B,CAACC,aACCA,SAAQ,SAAS,WACjB,IAAI,OAAO,CAAC,MAAM,gBAAgBA,QAAO,CAAC;AAE9C,UAAI,CAAC;AAAS,eAAO;AAErB,YAAM,QAAQ,eAAe;QAC3B,GAAG;QACH,KAAK,CAAC,OAAO;QACb;OACD;AAGD,UAAI,aAAa,CAAC,UAAU,SAAS,MAAM,SAAS;AAAG,eAAO;AAG9D,UACE,CAAC,aAAa;QACZ,MAAM,MAAM;QACZ,QAAQ,QAAQ;QAChB,WAAW;OACZ;AAED,eAAO;AAET,aAAO,EAAE,GAAG,OAAO,GAAG,IAAG;IAC3B,SAAS,KAAK;AACZ,UAAIC;AACJ,UAAI;AAEJ,UAAI,eAAe;AAAgC,eAAO;AAC1D,UACE,eAAe,yBACf,eAAe,yBACf;AAEA,YAAI;AAAQ,iBAAO;AACnB,QAAAA,aAAY,IAAI,QAAQ;AACxB,oBAAY,IAAI,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE,KAAK;MACtE;AAGA,aAAO,EAAE,GAAG,KAAK,MAAM,YAAY,CAAA,IAAK,CAAA,GAAI,WAAAA,WAAS;IACvD;EACF,CAAC,EACA,OAAO,OAAO;AAKnB;AAEA,SAAS,aAAa,YAIrB;AACC,QAAM,EAAE,MAAM,QAAQ,UAAS,IAAK;AAEpC,MAAI,CAAC;AAAW,WAAO;AACvB,MAAI,CAAC;AAAM,WAAO;AAElB,WAAS,QAAQ,OAA0B,OAAgB,KAAY;AACrE,QAAI;AACF,UAAI,MAAM,SAAS;AACjB,eAAO,eAAe,OAAkB,GAAc;AACxD,UAAI,MAAM,SAAS,YAAY,MAAM,SAAS;AAC5C,eAAO,UAAU,QAAQ,KAAe,CAAC,MAAM;AACjD,aAAO,UAAU;IACnB,QAAQ;AACN,aAAO;IACT;EACF;AAEA,MAAI,MAAM,QAAQ,IAAI,KAAK,MAAM,QAAQ,SAAS,GAAG;AACnD,WAAO,UAAU,MAAM,CAAC,OAAOC,WAAS;AACtC,UAAI,UAAU,QAAQ,UAAU;AAAW,eAAO;AAClD,YAAM,QAAQ,OAAOA,MAAK;AAC1B,UAAI,CAAC;AAAO,eAAO;AACnB,YAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACpD,aAAO,OAAO,KAAK,CAACC,WAAU,QAAQ,OAAOA,QAAO,KAAKD,MAAK,CAAC,CAAC;IAClE,CAAC;EACH;AAEA,MACE,OAAO,SAAS,YAChB,CAAC,MAAM,QAAQ,IAAI,KACnB,OAAO,cAAc,YACrB,CAAC,MAAM,QAAQ,SAAS;AAExB,WAAO,OAAO,QAAQ,SAAS,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,MAAK;AACtD,UAAI,UAAU,QAAQ,UAAU;AAAW,eAAO;AAClD,YAAM,QAAQ,OAAO,KAAK,CAACE,WAAUA,OAAM,SAAS,GAAG;AACvD,UAAI,CAAC;AAAO,eAAO;AACnB,YAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACpD,aAAO,OAAO,KAAK,CAACD,WAClB,QAAQ,OAAOA,QAAQ,KAAiC,GAAG,CAAC,CAAC;IAEjE,CAAC;AAEH,SAAO;AACT;;;ACrNM,SAAU,UACd,KACA,EACE,MACA,UAAS,IACyD,CAAA,GAAE;AAEtE,SAAO;IACL,GAAG;IACH,WAAW,IAAI,YAAY,IAAI,YAAY;IAC3C,aAAa,IAAI,cAAc,OAAO,IAAI,WAAW,IAAI;IACzD,UAAU,IAAI,WAAW,OAAO,IAAI,QAAQ,IAAI;IAChD,iBAAiB,IAAI,kBAAkB,IAAI,kBAAkB;IAC7D,kBAAkB,IAAI,mBAClB,OAAO,IAAI,gBAAgB,IAC3B;IACJ,GAAI,YAAY,EAAE,MAAM,UAAS,IAAK,CAAA;;AAE1C;;;AC8GA,eAAsB,QAWpB,QACA,EACE,SACA,WACA,WACA,SACA,OACA,QAAQ,SACR,MACA,QAAQ,QAAO,IACuD,CAAA,GAAE;AAE1E,QAAM,SAAS,WAAW;AAC1B,QAAM,SAAS,YAAY,QAAQ,CAAC,KAAK,IAAI;AAE7C,MAAI,SAAqB,CAAA;AACzB,MAAI,QAAQ;AACV,UAAM,UAAW,OAAsB,QAAQ,CAACE,WAC9C,kBAAkB;MAChB,KAAK,CAACA,MAAK;MACX,WAAYA,OAAmB;MAC/B,MAAM,UAAU,SAAY;KACE,CAAC;AAGnC,aAAS,CAAC,OAAmB;AAC7B,QAAI;AAAO,eAAS,OAAO,CAAC;EAC9B;AAEA,MAAI;AACJ,MAAI,WAAW;AACb,WAAO,MAAM,OAAO,QAAQ;MAC1B,QAAQ;MACR,QAAQ,CAAC,EAAE,SAAS,QAAQ,UAAS,CAAE;KACxC;EACH,OAAO;AACL,WAAO,MAAM,OAAO,QAAQ;MAC1B,QAAQ;MACR,QAAQ;QACN;UACE;UACA;UACA,WACE,OAAO,cAAc,WAAW,YAAY,SAAS,IAAI;UAC3D,SAAS,OAAO,YAAY,WAAW,YAAY,OAAO,IAAI;;;KAGnE;EACH;AAEA,QAAM,gBAAgB,KAAK,IAAI,CAAC,QAAQ,UAAU,GAAG,CAAC;AACtD,MAAI,CAAC;AACH,WAAO;AAOT,SAAO,eAAe;IACpB,KAAK;IACL;IACA,MAAM;IACN;GACD;AAOH;;;ACvGA,eAAsB,kBAQpB,QACA,YAMC;AAID,QAAM,EACJ,KAAAC,MACA,SACA,MACA,WACA,WACA,WACA,SACA,OAAM,IACJ;AACJ,QAAM,QAAQ,YACV,WAAW,EAAE,KAAAA,MAAK,MAAM,UAAS,CAA0B,IAC3D;AACJ,QAAM,SAAS,CAAC,QACXA,KAAY,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO,IAC7C;AACJ,SAAO,UACL,QACA,SACA,SAAS,EACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAC0B;AAO9B;;;ACnEA,eAAsB,aAMpB,QACA,YAA2D;AAE3D,QAAM,EAAE,KAAAC,MAAK,SAAS,MAAM,cAAc,GAAG,KAAI,IAC/C;AACF,QAAM,WAAW,mBAAmB;IAClC,KAAAA;IACA;IACA;GAC+B;AACjC,MAAI;AACF,UAAM,EAAE,KAAI,IAAK,MAAM,UACrB,QACA,MACA,MAAM,EACN;MACA,GAAI;MACJ,MAAM;MACN,IAAI;KACL;AACD,WAAO,qBAAqB;MAC1B,KAAAA;MACA;MACA;MACA,MAAM,QAAQ;KACf;EACH,SAAS,OAAO;AACd,UAAM,iBAAiB,OAAoB;MACzC,KAAAA;MACA;MACA;MACA,UAAU;MACV;KACD;EACH;AACF;;;ACiFA,eAAsB,iBAapB,QACA,YAOC;AAYD,QAAM,EAAE,KAAAC,MAAK,SAAS,MAAM,YAAY,cAAc,GAAG,YAAW,IAClE;AAEF,QAAM,UAAU,YAAY,UACxB,aAAa,YAAY,OAAO,IAChC,OAAO;AACX,QAAM,WAAW,mBAAmB,EAAE,KAAAA,MAAK,MAAM,aAAY,CAAE;AAC/D,MAAI;AACF,UAAM,EAAE,KAAI,IAAK,MAAM,UACrB,QACA,MACA,MAAM,EACN;MACA,OAAO;MACP,MAAM,GAAG,QAAQ,GAAG,aAAa,WAAW,QAAQ,MAAM,EAAE,IAAI,EAAE;MAClE,IAAI;MACJ,GAAG;MACH;KACD;AACD,UAAM,SAAS,qBAAqB;MAClC,KAAAA;MACA;MACA;MACA,MAAM,QAAQ;KACf;AACD,UAAM,eAAeA,KAAI,OACvB,CAAC,YACC,UAAU,WAAW,QAAQ,SAAS,WAAW,YAAY;AAEjE,WAAO;MACL;MACA,SAAS;QACP,KAAK;QACL;QACA;QACA;QACA;QACA,GAAG;QACH;;;EAWN,SAAS,OAAO;AACd,UAAM,iBAAiB,OAAoB;MACzC,KAAAA;MACA;MACA;MACA,UAAU;MACV;MACA,QAAQ,SAAS;KAClB;EACH;AACF;;;ACnTO,IAAM,iBAA+B,oBAAI,IAAG;AAK5C,IAAM,eAA6B,oBAAI,IAAG;AAMjD,IAAI,gBAAgB;AAOd,SAAU,QACd,YACA,WACA,IAA2B;AAE3B,QAAM,aAAa,EAAE;AAErB,QAAM,eAAe,MAAM,eAAe,IAAI,UAAU,KAAK,CAAA;AAE7D,QAAM,cAAc,MAAK;AACvB,UAAMC,aAAY,aAAY;AAC9B,mBAAe,IACb,YACAA,WAAU,OAAO,CAAC,OAAY,GAAG,OAAO,UAAU,CAAC;EAEvD;AAEA,QAAM,UAAU,MAAK;AACnB,UAAMA,aAAY,aAAY;AAC9B,QAAI,CAACA,WAAU,KAAK,CAAC,OAAY,GAAG,OAAO,UAAU;AAAG;AACxD,UAAMC,WAAU,aAAa,IAAI,UAAU;AAC3C,QAAID,WAAU,WAAW,KAAKC;AAAS,MAAAA,SAAO;AAC9C,gBAAW;EACb;AAEA,QAAM,YAAY,aAAY;AAC9B,iBAAe,IAAI,YAAY;IAC7B,GAAG;IACH,EAAE,IAAI,YAAY,KAAK,UAAS;GACjC;AAED,MAAI,aAAa,UAAU,SAAS;AAAG,WAAO;AAE9C,QAAM,OAAkB,CAAA;AACxB,aAAW,OAAO,WAAW;AAC3B,SAAK,GAAG,IAAK,IACR,SACD;AACF,YAAMD,aAAY,aAAY;AAC9B,UAAIA,WAAU,WAAW;AAAG;AAC5B,iBAAW,YAAYA;AAAW,iBAAS,IAAI,GAAG,IAAI,GAAG,IAAI;IAC/D;EACF;AAEA,QAAM,UAAU,GAAG,IAAI;AACvB,MAAI,OAAO,YAAY;AAAY,iBAAa,IAAI,YAAY,OAAO;AAEvE,SAAO;AACT;;;AC3EA,eAAsB,KAAK,MAAY;AACrC,SAAO,IAAI,QAAQ,CAAC,QAAQ,WAAW,KAAK,IAAI,CAAC;AACnD;;;ACeM,SAAU,KACd,IACA,EAAE,aAAa,iBAAiB,SAAQ,GAAqB;AAE7D,MAAI,SAAS;AAEb,QAAM,UAAU,MAAO,SAAS;AAEhC,QAAM,QAAQ,YAAW;AACvB,QAAI,OAAoB;AACxB,QAAI;AAAa,aAAO,MAAM,GAAG,EAAE,QAAQ,QAAO,CAAE;AAEpD,UAAM,cAAe,MAAM,kBAAkB,IAAI,KAAM;AACvD,UAAM,KAAK,WAAW;AAEtB,UAAME,QAAO,YAAW;AACtB,UAAI,CAAC;AAAQ;AACb,YAAM,GAAG,EAAE,QAAQ,QAAO,CAAE;AAC5B,YAAM,KAAK,QAAQ;AACnB,MAAAA,MAAI;IACN;AAEA,IAAAA,MAAI;EACN;AACA,QAAK;AAEL,SAAO;AACT;;;ACzCO,IAAM,eAA6B,oBAAI,IAAG;AAE1C,IAAM,gBAA8B,oBAAI,IAAG;AAI5C,SAAU,SAAeC,WAAgB;AAC7C,QAAM,aAAa,CAAOA,WAAkB,WAA8B;IACxE,OAAO,MAAM,MAAM,OAAOA,SAAQ;IAClC,KAAK,MAAM,MAAM,IAAIA,SAAQ;IAC7B,KAAK,CAAC,SAAe,MAAM,IAAIA,WAAU,IAAI;;AAG/C,QAAM,UAAU,WAA0BA,WAAU,YAAY;AAChE,QAAM,WAAW,WACfA,WACA,aAAa;AAGf,SAAO;IACL,OAAO,MAAK;AACV,cAAQ,MAAK;AACb,eAAS,MAAK;IAChB;IACA;IACA;;AAEJ;AAaA,eAAsB,UACpB,IACA,EAAE,UAAAA,WAAU,YAAY,OAAO,kBAAiB,GAAuB;AAEvE,QAAM,QAAQ,SAAeA,SAAQ;AAKrC,QAAM,WAAW,MAAM,SAAS,IAAG;AACnC,MAAI,YAAY,YAAY,GAAG;AAC7B,UAAM,OAAM,oBAAI,KAAI,GAAG,QAAO,IAAK,SAAS,QAAQ,QAAO;AAC3D,QAAI,MAAM;AAAW,aAAO,SAAS;EACvC;AAEA,MAAI,UAAU,MAAM,QAAQ,IAAG;AAC/B,MAAI,CAAC,SAAS;AACZ,cAAU,GAAE;AAIZ,UAAM,QAAQ,IAAI,OAAO;EAC3B;AAEA,MAAI;AACF,UAAM,OAAO,MAAM;AAInB,UAAM,SAAS,IAAI,EAAE,SAAS,oBAAI,KAAI,GAAI,KAAI,CAAE;AAEhD,WAAO;EACT;AAGE,UAAM,QAAQ,MAAK;EACrB;AACF;;;AC5DA,IAAM,WAAW,CAAC,OAAe,eAAe,EAAE;AAiClD,eAAsB,eACpB,QACA,EAAE,YAAY,OAAO,UAAS,IAA+B,CAAA,GAAE;AAE/D,QAAM,iBAAiB,MAAM,UAC3B,MACE,OAAO,QAAQ;IACb,QAAQ;GACT,GACH,EAAE,UAAU,SAAS,OAAO,GAAG,GAAG,UAAS,CAAE;AAE/C,SAAO,OAAO,cAAc;AAC9B;;;ACwEA,eAAsB,iBAUpB,SACA,EACE,OAAM,GAQP;AAWD,QAAM,SAAS,YAAY,UAAU,OAAO;AAE5C,QAAM,OAAO,MAAM,OAAO,QAAQ;IAChC,QAAQ;IACR,QAAQ,CAAC,OAAO,EAAE;GACnB;AAED,MAAI,OAAO,KAAK,CAAC,MAAM;AACrB,WAAO;AAST,QAAM,gBAAgB,KAAK,IAAI,CAAC,QAAQ,UAAU,GAAa,CAAC;AAChE,MAAI,EAAE,SAAS,WAAW,CAAC,OAAO;AAChC,WAAO;AAQT,SAAO,eAAe;IACpB,KAAK,OAAO;IACZ,MAAM;IACN;GACD;AAQH;;;ACzKA,eAAsB,gBAIpB,SACA,EAAE,OAAM,GAA6B;AAErC,SAAO,OAAO,QAAQ;IACpB,QAAQ;IACR,QAAQ,CAAC,OAAO,EAAE;GACnB;AACH;;;ACmFM,SAAU,mBAOd,QACA,YAA2E;AAE3E,QAAM,EACJ,KAAAC,MACA,SACA,MACA,QAAQ,MACR,WACA,WACA,SACA,QACA,MAAM,OACN,kBAAkB,OAAO,iBACzB,QAAQ,QAAO,IACb;AAEJ,QAAM,iBAAiB,MAAK;AAC1B,QAAI,OAAO,UAAU;AAAa,aAAO;AACzC,QAAI,OAAO,cAAc;AAAU,aAAO;AAC1C,QAAI,OAAO,UAAU,SAAS;AAAa,aAAO;AAClD,QACE,OAAO,UAAU,SAAS,cAC1B,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,SAAS;AAE/C,aAAO;AACT,WAAO;EACT,GAAE;AAEF,QAAM,oBAAoB,MAAK;AAC7B,UAAM,SAAS,WAAW;AAC1B,UAAM,aAAa,UAAU;MAC3B;MACA;MACA;MACA;MACA,OAAO;MACP;MACA;MACA;MACA;KACD;AAED,WAAO,QAAQ,YAAY,EAAE,QAAQ,QAAO,GAAI,CAAC,SAAQ;AACvD,UAAI;AACJ,UAAI,cAAc;AAAW,8BAAsB,YAAY;AAC/D,UAAI;AACJ,UAAI,cAAc;AAElB,YAAM,UAAU,KACd,YAAW;AACT,YAAI,CAAC,aAAa;AAChB,cAAI;AACF,qBAAU,MAAM,UACd,QACA,2BACA,2BAA2B,EAC3B;cACA,KAAAA;cACA;cACA;cACA;cACA;cACA;aACD;UACH,QAAQ;UAAC;AACT,wBAAc;AACd;QACF;AAEA,YAAI;AACF,cAAI;AACJ,cAAI,QAAQ;AACV,mBAAO,MAAM,UACX,QACA,kBACA,kBAAkB,EAClB,EAAE,OAAM,CAAE;UACd,OAAO;AAKL,kBAAM,cAAc,MAAM,UACxB,QACA,gBACA,gBAAgB,EAChB,CAAA,CAAE;AAKJ,gBAAI,uBAAuB,sBAAsB,aAAa;AAC5D,qBAAO,MAAM,UACX,QACA,mBACA,mBAAmB,EACnB;gBACA,KAAAA;gBACA;gBACA;gBACA;gBACA,WAAW,sBAAsB;gBACjC,SAAS;gBACT;eACoC;YACxC,OAAO;AACL,qBAAO,CAAA;YACT;AACA,kCAAsB;UACxB;AAEA,cAAI,KAAK,WAAW;AAAG;AACvB,cAAI;AAAO,iBAAK,OAAO,IAAW;;AAC7B,uBAAW,OAAO;AAAM,mBAAK,OAAO,CAAC,GAAG,CAAQ;QACvD,SAAS,KAAK;AAGZ,cAAI,UAAU,eAAe;AAC3B,0BAAc;AAChB,eAAK,UAAU,GAAY;QAC7B;MACF,GACA;QACE,aAAa;QACb,UAAU;OACX;AAGH,aAAO,YAAW;AAChB,YAAI;AACF,gBAAM,UACJ,QACA,iBACA,iBAAiB,EACjB,EAAE,OAAM,CAAE;AACd,gBAAO;MACT;IACF,CAAC;EACH;AAEA,QAAM,yBAAyB,MAAK;AAClC,UAAM,SAAS,WAAW;AAC1B,UAAM,aAAa,UAAU;MAC3B;MACA;MACA;MACA;MACA,OAAO;MACP;MACA;MACA;KACD;AAED,QAAI,SAAS;AACb,QAAI,cAAc,MAAO,SAAS;AAClC,WAAO,QAAQ,YAAY,EAAE,QAAQ,QAAO,GAAI,CAAC,SAAQ;AACvD;AAAC,OAAC,YAAW;AACX,YAAI;AACF,gBAAM,aAAa,MAAK;AACtB,gBAAI,OAAO,UAAU,SAAS,YAAY;AACxC,oBAAMC,aAAY,OAAO,UAAU,WAAW,KAC5C,CAACA,eACCA,WAAU,OAAO,SAAS,WAAW;AAEzC,kBAAI,CAACA;AAAW,uBAAO,OAAO;AAC9B,qBAAOA,WAAU;YACnB;AACA,mBAAO,OAAO;UAChB,GAAE;AAEF,gBAAM,SAAqB,YACvB,kBAAkB;YAChB,KAAKD;YACL;YACA;WAC8B,IAChC,CAAA;AAEJ,gBAAM,EAAE,aAAa,aAAY,IAAK,MAAM,UAAU,UAAU;YAC9D,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAM,CAAE;YACpC,OAAO,MAAS;AACd,kBAAI,CAAC;AAAQ;AACb,oBAAM,MAAM,KAAK;AACjB,kBAAI;AACF,sBAAM,EAAE,WAAAE,YAAW,MAAAC,MAAI,IAAK,eAAe;kBACzC,KAAKH;kBACL,MAAM,IAAI;kBACV,QAAQ,IAAI;kBACZ,QAAQ;iBACT;AACD,sBAAM,YAAY,UAAU,KAAK;kBAC/B,MAAAG;kBACA,WAAWD;iBACZ;AACD,qBAAK,OAAO,CAAC,SAAS,CAAQ;cAChC,SAAS,KAAK;AACZ,oBAAIA;AACJ,oBAAI;AACJ,oBACE,eAAe,yBACf,eAAe,yBACf;AAEA,sBAAI;AAAS;AACb,kBAAAA,aAAY,IAAI,QAAQ;AACxB,8BAAY,IAAI,QAAQ,QAAQ,KAC9B,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE,KAAK;gBAEnC;AAGA,sBAAM,YAAY,UAAU,KAAK;kBAC/B,MAAM,YAAY,CAAA,IAAK,CAAA;kBACvB,WAAAA;iBACD;AACD,qBAAK,OAAO,CAAC,SAAS,CAAQ;cAChC;YACF;YACA,QAAQ,OAAY;AAClB,mBAAK,UAAU,KAAK;YACtB;WACD;AACD,wBAAc;AACd,cAAI,CAAC;AAAQ,wBAAW;QAC1B,SAAS,KAAK;AACZ,oBAAU,GAAY;QACxB;MACF,GAAE;AACF,aAAO,MAAM,YAAW;IAC1B,CAAC;EACH;AAEA,SAAO,gBAAgB,kBAAiB,IAAK,uBAAsB;AACrE;;;AC5UA,eAAsB,mBACpB,QACA,EAAE,sBAAqB,GAAgC;AAEvD,SAAO,OAAO,QACZ;IACE,QAAQ;IACR,QAAQ,CAAC,qBAAqB;KAEhC,EAAE,YAAY,EAAC,CAAE;AAErB;;;AC9CM,IAAO,4BAAP,cAAyC,UAAS;EACtD,YAAY,EAAE,QAAO,GAAwB;AAC3C,UAAM,wCAAwC,OAAO,MAAM;MACzD,cAAc;QACZ;QACA,8CAA8C,OAAO;QACrD;QACA;;MAEF,MAAM;KACP;EACH;;;;ACkDF,eAAsB,gBACpB,QACA,YAAqC;AAErC,QAAM,EAAE,SAAS,SAAS,YAAW,IAAK;AAE1C,MAAI;AACF,UAAM,CACJ,QACA,MACA,SACA,SACA,mBACA,MACA,UAAU,IACR,MAAM,UACR,QACA,cACA,cAAc,EACd;MACA;MACA;MACA,cAAc;MACd;MACA;KACD;AAED,WAAO;MACL,QAAQ;QACN;QACA;QACA,SAAS,OAAO,OAAO;QACvB;QACA;;MAEF;MACA;;EAEJ,SAAS,GAAG;AACV,UAAM,QAAQ;AACd,QACE,MAAM,SAAS,oCACf,MAAM,MAAM,SAAS,iCACrB;AACA,YAAM,IAAI,0BAA0B,EAAE,QAAO,CAAE;IACjD;AACA,UAAM;EACR;AACF;AAEA,IAAM,MAAM;EACV;IACE,QAAQ,CAAA;IACR,MAAM;IACN,SAAS;MACP,EAAE,MAAM,UAAU,MAAM,SAAQ;MAChC,EAAE,MAAM,QAAQ,MAAM,SAAQ;MAC9B,EAAE,MAAM,WAAW,MAAM,SAAQ;MACjC,EAAE,MAAM,WAAW,MAAM,UAAS;MAClC,EAAE,MAAM,qBAAqB,MAAM,UAAS;MAC5C,EAAE,MAAM,QAAQ,MAAM,UAAS;MAC/B,EAAE,MAAM,cAAc,MAAM,YAAW;;IAEzC,iBAAiB;IACjB,MAAM;;;;;ACnIV,IAAME,QAAO;AACb,IAAI,QAAQA;AACZ,IAAI;AAEE,SAAU,IAAI,SAAS,IAAE;AAC7B,MAAI,CAAC,UAAU,QAAQ,SAASA,QAAO,GAAG;AACxC,aAAS;AACT,YAAQ;AACR,aAAS,IAAI,GAAG,IAAIA,OAAM,KAAK;AAC7B,iBAAY,MAAM,KAAK,OAAM,IAAK,MAAO,GAAG,SAAS,EAAE,EAAE,UAAU,CAAC;IACtE;EACF;AACA,SAAO,OAAO,UAAU,OAAO,UAAU,MAAM;AACjD;;;AC0MM,SAAU,aAAa,YAAwB;AACnD,QAAM,EACJ,OACA,YAAY,WAAW,mBAAmB,KAC1C,UACA,MAAM,QACN,OAAO,eACP,kBAAkB,KAClB,OAAO,OAAM,IACX;AAEJ,QAAM,QAAQ,WAAW;AACzB,QAAM,UAAU,WAAW,UACvB,aAAa,WAAW,OAAO,IAC/B;AACJ,QAAM,EAAE,QAAAC,SAAQ,SAAS,MAAK,IAAK,WAAW,UAAU;IACtD;IACA;GACD;AACD,QAAM,YAAY,EAAE,GAAGA,SAAQ,GAAG,MAAK;AAEvC,QAAM,SAAS;IACb;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,KAAK,IAAG;;AAGV,WAAS,OAAO,MAAmB;AAEjC,WAAO,CAAC,aAAsB;AAC5B,YAAM,WAAW,SAAS,IAAI;AAC9B,iBAAWC,QAAO;AAAQ,eAAO,SAASA,IAAG;AAC7C,YAAM,WAAW,EAAE,GAAG,MAAM,GAAG,SAAQ;AACvC,aAAO,OAAO,OAAO,UAAU,EAAE,QAAQ,OAAO,QAAe,EAAC,CAAE;IACpE;EACF;AAEA,SAAO,OAAO,OAAO,QAAQ,EAAE,QAAQ,OAAO,MAAM,EAAQ,CAAE;AAChE;;;ACnQO,IAAMC,gBAA6B,oBAAI,OAAqB,IAAI;AAQjE,SAAU,WACd,IACA,EAAE,UAAU,MAAM,GAAE,GAAqB;AAEzC,MAAI,CAAC,WAAW,CAAC;AAAI,WAAO,GAAE;AAC9B,MAAIA,cAAa,IAAI,EAAE;AAAG,WAAOA,cAAa,IAAI,EAAE;AACpD,QAAM,UAAU,GAAE,EAAG,QAAQ,MAAMA,cAAa,OAAO,EAAE,CAAC;AAC1D,EAAAA,cAAa,IAAI,IAAI,OAAO;AAC5B,SAAO;AACT;;;ACKM,SAAU,UACd,IACA,EACE,OAAO,SAAS,KAChB,aAAa,GACb,aAAAC,eAAc,MAAM,KAAI,IACD,CAAA,GAAE;AAE3B,SAAO,IAAI,QAAc,CAAC,SAAS,WAAU;AAC3C,UAAM,eAAe,OAAO,EAAE,QAAQ,EAAC,IAAK,CAAA,MAAM;AAChD,YAAM,QAAQ,OAAO,EAAE,MAAK,MAAwB;AAClD,cAAM,QACJ,OAAO,WAAW,aAAa,OAAO,EAAE,OAAO,MAAK,CAAE,IAAI;AAC5D,YAAI;AAAO,gBAAM,KAAK,KAAK;AAC3B,qBAAa,EAAE,OAAO,QAAQ,EAAC,CAAE;MACnC;AAEA,UAAI;AACF,cAAM,OAAO,MAAM,GAAE;AACrB,gBAAQ,IAAI;MACd,SAAS,KAAK;AACZ,YACE,QAAQ,cACP,MAAMA,aAAY,EAAE,OAAO,OAAO,IAAY,CAAE;AAEjD,iBAAO,MAAM,EAAE,OAAO,IAAY,CAAE;AACtC,eAAO,GAAG;MACZ;IACF;AACA,iBAAY;EACd,CAAC;AACH;;;ACuCM,SAAU,aACd,SACAC,WAAiC,CAAA,GAAE;AAEnC,SAAO,OAAO,MAAM,kBAAkB,CAAA,MAAM;AAC1C,UAAM,EACJ,SAAS,OACT,aAAa,KACb,aAAa,GACb,KAAAC,KAAG,IACD;MACF,GAAGD;MACH,GAAG;;AAEL,UAAM,YAAY,SACd,UAAU,YAAY,GAAGC,IAAG,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC,IAClD;AACJ,WAAO,WACL,MACE,UACE,YAAW;AACT,UAAI;AACF,eAAO,MAAM,QAAQ,IAAI;MAC3B,SAAS,MAAM;AACb,cAAM,MAAM;AAGZ,gBAAQ,IAAI,MAAM;;UAEhB,KAAK,cAAc;AACjB,kBAAM,IAAI,cAAc,GAAG;;UAE7B,KAAK,uBAAuB;AAC1B,kBAAM,IAAI,uBAAuB,GAAG;;UAEtC,KAAK,uBAAuB;AAC1B,kBAAM,IAAI,uBAAuB,KAAK,EAAE,QAAQ,KAAK,OAAM,CAAE;;UAE/D,KAAK,sBAAsB;AACzB,kBAAM,IAAI,sBAAsB,GAAG;;UAErC,KAAK,iBAAiB;AACpB,kBAAM,IAAI,iBAAiB,GAAG;;UAEhC,KAAK,qBAAqB;AACxB,kBAAM,IAAI,qBAAqB,GAAG;;UAEpC,KAAK,yBAAyB;AAC5B,kBAAM,IAAI,yBAAyB,GAAG;;UAExC,KAAK,4BAA4B;AAC/B,kBAAM,IAAI,4BAA4B,GAAG;;UAE3C,KAAK,4BAA4B;AAC/B,kBAAM,IAAI,4BAA4B,GAAG;;UAE3C,KAAK,2BAA2B;AAC9B,kBAAM,IAAI,2BAA2B,KAAK;cACxC,QAAQ,KAAK;aACd;;UAEH,KAAK,sBAAsB;AACzB,kBAAM,IAAI,sBAAsB,GAAG;;UAErC,KAAK,+BAA+B;AAClC,kBAAM,IAAI,+BAA+B,GAAG;;UAE9C,KAAK,yBAAyB;AAC5B,kBAAM,IAAI,yBAAyB,GAAG;;UAExC,KAAK,0BAA0B;AAC7B,kBAAM,IAAI,0BAA0B,GAAG;;UAEzC,KAAK,+BAA+B;AAClC,kBAAM,IAAI,+BAA+B,GAAG;;UAE9C,KAAK,0BAA0B;AAC7B,kBAAM,IAAI,0BAA0B,GAAG;;UAEzC,KAAK,uBAAuB;AAC1B,kBAAM,IAAI,uBAAuB,GAAG;;UAEtC,KAAK,iBAAiB;AACpB,kBAAM,IAAI,iBAAiB,GAAG;;;UAGhC,KAAK;AACH,kBAAM,IAAI,yBAAyB,GAAG;UACxC;AACE,gBAAI,gBAAgB;AAAW,oBAAM;AACrC,kBAAM,IAAI,gBAAgB,GAAY;QAC1C;MACF;IACF,GACA;MACE,OAAO,CAAC,EAAE,OAAO,MAAK,MAAM;AAE1B,YAAI,SAAS,iBAAiB,kBAAkB;AAC9C,gBAAM,aAAa,OAAO,SAAS,IAAI,aAAa;AACpD,cAAI,YAAY,MAAM,IAAI;AACxB,mBAAO,OAAO,SAAS,UAAU,IAAI;QACzC;AAGA,eAAO,CAAC,EAAE,KAAK,SAAS;MAC1B;MACA;MACA,aAAa,CAAC,EAAE,MAAK,MAAO,YAAY,KAAK;KAC9C,GAEL,EAAE,SAAS,QAAQ,IAAI,UAAS,CAAE;EAEtC;AACF;AAGM,SAAU,YAAY,OAAY;AACtC,MAAI,UAAU,SAAS,OAAO,MAAM,SAAS,UAAU;AACrD,QAAI,MAAM,SAAS;AAAI,aAAO;AAC9B,QAAI,MAAM,SAAS,sBAAsB;AAAM,aAAO;AACtD,QAAI,MAAM,SAAS,iBAAiB;AAAM,aAAO;AACjD,WAAO;EACT;AACA,MAAI,iBAAiB,oBAAoB,MAAM,QAAQ;AAErD,QAAI,MAAM,WAAW;AAAK,aAAO;AAEjC,QAAI,MAAM,WAAW;AAAK,aAAO;AAEjC,QAAI,MAAM,WAAW;AAAK,aAAO;AAEjC,QAAI,MAAM,WAAW;AAAK,aAAO;AAEjC,QAAI,MAAM,WAAW;AAAK,aAAO;AAEjC,QAAI,MAAM,WAAW;AAAK,aAAO;AAEjC,QAAI,MAAM,WAAW;AAAK,aAAO;AAEjC,QAAI,MAAM,WAAW;AAAK,aAAO;AACjC,WAAO;EACT;AACA,SAAO;AACT;;;AC7LM,SAAU,gBAId,EACE,KACA,MACA,SACA,aAAa,GACb,aAAa,KACb,SACA,KAAI,GAEN,OAAiC;AAEjC,QAAMC,OAAM,IAAI;AAChB,SAAO;IACL,QAAQ;MACN;MACA;MACA;MACA;MACA;MACA;MACA;;IAEF,SAAS,aAAa,SAAS,EAAE,YAAY,YAAY,KAAAA,KAAG,CAAE;IAC9D;;AAEJ;;;ACzEM,IAAO,mBAAP,cAAgC,UAAS;EAC7C,cAAA;AACE,UACE,0FACA;MACE,UAAU;MACV,MAAM;KACP;EAEL;;;;ACVI,SAAU,YACd,IAGA,EACE,gBAAgB,IAAI,MAAM,WAAW,GACrC,SACA,OAAM,GAQP;AAED,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAU;AACrC;AAAC,KAAC,YAAW;AACX,UAAI;AACJ,UAAI;AACF,cAAM,aAAa,IAAI,gBAAe;AACtC,YAAI,UAAU,GAAG;AACf,sBAAY,WAAW,MAAK;AAC1B,gBAAI,QAAQ;AACV,yBAAW,MAAK;YAClB,OAAO;AACL,qBAAO,aAAa;YACtB;UACF,GAAG,OAAO;QACZ;AACA,gBAAQ,MAAM,GAAG,EAAE,QAAQ,YAAY,UAAU,KAAI,CAAE,CAAC;MAC1D,SAAS,KAAK;AACZ,YAAK,KAAe,SAAS;AAAc,iBAAO,aAAa;AAC/D,eAAO,GAAG;MACZ;AACE,qBAAa,SAAS;MACxB;IACF,GAAE;EACJ,CAAC;AACH;;;AC5CA,SAAS,gBAAa;AACpB,SAAO;IACL,SAAS;IACT,OAAI;AACF,aAAO,KAAK;IACd;IACA,QAAK;AACH,WAAK,UAAU;IACjB;;AAEJ;AAEO,IAAM,UAAwB,8BAAa;;;AC4D5C,SAAU,iBACd,KACAC,WAAgC,CAAA,GAAE;AAElC,SAAO;IACL,MAAM,QAAQ,QAAM;AAClB,YAAM,EACJ,MACA,YAAYA,SAAQ,WACpB,aAAaA,SAAQ,YACrB,UAAUA,SAAQ,WAAW,IAAM,IACjC;AAEJ,YAAM,eAAe;QACnB,GAAIA,SAAQ,gBAAgB,CAAA;QAC5B,GAAI,OAAO,gBAAgB,CAAA;;AAG7B,YAAM,EAAE,SAAS,QAAQ,QAAQ,QAAO,IAAK;AAE7C,UAAI;AACF,cAAM,WAAW,MAAM,YACrB,OAAO,EAAE,OAAM,MAAM;AACnB,gBAAM,OAAoB;YACxB,GAAG;YACH,MAAM,MAAM,QAAQ,IAAI,IACpB,UACE,KAAK,IAAI,CAACC,WAAU;cAClB,SAAS;cACT,IAAIA,MAAK,MAAM,QAAQ,KAAI;cAC3B,GAAGA;cACH,CAAC,IAEL,UAAU;cACR,SAAS;cACT,IAAI,KAAK,MAAM,QAAQ,KAAI;cAC3B,GAAG;aACJ;YACL,SAAS;cACP,gBAAgB;cAChB,GAAG;;YAEL,QAAQ,UAAU;YAClB,QAAQ,YAAY,UAAU,IAAI,SAAS;;AAE7C,gBAAM,UAAU,IAAI,QAAQ,KAAK,IAAI;AACrC,gBAAM,OAAQ,MAAM,YAAY,SAAS,IAAI,KAAM,EAAE,GAAG,MAAM,IAAG;AACjE,gBAAMC,YAAW,MAAM,MAAM,KAAK,OAAO,KAAK,IAAI;AAClD,iBAAOA;QACT,GACA;UACE,eAAe,IAAI,aAAa,EAAE,MAAM,IAAG,CAAE;UAC7C;UACA,QAAQ;SACT;AAGH,YAAI;AAAY,gBAAM,WAAW,QAAQ;AAEzC,YAAI;AACJ,YACE,SAAS,QAAQ,IAAI,cAAc,GAAG,WAAW,kBAAkB;AAEnE,iBAAO,MAAM,SAAS,KAAI;aACvB;AACH,iBAAO,MAAM,SAAS,KAAI;AAC1B,cAAI;AACF,mBAAO,KAAK,MAAM,QAAQ,IAAI;UAChC,SAAS,KAAK;AACZ,gBAAI,SAAS;AAAI,oBAAM;AACvB,mBAAO,EAAE,OAAO,KAAI;UACtB;QACF;AAEA,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,IAAI,iBAAiB;YACzB;YACA,SAAS,UAAU,KAAK,KAAK,KAAK,SAAS;YAC3C,SAAS,SAAS;YAClB,QAAQ,SAAS;YACjB;WACD;QACH;AAEA,eAAO;MACT,SAAS,KAAK;AACZ,YAAI,eAAe;AAAkB,gBAAM;AAC3C,YAAI,eAAe;AAAc,gBAAM;AACvC,cAAM,IAAI,iBAAiB;UACzB;UACA,OAAO;UACP;SACD;MACH;IACF;;AAEJ;;;ACjGM,SAAU,KAEd,KACAC,UAA8B,CAAA,GAAE;AAEhC,QAAM,EACJ,OACA,cACA,MAAM,QACN,OAAO,iBACP,gBACA,iBACA,WAAU,IACRA;AACJ,SAAO,CAAC,EAAE,OAAO,YAAY,aAAa,SAAS,SAAQ,MAAM;AAC/D,UAAM,EAAE,YAAY,KAAM,MAAAC,QAAO,EAAC,IAChC,OAAO,UAAU,WAAW,QAAQ,CAAA;AACtC,UAAM,aAAaD,QAAO,cAAc;AACxC,UAAM,UAAU,YAAYA,QAAO,WAAW;AAC9C,UAAM,OAAO,OAAO,OAAO,QAAQ,QAAQ,KAAK,CAAC;AACjD,QAAI,CAAC;AAAM,YAAM,IAAI,iBAAgB;AAErC,UAAM,YAAY,iBAAiB,MAAM;MACvC;MACA,WAAW;MACX,YAAY;MACZ;KACD;AAED,WAAO,gBACL;MACE;MACA;MACA,MAAM,QAAQ,EAAE,QAAQ,OAAM,GAAE;AAC9B,cAAM,OAAO,EAAE,QAAQ,OAAM;AAE7B,cAAM,EAAE,SAAQ,IAAK,qBAAqB;UACxC,IAAI;UACJ,MAAAC;UACA,iBAAiB,UAAQ;AACvB,mBAAO,SAAS,SAAS;UAC3B;UACA,IAAI,CAACC,UACH,UAAU,QAAQ;YAChB,MAAAA;WACD;UACH,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE;SAC1B;AAED,cAAM,KAAK,OAAOA,UAChB,QACI,SAASA,KAAI,IACb;UACE,MAAM,UAAU,QAAQ;YACtB,MAAAA;WACD;;AAGT,cAAM,CAAC,EAAE,OAAO,OAAM,CAAE,IAAI,MAAM,GAAG,IAAI;AACzC,YAAI;AACF,gBAAM,IAAI,gBAAgB;YACxB;YACA;YACA,KAAK;WACN;AACH,eAAO;MACT;MACA;MACA;MACA;MACA,MAAM;OAER;MACE;MACA,KAAK;KACN;EAEL;AACF;;;AC1IM,SAAU,6BACd,KACA,UAA+B;AAE/B,MAAI,EAAE,eAAe;AAAY,WAAO;AACxC,QAAM,QAAQ,IAAI,KAAK,CAAC,MAAM,aAAa,6BAA6B;AACxE,MAAI,EAAE,iBAAiB;AAAgC,WAAO;AAC9D,MAAI,MAAM,MAAM,cAAc;AAAoB,WAAO;AACzD,MAAI,MAAM,MAAM,cAAc;AAAgC,WAAO;AACrE,MAAI,MAAM,MAAM,cAAc;AAAuB,WAAO;AAC5D,MAAI,MAAM,MAAM,cAAc;AAAiB,WAAO;AACtD,MAAI,MAAM,MAAM,cAAc;AAAa,WAAO;AAElD,MACE,MAAM,QAAQ,SACZ,qDAAqD;AAGvD,WAAO;AAET,MAAI,aAAa,aAAa,MAAM,WAAW,aAAa,EAAE;AAAG,WAAO;AACxE,SAAO;AACT;;;AC3BM,SAAU,wBAAwB,OAAa;AACnD,MAAI,MAAM,WAAW;AAAI,WAAO;AAChC,MAAI,MAAM,QAAQ,GAAG,MAAM;AAAG,WAAO;AACrC,MAAI,MAAM,QAAQ,GAAG,MAAM;AAAI,WAAO;AACtC,QAAM,OAAO,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC;AACpC,MAAI,CAAC,MAAM,IAAI;AAAG,WAAO;AACzB,SAAO;AACT;;;ACsBM,SAAU,SAAS,MAAY;AACnC,MAAI,SAAS,IAAI,WAAW,EAAE,EAAE,KAAK,CAAC;AACtC,MAAI,CAAC;AAAM,WAAO,WAAW,MAAM;AAEnC,QAAM,SAAS,KAAK,MAAM,GAAG;AAE7B,WAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG;AAC9C,UAAM,uBAAuB,wBAAwB,OAAO,CAAC,CAAC;AAC9D,UAAM,SAAS,uBACX,QAAQ,oBAAoB,IAC5B,UAAU,cAAc,OAAO,CAAC,CAAC,GAAG,OAAO;AAC/C,aAAS,UAAU,OAAO,CAAC,QAAQ,MAAM,CAAC,GAAG,OAAO;EACtD;AAEA,SAAO,WAAW,MAAM;AAC1B;;;AC7CM,SAAU,gBAAgB,MAAS;AACvC,SAAO,IAAI,KAAK,MAAM,CAAC,CAAC;AAC1B;;;ACqBM,SAAU,UAAU,OAAa;AACrC,QAAM,SAAS,IAAI,WAAW,EAAE,EAAE,KAAK,CAAC;AACxC,MAAI,CAAC;AAAO,WAAO,WAAW,MAAM;AACpC,SAAO,wBAAwB,KAAK,KAAK,UAAU,cAAc,KAAK,CAAC;AACzE;;;ACHM,SAAU,cAAc,QAAc;AAE1C,QAAM,QAAQ,OAAO,QAAQ,aAAa,EAAE;AAC5C,MAAI,MAAM,WAAW;AAAG,WAAO,IAAI,WAAW,CAAC;AAE/C,QAAM,QAAQ,IAAI,WAAW,cAAc,KAAK,EAAE,aAAa,CAAC;AAEhE,MAAI,SAAS;AACb,QAAM,OAAO,MAAM,MAAM,GAAG;AAC5B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,QAAI,UAAU,cAAc,KAAK,CAAC,CAAC;AAGnC,QAAI,QAAQ,aAAa;AACvB,gBAAU,cAAc,gBAAgB,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7D,UAAM,MAAM,IAAI,QAAQ;AACxB,UAAM,IAAI,SAAS,SAAS,CAAC;AAC7B,cAAU,QAAQ,SAAS;EAC7B;AAEA,MAAI,MAAM,eAAe,SAAS;AAAG,WAAO,MAAM,MAAM,GAAG,SAAS,CAAC;AAErE,SAAO;AACT;;;ACwCA,eAAsB,cACpB,QACA,EACE,aACA,UACA,UACA,MACA,aACA,QACA,0BAA0B,0BAAyB,GAC3B;AAE1B,MAAI,2BAA2B;AAC/B,MAAI,CAAC,0BAA0B;AAC7B,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MACR,oEAAoE;AAGxE,+BAA2B,wBAAwB;MACjD;MACA,OAAO,OAAO;MACd,UAAU;KACX;EACH;AAEA,MAAI;AACF,UAAM,eAAe,mBAAmB;MACtC,KAAK;MACL,cAAc;MACd,GAAI,YAAY,OACZ,EAAE,MAAM,CAAC,SAAS,IAAI,GAAG,OAAO,QAAQ,CAAC,EAAC,IAC1C,EAAE,MAAM,CAAC,SAAS,IAAI,CAAC,EAAC;KAC7B;AAED,UAAM,yBAAyB;MAC7B,SAAS;MACT,KAAK;MACL,cAAc;MACd,MAAM,CAAC,MAAM,cAAc,IAAI,CAAC,GAAG,YAAY;MAC/C;MACA;;AAGF,UAAM,qBAAqB,UAAU,QAAQ,cAAc,cAAc;AAEzE,UAAM,MAAM,cACR,MAAM,mBAAmB;MACvB,GAAG;MACH,MAAM,CAAC,GAAG,uBAAuB,MAAM,WAAW;KACnD,IACD,MAAM,mBAAmB,sBAAsB;AAEnD,QAAI,IAAI,CAAC,MAAM;AAAM,aAAO;AAE5B,UAAM,UAAU,qBAAqB;MACnC,KAAK;MACL,MAAM,YAAY,OAAO,CAAC,SAAS,IAAI,GAAG,OAAO,QAAQ,CAAC,IAAI;MAC9D,cAAc;MACd,MAAM,IAAI,CAAC;KACZ;AAED,QAAI,YAAY;AAAM,aAAO;AAC7B,QAAI,KAAK,OAAO,MAAM;AAAQ,aAAO;AACrC,WAAO;EACT,SAAS,KAAK;AACZ,QAAI;AAAQ,YAAM;AAClB,QAAI,6BAA6B,KAAK,SAAS;AAAG,aAAO;AACzD,UAAM;EACR;AACF;;;AC5JM,IAAO,gCAAP,cAA6C,UAAS;EAC1D,YAAY,EAAE,KAAI,GAAiB;AACjC,UACE,oFACA;MACE,cAAc;QACZ;QACA;QACA,kBAAkB,KAAK,UAAU,IAAI,CAAC;;MAExC,MAAM;KACP;EAEL;;AAMI,IAAO,8BAAP,cAA2C,UAAS;EACxD,YAAY,EAAE,OAAM,GAAsB;AACxC,UAAM,kCAAkC,MAAM,IAAI;MAChD,MAAM;KACP;EACH;;AAMI,IAAO,8BAAP,cAA2C,UAAS;EACxD,YAAY,EAAE,IAAG,GAAmB;AAClC,UACE,qCAAqC,GAAG,iFACxC,EAAE,MAAM,8BAA6B,CAAE;EAE3C;;AAOI,IAAO,qCAAP,cAAkD,UAAS;EAC/D,YAAY,EAAE,UAAS,GAAyB;AAC9C,UACE,6BAA6B,SAAS,sDACtC,EAAE,MAAM,qCAAoC,CAAE;EAElD;;;;AC3BF,IAAM,eACJ;AACF,IAAM,gBACJ;AACF,IAAM,cAAc;AACpB,IAAM,eAAe;AAKrB,eAAsB,WAAW,KAAW;AAC1C,MAAI;AACF,UAAM,MAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,OAAM,CAAE;AAE/C,QAAI,IAAI,WAAW,KAAK;AACtB,YAAM,cAAc,IAAI,QAAQ,IAAI,cAAc;AAClD,aAAO,aAAa,WAAW,QAAQ;IACzC;AACA,WAAO;EACT,SAAS,OAAY;AAEnB,QAAI,OAAO,UAAU,YAAY,OAAO,MAAM,aAAa,aAAa;AACtE,aAAO;IACT;AAGA,QAAI,CAAC,WAAW,eAAe,OAAO;AAAG,aAAO;AAEhD,WAAO,IAAI,QAAQ,CAAC,YAAW;AAC7B,YAAM,MAAM,IAAI,MAAK;AACrB,UAAI,SAAS,MAAK;AAChB,gBAAQ,IAAI;MACd;AACA,UAAI,UAAU,MAAK;AACjB,gBAAQ,KAAK;MACf;AACA,UAAI,MAAM;IACZ,CAAC;EACH;AACF;AAKM,SAAU,WAAWC,SAA4B,gBAAsB;AAC3E,MAAI,CAACA;AAAQ,WAAO;AACpB,MAAIA,QAAO,SAAS,GAAG;AAAG,WAAOA,QAAO,MAAM,GAAG,EAAE;AACnD,SAAOA;AACT;AAOM,SAAU,iBAAiB,EAC/B,KACA,YAAW,GAIZ;AACC,QAAM,YAAY,YAAY,KAAK,GAAG;AACtC,MAAI;AAAW,WAAO,EAAE,KAAK,WAAW,MAAM,UAAS;AAEvD,QAAM,cAAc,WAAW,aAAa,MAAM,iBAAiB;AACnE,QAAM,iBAAiB,WAAW,aAAa,SAAS,qBAAqB;AAE7E,QAAM,oBAAoB,IAAI,MAAM,YAAY;AAChD,QAAM,EACJ,UACA,SACA,QACA,YAAY,GAAE,IACZ,mBAAmB,UAAU,CAAA;AAEjC,QAAM,SAAS,aAAa,YAAY,YAAY;AACpD,QAAM,SACJ,aAAa,YAAY,YAAY,WAAW,cAAc,KAAK,GAAG;AAExE,MAAI,IAAI,WAAW,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ;AAChD,QAAI,cAAc;AAClB,QAAI,aAAa;AACf,oBAAc,IAAI,QAAQ,0BAA0B,aAAa,OAAO;AAC1E,WAAO,EAAE,KAAK,aAAa,WAAW,OAAO,WAAW,MAAK;EAC/D;AAEA,OAAK,UAAU,WAAW,QAAQ;AAChC,WAAO;MACL,KAAK,GAAG,WAAW,IAAI,SAAS,SAAS,MAAM,IAAI,MAAM,GAAG,SAAS;MACrE,WAAW;MACX,WAAW;;EAEf;AAEA,MAAI,aAAa,UAAU,QAAQ;AACjC,WAAO;MACL,KAAK,GAAG,cAAc,IAAI,MAAM,GAAG,aAAa,EAAE;MAClD,WAAW;MACX,WAAW;;EAEf;AAEA,MAAI,YAAY,IAAI,QAAQ,cAAc,EAAE;AAC5C,MAAI,UAAU,WAAW,MAAM,GAAG;AAEhC,gBAAY,6BAA6B,KAAK,SAAS,CAAC;EAC1D;AAEA,MAAI,UAAU,WAAW,OAAO,KAAK,UAAU,WAAW,GAAG,GAAG;AAC9D,WAAO;MACL,KAAK;MACL,WAAW;MACX,WAAW;;EAEf;AAEA,QAAM,IAAI,4BAA4B,EAAE,IAAG,CAAE;AAC/C;AAMM,SAAU,aAAa,MAAS;AAEpC,MACE,OAAO,SAAS,YACf,EAAE,WAAW,SAAS,EAAE,eAAe,SAAS,EAAE,gBAAgB,OACnE;AACA,UAAM,IAAI,8BAA8B,EAAE,KAAI,CAAE;EAClD;AAEA,SAAO,KAAK,SAAS,KAAK,aAAa,KAAK;AAC9C;AAQA,eAAsB,qBAAqB,EACzC,aACA,IAAG,GAIJ;AACC,MAAI;AACF,UAAM,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,CAACC,SAAQA,KAAI,KAAI,CAAE;AACrD,UAAM,QAAQ,MAAM,eAAe;MACjC;MACA,KAAK,aAAa,GAAG;KACtB;AACD,WAAO;EACT,QAAQ;AACN,UAAM,IAAI,4BAA4B,EAAE,IAAG,CAAE;EAC/C;AACF;AAQA,eAAsB,eAAe,EACnC,aACA,IAAG,GAIJ;AACC,QAAM,EAAE,KAAK,aAAa,UAAS,IAAK,iBAAiB,EAAE,KAAK,YAAW,CAAE;AAC7E,MAAI;AAAW,WAAO;AAGtB,QAAM,UAAU,MAAM,WAAW,WAAW;AAC5C,MAAI;AAAS,WAAO;AAEpB,QAAM,IAAI,4BAA4B,EAAE,IAAG,CAAE;AAC/C;AAWM,SAAU,YAAY,MAAY;AACtC,MAAI,MAAM;AAGV,MAAI,IAAI,WAAW,UAAU,GAAG;AAE9B,UAAM,IAAI,QAAQ,YAAY,EAAE,EAAE,QAAQ,MAAM,GAAG;EACrD;AAEA,QAAM,CAAC,WAAW,iBAAiB,OAAO,IAAI,IAAI,MAAM,GAAG;AAC3D,QAAM,CAAC,eAAe,OAAO,IAAI,UAAU,MAAM,GAAG;AACpD,QAAM,CAAC,eAAe,eAAe,IAAI,gBAAgB,MAAM,GAAG;AAElE,MAAI,CAAC,iBAAiB,cAAc,YAAW,MAAO;AACpD,UAAM,IAAI,4BAA4B,EAAE,QAAQ,yBAAwB,CAAE;AAC5E,MAAI,CAAC;AACH,UAAM,IAAI,4BAA4B,EAAE,QAAQ,qBAAoB,CAAE;AACxE,MAAI,CAAC;AACH,UAAM,IAAI,4BAA4B;MACpC,QAAQ;KACT;AACH,MAAI,CAAC;AACH,UAAM,IAAI,4BAA4B,EAAE,QAAQ,qBAAoB,CAAE;AACxE,MAAI,CAAC;AACH,UAAM,IAAI,4BAA4B,EAAE,QAAQ,0BAAyB,CAAE;AAE7E,SAAO;IACL,SAAS,OAAO,SAAS,OAAO;IAChC,WAAW,cAAc,YAAW;IACpC;IACA;;AAEJ;AAOA,eAAsB,eACpB,QACA,EAAE,IAAG,GAAsB;AAE3B,MAAI,IAAI,cAAc,UAAU;AAC9B,WAAO,aAAa,QAAQ;MAC1B,SAAS,IAAI;MACb,KAAK;QACH;UACE,MAAM;UACN,MAAM;UACN,iBAAiB;UACjB,QAAQ,CAAC,EAAE,MAAM,WAAW,MAAM,UAAS,CAAE;UAC7C,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,SAAQ,CAAE;;;MAG1C,cAAc;MACd,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC;KAC3B;EACH;AACA,MAAI,IAAI,cAAc,WAAW;AAC/B,WAAO,aAAa,QAAQ;MAC1B,SAAS,IAAI;MACb,KAAK;QACH;UACE,MAAM;UACN,MAAM;UACN,iBAAiB;UACjB,QAAQ,CAAC,EAAE,MAAM,OAAO,MAAM,UAAS,CAAE;UACzC,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,SAAQ,CAAE;;;MAG1C,cAAc;MACd,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC;KAC3B;EACH;AACA,QAAM,IAAI,mCAAmC,EAAE,WAAW,IAAI,UAAS,CAAE;AAC3E;;;ACrQA,eAAsB,kBACpB,QACA,EACE,aACA,OAAM,GAIP;AAED,MAAI,WAAW,KAAK,MAAM;AACxB,WAAO,kBAAkB,QAAQ,EAAE,aAAa,OAAM,CAAE;AAC1D,SAAO,eAAe,EAAE,KAAK,QAAQ,YAAW,CAAE;AACpD;AAWA,eAAe,kBACb,QACA,EACE,aACA,OAAM,GAIP;AAGD,QAAM,MAAM,YAAY,MAAM;AAE9B,QAAM,SAAS,MAAM,eAAe,QAAQ,EAAE,IAAG,CAAE;AAEnD,QAAM,EACJ,KAAK,gBACL,WACA,UAAS,IACP,iBAAiB,EAAE,KAAK,QAAQ,YAAW,CAAE;AAGjD,MACE,cACC,eAAe,SAAS,+BAA+B,KACtD,eAAe,WAAW,GAAG,IAC/B;AACA,UAAM,cAAc;;MAEhB,KAAK,eAAe,QAAQ,iCAAiC,EAAE,CAAC;;;MAEhE;;AAEJ,UAAM,UAAU,KAAK,MAAM,WAAW;AACtC,WAAO,eAAe,EAAE,KAAK,aAAa,OAAO,GAAG,YAAW,CAAE;EACnE;AAEA,MAAI,aAAa,IAAI;AACrB,MAAI,IAAI,cAAc;AACpB,iBAAa,WAAW,QAAQ,MAAM,EAAE,EAAE,SAAS,IAAI,GAAG;AAE5D,SAAO,qBAAqB;IAC1B;IACA,KAAK,eAAe,QAAQ,eAAe,UAAU;GACtD;AACH;;;ACdA,eAAsB,WACpB,QACA,EACE,aACA,UACA,MACA,KACA,aACA,QACA,0BAA0B,0BAAyB,GAC9B;AAEvB,MAAI,2BAA2B;AAC/B,MAAI,CAAC,0BAA0B;AAC7B,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MACR,oEAAoE;AAGxE,+BAA2B,wBAAwB;MACjD;MACA,OAAO,OAAO;MACd,UAAU;KACX;EACH;AAEA,MAAI;AACF,UAAM,yBAAyB;MAC7B,SAAS;MACT,KAAK;MACL,cAAc;MACd,MAAM;QACJ,MAAM,cAAc,IAAI,CAAC;QACzB,mBAAmB;UACjB,KAAK;UACL,cAAc;UACd,MAAM,CAAC,SAAS,IAAI,GAAG,GAAG;SAC3B;;MAEH;MACA;;AAGF,UAAM,qBAAqB,UAAU,QAAQ,cAAc,cAAc;AAEzE,UAAM,MAAM,cACR,MAAM,mBAAmB;MACvB,GAAG;MACH,MAAM,CAAC,GAAG,uBAAuB,MAAM,WAAW;KACnD,IACD,MAAM,mBAAmB,sBAAsB;AAEnD,QAAI,IAAI,CAAC,MAAM;AAAM,aAAO;AAE5B,UAAM,SAAS,qBAAqB;MAClC,KAAK;MACL,cAAc;MACd,MAAM,IAAI,CAAC;KACZ;AAED,WAAO,WAAW,KAAK,OAAO;EAChC,SAAS,KAAK;AACZ,QAAI;AAAQ,YAAM;AAClB,QAAI,6BAA6B,KAAK,SAAS;AAAG,aAAO;AACzD,UAAM;EACR;AACF;;;ACjGA,eAAsB,aACpB,QACA,EACE,aACA,UACA,kBACA,MACA,aACA,QACA,yBAAwB,GACD;AAEzB,QAAM,SAAS,MAAM,UACnB,QACA,YACA,YAAY,EACZ;IACA;IACA;IACA,KAAK;IACL;IACA;IACA;IACA;GACD;AACD,MAAI,CAAC;AAAQ,WAAO;AACpB,MAAI;AACF,WAAO,MAAM,kBAAkB,QAAQ;MACrC;MACA,aAAa;KACd;EACH,QAAQ;AACN,WAAO;EACT;AACF;;;ACrBA,eAAsB,WACpB,QACA,EACE,SACA,aACA,UACA,aACA,QACA,0BAA0B,0BAAyB,GAC9B;AAEvB,MAAI,2BAA2B;AAC/B,MAAI,CAAC,0BAA0B;AAC7B,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MACR,oEAAoE;AAGxE,+BAA2B,wBAAwB;MACjD;MACA,OAAO,OAAO;MACd,UAAU;KACX;EACH;AAEA,QAAM,cAAc,GAAG,QAAQ,YAAW,EAAG,UAAU,CAAC,CAAC;AACzD,MAAI;AACF,UAAM,yBAAyB;MAC7B,SAAS;MACT,KAAK;MACL,cAAc;MACd,MAAM,CAAC,MAAM,cAAc,WAAW,CAAC,CAAC;MACxC;MACA;;AAGF,UAAM,qBAAqB,UAAU,QAAQ,cAAc,cAAc;AAEzE,UAAM,CAAC,MAAM,eAAe,IAAI,cAC5B,MAAM,mBAAmB;MACvB,GAAG;MACH,MAAM,CAAC,GAAG,uBAAuB,MAAM,WAAW;KACnD,IACD,MAAM,mBAAmB,sBAAsB;AAEnD,QAAI,QAAQ,YAAW,MAAO,gBAAgB,YAAW;AAAI,aAAO;AACpE,WAAO;EACT,SAAS,KAAK;AACZ,QAAI;AAAQ,YAAM;AAClB,QAAI,6BAA6B,KAAK,SAAS;AAAG,aAAO;AACzD,UAAM;EACR;AACF;;;AC1DA,eAAsB,eACpB,QACA,EACE,aACA,UACA,MACA,0BAA0B,0BAAyB,GAC1B;AAE3B,MAAI,2BAA2B;AAC/B,MAAI,CAAC,0BAA0B;AAC7B,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MACR,oEAAoE;AAGxE,+BAA2B,wBAAwB;MACjD;MACA,OAAO,OAAO;MACd,UAAU;KACX;EACH;AAEA,QAAM,CAAC,eAAe,IAAI,MAAM,UAC9B,QACA,cACA,cAAc,EACd;IACA,SAAS;IACT,KAAK;MACH;QACE,QAAQ,CAAC,EAAE,MAAM,QAAO,CAAE;QAC1B,MAAM;QACN,SAAS,CAAC,EAAE,MAAM,UAAS,GAAI,EAAE,MAAM,UAAS,CAAE;QAClD,iBAAiB;QACjB,MAAM;;;IAGV,cAAc;IACd,MAAM,CAAC,MAAM,cAAc,IAAI,CAAC,CAAC;IACjC;IACA;GACD;AACD,SAAO;AACT;;;AC9EA,eAAsB,kBACpB,QAAgC;AAEhC,QAAM,aAAa,yBAAyB,QAAQ;IAClD,QAAQ;GACT;AACD,QAAM,KAAK,MAAM,OAAO,QAAQ;IAC9B,QAAQ;GACT;AACD,SAAO,EAAE,IAAI,SAAS,WAAW,EAAE,GAAG,MAAM,QAAO;AACrD;;;ACiGA,eAAsB,kBAepB,QACA,EACE,SACA,MACA,OACA,QAAQ,SACR,WACA,QACA,QAAO,IASL,CAAA,GAAS;AAYb,QAAM,SAAS,YAAY,QAAQ,CAAC,KAAK,IAAI;AAE7C,QAAM,aAAa,yBAAyB,QAAQ;IAClD,QAAQ;GACT;AAED,MAAI,SAAqB,CAAA;AACzB,MAAI,QAAQ;AACV,UAAM,UAAW,OAAsB,QAAQ,CAACC,WAC9C,kBAAkB;MAChB,KAAK,CAACA,MAAK;MACX,WAAYA,OAAmB;MAC/B;KAC8B,CAAC;AAGnC,aAAS,CAAC,OAAmB;AAC7B,QAAI;AAAO,eAAS,OAAO,CAAC;EAC9B;AAEA,QAAM,KAAU,MAAM,OAAO,QAAQ;IACnC,QAAQ;IACR,QAAQ;MACN;QACE;QACA,WACE,OAAO,cAAc,WAAW,YAAY,SAAS,IAAI;QAC3D,SAAS,OAAO,YAAY,WAAW,YAAY,OAAO,IAAI;QAC9D,GAAI,OAAO,SAAS,EAAE,OAAM,IAAK,CAAA;;;GAGtC;AAED,SAAO;IACL,KAAK;IACL;IACA,WAAW,QAAS,MAAmB,OAAO;IAC9C;IACA;IACA,SAAS,WAAW,EAAE;IACtB,QAAQ,QAAQ,MAAM;IACtB;IACA,MAAM;;AAUV;;;ACzMA,eAAsB,+BAIpB,QAAgC;AAEhC,QAAM,aAAa,yBAAyB,QAAQ;IAClD,QAAQ;GACT;AACD,QAAM,KAAK,MAAM,OAAO,QAAQ;IAC9B,QAAQ;GACT;AACD,SAAO,EAAE,IAAI,SAAS,WAAW,EAAE,GAAG,MAAM,cAAa;AAC3D;;;ACjBA,eAAsB,eAIpB,QAAyC;AAEzC,QAAM,UAAU,MAAM,OAAO,QAAQ;IACnC,QAAQ;GACT;AACD,SAAO,OAAO,OAAO;AACvB;;;AC2BA,eAAsB,yBACpB,QACA,EACE,WACA,aACA,WAAW,SAAQ,IACmB,CAAA,GAAE;AAE1C,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AAEzD,MAAI;AACJ,MAAI,WAAW;AACb,YAAQ,MAAM,OAAO,QACnB;MACE,QAAQ;MACR,QAAQ,CAAC,SAAS;OAEpB,EAAE,QAAQ,KAAI,CAAE;EAEpB,OAAO;AACL,YAAQ,MAAM,OAAO,QACnB;MACE,QAAQ;MACR,QAAQ,CAAC,kBAAkB,QAAQ;OAErC,EAAE,QAAQ,QAAQ,cAAc,EAAC,CAAE;EAEvC;AAEA,SAAO,YAAY,KAAK;AAC1B;;;AC1CA,eAAsB,QACpB,QACA,EAAE,SAAS,aAAa,WAAW,SAAQ,GAAqB;AAEhE,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AACzD,QAAM,MAAM,MAAM,OAAO,QACvB;IACE,QAAQ;IACR,QAAQ,CAAC,SAAS,kBAAkB,QAAQ;KAE9C,EAAE,QAAQ,QAAQ,cAAc,EAAC,CAAE;AAErC,MAAI,QAAQ;AAAM,WAAO;AACzB,SAAO;AACT;;;AClEM,SAAU,iBAAiB,YAAyB;AACxD,SAAO;IACL,eAAe,WAAW,cAAc,IAAI,CAAC,UAAU,OAAO,KAAK,CAAC;IACpE,cAAc,WAAW;IACzB,aAAa,OAAO,WAAW,WAAW;IAC1C,QAAQ,WAAW,QAAQ,IAAI,CAAC,WAC9B,OAAO,IAAI,CAAC,UAAU,OAAO,KAAK,CAAC,CAAC;;AAG1C;;;ACuDA,eAAsB,cACpB,QACA,EACE,YACA,aACA,WAAW,UACX,kBAAiB,GACO;AAE1B,QAAM,iBAAiB,cAAc,YAAY,WAAW,IAAI;AAChE,QAAM,aAAa,MAAM,OAAO,QAC9B;IACE,QAAQ;IACR,QAAQ;MACN,YAAY,UAAU;MACtB,kBAAkB;MAClB;;KAGJ,EAAE,QAAQ,QAAQ,cAAc,EAAC,CAAE;AAErC,SAAO,iBAAiB,UAAU;AACpC;;;AChBA,eAAsB,cAQpB,SACA,EACE,OAAM,GAC8D;AAItE,QAAM,SAAS,OAAO,UAAU;AAEhC,QAAM,OAAO,MAAM,OAAO,QAAQ;IAChC,QAAQ;IACR,QAAQ,CAAC,OAAO,EAAE;GACnB;AAED,QAAM,gBAAgB,KAAK,IAAI,CAAC,QAAQ,UAAU,GAAG,CAAC;AACtD,MAAI,CAAC,OAAO;AACV,WAAO;AAOT,SAAO,eAAe;IACpB,KAAK,OAAO;IACZ,MAAM;IACN;GACD;AAOH;;;AC9GM,IAAO,qBAAP,cAAkC,UAAS;EAC/C,YAAY,EAAE,OAAM,GAAuB;AACzC,UAAM,mBAAmB,UAAU,MAAM,CAAC,MAAM;MAC9C,cAAc,CAAC,iCAAiC;KACjD;EACH;;AAMI,IAAO,0BAAP,cAAuC,UAAS;EACpD,YAAY,EACV,aACA,MAAK,GAC+D;AACpE,UACE,0BAA0B,WAAW,uBAAuB,KAAK,UAAU,OAAO,KAAK,KAAK,CAAC,CAAC,OAC9F;MACE,UAAU;MACV,cAAc,CAAC,kDAAkD;KAClE;EAEL;;AAMI,IAAO,yBAAP,cAAsC,UAAS;EACnD,YAAY,EAAE,KAAI,GAAoB;AACpC,UAAM,gBAAgB,IAAI,iBAAiB;MACzC,cAAc,CAAC,0CAA0C;MACzD,MAAM;KACP;EACH;;;;ACHI,SAAU,cAId,YAA2D;AAE3D,QAAM,EACJ,SAAS,CAAA,GACT,SACA,YAAW,IACT;AACJ,QAAM,QAAQ;IACZ,cAAc,wBAAwB,EAAE,OAAM,CAAE;IAChD,GAAG,WAAW;;AAKhB,oBAAkB;IAChB;IACA;IACA;IACA;GACD;AAED,QAAM,QAAe,CAAC,QAAQ;AAC9B,MAAI;AACF,UAAM,KACJ,WAAW;MACT;MACA;KACD,CAAC;AAGN,MAAI,gBAAgB;AAClB,UAAM,KACJ,WAAW;MACT,MAAM;MACN;MACA;KACD,CAAC;AAGN,SAAO,UAAU,OAAO,KAAK,CAAC;AAChC;AAIM,SAAU,WAAW,EACzB,QACA,MAAK,GAIN;AACC,SAAO,WAAW;IAChB,MAAM;IACN,aAAa;IACb;GACD;AACH;AAOM,SAAU,WAAW,EACzB,MACA,aACA,MAAK,GAKN;AACC,QAAM,UAAU,WAAW;IACzB;IACA;IACA;GACD;AACD,SAAO,UAAU,OAAO;AAC1B;AAQA,SAAS,WAAW,EAClB,MACA,aACA,MAAK,GAKN;AACC,QAAM,eAA+B,CAAC,EAAE,MAAM,UAAS,CAAE;AACzD,QAAM,gBAA2B,CAAC,SAAS,EAAE,aAAa,MAAK,CAAE,CAAC;AAElE,aAAW,SAAS,MAAM,WAAW,GAAG;AACtC,UAAM,CAAC,MAAM,KAAK,IAAI,YAAY;MAChC;MACA,MAAM,MAAM;MACZ,MAAM,MAAM;MACZ,OAAO,KAAK,MAAM,IAAI;KACvB;AACD,iBAAa,KAAK,IAAI;AACtB,kBAAc,KAAK,KAAK;EAC1B;AAEA,SAAO,oBAAoB,cAAc,aAAa;AACxD;AAQA,SAAS,SAAS,EAChB,aACA,MAAK,GAIN;AACC,QAAM,kBAAkB,MAAM,WAAW,EAAE,aAAa,MAAK,CAAE,CAAC;AAChE,SAAO,UAAU,eAAe;AAClC;AAIM,SAAU,WAAW,EACzB,aACA,MAAK,GAIN;AACC,MAAI,SAAS;AACb,QAAM,eAAe,qBAAqB,EAAE,aAAa,MAAK,CAAE;AAChE,eAAa,OAAO,WAAW;AAE/B,QAAM,OAAO,CAAC,aAAa,GAAG,MAAM,KAAK,YAAY,EAAE,KAAI,CAAE;AAC7D,aAAW,QAAQ,MAAM;AACvB,cAAU,GAAG,IAAI,IAAI,MAAM,IAAI,EAC5B,IAAI,CAAC,EAAE,MAAM,MAAM,EAAC,MAAO,GAAG,CAAC,IAAI,IAAI,EAAE,EACzC,KAAK,GAAG,CAAC;EACd;AAEA,SAAO;AACT;AAIA,SAAS,qBACP,EACE,aAAa,cACb,MAAK,GAKP,UAAuB,oBAAI,IAAG,GAAE;AAEhC,QAAM,QAAQ,aAAa,MAAM,OAAO;AACxC,QAAM,cAAc,QAAQ,CAAC;AAC7B,MAAI,QAAQ,IAAI,WAAW,KAAK,MAAM,WAAW,MAAM,QAAW;AAChE,WAAO;EACT;AAEA,UAAQ,IAAI,WAAW;AAEvB,aAAW,SAAS,MAAM,WAAW,GAAG;AACtC,yBAAqB,EAAE,aAAa,MAAM,MAAM,MAAK,GAAI,OAAO;EAClE;AACA,SAAO;AACT;AAQA,SAAS,YAAY,EACnB,OACA,MACA,MACA,MAAK,GAMN;AACC,MAAI,MAAM,IAAI,MAAM,QAAW;AAC7B,WAAO;MACL,EAAE,MAAM,UAAS;MACjB,UAAU,WAAW,EAAE,MAAM,OAAO,aAAa,MAAM,MAAK,CAAE,CAAC;;EAEnE;AAEA,MAAI,SAAS,SAAS;AACpB,UAAM,UAAU,MAAM,SAAS,IAAI,MAAM;AACzC,YAAQ,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AACrC,WAAO,CAAC,EAAE,MAAM,UAAS,GAAI,UAAU,KAAK,CAAC;EAC/C;AAEA,MAAI,SAAS;AAAU,WAAO,CAAC,EAAE,MAAM,UAAS,GAAI,UAAU,MAAM,KAAK,CAAC,CAAC;AAE3E,MAAI,KAAK,YAAY,GAAG,MAAM,KAAK,SAAS,GAAG;AAC7C,UAAM,aAAa,KAAK,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC;AACtD,UAAM,iBAAkB,MAAgC,IAAI,CAAC,SAC3D,YAAY;MACV;MACA,MAAM;MACN;MACA,OAAO;KACR,CAAC;AAEJ,WAAO;MACL,EAAE,MAAM,UAAS;MACjB,UACE,oBACE,eAAe,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAC7B,eAAe,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CACjC;;EAGP;AAEA,SAAO,CAAC,EAAE,KAAI,GAAI,KAAK;AACzB;;;AC3MM,SAAU,kBAGd,YAAuD;AACvD,QAAM,EAAE,QAAQ,SAAS,aAAa,MAAK,IACzC;AAEF,QAAM,eAAe,CACnB,QACA,SACE;AACF,eAAW,SAAS,QAAQ;AAC1B,YAAM,EAAE,MAAM,KAAI,IAAK;AACvB,YAAM,QAAQ,KAAK,IAAI;AAEvB,YAAM,eAAe,KAAK,MAAM,YAAY;AAC5C,UACE,iBACC,OAAO,UAAU,YAAY,OAAO,UAAU,WAC/C;AACA,cAAM,CAAC,OAAO,MAAM,KAAK,IAAI;AAG7B,oBAAY,OAAO;UACjB,QAAQ,SAAS;UACjB,MAAM,OAAO,SAAS,KAAK,IAAI;SAChC;MACH;AAEA,UAAI,SAAS,aAAa,OAAO,UAAU,YAAY,CAAC,UAAU,KAAK;AACrE,cAAM,IAAI,oBAAoB,EAAE,SAAS,MAAK,CAAE;AAElD,YAAM,aAAa,KAAK,MAAM,UAAU;AACxC,UAAI,YAAY;AACd,cAAM,CAAC,OAAO,KAAK,IAAI;AACvB,YAAI,SAAS,KAAK,KAAY,MAAM,OAAO,SAAS,KAAK;AACvD,gBAAM,IAAI,uBAAuB;YAC/B,cAAc,OAAO,SAAS,KAAK;YACnC,WAAW,KAAK,KAAY;WAC7B;MACL;AAEA,YAAMC,UAAS,MAAM,IAAI;AACzB,UAAIA,SAAQ;AACV,0BAAkB,IAAI;AACtB,qBAAaA,SAAQ,KAAgC;MACvD;IACF;EACF;AAGA,MAAI,MAAM,gBAAgB,QAAQ;AAChC,QAAI,OAAO,WAAW;AAAU,YAAM,IAAI,mBAAmB,EAAE,OAAM,CAAE;AACvE,iBAAa,MAAM,cAAc,MAAM;EACzC;AAGA,MAAI,gBAAgB,gBAAgB;AAClC,QAAI,MAAM,WAAW;AAAG,mBAAa,MAAM,WAAW,GAAG,OAAO;;AAC3D,YAAM,IAAI,wBAAwB,EAAE,aAAa,MAAK,CAAE;EAC/D;AACF;AAIM,SAAU,wBAAwB,EACtC,OAAM,GACmC;AACzC,SAAO;IACL,OAAO,QAAQ,SAAS,YAAY,EAAE,MAAM,QAAQ,MAAM,SAAQ;IAClE,QAAQ,WAAW,EAAE,MAAM,WAAW,MAAM,SAAQ;IACpD,OAAO,QAAQ,YAAY,YAAY;MACrC,MAAM;MACN,MAAM;;IAER,QAAQ,qBAAqB;MAC3B,MAAM;MACN,MAAM;;IAER,QAAQ,QAAQ,EAAE,MAAM,QAAQ,MAAM,UAAS;IAC/C,OAAO,OAAO;AAClB;AAiBA,SAAS,kBAAkB,MAAY;AAErC,MACE,SAAS,aACT,SAAS,UACT,SAAS,YACT,KAAK,WAAW,OAAO,KACvB,KAAK,WAAW,MAAM,KACtB,KAAK,WAAW,KAAK;AAErB,UAAM,IAAI,uBAAuB,EAAE,KAAI,CAAE;AAC7C;;;AChKO,IAAM,kBAAkB;EAC7B,OAAO;EACP,OAAO;;AAKH,SAAU,yBACd,oBAAuD;AAEvD,QAAM,UAAU;IACd,GAAG;IACH,aAAa,mBAAmB,cAC5B,OAAO,mBAAmB,WAAW,IACrC;IACJ,iBAAiB,mBAAmB,kBAChC,mBAAmB,kBACnB;IACJ,mBAAmB,mBAAmB,oBAClC,OAAO,mBAAmB,iBAAiB,IAC3C;IACJ,mBAAmB,mBAAmB,oBAClC,OAAO,mBAAmB,iBAAiB,IAC3C;IACJ,SAAS,mBAAmB,UACxB,OAAO,mBAAmB,OAAO,IACjC;IACJ,MAAM,mBAAmB,OACrB,mBAAmB,KAAK,IAAI,CAAC,QAAQ,UAAU,GAAG,CAAC,IACnD;IACJ,IAAI,mBAAmB,KAAK,mBAAmB,KAAK;IACpD,kBAAkB,mBAAmB,mBACjC,YAAY,mBAAmB,gBAAgB,IAC/C;IACJ,QAAQ,mBAAmB,SACvB,gBAAgB,mBAAmB,MAAM,IACzC;IACJ,MAAM,mBAAmB,OACrB,gBACE,mBAAmB,IAAoC,KACpD,mBAAmB,OACxB;;AAGN,MAAI,mBAAmB;AACrB,YAAQ,eAAe,OAAO,mBAAmB,YAAY;AAC/D,MAAI,mBAAmB;AACrB,YAAQ,cAAc,OAAO,mBAAmB,WAAW;AAE7D,SAAO;AACT;;;ACxEO,IAAM,uBAAuB;;;ACkB9B,SAAU,kBAAkB,UAAyB;AACzD,QAAM,WAAW,MAAK;AACpB,QAAI,OAAO,aAAa;AAAU,aAAO,YAAY,QAAQ;AAC7D,QAAI,OAAO,SAAS,QAAQ;AAAU,aAAO,SAAS;AACtD,WAAO,WAAW,SAAS,GAAG;EAChC,GAAE;AACF,QAAM,SAAS,YAAY,GAAG,oBAAoB,GAAG,KAAK,OAAO,CAAC,EAAE;AACpE,SAAO,OAAO,CAAC,QAAQ,OAAO,CAAC;AACjC;;;ACbM,SAAU,YACd,SACA,KAAoB;AAEpB,SAAO,UAAU,kBAAkB,OAAO,GAAG,GAAG;AAClD;;;AClBO,IAAM,oBACX;;;ACSI,SAAU,mBACd,WAAuC;AAEvC,SAAO,SAAS,WAAW,GAAG,MAAM;AACtC;;;ACsBM,SAAU,0BACd,YAAmD;AAEnD,QAAM,EAAE,SAAS,MAAM,WAAW,KAAK,MAAK,IAAK;AACjD,QAAM,aAAa,UAAU;IAC3B,oBACE,CAAC,EAAE,MAAM,UAAS,GAAI,EAAE,MAAM,QAAO,GAAI,EAAE,MAAM,QAAO,CAAE,GAC1D,CAAC,SAAS,MAAM,SAAS,CAAC;IAE5B;GACD;AAED,MAAI,OAAO;AAAO,WAAO;AACzB,SAAO,WAAW,UAAU;AAC9B;;;AC1CA,SAAS,mBAAmB,cAAsC;AAChE,SAAO,aAAa,IAAI,CAAC,WAAW;IAClC,GAAG;IACH,OAAO,OAAO,MAAM,KAAK;IACzB;AACJ;AAEM,SAAU,YAAY,OAA6B;AACvD,SAAO;IACL,GAAG;IACH,SAAS,MAAM,UAAU,OAAO,MAAM,OAAO,IAAI;IACjD,OAAO,MAAM,QAAQ,YAAY,MAAM,KAAK,IAAI;IAChD,cAAc,MAAM,eAChB,mBAAmB,MAAM,YAAY,IACrC;;AAER;;;ACgDA,eAAsB,SACpB,QACA,EACE,SACA,aACA,UAAU,WACV,YAAW,GACQ;AAErB,QAAM,WAAW,aAAa;AAE9B,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AAEzD,QAAM,QAAQ,MAAM,OAAO,QAAQ;IACjC,QAAQ;IACR,QAAQ,CAAC,SAAS,aAAa,kBAAkB,QAAQ;GAC1D;AAED,SAAO,YAAY,KAAK;AAC1B;;;ACjCA,eAAsB,aACpB,QACA,EAAE,SAAS,aAAa,WAAW,UAAU,KAAI,GAA0B;AAE3E,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AACzD,QAAM,OAAO,MAAM,OAAO,QAAQ;IAChC,QAAQ;IACR,QAAQ,CAAC,SAAS,MAAM,kBAAkB,QAAQ;GACnD;AACD,SAAO;AACT;;;ACoBA,eAAsB,eAIpB,QACA,EACE,WACA,aACA,UAAU,WACV,MACA,OAAAC,OAAK,GAC8B;AAErC,QAAM,WAAW,aAAa;AAE9B,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AAEzD,MAAI,cAAqC;AACzC,MAAI,MAAM;AACR,kBAAc,MAAM,OAAO,QACzB;MACE,QAAQ;MACR,QAAQ,CAAC,IAAI;OAEf,EAAE,QAAQ,KAAI,CAAE;EAEpB,WAAW,WAAW;AACpB,kBAAc,MAAM,OAAO,QACzB;MACE,QAAQ;MACR,QAAQ,CAAC,WAAW,YAAYA,MAAK,CAAC;OAExC,EAAE,QAAQ,KAAI,CAAE;EAEpB,WAAW,kBAAkB,UAAU;AACrC,kBAAc,MAAM,OAAO,QACzB;MACE,QAAQ;MACR,QAAQ,CAAC,kBAAkB,UAAU,YAAYA,MAAK,CAAC;OAEzD,EAAE,QAAQ,QAAQ,cAAc,EAAC,CAAE;EAEvC;AAEA,MAAI,CAAC;AACH,UAAM,IAAI,yBAAyB;MACjC;MACA;MACA;MACA;MACA,OAAAA;KACD;AAEH,QAAM,SACJ,OAAO,OAAO,YAAY,aAAa,UAAU;AACnD,SAAO,OAAO,WAAW;AAC3B;;;ACrFA,eAAsB,4BAGpB,QACA,EAAE,MAAM,mBAAkB,GAAgD;AAE1E,QAAM,CAAC,aAAa,WAAW,IAAI,MAAM,QAAQ,IAAI;IACnD,UAAU,QAAQ,gBAAgB,gBAAgB,EAAE,CAAA,CAAE;IACtD,OACI,UAAU,QAAQ,gBAAgB,gBAAgB,EAAE,EAAE,KAAI,CAAE,IAC5D;GACL;AACD,QAAM,yBACJ,oBAAoB,eAAe,aAAa;AAClD,MAAI,CAAC;AAAwB,WAAO;AACpC,SAAO,cAAc,yBAA0B;AACjD;;;ACzBA,eAAsB,sBACpB,QACA,EAAE,KAAI,GAAmC;AAEzC,QAAM,UAAU,MAAM,OAAO,QAC3B;IACE,QAAQ;IACR,QAAQ,CAAC,IAAI;KAEf,EAAE,QAAQ,KAAI,CAAE;AAGlB,MAAI,CAAC;AAAS,UAAM,IAAI,gCAAgC,EAAE,KAAI,CAAE;AAEhE,QAAM,SACJ,OAAO,OAAO,YAAY,oBAAoB,UAC9C;AACF,SAAO,OAAO,OAAO;AACvB;;;AC0CA,eAAsB,UAKpB,QACA,YAAwD;AAExD,QAAM,EACJ,eAAe,MACf,WAAW,YACX,aACA,UACA,kBAAkB,mBAClB,cAAa,IACX;AACJ,QAAM,YAAY,WAAW;AAE7B,QAAM,YACJ,eACE,OAAO,OAAO,OAAO,cAAc,YACnC,OAAO,MAAM,UAAU,aACvB;AAEJ,MAAI,mBAAmB;AACvB,MAAI,CAAC,kBAAkB;AACrB,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MACR,4DAA4D;AAGhE,uBAAmB,wBAAwB;MACzC;MACA,OAAO,OAAO;MACd,UAAU;KACX;EACH;AAQA,QAAM,eAAkC,CAAC,CAAA,CAAE;AAC3C,MAAI,eAAe;AACnB,MAAI,mBAAmB;AACvB,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,EAAE,KAAAC,MAAK,SAAS,MAAM,aAAY,IAAK,UAAU,CAAC;AACxD,QAAI;AACF,YAAM,WAAW,mBAAmB,EAAE,KAAAA,MAAK,MAAM,aAAY,CAAE;AAE/D,2BAAqB,SAAS,SAAS,KAAK;AAE5C;;QAEE,YAAY;QAEZ,mBAAmB;QAEnB,aAAa,YAAY,EAAE,SAAS;QACpC;AACA;AACA,4BAAoB,SAAS,SAAS,KAAK;AAC3C,qBAAa,YAAY,IAAI,CAAA;MAC/B;AAEA,mBAAa,YAAY,IAAI;QAC3B,GAAG,aAAa,YAAY;QAC5B;UACE,cAAc;UACd;UACA,QAAQ;;;IAGd,SAAS,KAAK;AACZ,YAAM,QAAQ,iBAAiB,KAAkB;QAC/C,KAAAA;QACA;QACA;QACA,UAAU;QACV;OACD;AACD,UAAI,CAAC;AAAc,cAAM;AACzB,mBAAa,YAAY,IAAI;QAC3B,GAAG,aAAa,YAAY;QAC5B;UACE,cAAc;UACd,UAAU;UACV,QAAQ;;;IAGd;EACF;AAEA,QAAM,oBAAoB,MAAM,QAAQ,WACtC,aAAa,IAAI,CAAC,UAChB,UACE,QACA,cACA,cAAc,EACd;IACA,KAAK;IACL,SAAS;IACT,MAAM,CAAC,KAAK;IACZ;IACA;IACA,cAAc;IACd;GACD,CAAC,CACH;AAGH,QAAM,UAAU,CAAA;AAChB,WAAS,IAAI,GAAG,IAAI,kBAAkB,QAAQ,KAAK;AACjD,UAAM,SAAS,kBAAkB,CAAC;AAIlC,QAAI,OAAO,WAAW,YAAY;AAChC,UAAI,CAAC;AAAc,cAAM,OAAO;AAChC,eAAS,IAAI,GAAG,IAAI,aAAa,CAAC,EAAE,QAAQ,KAAK;AAC/C,gBAAQ,KAAK;UACX,QAAQ;UACR,OAAO,OAAO;UACd,QAAQ;SACT;MACH;AACA;IACF;AAGA,UAAM,mBAAmB,OAAO;AAChC,aAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAEhD,YAAM,EAAE,YAAY,QAAO,IAAK,iBAAiB,CAAC;AAGlD,YAAM,EAAE,SAAQ,IAAK,aAAa,CAAC,EAAE,CAAC;AAItC,YAAM,EAAE,KAAAA,MAAK,SAAS,cAAc,KAAI,IAAK,UAC3C,QAAQ,MAAM;AAGhB,UAAI;AACF,YAAI,aAAa;AAAM,gBAAM,IAAI,yBAAwB;AACzD,YAAI,CAAC;AAAS,gBAAM,IAAI,iBAAiB,EAAE,MAAM,WAAU,CAAE;AAC7D,cAAMC,UAAS,qBAAqB;UAClC,KAAAD;UACA;UACA,MAAM;UACN;SACD;AACD,gBAAQ,KAAK,eAAe,EAAE,QAAAC,SAAQ,QAAQ,UAAS,IAAKA,OAAM;MACpE,SAAS,KAAK;AACZ,cAAM,QAAQ,iBAAiB,KAAkB;UAC/C,KAAAD;UACA;UACA;UACA,UAAU;UACV;SACD;AACD,YAAI,CAAC;AAAc,gBAAM;AACzB,gBAAQ,KAAK,EAAE,OAAO,QAAQ,QAAW,QAAQ,UAAS,CAAE;MAC9D;IACF;EACF;AAEA,MAAI,QAAQ,WAAW,UAAU;AAC/B,UAAM,IAAI,UAAU,4BAA4B;AAClD,SAAO;AACT;;;ACzPM,SAAU,mBAA0C,EACxD,GACA,GACA,KAAK,OACL,GACA,QAAO,GAC0B;AACjC,QAAM,YAAY,MAAK;AACrB,QAAI,YAAY,KAAK,YAAY;AAAG,aAAO;AAC3C,QAAI,MAAM,MAAM,OAAO,MAAM,OAAO,KAAK;AAAM,aAAO,IAAI,OAAO,KAAK,IAAI;AAC1E,UAAM,IAAI,MAAM,gCAAgC;EAClD,GAAE;AACF,QAAM,YAAY,KAAK,IAAI,UAAU,UACnC,YAAY,CAAC,GACb,YAAY,CAAC,CAAC,EACd,aAAY,CAAE,GAAG,aAAa,IAAI,OAAO,IAAI;AAE/C,MAAI,OAAO;AAAO,WAAO;AACzB,SAAO,WAAW,SAAS;AAC7B;;;ACEA,eAAsB,WACpB,QACA,YAAgC;AAEhC,QAAM,EACJ,SACA,SACA,aACA,MACA,WACA,oCAAoC,OAAO,OAAO,WAC9C,4BAA4B,SAChC,GAAG,KAAI,IACL;AAEJ,QAAM,gBAAgB,MAAK;AACzB,QAAI,MAAM,SAAS;AAAG,aAAO;AAC7B,QAAI,OAAO,cAAc,YAAY,OAAO,aAAa,OAAO;AAC9D,aAAO,mBAAmB,SAAS;AACrC,WAAO,WAAW,SAAS;EAC7B,GAAE;AAEF,QAAM,mBAAmB,OAAO,YAAW;AAGzC,QAAI,CAAC,WAAW,CAAC;AAAa,aAAO;AAGrC,QAAI,mBAAmB,YAAY;AAAG,aAAO;AAI7C,WAAO,0BAA0B;MAC/B,SAAS;MACT,MAAM;MACN,WAAW;KACZ;EACH,GAAE;AAEF,MAAI;AACF,UAAM,OAAO,oCACR;MACC,IAAI;MACJ,MAAM,mBAAmB;QACvB,KAAK;QACL,cAAc;QACd,MAAM,CAAC,SAAS,MAAM,gBAAgB;OACvC;MACD,GAAG;QAEJ;MACC,MAAM,iBAAiB;QACrB,KAAK;QACL,MAAM,CAAC,SAAS,MAAM,gBAAgB;QACtC,UAAU;OACX;MACD,GAAG;;AAGT,UAAM,EAAE,KAAI,IAAK,MAAM,UAAU,QAAQ,MAAM,MAAM,EAAE,IAAI;AAE3D,WAAO,UAAU,QAAQ,KAAK;EAChC,SAAS,OAAO;AAEd,QAAI;AACF,YAAM,WAAW,eACf,WAAW,OAAO,GAClB,MAAM,eAAe,EAAE,MAAM,UAAS,CAAE,CAAC;AAE3C,UAAI;AAAU,eAAO;IACvB,QAAQ;IAAC;AAET,QAAI,iBAAiB,oBAAoB;AAIvC,aAAO;IACT;AAEA,UAAM;EACR;AACF;;;ACzFA,eAAsB,cACpB,QACA,EACE,SACA,SACA,SACA,aACA,WACA,GAAG,YAAW,GACU;AAE1B,QAAM,OAAO,YAAY,OAAO;AAChC,SAAO,WAAW,QAAQ;IACxB;IACA;IACA;IACA;IACA;IACA,GAAG;GACJ;AACH;;;ACzBA,eAAsB,gBAKpB,QACA,YAA6D;AAE7D,QAAM,EACJ,SACA,SACA,aACA,WACA,SACA,aACA,OACA,QACA,GAAG,YAAW,IACZ;AACJ,QAAM,OAAO,cAAc,EAAE,SAAS,aAAa,OAAO,OAAM,CAAE;AAClE,SAAO,WAAW,QAAQ;IACxB;IACA;IACA;IACA;IACA;IACA,GAAG;GACJ;AACH;;;ACMM,SAAU,iBAId,QACA,EACE,cAAc,OACd,aAAa,OACb,eACA,SACA,MAAM,OACN,kBAAkB,OAAO,gBAAe,GACF;AAExC,QAAM,iBAAiB,MAAK;AAC1B,QAAI,OAAO,UAAU;AAAa,aAAO;AACzC,QAAI,OAAO,UAAU,SAAS;AAAa,aAAO;AAClD,QACE,OAAO,UAAU,SAAS,cAC1B,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,SAAS;AAE/C,aAAO;AACT,WAAO;EACT,GAAE;AAEF,MAAI;AAEJ,QAAM,kBAAkB,MAAK;AAC3B,UAAM,aAAa,UAAU;MAC3B;MACA,OAAO;MACP;MACA;MACA;KACD;AAED,WAAO,QAAQ,YAAY,EAAE,eAAe,QAAO,GAAI,CAAC,SACtD,KACE,YAAW;AACT,UAAI;AACF,cAAM,cAAc,MAAM,UACxB,QACA,gBACA,gBAAgB,EAChB,EAAE,WAAW,EAAC,CAAE;AAElB,YAAI,iBAAiB;AAGnB,cAAI,gBAAgB;AAAiB;AAIrC,cAAI,cAAc,kBAAkB,KAAK,YAAY;AACnD,qBAAS,IAAI,kBAAkB,IAAI,IAAI,aAAa,KAAK;AACvD,mBAAK,cAAc,GAAG,eAAe;AACrC,gCAAkB;YACpB;UACF;QACF;AAIA,YAAI,CAAC,mBAAmB,cAAc,iBAAiB;AACrD,eAAK,cAAc,aAAa,eAAe;AAC/C,4BAAkB;QACpB;MACF,SAAS,KAAK;AACZ,aAAK,UAAU,GAAY;MAC7B;IACF,GACA;MACE;MACA,UAAU;KACX,CACF;EAEL;AAEA,QAAM,uBAAuB,MAAK;AAChC,UAAM,aAAa,UAAU;MAC3B;MACA,OAAO;MACP;MACA;KACD;AAED,WAAO,QAAQ,YAAY,EAAE,eAAe,QAAO,GAAI,CAAC,SAAQ;AAC9D,UAAI,SAAS;AACb,UAAI,cAAc,MAAO,SAAS;AACjC,OAAC,YAAW;AACX,YAAI;AACF,gBAAM,aAAa,MAAK;AACtB,gBAAI,OAAO,UAAU,SAAS,YAAY;AACxC,oBAAME,aAAY,OAAO,UAAU,WAAW,KAC5C,CAACA,eACCA,WAAU,OAAO,SAAS,WAAW;AAEzC,kBAAI,CAACA;AAAW,uBAAO,OAAO;AAC9B,qBAAOA,WAAU;YACnB;AACA,mBAAO,OAAO;UAChB,GAAE;AAEF,gBAAM,EAAE,aAAa,aAAY,IAAK,MAAM,UAAU,UAAU;YAC9D,QAAQ,CAAC,UAAU;YACnB,OAAO,MAAS;AACd,kBAAI,CAAC;AAAQ;AACb,oBAAM,cAAc,YAAY,KAAK,QAAQ,MAAM;AACnD,mBAAK,cAAc,aAAa,eAAe;AAC/C,gCAAkB;YACpB;YACA,QAAQ,OAAY;AAClB,mBAAK,UAAU,KAAK;YACtB;WACD;AACD,wBAAc;AACd,cAAI,CAAC;AAAQ,wBAAW;QAC1B,SAAS,KAAK;AACZ,oBAAU,GAAY;QACxB;MACF,GAAE;AACF,aAAO,MAAM,YAAW;IAC1B,CAAC;EACH;AAEA,SAAO,gBAAgB,gBAAe,IAAK,qBAAoB;AACjE;;;AC3EA,eAAsB,0BAGpB,QACA;EACE,gBAAgB;EAChB;EACA;EACA,kBAAkB,OAAO;EACzB,aAAa;EACb,aAAa,CAAC,EAAE,MAAK,MAAO,CAAC,EAAE,KAAK,SAAS;;EAC7C,UAAU;AAAO,GAC0B;AAE7C,QAAM,aAAa,UAAU,CAAC,6BAA6B,OAAO,KAAK,IAAI,CAAC;AAE5E,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI,WAAW;AAEf,QAAM,EAAE,SAAS,SAAS,OAAM,IAC9B,cAAa;AAEf,QAAM,QAAQ,UACV,WACE,MAAM,OAAO,IAAI,sCAAsC,EAAE,KAAI,CAAE,CAAC,GAChE,OAAO,IAET;AAEJ,QAAM,aAAa,QACjB,YACA,EAAE,YAAY,SAAS,OAAM,GAC7B,CAAC,SAAQ;AACP,UAAM,WAAW,UACf,QACA,kBACA,kBAAkB,EAClB;MACA,YAAY;MACZ,aAAa;MACb,MAAM;MACN;MACA,MAAM,cAAc,cAAY;AAC9B,cAAM,OAAO,CAAC,OAAkB;AAC9B,uBAAa,KAAK;AAClB,mBAAQ;AACR,aAAE;AACF,qBAAU;QACZ;AAEA,YAAI,cAAc;AAElB,YAAI;AAAU;AAEd,YAAI;AAGF,cAAI,SAAS;AACX,gBACE,gBAAgB,MACf,CAAC,QAAQ,eACR,cAAc,QAAQ,cAAc,KAAK;AAE3C;AAEF,iBAAK,MAAM,KAAK,QAAQ,OAAO,CAAC;AAChC;UACF;AAKA,cAAI,CAAC,aAAa;AAChB,uBAAW;AACX,kBAAM,UACJ,YAAW;AACT,4BAAe,MAAM,UACnB,QACA,gBACA,gBAAgB,EAChB,EAAE,KAAI,CAAE;AACV,kBAAI,YAAY;AACd,8BAAc,YAAY;YAC9B,GACA;cACE,OAAO;cACP;aACD;AAEH,uBAAW;UACb;AAGA,oBAAU,MAAM,UACd,QACA,uBACA,uBAAuB,EACvB,EAAE,KAAI,CAAE;AAGV,cACE,gBAAgB,MACf,CAAC,QAAQ,eACR,cAAc,QAAQ,cAAc,KAAK;AAE3C;AAEF,eAAK,MAAM,KAAK,QAAQ,OAAO,CAAC;QAClC,SAAS,KAAK;AAGZ,cACE,eAAe,4BACf,eAAe,iCACf;AACA,gBAAI,CAAC,aAAa;AAChB,yBAAW;AACX;YACF;AAEA,gBAAI;AACF,oCAAsB;AAKtB,yBAAW;AACX,oBAAM,QAAQ,MAAM,UAClB,MACE,UACE,QACA,UACA,UAAU,EACV;gBACA;gBACA,qBAAqB;eACtB,GACH;gBACE,OAAO;gBACP;gBACA,aAAa,CAAC,EAAE,MAAK,MACnB,iBAAiB;eACpB;AAEH,yBAAW;AAEX,oBAAM,yBACJ,MAAM,aACN,KACA,CAAC,EAAE,MAAM,MAAK,MACZ,SAAS,oBAAqB,QAC9B,UAAU,oBAAqB,KAAK;AAIxC,kBAAI,CAAC;AAAwB;AAG7B,wBAAU,MAAM,UACd,QACA,uBACA,uBAAuB,EACvB;gBACA,MAAM,uBAAuB;eAC9B;AAGD,kBACE,gBAAgB,MACf,CAAC,QAAQ,eACR,cAAc,QAAQ,cAAc,KAAK;AAE3C;AAEF,kBAAI,SAA4B;AAChC,kBACE,uBAAuB,OAAO,oBAAoB,MAClD,uBAAuB,UAAU,oBAAoB,OACrD;AACA,yBAAS;cACX,WACE,uBAAuB,SAAS,uBAAuB,MACvD,uBAAuB,UAAU,IACjC;AACA,yBAAS;cACX;AAEA,mBAAK,MAAK;AACR,qBAAK,aAAa;kBAChB;kBACA;kBACA,aAAa;kBACb,oBAAoB;iBACrB;AACD,qBAAK,QAAQ,OAAO;cACtB,CAAC;YACH,SAAS,MAAM;AACb,mBAAK,MAAM,KAAK,OAAO,IAAI,CAAC;YAC9B;UACF,OAAO;AACL,iBAAK,MAAM,KAAK,OAAO,GAAG,CAAC;UAC7B;QACF;MACF;KACD;EACH,CAAC;AAGH,SAAO;AACT;;;ACrPM,SAAU,YAMd,QACA,EACE,WAAW,UACX,aAAa,OACb,cAAc,OACd,SACA,SACA,qBAAqB,sBACrB,MAAM,OACN,kBAAkB,OAAO,gBAAe,GAC+B;AAEzE,QAAM,iBAAiB,MAAK;AAC1B,QAAI,OAAO,UAAU;AAAa,aAAO;AACzC,QAAI,OAAO,UAAU,SAAS;AAAa,aAAO;AAClD,QACE,OAAO,UAAU,SAAS,cAC1B,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,SAAS;AAE/C,aAAO;AACT,WAAO;EACT,GAAE;AACF,QAAM,sBAAsB,wBAAwB;AAEpD,MAAI;AAIJ,QAAM,aAAa,MAAK;AACtB,UAAM,aAAa,UAAU;MAC3B;MACA,OAAO;MACP;MACA;MACA;MACA;MACA;KACD;AAED,WAAO,QAAQ,YAAY,EAAE,SAAS,QAAO,GAAI,CAAC,SAChD,KACE,YAAW;AACT,UAAI;AACF,cAAM,QAAQ,MAAM,UAClB,QACA,UACA,UAAU,EACV;UACA;UACA;SACD;AACD,YAAI,MAAM,UAAU,WAAW,QAAQ;AAGrC,cAAI,MAAM,WAAW,UAAU;AAAQ;AAIvC,cAAI,MAAM,SAAS,UAAU,SAAS,KAAK,YAAY;AACrD,qBAAS,IAAI,WAAW,SAAS,IAAI,IAAI,MAAM,QAAQ,KAAK;AAC1D,oBAAMC,SAAS,MAAM,UACnB,QACA,UACA,UAAU,EACV;gBACA,aAAa;gBACb;eACD;AACD,mBAAK,QAAQA,QAAc,SAAgB;AAC3C,0BAAYA;YACd;UACF;QACF;AAEA;;UAEE,CAAC,WAAW;UAEX,aAAa,aAAa,CAAC,OAAO;;UAGlC,MAAM,UAAU,MAAM,SAAS,UAAU;UAC1C;AACA,eAAK,QAAQ,OAAc,SAAgB;AAC3C,sBAAY;QACd;MACF,SAAS,KAAK;AACZ,aAAK,UAAU,GAAY;MAC7B;IACF,GACA;MACE;MACA,UAAU;KACX,CACF;EAEL;AAEA,QAAM,kBAAkB,MAAK;AAC3B,QAAI,SAAS;AACb,QAAI,cAAc;AAClB,QAAI,cAAc,MAAO,SAAS;AACjC,KAAC,YAAW;AACX,UAAI;AACF,YAAI,aAAa;AACf,oBACE,QACA,UACA,UAAU,EACV;YACA;YACA;WACD,EAAE,KAAK,CAAC,UAAS;AAChB,gBAAI,CAAC;AAAQ;AACb,gBAAI,CAAC;AAAa;AAClB,oBAAQ,OAAc,MAAS;AAC/B,0BAAc;UAChB,CAAC;QACH;AAEA,cAAM,aAAa,MAAK;AACtB,cAAI,OAAO,UAAU,SAAS,YAAY;AACxC,kBAAMC,aAAY,OAAO,UAAU,WAAW,KAC5C,CAACA,eACCA,WAAU,OAAO,SAAS,WAAW;AAEzC,gBAAI,CAACA;AAAW,qBAAO,OAAO;AAC9B,mBAAOA,WAAU;UACnB;AACA,iBAAO,OAAO;QAChB,GAAE;AAEF,cAAM,EAAE,aAAa,aAAY,IAAK,MAAM,UAAU,UAAU;UAC9D,QAAQ,CAAC,UAAU;UACnB,MAAM,OAAO,MAAS;AACpB,gBAAI,CAAC;AAAQ;AACb,kBAAM,QAAS,MAAM,UACnB,QACA,UACA,UAAU,EACV;cACA,aAAa,KAAK;cAClB;aACD,EAAE,MAAM,MAAK;YAAE,CAAC;AACjB,gBAAI,CAAC;AAAQ;AACb,oBAAQ,OAAc,SAAgB;AACtC,0BAAc;AACd,wBAAY;UACd;UACA,QAAQ,OAAY;AAClB,sBAAU,KAAK;UACjB;SACD;AACD,sBAAc;AACd,YAAI,CAAC;AAAQ,sBAAW;MAC1B,SAAS,KAAK;AACZ,kBAAU,GAAY;MACxB;IACF,GAAE;AACF,WAAO,MAAM,YAAW;EAC1B;AAEA,SAAO,gBAAgB,WAAU,IAAK,gBAAe;AACvD;;;ACpHM,SAAU,WAWd,QACA,EACE,SACA,MACA,QAAQ,MACR,OACA,QACA,WACA,SACA,QACA,MAAM,OACN,kBAAkB,OAAO,iBACzB,QAAQ,QAAO,GAC8C;AAE/D,QAAM,iBAAiB,MAAK;AAC1B,QAAI,OAAO,UAAU;AAAa,aAAO;AACzC,QAAI,OAAO,cAAc;AAAU,aAAO;AAC1C,QAAI,OAAO,UAAU,SAAS;AAAa,aAAO;AAClD,QACE,OAAO,UAAU,SAAS,cAC1B,OAAO,UAAU,WAAW,CAAC,EAAE,OAAO,SAAS;AAE/C,aAAO;AACT,WAAO;EACT,GAAE;AACF,QAAM,SAAS,WAAW;AAE1B,QAAM,YAAY,MAAK;AACrB,UAAM,aAAa,UAAU;MAC3B;MACA;MACA;MACA;MACA,OAAO;MACP;MACA;MACA;KACD;AAED,WAAO,QAAQ,YAAY,EAAE,QAAQ,QAAO,GAAI,CAAC,SAAQ;AACvD,UAAI;AACJ,UAAI,cAAc;AAAW,8BAAsB,YAAY;AAC/D,UAAI;AACJ,UAAI,cAAc;AAElB,YAAM,UAAU,KACd,YAAW;AACT,YAAI,CAAC,aAAa;AAChB,cAAI;AACF,qBAAU,MAAM,UACd,QACA,mBACA,mBAAmB,EACnB;cACA;cACA;cACA;cACA;cACA;cACA;aACyC;UAK7C,QAAQ;UAAC;AACT,wBAAc;AACd;QACF;AAEA,YAAI;AACF,cAAI;AACJ,cAAI,QAAQ;AACV,mBAAO,MAAM,UACX,QACA,kBACA,kBAAkB,EAClB,EAAE,OAAM,CAAE;UACd,OAAO;AAKL,kBAAM,cAAc,MAAM,UACxB,QACA,gBACA,gBAAgB,EAChB,CAAA,CAAE;AAKJ,gBAAI,uBAAuB,wBAAwB,aAAa;AAC9D,qBAAO,MAAM,UACX,QACA,SACA,SAAS,EACT;gBACA;gBACA;gBACA;gBACA;gBACA,WAAW,sBAAsB;gBACjC,SAAS;eACsB;YACnC,OAAO;AACL,qBAAO,CAAA;YACT;AACA,kCAAsB;UACxB;AAEA,cAAI,KAAK,WAAW;AAAG;AACvB,cAAI;AAAO,iBAAK,OAAO,IAAW;;AAC7B,uBAAW,OAAO;AAAM,mBAAK,OAAO,CAAC,GAAG,CAAQ;QACvD,SAAS,KAAK;AAGZ,cAAI,UAAU,eAAe;AAC3B,0BAAc;AAChB,eAAK,UAAU,GAAY;QAC7B;MACF,GACA;QACE,aAAa;QACb,UAAU;OACX;AAGH,aAAO,YAAW;AAChB,YAAI;AACF,gBAAM,UACJ,QACA,iBACA,iBAAiB,EACjB,EAAE,OAAM,CAAE;AACd,gBAAO;MACT;IACF,CAAC;EACH;AAEA,QAAM,iBAAiB,MAAK;AAC1B,QAAI,SAAS;AACb,QAAI,cAAc,MAAO,SAAS;AACjC,KAAC,YAAW;AACX,UAAI;AACF,cAAM,aAAa,MAAK;AACtB,cAAI,OAAO,UAAU,SAAS,YAAY;AACxC,kBAAMC,aAAY,OAAO,UAAU,WAAW,KAC5C,CAACA,eACCA,WAAU,OAAO,SAAS,WAAW;AAEzC,gBAAI,CAACA;AAAW,qBAAO,OAAO;AAC9B,mBAAOA,WAAU;UACnB;AACA,iBAAO,OAAO;QAChB,GAAE;AAEF,cAAM,UAAU,WAAW,QAAQ,CAAC,KAAK,IAAI;AAC7C,YAAI,SAAqB,CAAA;AACzB,YAAI,SAAS;AACX,gBAAM,UAAW,QAAuB,QAAQ,CAACC,WAC/C,kBAAkB;YAChB,KAAK,CAACA,MAAK;YACX,WAAYA,OAAmB;YAC/B;WAC8B,CAAC;AAGnC,mBAAS,CAAC,OAAmB;AAC7B,cAAI;AAAO,qBAAS,OAAO,CAAC;QAC9B;AAEA,cAAM,EAAE,aAAa,aAAY,IAAK,MAAM,UAAU,UAAU;UAC9D,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAM,CAAE;UACpC,OAAO,MAAS;AACd,gBAAI,CAAC;AAAQ;AACb,kBAAM,MAAM,KAAK;AACjB,gBAAI;AACF,oBAAM,EAAE,WAAW,MAAAC,MAAI,IAAK,eAAe;gBACzC,KAAK,WAAW,CAAA;gBAChB,MAAM,IAAI;gBACV,QAAQ,IAAI;gBACZ;eACD;AACD,oBAAM,YAAY,UAAU,KAAK,EAAE,MAAAA,OAAM,UAAS,CAAE;AACpD,qBAAO,CAAC,SAAS,CAAQ;YAC3B,SAAS,KAAK;AACZ,kBAAI;AACJ,kBAAI;AACJ,kBACE,eAAe,yBACf,eAAe,yBACf;AAEA,oBAAI;AAAS;AACb,4BAAY,IAAI,QAAQ;AACxB,4BAAY,IAAI,QAAQ,QAAQ,KAC9B,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE,KAAK;cAEnC;AAGA,oBAAM,YAAY,UAAU,KAAK;gBAC/B,MAAM,YAAY,CAAA,IAAK,CAAA;gBACvB;eACD;AACD,qBAAO,CAAC,SAAS,CAAQ;YAC3B;UACF;UACA,QAAQ,OAAY;AAClB,sBAAU,KAAK;UACjB;SACD;AACD,sBAAc;AACd,YAAI,CAAC;AAAQ,sBAAW;MAC1B,SAAS,KAAK;AACZ,kBAAU,GAAY;MACxB;IACF,GAAE;AACF,WAAO,MAAM,YAAW;EAC1B;AAEA,SAAO,gBAAgB,UAAS,IAAK,eAAc;AACrD;;;ACjUM,SAAU,yBAId,QACA,EACE,QAAQ,MACR,SACA,gBACA,MAAM,OACN,kBAAkB,OAAO,gBAAe,GACM;AAEhD,QAAM,gBACJ,OAAO,UAAU,cAAc,QAAQ,OAAO,UAAU,SAAS;AAEnE,QAAM,0BAA0B,MAAK;AACnC,UAAM,aAAa,UAAU;MAC3B;MACA,OAAO;MACP;MACA;KACD;AACD,WAAO,QAAQ,YAAY,EAAE,gBAAgB,QAAO,GAAI,CAAC,SAAQ;AAC/D,UAAI;AAEJ,YAAM,UAAU,KACd,YAAW;AACT,YAAI;AACF,cAAI,CAAC,QAAQ;AACX,gBAAI;AACF,uBAAS,MAAM,UACb,QACA,gCACA,gCAAgC,EAChC,CAAA,CAAE;AACJ;YACF,SAAS,KAAK;AACZ,sBAAO;AACP,oBAAM;YACR;UACF;AAEA,gBAAM,SAAS,MAAM,UACnB,QACA,kBACA,kBAAkB,EAClB,EAAE,OAAM,CAAE;AACZ,cAAI,OAAO,WAAW;AAAG;AACzB,cAAI;AAAO,iBAAK,eAAe,MAAM;;AAChC,uBAAW,QAAQ;AAAQ,mBAAK,eAAe,CAAC,IAAI,CAAC;QAC5D,SAAS,KAAK;AACZ,eAAK,UAAU,GAAY;QAC7B;MACF,GACA;QACE,aAAa;QACb,UAAU;OACX;AAGH,aAAO,YAAW;AAChB,YAAI;AACF,gBAAM,UACJ,QACA,iBACA,iBAAiB,EACjB,EAAE,OAAM,CAAE;AACd,gBAAO;MACT;IACF,CAAC;EACH;AAEA,QAAM,+BAA+B,MAAK;AACxC,QAAI,SAAS;AACb,QAAI,cAAc,MAAO,SAAS;AACjC,KAAC,YAAW;AACX,UAAI;AACF,cAAM,EAAE,aAAa,aAAY,IAAK,MAAM,OAAO,UAAU,UAAU;UACrE,QAAQ,CAAC,wBAAwB;UACjC,OAAO,MAAS;AACd,gBAAI,CAAC;AAAQ;AACb,kBAAM,cAAc,KAAK;AACzB,2BAAe,CAAC,WAAW,CAAC;UAC9B;UACA,QAAQ,OAAY;AAClB,sBAAU,KAAK;UACjB;SACD;AACD,sBAAc;AACd,YAAI,CAAC;AAAQ,sBAAW;MAC1B,SAAS,KAAK;AACZ,kBAAU,GAAY;MACxB;IACF,GAAE;AACF,WAAO,MAAM,YAAW;EAC1B;AAEA,SAAO,gBACH,wBAAuB,IACvB,6BAA4B;AAClC;;;ACzJM,SAAU,iBACd,SAAe;AAEf,QAAM,EAAE,QAAQ,WAAW,GAAG,OAAM,IAAM,QAAQ,MAAM,WAAW,GAC/D,UAAU,CAAA;AAMd,QAAM,EAAE,SAAS,gBAAgB,UAAU,WAAW,WAAW,GAAG,OAAM,IACvE,QAAQ,MAAM,WAAW,GAAG,UAAU,CAAA;AAUzC,QAAM,YAAY,QAAQ,MAAM,YAAY,EAAE,CAAC,GAAG,MAAM,MAAM,EAAE,MAAM,CAAC;AACvE,SAAO;IACL,GAAG;IACH,GAAG;IACH,GAAI,UAAU,EAAE,SAAS,OAAO,OAAO,EAAC,IAAK,CAAA;IAC7C,GAAI,iBAAiB,EAAE,gBAAgB,IAAI,KAAK,cAAc,EAAC,IAAK,CAAA;IACpE,GAAI,WAAW,EAAE,UAAU,IAAI,KAAK,QAAQ,EAAC,IAAK,CAAA;IAClD,GAAI,YAAY,EAAE,WAAW,IAAI,KAAK,SAAS,EAAC,IAAK,CAAA;IACrD,GAAI,YAAY,EAAE,UAAS,IAAK,CAAA;IAChC,GAAI,YAAY,EAAE,UAAS,IAAK,CAAA;IAChC,GAAI,SAAS,EAAE,OAAM,IAAK,CAAA;IAC1B,GAAI,YAAY,EAAE,UAAS,IAAK,CAAA;;AAEpC;AAGA,IAAM,cACJ;AAGF,IAAM,cACJ;;;ACZI,SAAU,oBACd,YAAyC;AAEzC,QAAM,EACJ,SACA,QACA,SACA,OACA,QACA,OAAO,oBAAI,KAAI,EAAE,IACf;AAEJ,MAAI,UAAU,QAAQ,WAAW;AAAQ,WAAO;AAChD,MAAI,SAAS,QAAQ,UAAU;AAAO,WAAO;AAC7C,MAAI,UAAU,QAAQ,WAAW;AAAQ,WAAO;AAEhD,MAAI,QAAQ,kBAAkB,QAAQ,QAAQ;AAAgB,WAAO;AACrE,MAAI,QAAQ,aAAa,OAAO,QAAQ;AAAW,WAAO;AAE1D,MAAI;AACF,QAAI,CAAC,QAAQ;AAAS,aAAO;AAC7B,QAAI,WAAW,CAAC,eAAe,QAAQ,SAAS,OAAO;AAAG,aAAO;EACnE,QAAQ;AACN,WAAO;EACT;AAEA,SAAO;AACT;;;ACfA,eAAsB,kBACpB,QACA,YAAuC;AAEvC,QAAM,EACJ,SACA,QACA,SACA,OACA,QACA,WACA,OAAO,oBAAI,KAAI,GACf,GAAG,YAAW,IACZ;AAEJ,QAAM,SAAS,iBAAiB,OAAO;AACvC,MAAI,CAAC,OAAO;AAAS,WAAO;AAE5B,QAAMC,WAAU,oBAAoB;IAClC;IACA;IACA,SAAS;IACT;IACA;IACA;GACD;AACD,MAAI,CAACA;AAAS,WAAO;AAErB,QAAM,OAAO,YAAY,OAAO;AAChC,SAAO,WAAW,QAAQ;IACxB,SAAS,OAAO;IAChB;IACA;IACA,GAAG;GACJ;AACH;;;ACysDM,SAAU,cAKd,QAAyC;AAEzC,SAAO;IACL,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI;IACjC,mBAAmB,MAAM,kBAAkB,MAAM;IACjD,2BAA2B,CAAC,SAC1B,0BAA0B,QAAQ,IAAI;IACxC,mBAAmB,CAAC,SAAS,kBAAkB,QAAQ,IAAI;IAC3D,gCAAgC,MAC9B,+BAA+B,MAAM;IACvC,qBAAqB,CAAC,SAAS,oBAAoB,QAAQ,IAAW;IACtE,aAAa,CAAC,SAAS,YAAY,QAAQ,IAAI;IAC/C,YAAY,CAAC,SAAS,WAAW,QAAQ,IAAI;IAC7C,gBAAgB,MAAM,eAAe,MAAM;IAC3C,UAAU,CAAC,SAAS,SAAS,QAAQ,IAAI;IACzC,gBAAgB,CAAC,SAAS,eAAe,QAAQ,IAAI;IACrD,0BAA0B,CAAC,SAAS,yBAAyB,QAAQ,IAAI;IACzE,aAAa,CAAC,SAAS,QAAQ,QAAQ,IAAI;IAC3C,YAAY,MAAM,WAAW,MAAM;IACnC,SAAS,CAAC,SAAS,QAAQ,QAAQ,IAAI;IACvC,mBAAmB,CAAC,SAAS,kBAAkB,QAAQ,IAAI;IAC3D,iBAAiB,CAAC,SAAS,gBAAgB,QAAQ,IAAI;IACvD,eAAe,CAAC,SAAS,cAAc,QAAQ,IAAI;IACnD,cAAc,CAAC,SAAS,aAAa,QAAQ,IAAI;IACjD,YAAY,CAAC,SAAS,WAAW,QAAQ,IAAI;IAC7C,gBAAgB,CAAC,SAAS,eAAe,QAAQ,IAAI;IACrD,YAAY,CAAC,SAAS,WAAW,QAAQ,IAAI;IAC7C,eAAe,CAAC,SAAS,cAAc,QAAQ,IAAI;IACnD,oBAAoB,CAAC,SAAS,mBAAmB,QAAQ,IAAI;IAC7D,kBAAkB,CAAC,SAAS,iBAAiB,QAAQ,IAAI;IACzD,eAAe,CAAC,SAAS,cAAc,QAAQ,IAAI;IACnD,aAAa,MAAM,YAAY,MAAM;IACrC,SAAS,CAAC,SAAS,QAAQ,QAAQ,IAAW;IAC9C,UAAU,CAAC,SAAS,SAAS,QAAQ,IAAI;IACzC,8BAA8B,CAAC,SAC7B,6BAA6B,QAAQ,IAAI;IAC3C,cAAc,CAAC,SAAS,aAAa,QAAQ,IAAI;IACjD,gBAAgB,CAAC,SAAS,eAAe,QAAQ,IAAI;IACrD,6BAA6B,CAAC,SAC5B,4BAA4B,QAAQ,IAAI;IAC1C,qBAAqB,CAAC,SAAS,oBAAoB,QAAQ,IAAI;IAC/D,uBAAuB,CAAC,SAAS,sBAAsB,QAAQ,IAAI;IACnE,WAAW,CAAC,SAAS,UAAU,QAAQ,IAAI;IAC3C,2BAA2B,CAAC,SAC1B,0BAA0B,QAAe,IAAW;IACtD,cAAc,CAAC,SAAS,aAAa,QAAQ,IAAI;IACjD,oBAAoB,CAAC,SAAS,mBAAmB,QAAQ,IAAI;IAC7D,kBAAkB,CAAC,SAAS,iBAAiB,QAAQ,IAAI;IACzD,eAAe,CAAC,SAAS,cAAc,QAAQ,IAAI;IACnD,mBAAmB,CAAC,SAAS,kBAAkB,QAAQ,IAAI;IAC3D,iBAAiB,CAAC,SAAS,gBAAgB,QAAQ,IAAI;IACvD,iBAAiB,CAAC,SAAS,gBAAgB,QAAQ,IAAI;IACvD,2BAA2B,CAAC,SAC1B,0BAA0B,QAAQ,IAAI;IACxC,aAAa,CAAC,SAAS,YAAY,QAAQ,IAAI;IAC/C,kBAAkB,CAAC,SAAS,iBAAiB,QAAQ,IAAI;IACzD,oBAAoB,CAAC,SAAS,mBAAmB,QAAQ,IAAI;IAC7D,YAAY,CAAC,SAAS,WAAW,QAAQ,IAAI;IAC7C,0BAA0B,CAAC,SAAS,yBAAyB,QAAQ,IAAI;;AAE7E;;;AC1xDM,SAAU,mBAMd,YAA6E;AAE7E,QAAM,EAAE,MAAM,UAAU,OAAO,gBAAe,IAAK;AACnD,QAAM,SAAS,aAAa;IAC1B,GAAG;IACH;IACA;IACA,MAAM;GACP;AACD,SAAO,OAAO,OAAO,aAAa;AACpC;;;A3HlCA,OAAOC,SAAQ;AACf,OAAO,QAAQ;AACf,OAAOC,WAAU;AA0BjB,eAAsB,WAClB,SACA,WACA,SACF;AACE,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,aAAa,EAAG,OAAM,IAAI,MAAM,4BAA4B;AAEhE,QAAM,iBAAiB,QAAQ,WAAW,iBAAiB;AAC3D,QAAM,gBAAgB,QAAQ,WAAW,gBAAgB;AAEzD,MAAI,CAAC,kBAAkB,CAAC,eAAe;AAEnC,WAAO,iBAAiB,UAAU,SAAS,SAAS;AAAA,EACxD;AAOA,MAAI,6CAA0C;AAC1C,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAEA,cAAY,KAAK,+BAA+B,aAAa,EAAE;AAC/D,SAAO,iBAAiB,UAAU,SAAS,SAAS;AACxD;AA4BA,eAAe,iBACX,OACA,SACA,WACF;AACE,MAAI;AACA,UAAM,WAAW,iBAAiB,KAAK;AAGvC,UAAM,SAAS,SAAS,OAAO,OAAO;AAGtC,QAAI,OAAO,UAAU,WAAW;AAC5B,aAAO;AAAA,IACX;AAGA,UAAM,kBAAkB,OAAO,MAAM,CAAC,SAAS;AAG/C,WAAO,SAAS,OAAO,eAAe;AAAA,EAC1C,SAAS,OAAO;AACZ,gBAAY,MAAM,wBAAwB,KAAK;AAE/C,WAAO,QAAQ,MAAM,CAAC,YAAY,CAAC;AAAA,EACvC;AACJ;AAMA,eAAe,gCACX,SAC2B;AAC3B,QAAM,UAAU,QAAQ,WAAW,oBAAoB;AACvD,QAAM,cAAc,QAAQ,WAAW,mBAAmB;AAC1D,QAAM,kBAAkB,QAAQ;AAAA,IAC5B;AAAA,EACJ;AACA,MAAI,WAAW,eAAe,iBAAiB;AAE3C,UAAM,cAAc;AAAA,MAChB;AAAA,QACI,QAAQ;AAAA,UACJ;AAAA,YACI,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACV;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,QACN,SAAS;AAAA,UACL,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU;AAAA,QACzD;AAAA,QACA,iBAAiB;AAAA,QACjB,MAAM;AAAA,MACV;AAAA,IACJ;AAEA,UAAM,eAAe,mBAAmB;AAAA,MACpC,WAAW,KAAK,WAAW;AAAA,IAC/B,CAAC;AAED,QAAI;AACA,YAAM,eACF;AACJ,YAAM,SAAS,MAAM,aAAa,aAAa;AAAA,QAC3C,SAAS;AAAA,QACT,KAAK;AAAA,QACL,cAAc;AAAA,QACd,MAAM,CAAC,IAAI,UAAU,OAAO,CAAC;AAAA,MACjC,CAAC;AACD,UAAI,QAAQ;AACR,oBAAY,KAAK,mCAAmC,OAAO,CAAC,CAAC;AAC7D,cAAM,QAAQ,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,MAAM,EAAE;AACnD,cAAM,UAAU,OAAO,KAAK,OAAO,KAAK,EAAE,SAAS,OAAO;AAC1D,oBAAY,KAAK,0BAA0B,OAAO;AAClD,eAAO,MAAM,2BAA2B,SAAS,OAAO;AAAA,MAC5D,OAAO;AACH,eAAO;AAAA,MACX;AAAA,IACJ,SAAS,OAAO;AACZ,kBAAY,MAAM,KAAK;AACvB,kBAAY,MAAM,OAAO,KAAK;AAAA,IAClC;AAAA,EACJ;AACA,SAAO;AACX;AAMA,eAAe,2BACX,SACA,SAC2B;AAC3B,QAAM,OAAO;AACb,QAAM,oBAA6B,QAAQ,SAAS,IAAI;AACxD,MAAI,mBAAmB;AACnB,UAAM,aAAa,QAAQ;AAAA,MACvB;AAAA,MACA;AAAA,IACJ;AACA,gBAAY,KAAK,oBAAoB,UAAU;AAC/C,UAAM,aAAa,MAAM,MAAM,YAAY;AAAA,MACvC,QAAQ;AAAA,IACZ,CAAC;AACD,gBAAY,KAAK,yBAAyB,UAAU;AACpD,QAAI,WAAW,IAAI;AACf,YAAM,OAAO,MAAM,WAAW,KAAK;AACnC,aAAO;AAAA,IACX,OAAO;AACH,YAAM,MAAM,QAAQ;AAAA,QAChB;AAAA,QACA;AAAA,MACJ;AACA,kBAAY,KAAK,aAAa,GAAG;AACjC,YAAM,cAAc,MAAM,MAAM,KAAK;AAAA,QACjC,QAAQ;AAAA,MACZ,CAAC;AACD,kBAAY,KAAK,wBAAwB,WAAW;AACpD,UAAI,YAAY,IAAI;AAChB,cAAM,OAAO,MAAM,YAAY,KAAK;AACpC,eAAO;AAAA,MACX,OAAO;AACH,cAAM,IAAI,MAAM,gCAAgC;AAAA,MACpD;AAAA,IACJ;AAAA,EACJ,OAAO;AACH,WAAO;AAAA,EACX;AACJ;AAQA,SAAS,4BACL,SACA,UACkB;AAClB,QAAM,sBACF,QAAQ,WAAW,uBAAuB,MAAM;AACpD,QAAM,sBAAsB,QAAQ,WAAW,0BAA0B;AACzE,QAAM,sBAAsB,QAAQ,WAAW,0BAA0B;AAEzE,cAAY,MAAM,qCAAqC;AAAA,IACnD,WAAW;AAAA,IACX,cAAc,CAAC,CAAC;AAAA,IAChB,cAAc,CAAC,CAAC;AAAA,IAChB;AAAA,EACJ,CAAC;AAED,MAAI,CAAC,qBAAqB;AACtB,gBAAY,MAAM,mCAAmC;AACrD,WAAO;AAAA,EACX;AAEA,MAAI,CAAC,qBAAqB;AACtB,gBAAY;AAAA,MACR;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAEA,MAAI,CAAC,qBAAqB;AACtB,gBAAY;AAAA,MACR;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAEA,QAAM,UAAU,wCAAwC,mBAAmB,IAAI,mBAAmB,IAAI,SAAS,YAAY,CAAC;AAC5H,cAAY,KAAK,6BAA6B;AAAA,IAC1C;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,EACf,CAAC;AAED,SAAO;AACX;AAeA,eAAsB,aAAa;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,CAAC;AAAA,EACT;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA;AAAA;AAGJ,GAYoB;AAChB,MAAI,CAAC,SAAS;AACV,YAAQ,MAAM,+BAA+B;AAC7C,WAAO;AAAA,EACX;AAEA,cAAY,IAAI,oBAAoB;AAEpC,cAAY,KAAK,iCAAiC;AAAA,IAC9C,eAAe,QAAQ;AAAA,IACvB,OAAO;AAAA;AAAA,EAEX,CAAC;AACD,cAAY,IAAI,mBAAmB,QAAQ,aAAa;AA6BxD,QAAM,WAAW,QAAQ;AACzB,cAAY,MAAM,sBAAsB;AAAA,IACpC;AAAA,IACA,YAAY,CAAC,CAAC;AAAA,IACd,iBAAiB;AAAA,MACb,uBAAuB,QAAQ,WAAW,uBAAuB;AAAA,MACjE,0BAA0B,QAAQ;AAAA,QAC9B;AAAA,MACJ;AAAA,MACA,0BAA0B,QAAQ;AAAA,QAC9B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,CAAC;AAED,QAAM,WACF,QAAQ,UAAU,yBAAyB,YAAY,QAAQ;AACnE,QAAM,gBAAgB,iBAAiB,QAAQ,eAAe,UAAU;AACxE,MAAI,QAAQ,cAAc;AAI1B,UAAQ,UAAU;AAAA;AAAA,IAEd;AACI;AACI,gBAAQ,YAAY;AAAA,UAChB;AACI;AACI,sBACI,QAAQ,WAAW,wBAAwB,KAC3C;AAAA,YACR;AACA;AAAA,UACJ;AACI;AACI,sBACI,QAAQ,WAAW,wBAAwB,KAC3C;AAAA,YACR;AACA;AAAA,QACR;AAAA,MACJ;AACA;AAAA,IACJ;AACI;AACI,gBAAQ,YAAY;AAAA,UAChB;AACI;AACI,sBACI,QAAQ,WAAW,sBAAsB,KACzC;AAAA,YACR;AACA;AAAA,UACJ;AACI;AACI,sBACI,QAAQ,WAAW,sBAAsB,KACzC;AAAA,YACR;AACA;AAAA,QACR;AAAA,MACJ;AACA;AAAA,IACJ;AACI;AACI,gBAAQ,YAAY;AAAA,UAChB;AACI;AACI,sBACI,QAAQ,WAAW,wBAAwB,KAC3C;AAAA,YACR;AACA;AAAA,UACJ;AACI;AACI,sBACI,QAAQ,WAAW,wBAAwB,KAC3C;AAAA,YACR;AACA;AAAA,QACR;AAAA,MACJ;AACA;AAAA,EACR;AAEA,cAAY,KAAK,mBAAmB,KAAK;AAEzC,QAAM,qBAAqB,QAAQ,WAAW,UAAU;AACxD,QAAM,cACF,oBAAoB,eAAe,cAAc;AACrD,QAAM,oBACF,oBAAoB,qBACpB,cAAc;AAClB,QAAM,mBACF,oBAAoB,oBAAoB,cAAc;AAC1D,QAAM,qBACF,oBAAoB,kBAAkB,cAAc;AACxD,QAAM,sBACF,oBAAoB,mBACpB,cAAc;AAClB,QAAM,yBACF,oBAAoB,0BACpB,cAAc;AAElB,QAAM,SAAS,QAAQ;AAEvB,MAAI;AACA,gBAAY;AAAA,MACR,qCAAqC,kBAAkB;AAAA,IAC3D;AAEA,cAAU,MAAM,WAAW,SAAS,oBAAoB,OAAO;AAE/D,QAAI;AAEJ,UAAM,QAAQ,QAAQ,cAAc;AACpC,gBAAY;AAAA,MACR,mBAAmB,QAAQ,YAAY,KAAK,kBAAkB,WAAW,0BAA0B,mBAAmB;AAAA,IAC1H;AAEA,YAAQ,UAAU;AAAA;AAAA,MAEd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,4BAA+B;AAC3B,oBAAY;AAAA,UACR;AAAA,QACJ;AACA,cAAMC,WACF,4BAA4B,SAAS,QAAQ,KAAK;AAGtD,cAAM,SAAS,aAAa;AAAA,UACxB;AAAA,UACA,SAAAA;AAAA,UACA,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,eAAe,IAAI,MAAM,eAAe;AAAA,UAClD,OAAO,OAAO,cAAc,KAAK;AAAA,UACjC,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,gBAAQ,IAAI,sCAAsC;AAClD;AAAA,MACJ;AAAA,MAEA,kCAAkC;AAC9B,oBAAY,MAAM,+BAA+B;AACjD,cAAM,SAAS,aAAa;AAAA,UACxB;AAAA,UACA,SAAS;AAAA,UACT,OAAO,OACH,OACA,SACoB;AACpB,kBAAM,MACF,OAAO,UAAU,WACX,QACA,MAAM,SAAS;AACzB,kBAAM,WACF,QAAQ,WAAW,oBAAoB,KAAK;AAEhD,kBAAMC,WAAuB,EAAE,GAAG,KAAK;AACvC,gBAAIA,UAAS,MAAM;AACf,oBAAM,OAAO,KAAK,MAAMA,SAAQ,IAAc;AAC9C,mBAAK,WAAW;AAChB,cAAAA,SAAQ,OAAO,KAAK,UAAU,IAAI;AAAA,YACtC;AAEA,kBAAM,WAAW,MAAM,QAAQ,MAAM,KAAKA,QAAO;AAEjD,gBACI;AAAA,cACI,QAAQ,WAAW,eAAe;AAAA,YACtC,GACF;AACE,0BAAY;AAAA,gBACR;AAAA,gBACA,KAAK,UAAUA,UAAS,MAAM,CAAC;AAAA,cACnC;AACA,oBAAM,iBAAiB,SAAS,MAAM;AACtC,kBAAI;AACA,+BAAe,KAAK,EAAE,KAAK,CAAC,SAAS;AACjC,8BAAY;AAAA,oBACR;AAAA,oBACA,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,kBAChC;AAAA,gBACJ,CAAC;AAAA,cACL,SAAS,GAAG;AACR,4BAAY,MAAM,CAAC;AAAA,cACvB;AAAA,YACJ;AACA,mBAAO;AAAA,UACX;AAAA,QACJ,CAAC;AAED,YAAI,gBACA,QAAQ,UAAU,UAClB,iBAAS,iBACT;AACJ,YAAI;AACA,gBAAM,yBACF,MAAM,gCAAgC,OAAO;AACjD,cAAI,CAAC,wBAAwB;AACzB,wBAAY;AAAA,cACR,IAAI,MAAM,gCAAgC;AAAA,YAC9C;AAAA,UACJ,OAAO;AACH,4BAAgB;AAChB,wBAAY;AAAA,cACR;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,SAAS,GAAG;AACR,sBAAY,MAAM,CAAC;AAAA,QACvB;AAEA,cAAM,EAAE,MAAM,eAAe,IAAI,MAAM,eAAe;AAAA,UAClD,OAAO,OAAO,cAAc,KAAK;AAAA,UACjC,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,QACrB,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,yCAAyC;AAC3D;AAAA,MACJ;AAAA,MAEA,4BAA+B;AAC3B,cAAM,SAAS,yBAAyB;AAAA,UACpC;AAAA,UACA,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,eAAe,IAAI,MAAM,eAAe;AAAA,UAClD,OAAO,OAAO,KAAK;AAAA,UACnB,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,sCAAsC;AACxD;AAAA,MACJ;AAAA,MAEA,8BAAgC;AAC5B,cAAM,UAAU,cAAc;AAE9B,cAAM,EAAE,MAAM,gBAAgB,IAAI,MAAM,eAAe;AAAA,UACnD,OAAO,QAAQ,KAAK;AAAA,UACpB,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,QACrB,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,uCAAuC;AACzD;AAAA,MACJ;AAAA,MAEA,kCAAkC;AAC9B,oBAAY;AAAA,UACR;AAAA,QACJ;AACA,cAAMD,WACF,4BAA4B,SAAS,WAAW,KAChD;AACJ,oBAAY,MAAM,6BAA6B,EAAE,SAAAA,SAAQ,CAAC;AAE1D,cAAM,YAAY,gBAAgB;AAAA,UAC9B;AAAA,UACA,SAAAA;AAAA,UACA,OAAO,QAAQ;AAAA,QACnB,CAAC;AACD,cAAM,EAAE,MAAM,kBAAkB,IAAI,MAAM,eAAe;AAAA,UACrD,OAAO,UAAU,cAAc,KAAK;AAAA,UACpC,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,yCAAyC;AAC3D;AAAA,MACJ;AAAA,MAEA,0CAAsC;AAClC,oBAAY,MAAM,mCAAmC;AAErD,cAAM,YAAY,gBAAgB;AAAA,UAC9B;AAAA,UACA,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,kBAAkB,IAAI,MAAM,eAAe;AAAA,UACrD,OAAO,UAAU,cAAc,KAAK;AAAA,UACpC,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY;AAAA,UACR;AAAA,QACJ;AACA;AAAA,MACJ;AAAA,MAEA,wBAA6B;AACzB,oBAAY,MAAM,0BAA0B;AAC5C,cAAM,OAAO,aAAa;AAAA,UACtB;AAAA,UACA,SAAS;AAAA,UACT,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,aAAa,IAAI,MAAM,eAAe;AAAA,UAChD,OAAO,KAAK,cAAc,OAAO;AAAA,YAC7B,mBAAmB;AAAA,UACvB,CAAC;AAAA,UACD,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,oCAAoC;AACtD;AAAA,MACJ;AAAA,MAEA,wBAA6B;AACzB,oBAAY;AAAA,UACR;AAAA,QACJ;AACA,cAAMA,WAAU,4BAA4B,SAAS,MAAM;AAC3D,oBAAY,MAAM,wBAAwB,EAAE,SAAAA,SAAQ,CAAC;AACrD,cAAM,OAAO,WAAW;AAAA,UACpB;AAAA,UACA,OAAO,QAAQ;AAAA,UACf,SAAAA;AAAA,QACJ,CAAC;AAED,cAAM,EAAE,MAAM,aAAa,IAAI,MAAM,eAAe;AAAA,UAChD,OAAO,KAAK,cAAc,KAAK;AAAA,UAC/B,QAAQ;AAAA,UACR;AAAA,UACA,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,oCAAoC;AACtD;AAAA,MACJ;AAAA,MAEA,qCAAmC;AAC/B,oBAAY;AAAA,UACR;AAAA,QACJ;AACA,cAAM,wBACF,QAAQ;AAAA;AAAA,QAER;AAEJ,YAAI,CAAC,uBAAuB;AACxB,gBAAM,IAAI,MAAM,mCAAmC;AAAA,QACvD;AAEA,mBAAW,MAAM,sBAAsB;AAAA,UACnC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AACA,oBAAY,MAAM,2CAA2C;AAC7D;AAAA,MACJ;AAAA,MAEA,8BAAgC;AAC5B,oBAAY,MAAM,6BAA6B;AAC/C,cAAM,YAAY,YAAY,QAAQ;AACtC,cAAM,SAAS,aAAa;AAAA,UACxB;AAAA,UACA,SAAS;AAAA,UACT,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,gBAAgB,IAAI,MAAM,eAAe;AAAA,UACnD,OAAO,OAAO,cAAc,KAAK;AAAA,UACjC,QAAQ;AAAA,UACR;AAAA,UACA,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,uCAAuC;AACzD;AAAA,MACJ;AAAA,MAEA,oCAAmC;AAC/B,oBAAY,MAAM,gCAAgC;AAClD,cAAM,YAAY,YAAY,QAAQ;AACtC,cAAM,aAAa,aAAa;AAAA,UAC5B;AAAA,UACA,SAAS;AAAA,UACT,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,mBAAmB,IAAI,MAAM,eAAe;AAAA,UACtD,OAAO,WAAW,cAAc,KAAK;AAAA,UACrC,QAAQ;AAAA,UACR;AAAA,UACA,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,0CAA0C;AAC5D;AAAA,MACJ;AAAA,MAEA;AACI;AACI,sBAAY,MAAM,4BAA4B;AAE9C,gBAAM,iBAAiB,aAAa;AAAA,YAChC,SAAS,YAAY,QAAQ,IAAI;AAAA,YACjC,OAAO,QAAQ;AAAA,UACnB,CAAC;AACD,gBAAM,SAAS,eAAe,KAAK;AAEnC,sBAAY,MAAM,kBAAkB,KAAK;AAEzC,gBAAM,EAAE,MAAM,eAAe,IAAI,MAAM,eAAe;AAAA,YAClD,OAAO;AAAA,YACP,QAAQ;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW;AAAA,YACX,kBAAkB;AAAA,YAClB,iBAAiB;AAAA,YACjB;AAAA,UACJ,CAAC;AAED,qBAAW,eAAe,QAAQ,mCAAmC,EAAE;AAAA,QAC3E;AACA,oBAAY,MAAM,sCAAsC;AACxD;AAAA,MAEJ,8BAAgC;AAC5B,oBAAY,MAAM,6BAA6B;AAC/C,cAAM,UAAU,aAAa;AAAA,UACzB;AAAA,UACA,SAAS;AAAA,UACT,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,gBAAgB,IAAI,MAAM,eAAe;AAAA,UACnD,OAAO,QAAQ,cAAc,KAAK;AAAA,UAClC,QAAQ;AAAA,UACR,QACI,sBACA,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,uCAAuC;AACzD;AAAA,MACJ;AAAA,MACA,8BAAgC;AAC5B,oBAAY,MAAM,6BAA6B;AAE/C,YAAI,UAAU,YAAY,QAAQ;AAClC,YAAI,CAAC,SAAS;AACV,kBAAQ,YAAY;AAAA,YAChB;AACI,wBACI,iBAAS,4BACT;AACJ;AAAA,YACJ;AACI,wBACI,iBAAS,6BACT;AACJ;AAAA,YACJ;AACI,wBACI,iBAAS,4BACT;AACJ;AAAA,UACR;AAAA,QACJ;AAEA,oBAAY,MAAM,qCAAqC,OAAO;AAE9D,cAAM,SAAS,aAAa;AAAA,UACxB;AAAA,UACA,SAAS;AAAA,UACT,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,eAAe,IAAI,MAAM,eAAe;AAAA,UAClD,OAAO,OAAO,cAAc,KAAK;AAAA,UACjC,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,uCAAuC;AACzD;AAAA,MACJ;AAAA,MAEA,0BAA8B;AAC1B,oBAAY,MAAM,2BAA2B;AAC7C,cAAM,QAAQ,aAAa;AAAA,UACvB;AAAA,UACA,SAAS;AAAA,UACT,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,cAAc,IAAI,MAAM,eAAe;AAAA,UACjD,OAAO,MAAM,cAAc,KAAK;AAAA,UAChC,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,qCAAqC;AACvD;AAAA,MACJ;AAAA,MAEA,kCAAkC;AAC9B,oBAAY,MAAM,+BAA+B;AACjD,cAAM,UAAU,CAAC;AACjB,cAAM,iBAAiB,QAAQ;AAAA,UAC3B;AAAA,QACJ;AACA,YAAI,gBAAgB;AAChB,kBAAQ,0BAA0B,IAAI;AAAA,QAC1C;AACA,cAAM,YAAY,aAAa;AAAA,UAC3B;AAAA,UACA;AAAA,UACA,SAAS;AAAA,UACT,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,kBAAkB,IAAI,MAAM,eAAe;AAAA,UACrD,OAAO,UAAU,cAAc,KAAK;AAAA,UACpC,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,yCAAyC;AAC3D;AAAA,MACJ;AAAA,MAEA,4BAA+B;AAC3B,oBAAY,MAAM,4BAA4B;AAE9C,cAAME,UAAS,iBAAS,kBAAkB,QAAQ;AAElD,cAAM,SAAS,aAAa;AAAA,UACxB,QAAAA;AAAA,UACA,SAAS;AAAA,UACT,SAAS;AAAA,YACL,SAASA;AAAA,YACT,gBAAgB;AAAA,UACpB;AAAA,QACJ,CAAC;AAED,cAAM,EAAE,MAAM,eAAe,IAAI,MAAM,eAAe;AAAA,UAClD,OAAO,OAAO,cAAc,KAAK;AAAA,UACjC,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,QACrB,CAAC;AACD,mBAAW;AACX,oBAAY,MAAM,sCAAsC;AACxD;AAAA,MACJ;AAAA,MAEA,4BAA+B;AAC3B,oBAAY,MAAM,4BAA4B;AAC9C,cAAM,SAAS,aAAa;AAAA,UACxB;AAAA,UACA,SAAS;AAAA,QACb,CAAC;AAED,cAAM,EAAE,MAAM,eAAe,IAAI,MAAM,eAAe;AAAA,UAClD,OAAO,OAAO,cAAc,KAAK;AAAA,UACjC,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,QACf,CAAC;AAKD,mBAAW,eACN,QAAQ,mCAAmC,EAAE;AAIlD,oBAAY,MAAM,sCAAsC;AACxD;AAAA,MACJ;AAAA,MAEA,4BAA+B;AAC3B,oBAAY,MAAM,4BAA4B;AAC9C,cAAM,SAAS,aAAa;AAAA,UACxB;AAAA,UACA,SAAS;AAAA,QACb,CAAC;AAED,cAAM,EAAE,MAAM,eAAe,IAAI,MAAM,eAAe;AAAA,UAClD,OAAO,OAAO,cAAc,KAAK;AAAA,UACjC,QAAQ;AAAA,UACR,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,QACf,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,sCAAsC;AACxD;AAAA,MACJ;AAAA,MAEA,gCAAiC;AAC7B,oBAAY,MAAM,8BAA8B;AAChD,cAAM,YAAY,OAAO,QAAQ,EAAE;AACnC,cAAM,WAAW,aAAa;AAAA,UAC1B;AAAA,UACA,SAAS;AAAA,UACT,OAAO,QAAQ;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,MAAM,iBAAiB,IAAI,MAAM,eAAe;AAAA,UACpD,OAAO,SAAS,cAAc,KAAK;AAAA,UACnC,QAAQ;AAAA,UACR;AAAA,UACA,QACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,QACJ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,wCAAwC;AAC1D;AAAA,MACJ;AAAA,MAEA,gCAAiC;AAC7B,oBAAY,MAAM,8BAA8B;AAEhD,YAAI,CAAC,UAAU;AACX,gBAAM,IAAI,MAAM,qCAAqC;AAAA,QACzD;AAEA,cAAM,cAAc;AAAA,UAChB;AAAA,UACA,UAAU;AAAA,YACN;AAAA,cACI,MAAM;AAAA,cACN,SACI,QAAQ,UAAU,UAClB,iBAAS,iBACT;AAAA,YACR;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,SAAS;AAAA,YACb;AAAA,UACJ;AAAA,UACA,YAAY;AAAA,UACZ,QAAQ;AAAA,QACZ;AAEA,cAAM,gBAAgB,MAAM,QAAQ,MAAM,WAAW,QAAQ;AAAA,UACzD,QAAQ;AAAA,UACR,SAAS;AAAA,YACL,QAAQ;AAAA,YACR,gBAAgB;AAAA,YAChB,eAAe;AAAA,UACnB;AAAA,UACA,MAAM,KAAK,UAAU,WAAW;AAAA,QACpC,CAAC;AAED,YAAI,CAAC,cAAc,IAAI;AACnB,gBAAM,YAAY,MAAM,cAAc,KAAK;AAC3C,gBAAM,IAAI;AAAA,YACN,4BAA4B,cAAc,MAAM,MAAM,SAAS;AAAA,UACnE;AAAA,QACJ;AAEA,cAAM,OAAO,MAAM,cAAc,KAAK;AAEtC,YAAI,CAAC,MAAM,UAAU,CAAC,GAAG,SAAS,SAAS;AACvC,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QAC3D;AAEA,mBAAW,KAAK,QAAQ,CAAC,EAAE,QAAQ,QAAQ;AAAA,UACvC;AAAA,UACA;AAAA,QACJ;AACA,oBAAY;AAAA,UACR;AAAA,QACJ;AACA;AAAA,MACJ;AAAA,MAEA;AACI;AACI,sBAAY,MAAM,8BAA8B;AAEhD,gBAAM,mBAAmB,aAAa;AAAA,YAClC,SAAS,YAAY,QAAQ,IAAI;AAAA,YACjC,OAAO,QAAQ;AAAA,YACf,SAAS;AAAA,cACL,gBAAgB;AAAA,cAChB,eAAe,UAAU,MAAM;AAAA,YACnC;AAAA,UACJ,CAAC;AACD,gBAAM,WAAW,iBAAiB,KAAK;AAEvC,gBAAM,EAAE,MAAM,iBAAiB,IAAI,MAAM,eAAe;AAAA,YACpD,OAAO;AAAA,YACP,QAAQ;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW;AAAA,UACf,CAAC;AAED,qBAAW;AAAA,QACf;AACA;AAAA,MAEJ,8BAAgC;AAC5B,oBAAY,MAAM,6BAA6B;AAE/C,cAAM,EAAE,MAAM,gBAAgB,IAAI,MAAM,eAAe;AAAA,UACnD,OAAO,QAAQ,KAAK;AAAA,UACpB;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB;AAAA,UACA,QAAQ;AAAA,QACZ,CAAC;AAED,mBAAW;AACX,oBAAY,MAAM,uCAAuC;AACzD;AAAA,MACJ;AAAA,MAEA,SAAS;AACL,cAAM,eAAe,yBAAyB,QAAQ;AACtD,oBAAY,MAAM,YAAY;AAC9B,cAAM,IAAI,MAAM,YAAY;AAAA,MAChC;AAAA,IACJ;AAEA,WAAO;AAAA,EACX,SAAS,OAAO;AACZ,gBAAY,MAAM,0BAA0B,KAAK;AACjD,UAAM;AAAA,EACV;AACJ;AAgBA,eAAsB,sBAAsB;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACJ,GAIkD;AAC9C,MAAI,aAAa;AACjB,SAAO,MAAM;AACT,QAAI;AACA,kBAAY;AAAA,QACR;AAAA,QACA;AAAA,MACJ;AACA,YAAM,WAAW,MAAM,aAAa;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAED,kBAAY,MAAM,wCAAwC,QAAQ;AAClE,YAAM,iBAAiB,2BAA2B,SAAS,KAAK,CAAC;AACjE,UAAI,gBAAgB;AAChB,oBAAY,MAAM,oBAAoB,cAAc;AACpD,eAAO;AAAA,MACX,OAAO;AACH,oBAAY,MAAM,mCAAmC;AAAA,MACzD;AAAA,IACJ,SAAS,OAAO;AACZ,kBAAY,MAAM,mCAAmC,KAAK;AAC1D,UACI,iBAAiB,aACjB,MAAM,QAAQ,SAAS,qBAAqB,GAC9C;AACE,oBAAY;AAAA,UACR;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,gBAAY,IAAI,eAAe,UAAU,OAAO;AAChD,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,UAAU,CAAC;AAC9D,kBAAc;AAAA,EAClB;AACJ;AASA,eAAsB,YAClB,SACA,YAAY,MACZ,QAAQ,KACS;AACjB,cAAY,MAAM,mCAAmC;AAErD,QAAM,SAAS,UAAU,SAAS,WAAW,KAAK;AAElD,cAAY,MAAM,iCAAiC;AAAA,IAC/C,gBAAgB,OAAO;AAAA,IACvB,kBACI,OAAO,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,QAAQ,CAAC,IACnD,OAAO;AAAA,EACf,CAAC;AAED,SAAO;AACX;AAEO,SAAS,UAAU,SAAiB,WAAmB,OAAyB;AACnF,QAAM,SAAmB,CAAC;AAC1B,MAAI,QAAQ;AAEZ,SAAO,QAAQ,QAAQ,QAAQ;AAC3B,UAAM,MAAM,KAAK,IAAI,QAAQ,WAAW,QAAQ,MAAM;AACtD,WAAO,KAAK,QAAQ,UAAU,OAAO,GAAG,CAAC;AACzC,YAAQ,MAAM;AAAA,EAClB;AAEA,SAAO;AACX;AAgBA,eAAsB,oBAAoB;AAAA,EACtC;AAAA,EACA,UAAU;AAAA,EACV;AACJ,GAIqB;AACjB,MAAI,aAAa;AACjB,QAAM,gBAAgB,iBAAiB,QAAQ,eAAe,UAAU;AACxE,QAAM,OAAO,MAAM;AAAA,IACf,oBAAI,IAAI,CAAC,GAAI,cAAc,QAAQ,CAAC,GAAI,CAAC,IAAI,CAAC,CAAC;AAAA,EACnD;AAEA,SAAO,MAAM;AACT,QAAI;AACA,YAAM,WAAW,MAAM,aAAa;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAED,YAAM,iBAAiB,qBAAqB,SAAS,KAAK,CAAC;AAC3D,UAAI,mBAAmB,MAAM;AACzB,eAAO;AAAA,MACX;AAAA,IACJ,SAAS,OAAO;AACZ,kBAAY,MAAM,iCAAiC,KAAK;AAAA,IAC5D;AAEA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,UAAU,CAAC;AAC9D,kBAAc;AAAA,EAClB;AACJ;AAiBA,eAAsB,kBAAkB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACJ,GAIsB;AAClB,MAAI,CAAC,SAAS;AACV,gBAAY,MAAM,oCAAoC;AACtD,WAAO,CAAC;AAAA,EACZ;AACA,MAAI,aAAa;AAEjB,SAAO,MAAM;AACT,QAAI;AACA,YAAM,WAAW,MAAM,aAAa;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAED,YAAM,iBAAiB,uBAAuB,QAAQ;AACtD,UAAI,gBAAgB;AAChB,eAAO;AAAA,MACX;AAAA,IACJ,SAAS,OAAO;AACZ,kBAAY,MAAM,+BAA+B,KAAK;AAAA,IAC1D;AAEA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,UAAU,CAAC;AAC9D,kBAAc;AAAA,EAClB;AACJ;AAEA,eAAsB,yBAAyB;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACJ,GAIiB;AACb,MAAI,CAAC,SAAS;AACV,gBAAY,MAAM,2CAA2C;AAC7D,WAAO;AAAA,EACX;AACA,MAAI,aAAa;AAEjB,SAAO,MAAM;AACT,QAAI;AAEA,YAAM,WAAW,MAAM,aAAa;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AACD,YAAM,iBAAiB,wBAAwB,QAAQ;AACvD,UAAI,gBAAgB;AAChB,eAAO;AAAA,MACX;AAAA,IACJ,SAAS,OAAO;AACZ,kBAAY,MAAM,4BAA4B,KAAK;AAAA,IACvD;AAEA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,UAAU,CAAC;AAC9D,kBAAc;AAAA,EAClB;AACJ;AAEA,eAAsB,oBAAoB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACJ,GAImB;AACf,MAAI,CAAC,SAAS;AACV,gBAAY,MAAM,sCAAsC;AACxD,WAAO,CAAC;AAAA,EACZ;AACA,MAAI,aAAa;AAEjB,SAAO,MAAM;AACT,QAAI;AACA,YAAM,WAAW,MAAM,aAAa;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAED,YAAM,iBAAiB,uBAAuB,QAAQ;AACtD,UAAI,gBAAgB;AAChB,eAAO;AAAA,MACX;AAAA,IACJ,SAAS,OAAO;AACZ,kBAAY,MAAM,+BAA+B,KAAK;AAAA,IAC1D;AAEA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,UAAU,CAAC;AAC9D,kBAAc;AAAA,EAClB;AACJ;AAcA,eAAsB,wBAAwB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACJ,GAIqB;AACjB,QAAM,gBAAgB,iBAAiB,QAAQ,eAAe,UAAU;AACxE,QAAM,qBAAqB,cAAc;AAEzC,YAAU,MAAM,WAAW,SAAS,oBAAoB,OAAO;AAC/D,cAAY,MAAM,YAAY,OAAO;AACrC,MAAI,cAAc;AAClB,SAAO,MAAM;AACT,QAAI;AACA,kBAAY,IAAI,+BAA+B;AAE/C,YAAM,WAAW,MAAM,aAAa;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAGD,YAAM,gBAAgB,wBAAwB,QAAQ;AACtD,UAAI,CAAC,eAAe;AAChB,oBAAY,MAAM,iCAAiC;AACnD;AAAA,MACJ;AAEA,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,kBAAY,MAAM,UAAU,KAAK;AAEjC,qBAAe;AACf,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,WAAW,CAAC;AAC/D,kBAAY,MAAM,aAAa;AAAA,IACnC;AAAA,EACJ;AACJ;AAEO,IAAM,gBAAgB,OACzB,MAgBA,YAKE;AACF,QAAM,gBAAgB,sBAAsB,QAAQ,kBAAkB;AACtE,MAAI,CAAC,eAAe;AAChB,gBAAY,KAAK,uDAAuD;AACxE,WAAO,EAAE,SAAS,OAAO,OAAO,8BAA8B;AAAA,EAClE;AACA,QAAM,QAAQ,cAAc;AAC5B,cAAY,KAAK,kCAAkC;AAAA,IAC/C,oBAAoB;AAAA,EACxB,CAAC;AAED,QAAM,SACF,QAAQ,uBAAuB,QAAQ,gBACjC,QAAQ,SACP,MAAM;AAEH,YAAQ,QAAQ,oBAAoB;AAAA,MAChC;AACI,eAAO,QAAQ,WAAW,iBAAiB;AAAA,MAC/C;AACI,eAAO,QAAQ,WAAW,kBAAkB;AAAA,MAChD;AACI,eAAO,QAAQ,WAAW,aAAa;AAAA,MAC3C;AACI,eAAO,QAAQ,WAAW,gBAAgB;AAAA,MAC9C;AACI,eAAO,QAAQ,WAAW,gBAAgB;AAAA,MAC9C;AACI,eAAO,QAAQ,WAAW,sBAAsB;AAAA,MACpD;AACI,eAAO,QAAQ,WAAW,mBAAmB;AAAA,MACjD;AACI,YAAI;AAEF,gBAAMC,UAAS,KAAK,MAAML,IAAG,aAAaC,MAAK,KAAK,GAAG,QAAQ,GAAG,qBAAqB,GAAG,MAAM,CAAC;AACjG,iBAAO,KAAK,UAAUI,SAAQ,IAAI;AAAA,QACpC,SAAS,GAAG;AACV,sBAAY,KAAK,uFAAuF,CAAC,EAAE;AAAA,QAC7G;AACA,eAAO,QAAQ,WAAW,gBAAgB;AAAA,MAC9C;AAEI,eACI,QAAQ,WAAW,iBAAiB,KACpC,QAAQ,WAAW,qBAAqB,KACxC,QAAQ,WAAW,kBAAkB,KACrC,QAAQ,WAAW,aAAa,KAChC,QAAQ,WAAW,gBAAgB,KACnC,QAAQ,WAAW,gBAAgB,KACnC,QAAQ,WAAW,sBAAsB;AAAA,IAErD;AAAA,EACJ,GAAG;AACb,MAAI;AACA,QAAI,QAAQ,gDAAkD;AAC1D,YAAM,WAAW,MAAM;AAAA,QACnB;AAAA,QACA;AAAA,UACI,QAAQ;AAAA,UACR,SAAS;AAAA,YACL,eAAe,UAAU,MAAM;AAAA,YAC/B,gBAAgB;AAAA,UACpB;AAAA,UACA,MAAM,KAAK,UAAU;AAAA,YACjB,QAAQ,KAAK,SAAS,OAAO,WAAW;AAAA,YACxC,aAAa;AAAA,cACT,IAAI;AAAA,gBACA,QAAQ,KAAK;AAAA,gBACb,YAAY,KAAK;AAAA,gBACjB,gBAAgB,KAAK,iBAAiB;AAAA,gBACtC,OAAO,KAAK,SAAS;AAAA,gBACrB,QAAQ,KAAK,UAAU;AAAA,gBACvB,gBAAgB,KAAK,iBAAiB;AAAA,gBACtC,MAAM,KAAK,QAAQ;AAAA,cACvB;AAAA,YACJ;AAAA,YACA,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,UACd,CAAC;AAAA,QACL;AAAA,MACJ;AAEA,UAAI,CAAC,SAAS,IAAI;AACd,cAAM,IAAI;AAAA,UACN,oCAAoC,SAAS,UAAU;AAAA,QAC3D;AAAA,MACJ;AAEA,YAAM,WAAW,MAAM,SAAS,KAAK;AACrC,aAAO,EAAE,SAAS,MAAM,MAAM,CAAC,QAAQ,EAAE;AAAA,IAC7C,WACI,QAAQ;AAAA,IAER,QAAQ,uDACV;AACE,YAAM,WAAW,IAAI,SAAS,EAAE,OAAyB,CAAC;AAC1D,YAAM,WAAW,MAAM,SAAS,OAAO,OAAO;AAAA,QAC1C;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK;AAAA,QACb,OAAO,eAAe,SAAS;AAAA,QAC/B,GAAG,KAAK;AAAA,MACZ,CAAC;AAGD,YAAM,mBACF;AAEJ,UACI,CAAC,iBAAiB,QAClB,CAAC,MAAM,QAAQ,iBAAiB,IAAI,GACtC;AACE,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC9D;AAGA,YAAM,UAAU,MAAM,QAAQ;AAAA,QAC1B,iBAAiB,KAAK,IAAI,OAAO,UAAU;AACvC,cAAI,CAAC,MAAM,KAAK;AACZ,wBAAY,MAAM,8BAA8B,KAAK;AACrD,kBAAM,IAAI,MAAM,qCAAqC;AAAA,UACzD;AAGA,gBAAM,gBAAgB,MAAM,MAAM,MAAM,GAAG;AAC3C,cAAI,CAAC,cAAc,IAAI;AACnB,kBAAM,IAAI;AAAA,cACN,0BAA0B,cAAc,UAAU;AAAA,YACtD;AAAA,UACJ;AAGA,gBAAM,OAAO,MAAM,cAAc,KAAK;AACtC,gBAAM,cAAc,MAAM,KAAK,YAAY;AAC3C,gBAAM,SAAS,OAAO,KAAK,WAAW,EAAE,SAAS,QAAQ;AAGzD,iBAAO,0BAA0B,MAAM;AAAA,QAC3C,CAAC;AAAA,MACL;AAEA,UAAI,QAAQ,WAAW,GAAG;AACtB,cAAM,IAAI,MAAM,oCAAoC;AAAA,MACxD;AAEA,kBAAY,MAAM,aAAa,QAAQ,MAAM,SAAS;AACtD,aAAO,EAAE,SAAS,MAAM,MAAM,QAAQ;AAAA,IAC1C,WAAW,QAAQ,0CAA8C;AAC7D,UAAI,OAAO;AAAA,QACP,aAAa;AAAA,MACjB,CAAC;AAGD,YAAM,QAAQ;AAAA,QACV,QAAQ,KAAK;AAAA,QACb,YAAY;AAAA,QACZ,qBAAqB,eAAe,SAAS;AAAA,QAC7C,gBAAgB,KAAK,iBAAiB;AAAA,QACtC,YAAY,KAAK;AAAA,QACjB,uBACI,QAAQ,WAAW,8BAA8B,MACjD;AAAA,QACJ,kBAAkB;AAAA,UACd,QAAQ,WAAW,yBAAyB,KAAK;AAAA,QACrD;AAAA,QACA,eAAe;AAAA,QACf,MAAM,KAAK,QAAQ;AAAA,QACnB,GAAI,QAAQ,WAAW,kBAAkB,IACnC;AAAA,UACI,OAAO;AAAA,YACH;AAAA,cACI,MAAM,QAAQ,WAAW,kBAAkB;AAAA,cAC3C,OAAO;AAAA,YACX;AAAA,UACJ;AAAA,QACJ,IACA,CAAC;AAAA,MACX;AAGA,YAAM,SAAS,MAAM,IAAI,UAAU,OAAO;AAAA,QACtC;AAAA,QACA,MAAM;AAAA,QACN,eAAe,CAAC,WAAW;AACvB,cAAI,OAAO,WAAW,eAAe;AACjC,wBAAY,KAAK,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;AAAA,UAC1D;AAAA,QACJ;AAAA,MACJ,CAAC;AAED,YAAM,iBAAiB,OAAO,KAAK,OAAO,IAAI,OAAO,UAAU;AAC3D,cAAM,WAAW,MAAM,MAAM,MAAM,GAAG;AACtC,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,cAAMC,UAAS,MAAM,KAAK,YAAY;AACtC,cAAM,SAAS,OAAO,KAAKA,OAAM,EAAE,SAAS,QAAQ;AACpD,eAAO,QAAQ,MAAM,YAAY,WAAW,MAAM;AAAA,MACtD,CAAC;AAED,YAAM,UAAU,MAAM,QAAQ,IAAI,cAAc;AAChD,aAAO,EAAE,SAAS,MAAM,MAAM,QAAQ;AAAA,IAC1C,WAAW,QAAQ,8CAAiD;AAChE,YAAM,WAAW,MAAM;AAAA,QACnB;AAAA,QACA;AAAA,UACI,QAAQ;AAAA,UACR,SAAS;AAAA,YACL,eAAe,UAAU,MAAM;AAAA,YAC/B,gBAAgB;AAAA,UACpB;AAAA,UACA,MAAM,KAAK,UAAU;AAAA,YACjB;AAAA,YACA,QAAQ,KAAK;AAAA,YACb,WAAW,KAAK;AAAA,YAChB,iBAAiB,KAAK;AAAA,YACtB,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,WAAW,KAAK;AAAA,YAChB,MAAM,KAAK;AAAA,YACX,cAAc,KAAK;AAAA,YACnB,gBAAgB,KAAK;AAAA,UACzB,CAAC;AAAA,QACL;AAAA,MACJ;AAEA,YAAM,SAAS,MAAM,SAAS,KAAK;AAEnC,UAAI,CAAC,OAAO,UAAU,CAAC,MAAM,QAAQ,OAAO,MAAM,GAAG;AACjD,cAAM,IAAI,MAAM,wCAAwC;AAAA,MAC5D;AAEA,YAAM,UAAU,OAAO,OAAO,IAAI,CAAC,iBAAiB;AAChD,YAAI,CAAC,cAAc;AACf,gBAAM,IAAI;AAAA,YACN;AAAA,UACJ;AAAA,QACJ;AACA,eAAO,yBAAyB,YAAY;AAAA,MAChD,CAAC;AAED,aAAO,EAAE,SAAS,MAAM,MAAM,QAAQ;AAAA,IAC1C,WACI,QAAQ,wDACV;AACE,YAAM,WAAW,MAAM;AAAA,QACnB;AAAA,QACA;AAAA,UACI,QAAQ;AAAA,UACR,SAAS;AAAA,YACL,eAAe,UAAU,MAAM;AAAA,YAC/B,gBAAgB;AAAA,UACpB;AAAA,UACA,MAAM,KAAK,UAAU;AAAA,YACjB;AAAA,YACA,QAAQ,KAAK;AAAA,YACb,iBAAiB,KAAK;AAAA,YACtB,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,WAAW,KAAK,iBAAiB;AAAA,UACrC,CAAC;AAAA,QACL;AAAA,MACJ;AAEA,YAAM,SAAS,MAAM,SAAS,KAAK;AAEnC,UAAI,CAAC,OAAO,UAAU,CAAC,MAAM,QAAQ,OAAO,MAAM,GAAG;AACjD,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC9D;AAEA,YAAM,UAAU,OAAO,OAAO,IAAI,CAAC,iBAAiB;AAChD,YAAI,CAAC,cAAc;AACf,gBAAM,IAAI;AAAA,YACN;AAAA,UACJ;AAAA,QACJ;AACA,eAAO,yBAAyB,YAAY;AAAA,MAChD,CAAC;AAED,aAAO,EAAE,SAAS,MAAM,MAAM,QAAQ;AAAA,IAC1C,WAAW,QAAQ,kDAAmD;AAClE,UAAI,CAAC,QAAQ;AACT,cAAM,IAAI,MAAM,iCAAiC;AAAA,MACrD;AACA,UAAI;AACA,cAAM,UAAU,IAAI,IAAI,MAAM;AAC9B,YAAI,CAAC,QAAQ,SAAS,WAAW,MAAM,GAAG;AACtC,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QAC3D;AAEA,cAAM,WAAW,MAAM;AAAA,UACnB,GAAG,QAAQ,SAAS,CAAC;AAAA,UACrB;AAAA,YACI,QAAQ;AAAA,YACR,SAAS;AAAA,cACL,gBAAgB;AAAA,cAChB,eAAe;AAAA,YACnB;AAAA,YACA,MAAM,KAAK,UAAU;AAAA,cACjB,UACI,KAAK,WAAW;AAAA,cACpB,QAAQ,KAAK;AAAA,cACb,OAAO,KAAK,SAAS;AAAA,cACrB,QAAQ,KAAK,UAAU;AAAA,YAC3B,CAAC;AAAA,UACL;AAAA,QACJ;AACA,cAAM,SAAS,MAAM,SAAS,KAAK;AACnC,YAAI,CAAC,OAAO,QAAQ,QAAQ;AACxB,gBAAM,IAAI,MAAM,qBAAqB;AAAA,QACzC;AACA,cAAM,eAAe,MAAM,QAAQ;AAAA,UAC/B,OAAO,OAAO,IAAI,OAAO,UAAU;AAC/B,oBAAQ,IAAI,wBAAwB,MAAM,GAAG;AAC7C,gBAAI;AACJ,gBAAI,MAAM,IAAI,SAAS,MAAM,GAAG;AAC5B,yBAAW,MAAM;AAAA,YACrB,OAAO;AACH,yBAAW,GAAG,MAAM,GAAG,MAAM,GAAG;AAAA,YACpC;AACA,kBAAM,gBAAgB,MAAM,MAAM,QAAQ;AAC1C,gBAAI,CAAC,cAAc,IAAI;AACnB,oBAAM,IAAI;AAAA,gBACN,0BAA0B,cAAc,UAAU;AAAA,cACtD;AAAA,YACJ;AACA,kBAAM,OAAO,MAAM,cAAc,KAAK;AACtC,kBAAM,cAAc,MAAM,KAAK,YAAY;AAC3C,kBAAM,SACF,OAAO,KAAK,WAAW,EAAE,SAAS,QAAQ;AAC9C,mBAAO,0BAA0B,MAAM;AAAA,UAC3C,CAAC;AAAA,QACL;AACA,eAAO;AAAA,UACH,SAAS;AAAA,UACT,MAAM;AAAA,QACV;AAAA,MACJ,SAAS,OAAO;AACZ,gBAAQ,MAAM,KAAK;AACnB,eAAO,EAAE,SAAS,OAAO,MAAa;AAAA,MAC1C;AAAA,IACJ,OAAO;AACH,UAAI,aAAa,GAAG,KAAK,KAAK,IAAI,KAAK,MAAM;AAC7C,UACI,eAAe,eACf,eAAe,eACf,eAAe,aACjB;AACE,qBAAa;AAAA,MACjB;AACA,YAAM,eAAe,QAAQ,WAAW,gBAAgB;AACxD,UAAI,CAAC,cAAc;AACf,cAAM,IAAI,MAAM,2BAA2B;AAAA,MAC/C;AACA,YAAM,SAAS,IAAI,OAAO;AAAA,QACtB,QAAQ;AAAA,MACZ,CAAC;AACD,YAAM,WAAW,MAAM,OAAO,OAAO,SAAS;AAAA,QAC1C;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,MAAM;AAAA,QACN,GAAG,KAAK;AAAA,QACR,iBAAiB;AAAA,MACrB,CAAC;AACD,YAAM,UAAU,SAAS,KAAK;AAAA,QAC1B,CAAC,UAAU,yBAAyB,MAAM,QAAQ;AAAA,MACtD;AACA,aAAO,EAAE,SAAS,MAAM,MAAM,QAAQ;AAAA,IAC1C;AAAA,EACJ,SAAS,OAAO;AACZ,YAAQ,MAAM,KAAK;AACnB,WAAO,EAAE,SAAS,OAAO,MAAa;AAAA,EAC1C;AACJ;AAEO,IAAM,kBAAkB,OAC3B,MACA,YAIE;AACF,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,0BACF,QAAQ;AAAA;AAAA,EAER;AAEJ,MAAI,CAAC,yBAAyB;AAC1B,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACzD;AAEA,QAAM,OAAO,MAAM,wBAAwB,cAAc,QAAQ;AACjE,SAAO;AAAA,IACH,OAAO,KAAK,MAAM,KAAK;AAAA,IACvB,aAAa,KAAK,YAAY,KAAK;AAAA,EACvC;AACJ;AAwCO,IAAM,iBAAiB,OAAO;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA;AAAA;AAAA;AAIX,MAAiE;AAC7D,MAAI,CAAC,SAAS;AACV,UAAM,eAAe;AACrB,YAAQ,MAAM,YAAY;AAC1B,UAAM,IAAI,MAAM,YAAY;AAAA,EAChC;AAEA,QAAM,WAAW,QAAQ;AACzB,QAAM,gBAAgB,iBAAiB,QAAQ,eAAe,UAAU;AACxE,QAAM,QAAQ,cAAc;AAC5B,QAAM,cAAc,cAAc;AAClC,QAAM,oBAAoB,cAAc;AACxC,QAAM,mBAAmB,cAAc;AACvC,QAAM,qBAAqB,cAAc;AACzC,QAAM,sBAAsB,cAAc;AAC1C,QAAM,yBAAyB,cAAc;AAC7C,QAAM,SAAS,QAAQ;AAEvB,MAAI;AACA,cAAU,MAAM,WAAW,SAAS,oBAAoB,OAAO;AAE/D,UAAM,eAA8B;AAAA,MAChC,QAAQ;AAAA,MACR;AAAA,MACA,WAAW;AAAA,MACX,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,MAAM,QAAQ,cAAc;AAAA,MAC5B;AAAA,IACJ;AAEA,UAAM,WAAW,MAAM,eAAe;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;AAAA,IAIJ,CAAC;AAED,WAAO;AAAA,EACX,SAAS,OAAO;AACZ,YAAQ,MAAM,4BAA4B,KAAK;AAC/C,UAAM;AAAA,EACV;AACJ;AA6BA,eAAsB,eAClBH,UACsC;AACtC,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,EAIJ,IAAIA;AACJ,UAAQ,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AACI,aAAO,MAAM,aAAaA,QAAO;AAAA,IACrC;AAAA,IACA;AACI,aAAO,MAAM,gBAAgBA,QAAO;AAAA,IACxC;AACI,aAAO,MAAM,WAAWA,QAAO;AAAA,IACnC;AACI,aAAO,MAAM,WAAWA,QAAO;AAAA,IACnC;AACI,aAAO,MAAM,yBAAyB;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL;AACI,aAAO,MAAM,aAAaA,QAAO;AAAA,IACrC;AACI,aAAO,MAAM,cAAcA,QAAO;AAAA,IACtC;AACI,aAAO,MAAM,cAAcA,QAAO;AAAA,IACtC;AACI,aAAO,MAAM,iBAAiBA,QAAO;AAAA,IACzC;AACI,aAAO,MAAM,aAAaA,QAAO;AAAA,IACrC;AACI,aAAO,MAAM,eAAeA,QAAO;AAAA,IACvC;AACI,aAAO,MAAM,eAAeA,QAAO;AAAA,IACvC;AACI,aAAO,MAAM,eAAeA,QAAO;AAAA,IACvC;AACI,aAAO,MAAM,aAAaA,QAAO;AAAA,IACrC,SAAS;AACL,YAAM,eAAe,yBAAyB,QAAQ;AACtD,kBAAY,MAAM,YAAY;AAC9B,YAAM,IAAI,MAAM,YAAY;AAAA,IAChC;AAAA,EACJ;AACJ;AAOA,eAAe,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AACJ,GAA4D;AACxD,QAAM,WACF,QAAQ,UAAU,yBAAyB,YAAY,QAAQ;AACnE,QAAM,UACF,4BAA4B,SAAS,QAAQ,KAAK;AACtD,QAAM,SAAS,aAAa,EAAE,QAAQ,QAAQ,CAAC;AAC/C,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,OAAO,cAAc,KAAK;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,gBAAgB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AACJ,GAA4D;AACxD,cAAY,MAAM,kDAAkD;AACpE,MAAI,SAAS,QAAQ;AACjB,gBAAY,KAAK,iDAAiD;AAClE,WAAO;AAAA,EACX;AACA,QAAM,UAAU,4BAA4B,SAAS,WAAW;AAChE,cAAY,MAAM,sCAAsC,EAAE,QAAQ,CAAC;AAEnE,QAAM,YAAY,gBAAgB,EAAE,QAAQ,QAAQ,CAAC;AACrD,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,UAAU,cAAc,KAAK;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACJ,GAA4D;AACxD,QAAM,OAAO,aAAa,EAAE,QAAQ,SAAS,OAAO,KAAK,SAAS,CAAC;AACnE,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,KAAK,cAAc,OAAO,EAAE,mBAAmB,MAAM,CAAC;AAAA,IAC7D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AACJ,GAA4D;AACxD,cAAY,MAAM,6CAA6C;AAC/D,QAAM,UAAU,4BAA4B,SAAS,MAAM;AAC3D,cAAY,MAAM,4BAA4B,EAAE,QAAQ,CAAC;AAEzD,QAAM,OAAO,WAAW,EAAE,QAAQ,QAAQ,CAAC;AAC3C,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,KAAK,cAAc,KAAK;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACJ,GAA4D;AACxD,QAAM,SAAS,yBAAyB,EAAC,OAAM,CAAC;AAChD,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,OAAO,KAAK;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAA4D;AACxD,QAAM,UAAU,cAAc;AAC9B,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,QAAQ,KAAK;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACJ,GAA4D;AACxD,QAAM,UAAU,aAAa,EAAE,QAAQ,SAAS,OAAO,QAAQ,SAAS,CAAC;AACzE,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,QAAQ,cAAc,KAAK;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACJ,GAA4D;AACxD,QAAM,aAAa,aAAa;AAAA,IAC5B;AAAA,IACA,SAAS,OAAO,WAAW;AAAA,EAC/B,CAAC;AACD,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,WAAW,cAAc,KAAK;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AACJ,GAA4D;AACxD,QAAM,iBAAiB,aAAa;AAAA,IAChC,SAAS,YAAY,QAAQ,IAAI;AAAA,EACrC,CAAC;AACD,QAAM,SAAS,eAAe,KAAK;AACnC,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAA4D;AACxD,QAAM,SAAS,aAAa,EAAE,QAAQ,SAAS,OAAO,SAAS,SAAS,CAAC;AACzE,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,OAAO,cAAc,KAAK;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AA2BA,eAAe,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAA4D;AACxD,UAAQ,IAAI,8BAA8B,MAAM;AAChD,MAAI,CAAC,QAAQ;AACT,UAAM,IAAI;AAAA,MACN;AAAA,IACJ;AAAA,EACJ;AAEA,QAAM,iBAAiB,aAAa;AAAA,IAChC;AAAA,IACA,SAAS;AAAA;AAAA,EACb,CAAC;AAED,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,eAAe,cAAc,KAAK;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AACJ,GAA4D;AACxD,QAAM,mBAAmB,aAAa;AAAA,IAClC,SAAS,YAAY,QAAQ,IAAI;AAAA,IACjC,SAAS;AAAA,MACL,gBAAgB;AAAA,MAChB,eAAe,UAAU,MAAM;AAAA,IACnC;AAAA,EACJ,CAAC;AACD,QAAM,WAAW,iBAAiB,KAAK;AACvC,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAQA,eAAe,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACJ,GAA4D;AACxD,QAAM,SAAS,aAAa,EAAE,QAAQ,SAAS,OAAO,OAAO,SAAS,CAAC;AAEvE,QAAMI,YAAW,SAAS,EAAE,mBAAmB,KAAK,IAAI;AACxD,SAAO,MAAM,iBAAiB;AAAA,IAC1B,OAAO,OAAO,cAAc,OAAOA,SAAQ;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,CAAC;AACL;AAWA,eAAsB,qBAAqB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACJ,GAImC;AAC/B,MAAI,aAAa;AACjB,SAAO,MAAM;AACT,QAAI;AACA,YAAM,WAAW,MAAM,aAAa;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AACD,kBAAY;AAAA,QACR;AAAA,QACA;AAAA,MACJ;AACA,YAAM,EAAE,QAAQ,IAAI,4BAA4B,SAAS,KAAK,CAAC;AAC/D,UAAI,SAAS;AACT,oBAAY,MAAM,yBAAyB,OAAO;AAClD,eAAO;AAAA,MACX,OAAO;AACH,oBAAY,MAAM,wCAAwC;AAAA,MAC9D;AAAA,IACJ,SAAS,OAAO;AACZ,kBAAY,MAAM,kCAAkC,KAAK;AACzD,UACI,iBAAiB,aACjB,MAAM,QAAQ,SAAS,qBAAqB,GAC9C;AACE,oBAAY;AAAA,UACR;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,gBAAY,IAAI,eAAe,UAAU,OAAO;AAChD,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,UAAU,CAAC;AAC9D,kBAAc;AAAA,EAClB;AACJ;;;A4H9rFO,IAAM,WAAW,OAAO;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,QAAQ;AACZ,MAMM;AACF,SAAO,QAAQ,gBAAgB,SAAS;AAAA,IACpC,SAAS,QAAQ;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AAEO,IAAM,sBAAsB,CAAC,EAAE,MAAM,MAAyB;AACjE,QAAM,cAAc,MAAM,IAAI,CAAC,SAAe;AAC1C,UAAM,SAAS,SAAS,KAAK,IAAI;AAAA,MAAS,KAAK,EAAE;AACjD,UAAM,aACF,kBACA,KAAK,WACA,IAAI,CAAC,cAAyB;AAC3B,aAAO,KAAK,UAAU,YAAY,QAAQ,KAAK,IAAI,UAAU,WAAW,IAAI,UAAU,YAAY,YAAY,gBAAgB;AAAA,IAClI,CAAC,EACA,KAAK,IAAI;AAClB,WAAO,GAAG,MAAM;AAAA,EAAK,UAAU;AAAA,EACnC,CAAC;AACD,SAAO,YAAY,KAAK,IAAI;AAChC;AAEO,IAAM,aAAa,OAAO;AAAA,EAC7B;AAAA,EACA;AACJ,MAGM;AACF,SAAO,QAAQ,gBAAgB,WAAW,IAAI;AAClD;AAEO,IAAM,aAAa,OAAO;AAAA,EAC7B;AAAA,EACA;AACJ,MAGM;AACF,SAAO,QAAQ,gBAAgB,WAAW,IAAI;AAClD;;;ACrDA,IAAM,wBAAwB;AAC9B,IAAM,oBAAoB;AAKnB,IAAM,gBAAN,MAA8C;AAAA;AAAA;AAAA;AAAA,EAIjD;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,MAAqD;AAC7D,SAAK,UAAU,KAAK;AACpB,SAAK,YAAY,KAAK;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,qBAAqB,QAAiC;AAExD,QAAI,OAAO,WAAW;AAClB,aAAO;AAAA,IACX;AAEA,UAAM,aAAa,OAAO,QAAQ;AAGlC,QAAI,CAAC,YAAY;AACb,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI;AAEA,aAAO,YAAY,MAAM,MAAM,KAAK,SAAS,UAAU;AAAA,IAC3D,SAAS,OAAO;AACZ,qBAAY,MAAM,iCAAiC,KAAK;AAExD,aAAO,YAAY,uBAAuB,EAAE,MAAM;AAAA,IACtD;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,YAAY;AAAA,IACd;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACJ,GAMsB;AAClB,WAAO,MAAM,KAAK,QAAQ,gBAAgB,YAAY;AAAA,MAClD;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,KAAK;AAAA,MAChB,SAAS,KAAK,QAAQ;AAAA,MACtB;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,oBAAoB,SAKxB;AACE,WAAO,MAAM,KAAK,QAAQ,gBAAgB,oBAAoB;AAAA,MAC1D,kBAAkB,KAAK;AAAA,MACvB,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,MACtB,mBAAmB;AAAA,IACvB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,0BACF,WACA,MAMiB;AACjB,UAAM;AAAA,MACF,kBAAkB;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACJ,IAAI;AAEJ,UAAM,SAAS,MAAM,KAAK,QAAQ,gBAAgB,eAAe;AAAA,MAC7D,WAAW,KAAK;AAAA,MAChB;AAAA,MACA,SAAS,KAAK,QAAQ;AAAA,MACtB;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,QAAQ,CAAC,CAAC;AAAA,IACd,CAAC;AAED,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAa,QAAgB,SAAS,OAAsB;AAG9D,UAAM,kBACF,MAAM,KAAK,QAAQ,gBAAgB,cAAc,OAAO,EAAE;AAE9D,QAAI,iBAAiB;AACjB,qBAAY,MAAM,iCAAiC;AACnD;AAAA,IACJ;AAEA,mBAAY,IAAI,mBAAmB,OAAO,IAAI,OAAO,QAAQ,IAAI;AAEjE,UAAM,KAAK,QAAQ,gBAAgB;AAAA,MAC/B;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,qBAAqB,QAAiE;AACxF,WAAO,MAAM,KAAK,QAAQ,gBAAgB,qBAAqB;AAAA,MAC3D,WAAW,KAAK;AAAA,MAChB,SAAS,KAAK,QAAQ;AAAA,MACtB,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO;AAAA,IAClB,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,cAAc,IAAkC;AAClD,UAAM,SAAS,MAAM,KAAK,QAAQ,gBAAgB,cAAc,EAAE;AAClE,QAAI,UAAU,OAAO,YAAY,KAAK,QAAQ,QAAS,QAAO;AAC9D,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,UAA+B;AAC9C,UAAM,KAAK,QAAQ,gBAAgB;AAAA,MAC/B;AAAA,MACA,KAAK;AAAA,IACT;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAkB,QAA6B;AACjD,UAAM,KAAK,QAAQ,gBAAgB;AAAA,MAC/B;AAAA,MACA,KAAK;AAAA,IACT;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAc,QAAc,SAAS,MAAuB;AAC9D,WAAO,MAAM,KAAK,QAAQ,gBAAgB;AAAA,MACtC;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACT;AAAA,EACJ;AACJ;;;ACxOA,eAAsB,gBAAgB;AAAA,EAClC;AAAA,EACA;AACJ,GAGG;AACC,QAAM,iBACF,MAAM,QAAQ,gBAAgB,uBAAuB,MAAM;AAC/D,QAAM,SAAS,MAAM,QAAQ;AAAA,IACzB,eAAe,IAAI,OAAO,WAAW;AACjC,YAAM,UACF,MAAM,QAAQ,gBAAgB,eAAe,MAAM;AACvD,UAAI,SAAS;AACT,eAAO;AAAA,UACH,IAAI,QAAQ;AAAA,UACZ,MAAM,QAAQ;AAAA,UACd,UAAU,QAAQ;AAAA,UAClB,SAAS,QAAQ;AAAA,QACrB;AAAA,MACJ;AACA,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAEA,SAAO,OAAO,OAAO,CAAC,UAA0B,UAAU,IAAI;AAClE;AAOO,SAAS,aAAa,EAAE,OAAO,GAAwB;AAC1D,QAAM,eAAe,OAAO,IAAI,CAAC,UAAiB;AAC9C,UAAM,SAAS,GAAG,MAAM,IAAI,GAAG,MAAM,SAAS,UAAU,OAAO,MAAM,SAAS,UAAU,EAAE,GAAG,MAAM,SAAS,UAAU,OAAO,MAAM,SAAS,UAAU,EAAE;AACxJ,WAAO;AAAA,EACX,CAAC;AACD,QAAM,oBAAoB,aAAa,KAAK,IAAI;AAChD,SAAO;AACX;AAQO,IAAM,iBAAiB,CAAC;AAAA,EAC3B;AAAA,EACA;AACJ,MAGM;AACF,QAAM,iBAAiB,SAClB,QAAQ,EACR,OAAO,CAAC,YAAoB,QAAQ,MAAM,EAC1C,IAAI,CAAC,YAAoB;AACtB,UAAM,iBAAkB,QAAQ,QAAoB;AACpD,UAAM,gBAAiB,QAAQ,QAAoB;AACnD,UAAM,gBACF,OAAO,KAAK,CAAC,UAAiB,MAAM,OAAO,QAAQ,MAAM,GACnD,QAAQ;AAElB,UAAM,cAAe,QAAQ,QAAoB;AAEjD,UAAM,mBACF,eAAe,YAAY,SAAS,IAC9B,kBAAkB,YAAY,IAAI,CAAC,UAAU,IAAI,MAAM,EAAE,MAAM,MAAM,KAAK,KAAK,MAAM,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,MACxG;AAEV,UAAM,YAAY,gBAAgB,QAAQ,SAAS;AAEnD,UAAM,UAAU,QAAQ,OAAO,MAAM,EAAE;AAEvC,WAAO,IAAI,SAAS,MAAM,OAAO,KAAK,aAAa,KAAK,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,kBAAkB,SAAS,KAAK,aAAa,MAAM,EAAE;AAAA,EACtK,CAAC,EACA,KAAK,IAAI;AACd,SAAO;AACX;AAEO,IAAM,kBAAkB,CAAC,gBAAwB;AACpD,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,OAAO,IAAI,QAAQ,IAAI;AAE7B,QAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,QAAM,UAAU,KAAK,MAAM,UAAU,GAAI;AACzC,QAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,QAAM,QAAQ,KAAK,MAAM,UAAU,EAAE;AACrC,QAAM,OAAO,KAAK,MAAM,QAAQ,EAAE;AAElC,MAAI,UAAU,KAAO;AACjB,WAAO;AAAA,EACX,WAAW,UAAU,IAAI;AACrB,WAAO,GAAG,OAAO,UAAU,YAAY,IAAI,MAAM,EAAE;AAAA,EACvD,WAAW,QAAQ,IAAI;AACnB,WAAO,GAAG,KAAK,QAAQ,UAAU,IAAI,MAAM,EAAE;AAAA,EACjD,OAAO;AACH,WAAO,GAAG,IAAI,OAAO,SAAS,IAAI,MAAM,EAAE;AAAA,EAC9C;AACJ;;;AC7GO,IAAM,cAAc,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA,qBAAqB;AACzB,MAIM;AAEF,QAAM,kBAAkD,CAAC;AACzD,WAAS,QAAQ,CAAC,YAAY;AAC1B,QAAI,QAAQ,QAAQ;AAChB,UAAI,CAAC,gBAAgB,QAAQ,MAAM,GAAG;AAClC,wBAAgB,QAAQ,MAAM,IAAI,CAAC;AAAA,MACvC;AACA,sBAAgB,QAAQ,MAAM,EAAE,KAAK,OAAO;AAAA,IAChD;AAAA,EACJ,CAAC;AAGD,SAAO,OAAO,eAAe,EAAE,QAAQ,CAAC,iBAAiB;AACrD,iBAAa,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;AAAA,EACzD,CAAC;AAGD,QAAM,cAAc,OAAO,QAAQ,eAAe,EAAE;AAAA,IAChD,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,MACxB,UAAU,UAAU,SAAS,CAAC,EAAE,YAChC,UAAU,UAAU,SAAS,CAAC,EAAE;AAAA,EACxC;AAEA,QAAM,iBAAiB,YAAY,IAAI,CAAC,CAAC,QAAQ,YAAY,MAAM;AAC/D,UAAM,iBAAiB,aAClB,OAAO,CAAC,YAAoB,QAAQ,MAAM,EAC1C,IAAI,CAAC,YAAoB;AACtB,YAAM,QAAQ,OAAO;AAAA,QACjB,CAACC,WAAiBA,OAAM,OAAO,QAAQ;AAAA,MAC3C;AACA,YAAM,WAAW,OAAO,QAAQ;AAChC,YAAM,cAAc,OAAO,YAAY;AAEvC,aAAO,SAAS,QAAQ,MAAM,WAAW;AAAA,MACnD,QAAQ,EAAE,GAAG,QAAQ,QAAQ,YAAY;AAAA,eAAkB,QAAQ,QAAQ,SAAS,KAAK,EAAE;AAAA,QACzF,gBAAgB,QAAQ,SAAS,CAAC;AAAA;AAAA,EAExC,QAAQ,QAAQ,IAAI;AAAA,IACV,CAAC;AAEL,UAAM,SAAS,qBACT,iBAAiB,OAAO,MAAM,EAAE,CAAC;AAAA,IACjC;AACN,WAAO,GAAG,MAAM,GAAG,eAAe,KAAK,MAAM,CAAC;AAAA,EAClD,CAAC;AAED,SAAO,eAAe,KAAK,MAAM;AACrC;;;AClDA,eAAsB,aAClB,SACA,SACA,OACF;AACE,QAAM,mBACF,MAAM,QAAQ;AAAA,IACV,QAAQ,UAAU,IAAI,OAAO,aAAa;AACtC,aAAO,MAAM,SAAS,IAAI,SAAS,SAAS,KAAK;AAAA,IACrD,CAAC;AAAA,EACL,GACF,OAAO,CAAC,WAAW,UAAU,QAAQ,WAAW,EAAE;AAEpD,SAAO,gBAAgB,KAAK,IAAI;AACpC;;;ACrBA,eAAsB,mBAAmB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACJ,GAIqB;AACjB,SAAO,QAAQ,gBAAgB,mBAAmB;AAAA,IAC9C;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AAEA,eAAsB,gBAAgB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACJ,GAIG;AACC,SAAO,QAAQ,gBAAgB,gBAAgB;AAAA,IAC3C;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AAEA,eAAsB,iBAAiB;AAAA,EACnC;AAAA,EACA;AACJ,GAGG;AACC,SAAO,QAAQ,gBAAgB,iBAAiB,EAAE,OAAO,CAAC;AAC9D;AAEA,eAAsB,oBAAoB;AAAA,EACtC;AAAA,EACA;AACJ,GAGG;AACC,QAAM,gBAAgB,MAAM,iBAAiB,EAAE,SAAS,OAAO,CAAC;AAEhE,QAAM,yBAAyB,cAAc;AAAA,IACzC,CAAC,iBAA+B;AAC5B,YAAM,EAAE,OAAO,MAAM,IAAI;AAEzB,UAAI,UAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AAEA,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,SAAO;AACX;;;AChEA,SAAS,gBAAgB;AACzB,SAAS,QAAAC,aAAY;AACrB,SAAS,SAAAC,QAAO,wBAAAC,6BAA4B;AAC5C,SAAS,MAAM,cAAc;;;ACH7B,SAAS,YAAY;;;ACArB,IAAI;AAAA,CACH,SAAUC,OAAM;AACb,EAAAA,MAAK,cAAc,CAAC,QAAQ;AAC5B,WAAS,SAAS,MAAM;AAAA,EAAE;AAC1B,EAAAA,MAAK,WAAW;AAChB,WAAS,YAAY,IAAI;AACrB,UAAM,IAAI,MAAM;AAAA,EACpB;AACA,EAAAA,MAAK,cAAc;AACnB,EAAAA,MAAK,cAAc,CAAC,UAAU;AAC1B,UAAM,MAAM,CAAC;AACb,eAAW,QAAQ,OAAO;AACtB,UAAI,IAAI,IAAI;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AACA,EAAAA,MAAK,qBAAqB,CAAC,QAAQ;AAC/B,UAAM,YAAYA,MAAK,WAAW,GAAG,EAAE,OAAO,CAAC,MAAM,OAAO,IAAI,IAAI,CAAC,CAAC,MAAM,QAAQ;AACpF,UAAM,WAAW,CAAC;AAClB,eAAW,KAAK,WAAW;AACvB,eAAS,CAAC,IAAI,IAAI,CAAC;AAAA,IACvB;AACA,WAAOA,MAAK,aAAa,QAAQ;AAAA,EACrC;AACA,EAAAA,MAAK,eAAe,CAAC,QAAQ;AACzB,WAAOA,MAAK,WAAW,GAAG,EAAE,IAAI,SAAU,GAAG;AACzC,aAAO,IAAI,CAAC;AAAA,IAChB,CAAC;AAAA,EACL;AACA,EAAAA,MAAK,aAAa,OAAO,OAAO,SAAS,aACnC,CAAC,QAAQ,OAAO,KAAK,GAAG,IACxB,CAAC,WAAW;AACV,UAAM,OAAO,CAAC;AACd,eAAW,OAAO,QAAQ;AACtB,UAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG,GAAG;AACnD,aAAK,KAAK,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ,EAAAA,MAAK,OAAO,CAAC,KAAK,YAAY;AAC1B,eAAW,QAAQ,KAAK;AACpB,UAAI,QAAQ,IAAI;AACZ,eAAO;AAAA,IACf;AACA,WAAO;AAAA,EACX;AACA,EAAAA,MAAK,YAAY,OAAO,OAAO,cAAc,aACvC,CAAC,QAAQ,OAAO,UAAU,GAAG,IAC7B,CAAC,QAAQ,OAAO,QAAQ,YAAY,SAAS,GAAG,KAAK,KAAK,MAAM,GAAG,MAAM;AAC/E,WAAS,WAAW,OAAO,YAAY,OAAO;AAC1C,WAAO,MACF,IAAI,CAAC,QAAS,OAAO,QAAQ,WAAW,IAAI,GAAG,MAAM,GAAI,EACzD,KAAK,SAAS;AAAA,EACvB;AACA,EAAAA,MAAK,aAAa;AAClB,EAAAA,MAAK,wBAAwB,CAAC,GAAG,UAAU;AACvC,QAAI,OAAO,UAAU,UAAU;AAC3B,aAAO,MAAM,SAAS;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AACJ,GAAG,SAAS,OAAO,CAAC,EAAE;AACtB,IAAI;AAAA,CACH,SAAUC,aAAY;AACnB,EAAAA,YAAW,cAAc,CAAC,OAAO,WAAW;AACxC,WAAO;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA;AAAA,IACP;AAAA,EACJ;AACJ,GAAG,eAAe,aAAa,CAAC,EAAE;AAClC,IAAM,gBAAgB,KAAK,YAAY;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AACD,IAAM,gBAAgB,CAAC,SAAS;AAC5B,QAAM,IAAI,OAAO;AACjB,UAAQ,GAAG;AAAA,IACP,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,MAAM,IAAI,IAAI,cAAc,MAAM,cAAc;AAAA,IAC3D,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,UAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,eAAO,cAAc;AAAA,MACzB;AACA,UAAI,SAAS,MAAM;AACf,eAAO,cAAc;AAAA,MACzB;AACA,UAAI,KAAK,QACL,OAAO,KAAK,SAAS,cACrB,KAAK,SACL,OAAO,KAAK,UAAU,YAAY;AAClC,eAAO,cAAc;AAAA,MACzB;AACA,UAAI,OAAO,QAAQ,eAAe,gBAAgB,KAAK;AACnD,eAAO,cAAc;AAAA,MACzB;AACA,UAAI,OAAO,QAAQ,eAAe,gBAAgB,KAAK;AACnD,eAAO,cAAc;AAAA,MACzB;AACA,UAAI,OAAO,SAAS,eAAe,gBAAgB,MAAM;AACrD,eAAO,cAAc;AAAA,MACzB;AACA,aAAO,cAAc;AAAA,IACzB;AACI,aAAO,cAAc;AAAA,EAC7B;AACJ;AAEA,IAAM,eAAe,KAAK,YAAY;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AACD,IAAM,gBAAgB,CAAC,QAAQ;AAC3B,QAAM,OAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AACxC,SAAO,KAAK,QAAQ,eAAe,KAAK;AAC5C;AACA,IAAM,WAAN,MAAM,kBAAiB,MAAM;AAAA,EACzB,IAAI,SAAS;AACT,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,YAAY,QAAQ;AAChB,UAAM;AACN,SAAK,SAAS,CAAC;AACf,SAAK,WAAW,CAAC,QAAQ;AACrB,WAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG;AAAA,IACtC;AACA,SAAK,YAAY,CAAC,OAAO,CAAC,MAAM;AAC5B,WAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG,IAAI;AAAA,IAC1C;AACA,UAAM,cAAc,WAAW;AAC/B,QAAI,OAAO,gBAAgB;AAEvB,aAAO,eAAe,MAAM,WAAW;AAAA,IAC3C,OACK;AACD,WAAK,YAAY;AAAA,IACrB;AACA,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAClB;AAAA,EACA,OAAO,SAAS;AACZ,UAAM,SAAS,WACX,SAAU,OAAO;AACb,aAAO,MAAM;AAAA,IACjB;AACJ,UAAM,cAAc,EAAE,SAAS,CAAC,EAAE;AAClC,UAAM,eAAe,CAAC,UAAU;AAC5B,iBAAW,SAAS,MAAM,QAAQ;AAC9B,YAAI,MAAM,SAAS,iBAAiB;AAChC,gBAAM,YAAY,IAAI,YAAY;AAAA,QACtC,WACS,MAAM,SAAS,uBAAuB;AAC3C,uBAAa,MAAM,eAAe;AAAA,QACtC,WACS,MAAM,SAAS,qBAAqB;AACzC,uBAAa,MAAM,cAAc;AAAA,QACrC,WACS,MAAM,KAAK,WAAW,GAAG;AAC9B,sBAAY,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,QAC1C,OACK;AACD,cAAI,OAAO;AACX,cAAI,IAAI;AACR,iBAAO,IAAI,MAAM,KAAK,QAAQ;AAC1B,kBAAM,KAAK,MAAM,KAAK,CAAC;AACvB,kBAAM,WAAW,MAAM,MAAM,KAAK,SAAS;AAC3C,gBAAI,CAAC,UAAU;AACX,mBAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;AAAA,YAQzC,OACK;AACD,mBAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;AACrC,mBAAK,EAAE,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,YACvC;AACA,mBAAO,KAAK,EAAE;AACd;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,iBAAa,IAAI;AACjB,WAAO;AAAA,EACX;AAAA,EACA,OAAO,OAAO,OAAO;AACjB,QAAI,EAAE,iBAAiB,YAAW;AAC9B,YAAM,IAAI,MAAM,mBAAmB,KAAK,EAAE;AAAA,IAC9C;AAAA,EACJ;AAAA,EACA,WAAW;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,UAAU,KAAK,QAAQ,KAAK,uBAAuB,CAAC;AAAA,EACpE;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,OAAO,WAAW;AAAA,EAClC;AAAA,EACA,QAAQ,SAAS,CAAC,UAAU,MAAM,SAAS;AACvC,UAAM,cAAc,CAAC;AACrB,UAAM,aAAa,CAAC;AACpB,eAAW,OAAO,KAAK,QAAQ;AAC3B,UAAI,IAAI,KAAK,SAAS,GAAG;AACrB,oBAAY,IAAI,KAAK,CAAC,CAAC,IAAI,YAAY,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC;AACxD,oBAAY,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,OAAO,GAAG,CAAC;AAAA,MAC7C,OACK;AACD,mBAAW,KAAK,OAAO,GAAG,CAAC;AAAA,MAC/B;AAAA,IACJ;AACA,WAAO,EAAE,YAAY,YAAY;AAAA,EACrC;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK,QAAQ;AAAA,EACxB;AACJ;AACA,SAAS,SAAS,CAAC,WAAW;AAC1B,QAAM,QAAQ,IAAI,SAAS,MAAM;AACjC,SAAO;AACX;AAEA,IAAM,WAAW,CAAC,OAAO,SAAS;AAC9B,MAAI;AACJ,UAAQ,MAAM,MAAM;AAAA,IAChB,KAAK,aAAa;AACd,UAAI,MAAM,aAAa,cAAc,WAAW;AAC5C,kBAAU;AAAA,MACd,OACK;AACD,kBAAU,YAAY,MAAM,QAAQ,cAAc,MAAM,QAAQ;AAAA,MACpE;AACA;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,mCAAmC,KAAK,UAAU,MAAM,UAAU,KAAK,qBAAqB,CAAC;AACvG;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,kCAAkC,KAAK,WAAW,MAAM,MAAM,IAAI,CAAC;AAC7E;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,yCAAyC,KAAK,WAAW,MAAM,OAAO,CAAC;AACjF;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,gCAAgC,KAAK,WAAW,MAAM,OAAO,CAAC,eAAe,MAAM,QAAQ;AACrG;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,UAAI,OAAO,MAAM,eAAe,UAAU;AACtC,YAAI,cAAc,MAAM,YAAY;AAChC,oBAAU,gCAAgC,MAAM,WAAW,QAAQ;AACnE,cAAI,OAAO,MAAM,WAAW,aAAa,UAAU;AAC/C,sBAAU,GAAG,OAAO,sDAAsD,MAAM,WAAW,QAAQ;AAAA,UACvG;AAAA,QACJ,WACS,gBAAgB,MAAM,YAAY;AACvC,oBAAU,mCAAmC,MAAM,WAAW,UAAU;AAAA,QAC5E,WACS,cAAc,MAAM,YAAY;AACrC,oBAAU,iCAAiC,MAAM,WAAW,QAAQ;AAAA,QACxE,OACK;AACD,eAAK,YAAY,MAAM,UAAU;AAAA,QACrC;AAAA,MACJ,WACS,MAAM,eAAe,SAAS;AACnC,kBAAU,WAAW,MAAM,UAAU;AAAA,MACzC,OACK;AACD,kBAAU;AAAA,MACd;AACA;AAAA,IACJ,KAAK,aAAa;AACd,UAAI,MAAM,SAAS;AACf,kBAAU,sBAAsB,MAAM,QAAQ,YAAY,MAAM,YAAY,aAAa,WAAW,IAAI,MAAM,OAAO;AAAA,eAChH,MAAM,SAAS;AACpB,kBAAU,uBAAuB,MAAM,QAAQ,YAAY,MAAM,YAAY,aAAa,MAAM,IAAI,MAAM,OAAO;AAAA,eAC5G,MAAM,SAAS;AACpB,kBAAU,kBAAkB,MAAM,QAC5B,sBACA,MAAM,YACF,8BACA,eAAe,GAAG,MAAM,OAAO;AAAA,eACpC,MAAM,SAAS;AACpB,kBAAU,gBAAgB,MAAM,QAC1B,sBACA,MAAM,YACF,8BACA,eAAe,GAAG,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC;AAAA;AAE3D,kBAAU;AACd;AAAA,IACJ,KAAK,aAAa;AACd,UAAI,MAAM,SAAS;AACf,kBAAU,sBAAsB,MAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,WAAW,IAAI,MAAM,OAAO;AAAA,eAC/G,MAAM,SAAS;AACpB,kBAAU,uBAAuB,MAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,OAAO,IAAI,MAAM,OAAO;AAAA,eAC5G,MAAM,SAAS;AACpB,kBAAU,kBAAkB,MAAM,QAC5B,YACA,MAAM,YACF,0BACA,WAAW,IAAI,MAAM,OAAO;AAAA,eACjC,MAAM,SAAS;AACpB,kBAAU,kBAAkB,MAAM,QAC5B,YACA,MAAM,YACF,0BACA,WAAW,IAAI,MAAM,OAAO;AAAA,eACjC,MAAM,SAAS;AACpB,kBAAU,gBAAgB,MAAM,QAC1B,YACA,MAAM,YACF,6BACA,cAAc,IAAI,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC;AAAA;AAE3D,kBAAU;AACd;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,gCAAgC,MAAM,UAAU;AAC1D;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ;AACI,gBAAU,KAAK;AACf,WAAK,YAAY,KAAK;AAAA,EAC9B;AACA,SAAO,EAAE,QAAQ;AACrB;AAEA,IAAI,mBAAmB;AACvB,SAAS,YAAY,KAAK;AACtB,qBAAmB;AACvB;AACA,SAAS,cAAc;AACnB,SAAO;AACX;AAEA,IAAM,YAAY,CAAC,WAAW;AAC1B,QAAM,EAAE,MAAM,MAAAC,OAAM,WAAW,UAAU,IAAI;AAC7C,QAAM,WAAW,CAAC,GAAGA,OAAM,GAAI,UAAU,QAAQ,CAAC,CAAE;AACpD,QAAM,YAAY;AAAA,IACd,GAAG;AAAA,IACH,MAAM;AAAA,EACV;AACA,MAAI,UAAU,YAAY,QAAW;AACjC,WAAO;AAAA,MACH,GAAG;AAAA,MACH,MAAM;AAAA,MACN,SAAS,UAAU;AAAA,IACvB;AAAA,EACJ;AACA,MAAI,eAAe;AACnB,QAAM,OAAO,UACR,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EACjB,MAAM,EACN,QAAQ;AACb,aAAW,OAAO,MAAM;AACpB,mBAAe,IAAI,WAAW,EAAE,MAAM,cAAc,aAAa,CAAC,EAAE;AAAA,EACxE;AACA,SAAO;AAAA,IACH,GAAG;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,EACb;AACJ;AACA,IAAM,aAAa,CAAC;AACpB,SAAS,kBAAkB,KAAK,WAAW;AACvC,QAAM,cAAc,YAAY;AAChC,QAAM,QAAQ,UAAU;AAAA,IACpB;AAAA,IACA,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,WAAW;AAAA,MACP,IAAI,OAAO;AAAA;AAAA,MACX,IAAI;AAAA;AAAA,MACJ;AAAA;AAAA,MACA,gBAAgB,WAAW,SAAY;AAAA;AAAA,IAC3C,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,EACvB,CAAC;AACD,MAAI,OAAO,OAAO,KAAK,KAAK;AAChC;AACA,IAAM,cAAN,MAAM,aAAY;AAAA,EACd,cAAc;AACV,SAAK,QAAQ;AAAA,EACjB;AAAA,EACA,QAAQ;AACJ,QAAI,KAAK,UAAU;AACf,WAAK,QAAQ;AAAA,EACrB;AAAA,EACA,QAAQ;AACJ,QAAI,KAAK,UAAU;AACf,WAAK,QAAQ;AAAA,EACrB;AAAA,EACA,OAAO,WAAW,QAAQ,SAAS;AAC/B,UAAM,aAAa,CAAC;AACpB,eAAW,KAAK,SAAS;AACrB,UAAI,EAAE,WAAW;AACb,eAAO;AACX,UAAI,EAAE,WAAW;AACb,eAAO,MAAM;AACjB,iBAAW,KAAK,EAAE,KAAK;AAAA,IAC3B;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,WAAW;AAAA,EACrD;AAAA,EACA,aAAa,iBAAiB,QAAQ,OAAO;AACzC,UAAM,YAAY,CAAC;AACnB,eAAW,QAAQ,OAAO;AACtB,YAAM,MAAM,MAAM,KAAK;AACvB,YAAM,QAAQ,MAAM,KAAK;AACzB,gBAAU,KAAK;AAAA,QACX;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO,aAAY,gBAAgB,QAAQ,SAAS;AAAA,EACxD;AAAA,EACA,OAAO,gBAAgB,QAAQ,OAAO;AAClC,UAAM,cAAc,CAAC;AACrB,eAAW,QAAQ,OAAO;AACtB,YAAM,EAAE,KAAK,MAAM,IAAI;AACvB,UAAI,IAAI,WAAW;AACf,eAAO;AACX,UAAI,MAAM,WAAW;AACjB,eAAO;AACX,UAAI,IAAI,WAAW;AACf,eAAO,MAAM;AACjB,UAAI,MAAM,WAAW;AACjB,eAAO,MAAM;AACjB,UAAI,IAAI,UAAU,gBACb,OAAO,MAAM,UAAU,eAAe,KAAK,YAAY;AACxD,oBAAY,IAAI,KAAK,IAAI,MAAM;AAAA,MACnC;AAAA,IACJ;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,YAAY;AAAA,EACtD;AACJ;AACA,IAAM,UAAU,OAAO,OAAO;AAAA,EAC1B,QAAQ;AACZ,CAAC;AACD,IAAM,QAAQ,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM;AACnD,IAAM,KAAK,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM;AAChD,IAAM,YAAY,CAAC,MAAM,EAAE,WAAW;AACtC,IAAM,UAAU,CAAC,MAAM,EAAE,WAAW;AACpC,IAAM,UAAU,CAAC,MAAM,EAAE,WAAW;AACpC,IAAM,UAAU,CAAC,MAAM,OAAO,YAAY,eAAe,aAAa;AAiBtE,SAAS,uBAAuB,UAAU,OAAO,MAAM,GAAG;AACtD,MAAI,SAAS,OAAO,CAAC,EAAG,OAAM,IAAI,UAAU,+CAA+C;AAC3F,MAAI,OAAO,UAAU,aAAa,aAAa,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAG,OAAM,IAAI,UAAU,0EAA0E;AACjL,SAAO,SAAS,MAAM,IAAI,SAAS,MAAM,EAAE,KAAK,QAAQ,IAAI,IAAI,EAAE,QAAQ,MAAM,IAAI,QAAQ;AAChG;AAEA,SAAS,uBAAuB,UAAU,OAAO,OAAO,MAAM,GAAG;AAC7D,MAAI,SAAS,IAAK,OAAM,IAAI,UAAU,gCAAgC;AACtE,MAAI,SAAS,OAAO,CAAC,EAAG,OAAM,IAAI,UAAU,+CAA+C;AAC3F,MAAI,OAAO,UAAU,aAAa,aAAa,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAG,OAAM,IAAI,UAAU,yEAAyE;AAChL,SAAQ,SAAS,MAAM,EAAE,KAAK,UAAU,KAAK,IAAI,IAAI,EAAE,QAAQ,QAAQ,MAAM,IAAI,UAAU,KAAK,GAAI;AACxG;AAOA,IAAI;AAAA,CACH,SAAUC,YAAW;AAClB,EAAAA,WAAU,WAAW,CAAC,YAAY,OAAO,YAAY,WAAW,EAAE,QAAQ,IAAI,WAAW,CAAC;AAC1F,EAAAA,WAAU,WAAW,CAAC,YAAY,OAAO,YAAY,WAAW,UAAU,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ;AACxI,GAAG,cAAc,YAAY,CAAC,EAAE;AAEhC,IAAI;AAAJ,IAAoB;AACpB,IAAM,qBAAN,MAAyB;AAAA,EACrB,YAAY,QAAQ,OAAOC,OAAM,KAAK;AAClC,SAAK,cAAc,CAAC;AACpB,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,QAAQA;AACb,SAAK,OAAO;AAAA,EAChB;AAAA,EACA,IAAI,OAAO;AACP,QAAI,CAAC,KAAK,YAAY,QAAQ;AAC1B,UAAI,KAAK,gBAAgB,OAAO;AAC5B,aAAK,YAAY,KAAK,GAAG,KAAK,OAAO,GAAG,KAAK,IAAI;AAAA,MACrD,OACK;AACD,aAAK,YAAY,KAAK,GAAG,KAAK,OAAO,KAAK,IAAI;AAAA,MAClD;AAAA,IACJ;AACA,WAAO,KAAK;AAAA,EAChB;AACJ;AACA,IAAM,eAAe,CAAC,KAAK,WAAW;AAClC,MAAI,QAAQ,MAAM,GAAG;AACjB,WAAO,EAAE,SAAS,MAAM,MAAM,OAAO,MAAM;AAAA,EAC/C,OACK;AACD,QAAI,CAAC,IAAI,OAAO,OAAO,QAAQ;AAC3B,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC/D;AACA,WAAO;AAAA,MACH,SAAS;AAAA,MACT,IAAI,QAAQ;AACR,YAAI,KAAK;AACL,iBAAO,KAAK;AAChB,cAAM,QAAQ,IAAI,SAAS,IAAI,OAAO,MAAM;AAC5C,aAAK,SAAS;AACd,eAAO,KAAK;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AACJ;AACA,SAAS,oBAAoB,QAAQ;AACjC,MAAI,CAAC;AACD,WAAO,CAAC;AACZ,QAAM,EAAE,UAAAC,WAAU,oBAAoB,gBAAgB,YAAY,IAAI;AACtE,MAAIA,cAAa,sBAAsB,iBAAiB;AACpD,UAAM,IAAI,MAAM,0FAA0F;AAAA,EAC9G;AACA,MAAIA;AACA,WAAO,EAAE,UAAUA,WAAU,YAAY;AAC7C,QAAM,YAAY,CAAC,KAAK,QAAQ;AAC5B,QAAI,IAAI;AACR,UAAM,EAAE,QAAQ,IAAI;AACpB,QAAI,IAAI,SAAS,sBAAsB;AACnC,aAAO,EAAE,SAAS,YAAY,QAAQ,YAAY,SAAS,UAAU,IAAI,aAAa;AAAA,IAC1F;AACA,QAAI,OAAO,IAAI,SAAS,aAAa;AACjC,aAAO,EAAE,UAAU,KAAK,YAAY,QAAQ,YAAY,SAAS,UAAU,oBAAoB,QAAQ,OAAO,SAAS,KAAK,IAAI,aAAa;AAAA,IACjJ;AACA,QAAI,IAAI,SAAS;AACb,aAAO,EAAE,SAAS,IAAI,aAAa;AACvC,WAAO,EAAE,UAAU,KAAK,YAAY,QAAQ,YAAY,SAAS,UAAU,wBAAwB,QAAQ,OAAO,SAAS,KAAK,IAAI,aAAa;AAAA,EACrJ;AACA,SAAO,EAAE,UAAU,WAAW,YAAY;AAC9C;AACA,IAAM,UAAN,MAAc;AAAA,EACV,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,SAAS,OAAO;AACZ,WAAO,cAAc,MAAM,IAAI;AAAA,EACnC;AAAA,EACA,gBAAgB,OAAO,KAAK;AACxB,WAAQ,OAAO;AAAA,MACX,QAAQ,MAAM,OAAO;AAAA,MACrB,MAAM,MAAM;AAAA,MACZ,YAAY,cAAc,MAAM,IAAI;AAAA,MACpC,gBAAgB,KAAK,KAAK;AAAA,MAC1B,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,IAClB;AAAA,EACJ;AAAA,EACA,oBAAoB,OAAO;AACvB,WAAO;AAAA,MACH,QAAQ,IAAI,YAAY;AAAA,MACxB,KAAK;AAAA,QACD,QAAQ,MAAM,OAAO;AAAA,QACrB,MAAM,MAAM;AAAA,QACZ,YAAY,cAAc,MAAM,IAAI;AAAA,QACpC,gBAAgB,KAAK,KAAK;AAAA,QAC1B,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,WAAW,OAAO;AACd,UAAM,SAAS,KAAK,OAAO,KAAK;AAChC,QAAI,QAAQ,MAAM,GAAG;AACjB,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC5D;AACA,WAAO;AAAA,EACX;AAAA,EACA,YAAY,OAAO;AACf,UAAM,SAAS,KAAK,OAAO,KAAK;AAChC,WAAO,QAAQ,QAAQ,MAAM;AAAA,EACjC;AAAA,EACA,MAAM,MAAM,QAAQ;AAChB,UAAM,SAAS,KAAK,UAAU,MAAM,MAAM;AAC1C,QAAI,OAAO;AACP,aAAO,OAAO;AAClB,UAAM,OAAO;AAAA,EACjB;AAAA,EACA,UAAU,MAAM,QAAQ;AACpB,QAAI;AACJ,UAAM,MAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAC;AAAA,QACT,QAAQ,KAAK,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,WAAW,QAAQ,OAAO,SAAS,KAAK;AAAA,QAC5G,oBAAoB,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO;AAAA,MAC/E;AAAA,MACA,OAAO,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,SAAS,CAAC;AAAA,MACxE,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR;AAAA,MACA,YAAY,cAAc,IAAI;AAAA,IAClC;AACA,UAAM,SAAS,KAAK,WAAW,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AACpE,WAAO,aAAa,KAAK,MAAM;AAAA,EACnC;AAAA,EACA,YAAY,MAAM;AACd,QAAI,IAAI;AACR,UAAM,MAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAC;AAAA,QACT,OAAO,CAAC,CAAC,KAAK,WAAW,EAAE;AAAA,MAC/B;AAAA,MACA,MAAM,CAAC;AAAA,MACP,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR;AAAA,MACA,YAAY,cAAc,IAAI;AAAA,IAClC;AACA,QAAI,CAAC,KAAK,WAAW,EAAE,OAAO;AAC1B,UAAI;AACA,cAAM,SAAS,KAAK,WAAW,EAAE,MAAM,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC;AAC9D,eAAO,QAAQ,MAAM,IACf;AAAA,UACE,OAAO,OAAO;AAAA,QAClB,IACE;AAAA,UACE,QAAQ,IAAI,OAAO;AAAA,QACvB;AAAA,MACR,SACO,KAAK;AACR,aAAK,MAAM,KAAK,QAAQ,QAAQ,QAAQ,SAAS,SAAS,IAAI,aAAa,QAAQ,OAAO,SAAS,SAAS,GAAG,YAAY,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG,SAAS,aAAa,GAAG;AAC3L,eAAK,WAAW,EAAE,QAAQ;AAAA,QAC9B;AACA,YAAI,SAAS;AAAA,UACT,QAAQ,CAAC;AAAA,UACT,OAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,KAAK,YAAY,EAAE,MAAM,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,QAAQ,MAAM,IAClF;AAAA,MACE,OAAO,OAAO;AAAA,IAClB,IACE;AAAA,MACE,QAAQ,IAAI,OAAO;AAAA,IACvB,CAAC;AAAA,EACT;AAAA,EACA,MAAM,WAAW,MAAM,QAAQ;AAC3B,UAAM,SAAS,MAAM,KAAK,eAAe,MAAM,MAAM;AACrD,QAAI,OAAO;AACP,aAAO,OAAO;AAClB,UAAM,OAAO;AAAA,EACjB;AAAA,EACA,MAAM,eAAe,MAAM,QAAQ;AAC/B,UAAM,MAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAC;AAAA,QACT,oBAAoB,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO;AAAA,QAC3E,OAAO;AAAA,MACX;AAAA,MACA,OAAO,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,SAAS,CAAC;AAAA,MACxE,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR;AAAA,MACA,YAAY,cAAc,IAAI;AAAA,IAClC;AACA,UAAM,mBAAmB,KAAK,OAAO,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AAC1E,UAAM,SAAS,OAAO,QAAQ,gBAAgB,IACxC,mBACA,QAAQ,QAAQ,gBAAgB;AACtC,WAAO,aAAa,KAAK,MAAM;AAAA,EACnC;AAAA,EACA,OAAO,OAAO,SAAS;AACnB,UAAM,qBAAqB,CAAC,QAAQ;AAChC,UAAI,OAAO,YAAY,YAAY,OAAO,YAAY,aAAa;AAC/D,eAAO,EAAE,QAAQ;AAAA,MACrB,WACS,OAAO,YAAY,YAAY;AACpC,eAAO,QAAQ,GAAG;AAAA,MACtB,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO,KAAK,YAAY,CAAC,KAAK,QAAQ;AAClC,YAAM,SAAS,MAAM,GAAG;AACxB,YAAM,WAAW,MAAM,IAAI,SAAS;AAAA,QAChC,MAAM,aAAa;AAAA,QACnB,GAAG,mBAAmB,GAAG;AAAA,MAC7B,CAAC;AACD,UAAI,OAAO,YAAY,eAAe,kBAAkB,SAAS;AAC7D,eAAO,OAAO,KAAK,CAAC,SAAS;AACzB,cAAI,CAAC,MAAM;AACP,qBAAS;AACT,mBAAO;AAAA,UACX,OACK;AACD,mBAAO;AAAA,UACX;AAAA,QACJ,CAAC;AAAA,MACL;AACA,UAAI,CAAC,QAAQ;AACT,iBAAS;AACT,eAAO;AAAA,MACX,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,gBAAgB;AAC9B,WAAO,KAAK,YAAY,CAAC,KAAK,QAAQ;AAClC,UAAI,CAAC,MAAM,GAAG,GAAG;AACb,YAAI,SAAS,OAAO,mBAAmB,aACjC,eAAe,KAAK,GAAG,IACvB,cAAc;AACpB,eAAO;AAAA,MACX,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,YAAY,YAAY;AACpB,WAAO,IAAI,WAAW;AAAA,MAClB,QAAQ;AAAA,MACR,UAAU,sBAAsB;AAAA,MAChC,QAAQ,EAAE,MAAM,cAAc,WAAW;AAAA,IAC7C,CAAC;AAAA,EACL;AAAA,EACA,YAAY,YAAY;AACpB,WAAO,KAAK,YAAY,UAAU;AAAA,EACtC;AAAA,EACA,YAAY,KAAK;AAEb,SAAK,MAAM,KAAK;AAChB,SAAK,OAAO;AACZ,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,KAAK,KAAK,GAAG,KAAK,IAAI;AAC3B,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,WAAW,IAAI;AAAA,MAChB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU,CAAC,SAAS,KAAK,WAAW,EAAE,IAAI;AAAA,IAC9C;AAAA,EACJ;AAAA,EACA,WAAW;AACP,WAAO,YAAY,OAAO,MAAM,KAAK,IAAI;AAAA,EAC7C;AAAA,EACA,WAAW;AACP,WAAO,YAAY,OAAO,MAAM,KAAK,IAAI;AAAA,EAC7C;AAAA,EACA,UAAU;AACN,WAAO,KAAK,SAAS,EAAE,SAAS;AAAA,EACpC;AAAA,EACA,QAAQ;AACJ,WAAO,SAAS,OAAO,IAAI;AAAA,EAC/B;AAAA,EACA,UAAU;AACN,WAAO,WAAW,OAAO,MAAM,KAAK,IAAI;AAAA,EAC5C;AAAA,EACA,GAAG,QAAQ;AACP,WAAO,SAAS,OAAO,CAAC,MAAM,MAAM,GAAG,KAAK,IAAI;AAAA,EACpD;AAAA,EACA,IAAI,UAAU;AACV,WAAO,gBAAgB,OAAO,MAAM,UAAU,KAAK,IAAI;AAAA,EAC3D;AAAA,EACA,UAAU,WAAW;AACjB,WAAO,IAAI,WAAW;AAAA,MAClB,GAAG,oBAAoB,KAAK,IAAI;AAAA,MAChC,QAAQ;AAAA,MACR,UAAU,sBAAsB;AAAA,MAChC,QAAQ,EAAE,MAAM,aAAa,UAAU;AAAA,IAC3C,CAAC;AAAA,EACL;AAAA,EACA,QAAQ,KAAK;AACT,UAAM,mBAAmB,OAAO,QAAQ,aAAa,MAAM,MAAM;AACjE,WAAO,IAAI,WAAW;AAAA,MAClB,GAAG,oBAAoB,KAAK,IAAI;AAAA,MAChC,WAAW;AAAA,MACX,cAAc;AAAA,MACd,UAAU,sBAAsB;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,IAAI,WAAW;AAAA,MAClB,UAAU,sBAAsB;AAAA,MAChC,MAAM;AAAA,MACN,GAAG,oBAAoB,KAAK,IAAI;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EACA,MAAM,KAAK;AACP,UAAM,iBAAiB,OAAO,QAAQ,aAAa,MAAM,MAAM;AAC/D,WAAO,IAAI,SAAS;AAAA,MAChB,GAAG,oBAAoB,KAAK,IAAI;AAAA,MAChC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU,sBAAsB;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,aAAa;AAClB,UAAM,OAAO,KAAK;AAClB,WAAO,IAAI,KAAK;AAAA,MACZ,GAAG,KAAK;AAAA,MACR;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,KAAK,QAAQ;AACT,WAAO,YAAY,OAAO,MAAM,MAAM;AAAA,EAC1C;AAAA,EACA,WAAW;AACP,WAAO,YAAY,OAAO,IAAI;AAAA,EAClC;AAAA,EACA,aAAa;AACT,WAAO,KAAK,UAAU,MAAS,EAAE;AAAA,EACrC;AAAA,EACA,aAAa;AACT,WAAO,KAAK,UAAU,IAAI,EAAE;AAAA,EAChC;AACJ;AACA,IAAM,YAAY;AAClB,IAAM,aAAa;AACnB,IAAM,YAAY;AAGlB,IAAM,YAAY;AAClB,IAAM,cAAc;AACpB,IAAM,WAAW;AACjB,IAAM,gBAAgB;AAatB,IAAM,aAAa;AAInB,IAAM,cAAc;AACpB,IAAI;AAEJ,IAAM,YAAY;AAClB,IAAM,gBAAgB;AAGtB,IAAM,YAAY;AAClB,IAAM,gBAAgB;AAEtB,IAAMC,eAAc;AAEpB,IAAM,iBAAiB;AAMvB,IAAM,kBAAkB;AACxB,IAAM,YAAY,IAAI,OAAO,IAAI,eAAe,GAAG;AACnD,SAAS,gBAAgB,MAAM;AAE3B,MAAI,QAAQ;AACZ,MAAI,KAAK,WAAW;AAChB,YAAQ,GAAG,KAAK,UAAU,KAAK,SAAS;AAAA,EAC5C,WACS,KAAK,aAAa,MAAM;AAC7B,YAAQ,GAAG,KAAK;AAAA,EACpB;AACA,SAAO;AACX;AACA,SAAS,UAAU,MAAM;AACrB,SAAO,IAAI,OAAO,IAAI,gBAAgB,IAAI,CAAC,GAAG;AAClD;AAEA,SAAS,cAAc,MAAM;AACzB,MAAI,QAAQ,GAAG,eAAe,IAAI,gBAAgB,IAAI,CAAC;AACvD,QAAM,OAAO,CAAC;AACd,OAAK,KAAK,KAAK,QAAQ,OAAO,GAAG;AACjC,MAAI,KAAK;AACL,SAAK,KAAK,sBAAsB;AACpC,UAAQ,GAAG,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC;AAClC,SAAO,IAAI,OAAO,IAAI,KAAK,GAAG;AAClC;AACA,SAAS,UAAU,IAAI,SAAS;AAC5B,OAAK,YAAY,QAAQ,CAAC,YAAY,UAAU,KAAK,EAAE,GAAG;AACtD,WAAO;AAAA,EACX;AACA,OAAK,YAAY,QAAQ,CAAC,YAAY,UAAU,KAAK,EAAE,GAAG;AACtD,WAAO;AAAA,EACX;AACA,SAAO;AACX;AACA,SAAS,WAAW,KAAK,KAAK;AAC1B,MAAI,CAAC,SAAS,KAAK,GAAG;AAClB,WAAO;AACX,MAAI;AACA,UAAM,CAAC,MAAM,IAAI,IAAI,MAAM,GAAG;AAE9B,UAAM,SAAS,OACV,QAAQ,MAAM,GAAG,EACjB,QAAQ,MAAM,GAAG,EACjB,OAAO,OAAO,UAAW,IAAK,OAAO,SAAS,KAAM,GAAI,GAAG;AAChE,UAAM,UAAU,KAAK,MAAM,KAAK,MAAM,CAAC;AACvC,QAAI,OAAO,YAAY,YAAY,YAAY;AAC3C,aAAO;AACX,QAAI,CAAC,QAAQ,OAAO,CAAC,QAAQ;AACzB,aAAO;AACX,QAAI,OAAO,QAAQ,QAAQ;AACvB,aAAO;AACX,WAAO;AAAA,EACX,SACO,IAAI;AACP,WAAO;AAAA,EACX;AACJ;AACA,SAAS,YAAY,IAAI,SAAS;AAC9B,OAAK,YAAY,QAAQ,CAAC,YAAY,cAAc,KAAK,EAAE,GAAG;AAC1D,WAAO;AAAA,EACX;AACA,OAAK,YAAY,QAAQ,CAAC,YAAY,cAAc,KAAK,EAAE,GAAG;AAC1D,WAAO;AAAA,EACX;AACA,SAAO;AACX;AACA,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EAC5B,OAAO,OAAO;AACV,QAAI,KAAK,KAAK,QAAQ;AAClB,YAAM,OAAO,OAAO,MAAM,IAAI;AAAA,IAClC;AACA,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,QAAQ;AACrC,YAAMC,OAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,SAAS,IAAI,YAAY;AAC/B,QAAI,MAAM;AACV,eAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,UAAI,MAAM,SAAS,OAAO;AACtB,YAAI,MAAM,KAAK,SAAS,MAAM,OAAO;AACjC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,YACN,WAAW;AAAA,YACX,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,YAAI,MAAM,KAAK,SAAS,MAAM,OAAO;AACjC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,YACN,WAAW;AAAA,YACX,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,UAAU;AAC9B,cAAM,SAAS,MAAM,KAAK,SAAS,MAAM;AACzC,cAAM,WAAW,MAAM,KAAK,SAAS,MAAM;AAC3C,YAAI,UAAU,UAAU;AACpB,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,cAAI,QAAQ;AACR,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,MAAM;AAAA,cACf,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,MAAM;AAAA,YACnB,CAAC;AAAA,UACL,WACS,UAAU;AACf,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,MAAM;AAAA,cACf,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,MAAM;AAAA,YACnB,CAAC;AAAA,UACL;AACA,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,SAAS;AAC7B,YAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,SAAS;AAC7B,YAAI,CAAC,YAAY;AACb,uBAAa,IAAI,OAAO,aAAa,GAAG;AAAA,QAC5C;AACA,YAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,YAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,UAAU;AAC9B,YAAI,CAAC,YAAY,KAAK,MAAM,IAAI,GAAG;AAC/B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,YAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,SAAS;AAC7B,YAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,YAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,YAAI;AACA,cAAI,IAAI,MAAM,IAAI;AAAA,QACtB,SACO,IAAI;AACP,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,SAAS;AAC7B,cAAM,MAAM,YAAY;AACxB,cAAM,aAAa,MAAM,MAAM,KAAK,MAAM,IAAI;AAC9C,YAAI,CAAC,YAAY;AACb,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,cAAM,OAAO,MAAM,KAAK,KAAK;AAAA,MACjC,WACS,MAAM,SAAS,YAAY;AAChC,YAAI,CAAC,MAAM,KAAK,SAAS,MAAM,OAAO,MAAM,QAAQ,GAAG;AACnD,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY,EAAE,UAAU,MAAM,OAAO,UAAU,MAAM,SAAS;AAAA,YAC9D,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,eAAe;AACnC,cAAM,OAAO,MAAM,KAAK,YAAY;AAAA,MACxC,WACS,MAAM,SAAS,eAAe;AACnC,cAAM,OAAO,MAAM,KAAK,YAAY;AAAA,MACxC,WACS,MAAM,SAAS,cAAc;AAClC,YAAI,CAAC,MAAM,KAAK,WAAW,MAAM,KAAK,GAAG;AACrC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY,EAAE,YAAY,MAAM,MAAM;AAAA,YACtC,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,YAAY;AAChC,YAAI,CAAC,MAAM,KAAK,SAAS,MAAM,KAAK,GAAG;AACnC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY,EAAE,UAAU,MAAM,MAAM;AAAA,YACpC,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,YAAY;AAChC,cAAM,QAAQ,cAAc,KAAK;AACjC,YAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY;AAAA,YACZ,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,cAAM,QAAQ;AACd,YAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY;AAAA,YACZ,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,cAAM,QAAQ,UAAU,KAAK;AAC7B,YAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY;AAAA,YACZ,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,YAAY;AAChC,YAAI,CAAC,cAAc,KAAK,MAAM,IAAI,GAAG;AACjC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,MAAM;AAC1B,YAAI,CAAC,UAAU,MAAM,MAAM,MAAM,OAAO,GAAG;AACvC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,YAAI,CAAC,WAAW,MAAM,MAAM,MAAM,GAAG,GAAG;AACpC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,YAAI,CAAC,YAAY,MAAM,MAAM,MAAM,OAAO,GAAG;AACzC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,UAAU;AAC9B,YAAI,CAACD,aAAY,KAAK,MAAM,IAAI,GAAG;AAC/B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,aAAa;AACjC,YAAI,CAAC,eAAe,KAAK,MAAM,IAAI,GAAG;AAClC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,OACK;AACD,aAAK,YAAY,KAAK;AAAA,MAC1B;AAAA,IACJ;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,EACrD;AAAA,EACA,OAAO,OAAO,YAAY,SAAS;AAC/B,WAAO,KAAK,WAAW,CAAC,SAAS,MAAM,KAAK,IAAI,GAAG;AAAA,MAC/C;AAAA,MACA,MAAM,aAAa;AAAA,MACnB,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,MAAM,SAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC3E;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EACzE;AAAA,EACA,MAAM,SAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC3E;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,OAAO,SAAS;AACZ,WAAO,KAAK,UAAU,EAAE,MAAM,UAAU,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC5E;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,MAAM,SAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC3E;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,OAAO,SAAS;AACZ,WAAO,KAAK,UAAU,EAAE,MAAM,UAAU,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC5E;AAAA,EACA,UAAU,SAAS;AAEf,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,IAAIE,UAAS;AACT,WAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG,UAAU,SAASA,QAAO,EAAE,CAAC;AAAA,EACzE;AAAA,EACA,GAAGA,UAAS;AACR,WAAO,KAAK,UAAU,EAAE,MAAM,MAAM,GAAG,UAAU,SAASA,QAAO,EAAE,CAAC;AAAA,EACxE;AAAA,EACA,KAAKA,UAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAASA,QAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,SAASA,UAAS;AACd,QAAI,IAAI;AACR,QAAI,OAAOA,aAAY,UAAU;AAC7B,aAAO,KAAK,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAASA;AAAA,MACb,CAAC;AAAA,IACL;AACA,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW,QAAQA,aAAY,QAAQA,aAAY,SAAS,SAASA,SAAQ,eAAe,cAAc,OAAOA,aAAY,QAAQA,aAAY,SAAS,SAASA,SAAQ;AAAA,MAC3K,SAAS,KAAKA,aAAY,QAAQA,aAAY,SAAS,SAASA,SAAQ,YAAY,QAAQ,OAAO,SAAS,KAAK;AAAA,MACjH,QAAQ,KAAKA,aAAY,QAAQA,aAAY,SAAS,SAASA,SAAQ,WAAW,QAAQ,OAAO,SAAS,KAAK;AAAA,MAC/G,GAAG,UAAU,SAASA,aAAY,QAAQA,aAAY,SAAS,SAASA,SAAQ,OAAO;AAAA,IAC3F,CAAC;AAAA,EACL;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,QAAQ,CAAC;AAAA,EACnD;AAAA,EACA,KAAKA,UAAS;AACV,QAAI,OAAOA,aAAY,UAAU;AAC7B,aAAO,KAAK,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,SAASA;AAAA,MACb,CAAC;AAAA,IACL;AACA,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW,QAAQA,aAAY,QAAQA,aAAY,SAAS,SAASA,SAAQ,eAAe,cAAc,OAAOA,aAAY,QAAQA,aAAY,SAAS,SAASA,SAAQ;AAAA,MAC3K,GAAG,UAAU,SAASA,aAAY,QAAQA,aAAY,SAAS,SAASA,SAAQ,OAAO;AAAA,IAC3F,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU,EAAE,MAAM,YAAY,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC9E;AAAA,EACA,MAAM,OAAO,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,OAAOA,UAAS;AACrB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,UAAUA,aAAY,QAAQA,aAAY,SAAS,SAASA,SAAQ;AAAA,MACpE,GAAG,UAAU,SAASA,aAAY,QAAQA,aAAY,SAAS,SAASA,SAAQ,OAAO;AAAA,IAC3F,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,SAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,OAAO,SAAS;AACrB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,OAAO,KAAK,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS,SAAS;AACd,WAAO,KAAK,IAAI,GAAG,UAAU,SAAS,OAAO,CAAC;AAAA,EAClD;AAAA,EACA,OAAO;AACH,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAAA,IAClD,CAAC;AAAA,EACL;AAAA,EACA,cAAc;AACV,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,IACzD,CAAC;AAAA,EACL;AAAA,EACA,cAAc;AACV,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,IACzD,CAAC;AAAA,EACL;AAAA,EACA,IAAI,aAAa;AACb,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,UAAU;AAAA,EACjE;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,aAAa;AACb,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,UAAU;AAAA,EACjE;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK;AAAA,EAC5D;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,WAAW;AACX,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAAA,EAC/D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,OAAO;AACP,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,IAAI;AAAA,EAC3D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,WAAW;AACX,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAAA,EAC/D;AAAA,EACA,IAAI,cAAc;AAEd,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,WAAW;AAAA,EAClE;AAAA,EACA,IAAI,YAAY;AACZ,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,YAAY;AACZ,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AACA,UAAU,SAAS,CAAC,WAAW;AAC3B,MAAI;AACJ,SAAO,IAAI,UAAU;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,SAAS,KAAK,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,YAAY,QAAQ,OAAO,SAAS,KAAK;AAAA,IAC9G,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AAEA,SAAS,mBAAmB,KAAK,MAAM;AACnC,QAAM,eAAe,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI;AACzD,QAAM,gBAAgB,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI;AAC3D,QAAM,WAAW,cAAc,eAAe,cAAc;AAC5D,QAAM,SAAS,SAAS,IAAI,QAAQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC;AAC9D,QAAM,UAAU,SAAS,KAAK,QAAQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC;AAChE,SAAQ,SAAS,UAAW,KAAK,IAAI,IAAI,QAAQ;AACrD;AACA,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EAC5B,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,MAAM,KAAK;AAChB,SAAK,MAAM,KAAK;AAChB,SAAK,OAAO,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,QAAI,KAAK,KAAK,QAAQ;AAClB,YAAM,OAAO,OAAO,MAAM,IAAI;AAAA,IAClC;AACA,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,QAAQ;AACrC,YAAMD,OAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,MAAM;AACV,UAAM,SAAS,IAAI,YAAY;AAC/B,eAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,UAAI,MAAM,SAAS,OAAO;AACtB,YAAI,CAAC,KAAK,UAAU,MAAM,IAAI,GAAG;AAC7B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU;AAAA,YACV,UAAU;AAAA,YACV,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,cAAM,WAAW,MAAM,YACjB,MAAM,OAAO,MAAM,QACnB,MAAM,QAAQ,MAAM;AAC1B,YAAI,UAAU;AACV,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,YACN,WAAW,MAAM;AAAA,YACjB,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,cAAM,SAAS,MAAM,YACf,MAAM,OAAO,MAAM,QACnB,MAAM,QAAQ,MAAM;AAC1B,YAAI,QAAQ;AACR,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,YACN,WAAW,MAAM;AAAA,YACjB,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,cAAc;AAClC,YAAI,mBAAmB,MAAM,MAAM,MAAM,KAAK,MAAM,GAAG;AACnD,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY,MAAM;AAAA,YAClB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,UAAU;AAC9B,YAAI,CAAC,OAAO,SAAS,MAAM,IAAI,GAAG;AAC9B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,OACK;AACD,aAAK,YAAY,KAAK;AAAA,MAC1B;AAAA,IACJ;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,EACrD;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,SAAS,MAAM,OAAO,WAAW,SAAS;AACtC,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ;AAAA,QACJ,GAAG,KAAK,KAAK;AAAA,QACb;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,SAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,OAAO,SAAS;AACZ,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,OAAO;AAAA,MACd,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC,EAAE,UAAU;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,OAAO;AAAA,MACd,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,SAC9C,GAAG,SAAS,gBAAgB,KAAK,UAAU,GAAG,KAAK,CAAE;AAAA,EAC9D;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM,MAAM,MAAM;AACtB,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,YACZ,GAAG,SAAS,SACZ,GAAG,SAAS,cAAc;AAC1B,eAAO;AAAA,MACX,WACS,GAAG,SAAS,OAAO;AACxB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB,WACS,GAAG,SAAS,OAAO;AACxB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO,OAAO,SAAS,GAAG,KAAK,OAAO,SAAS,GAAG;AAAA,EACtD;AACJ;AACA,UAAU,SAAS,CAAC,WAAW;AAC3B,SAAO,IAAI,UAAU;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,SAAS,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,WAAW;AAAA,IAC3E,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EAC5B,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,MAAM,KAAK;AAChB,SAAK,MAAM,KAAK;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AACV,QAAI,KAAK,KAAK,QAAQ;AAClB,UAAI;AACA,cAAM,OAAO,OAAO,MAAM,IAAI;AAAA,MAClC,SACO,IAAI;AACP,eAAO,KAAK,iBAAiB,KAAK;AAAA,MACtC;AAAA,IACJ;AACA,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,QAAQ;AACrC,aAAO,KAAK,iBAAiB,KAAK;AAAA,IACtC;AACA,QAAI,MAAM;AACV,UAAM,SAAS,IAAI,YAAY;AAC/B,eAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,UAAI,MAAM,SAAS,OAAO;AACtB,cAAM,WAAW,MAAM,YACjB,MAAM,OAAO,MAAM,QACnB,MAAM,QAAQ,MAAM;AAC1B,YAAI,UAAU;AACV,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,MAAM;AAAA,YACN,SAAS,MAAM;AAAA,YACf,WAAW,MAAM;AAAA,YACjB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,cAAM,SAAS,MAAM,YACf,MAAM,OAAO,MAAM,QACnB,MAAM,QAAQ,MAAM;AAC1B,YAAI,QAAQ;AACR,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,MAAM;AAAA,YACN,SAAS,MAAM;AAAA,YACf,WAAW,MAAM;AAAA,YACjB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,cAAc;AAClC,YAAI,MAAM,OAAO,MAAM,UAAU,OAAO,CAAC,GAAG;AACxC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY,MAAM;AAAA,YAClB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,OACK;AACD,aAAK,YAAY,KAAK;AAAA,MAC1B;AAAA,IACJ;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,EACrD;AAAA,EACA,iBAAiB,OAAO;AACpB,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,sBAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,UAAU,cAAc;AAAA,MACxB,UAAU,IAAI;AAAA,IAClB,CAAC;AACD,WAAO;AAAA,EACX;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,SAAS,MAAM,OAAO,WAAW,SAAS;AACtC,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ;AAAA,QACJ,GAAG,KAAK,KAAK;AAAA,QACb;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,SAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AACA,UAAU,SAAS,CAAC,WAAW;AAC3B,MAAI;AACJ,SAAO,IAAI,UAAU;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,SAAS,KAAK,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,YAAY,QAAQ,OAAO,SAAS,KAAK;AAAA,IAC9G,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,OAAO,OAAO;AACV,QAAI,KAAK,KAAK,QAAQ;AAClB,YAAM,OAAO,QAAQ,MAAM,IAAI;AAAA,IACnC;AACA,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,SAAS;AACtC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,WAAW,SAAS,CAAC,WAAW;AAC5B,SAAO,IAAI,WAAW;AAAA,IAClB,UAAU,sBAAsB;AAAA,IAChC,SAAS,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,WAAW;AAAA,IAC3E,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,UAAN,MAAM,iBAAgB,QAAQ;AAAA,EAC1B,OAAO,OAAO;AACV,QAAI,KAAK,KAAK,QAAQ;AAClB,YAAM,OAAO,IAAI,KAAK,MAAM,IAAI;AAAA,IACpC;AACA,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,MAAM;AACnC,YAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,MAAM,MAAM,KAAK,QAAQ,CAAC,GAAG;AAC7B,YAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,MACvB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,SAAS,IAAI,YAAY;AAC/B,QAAI,MAAM;AACV,eAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,UAAI,MAAM,SAAS,OAAO;AACtB,YAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,OAAO;AACpC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,WAAW;AAAA,YACX,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,UACV,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,YAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,OAAO;AACpC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,WAAW;AAAA,YACX,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,UACV,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,OACK;AACD,aAAK,YAAY,KAAK;AAAA,MAC1B;AAAA,IACJ;AACA,WAAO;AAAA,MACH,QAAQ,OAAO;AAAA,MACf,OAAO,IAAI,KAAK,MAAM,KAAK,QAAQ,CAAC;AAAA,IACxC;AAAA,EACJ;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,SAAQ;AAAA,MACf,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,QAAQ,QAAQ;AAAA,MACvB,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,QAAQ,QAAQ;AAAA,MACvB,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,UAAU;AACV,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO,OAAO,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,EACzC;AAAA,EACA,IAAI,UAAU;AACV,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO,OAAO,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,EACzC;AACJ;AACA,QAAQ,SAAS,CAAC,WAAW;AACzB,SAAO,IAAI,QAAQ;AAAA,IACf,QAAQ,CAAC;AAAA,IACT,SAAS,WAAW,QAAQ,WAAW,SAAS,SAAS,OAAO,WAAW;AAAA,IAC3E,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,YAAN,cAAwB,QAAQ;AAAA,EAC5B,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,QAAQ;AACrC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,UAAU,SAAS,CAAC,WAAW;AAC3B,SAAO,IAAI,UAAU;AAAA,IACjB,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,eAAN,cAA2B,QAAQ;AAAA,EAC/B,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,WAAW;AACxC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,aAAa,SAAS,CAAC,WAAW;AAC9B,SAAO,IAAI,aAAa;AAAA,IACpB,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,UAAN,cAAsB,QAAQ;AAAA,EAC1B,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,MAAM;AACnC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,QAAQ,SAAS,CAAC,WAAW;AACzB,SAAO,IAAI,QAAQ;AAAA,IACf,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,SAAN,cAAqB,QAAQ;AAAA,EACzB,cAAc;AACV,UAAM,GAAG,SAAS;AAElB,SAAK,OAAO;AAAA,EAChB;AAAA,EACA,OAAO,OAAO;AACV,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,OAAO,SAAS,CAAC,WAAW;AACxB,SAAO,IAAI,OAAO;AAAA,IACd,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,cAAc;AACV,UAAM,GAAG,SAAS;AAElB,SAAK,WAAW;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AACV,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,WAAW,SAAS,CAAC,WAAW;AAC5B,SAAO,IAAI,WAAW;AAAA,IAClB,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,WAAN,cAAuB,QAAQ;AAAA,EAC3B,OAAO,OAAO;AACV,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,sBAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,UAAU,cAAc;AAAA,MACxB,UAAU,IAAI;AAAA,IAClB,CAAC;AACD,WAAO;AAAA,EACX;AACJ;AACA,SAAS,SAAS,CAAC,WAAW;AAC1B,SAAO,IAAI,SAAS;AAAA,IAChB,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,UAAN,cAAsB,QAAQ;AAAA,EAC1B,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,WAAW;AACxC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,QAAQ,SAAS,CAAC,WAAW;AACzB,SAAO,IAAI,QAAQ;AAAA,IACf,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,WAAN,MAAM,kBAAiB,QAAQ;AAAA,EAC3B,OAAO,OAAO;AACV,UAAM,EAAE,KAAK,OAAO,IAAI,KAAK,oBAAoB,KAAK;AACtD,UAAM,MAAM,KAAK;AACjB,QAAI,IAAI,eAAe,cAAc,OAAO;AACxC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,IAAI,gBAAgB,MAAM;AAC1B,YAAM,SAAS,IAAI,KAAK,SAAS,IAAI,YAAY;AACjD,YAAM,WAAW,IAAI,KAAK,SAAS,IAAI,YAAY;AACnD,UAAI,UAAU,UAAU;AACpB,0BAAkB,KAAK;AAAA,UACnB,MAAM,SAAS,aAAa,UAAU,aAAa;AAAA,UACnD,SAAU,WAAW,IAAI,YAAY,QAAQ;AAAA,UAC7C,SAAU,SAAS,IAAI,YAAY,QAAQ;AAAA,UAC3C,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,IAAI,YAAY;AAAA,QAC7B,CAAC;AACD,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AACA,QAAI,IAAI,cAAc,MAAM;AACxB,UAAI,IAAI,KAAK,SAAS,IAAI,UAAU,OAAO;AACvC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,IAAI,UAAU;AAAA,UACvB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,IAAI,UAAU;AAAA,QAC3B,CAAC;AACD,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AACA,QAAI,IAAI,cAAc,MAAM;AACxB,UAAI,IAAI,KAAK,SAAS,IAAI,UAAU,OAAO;AACvC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,IAAI,UAAU;AAAA,UACvB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,IAAI,UAAU;AAAA,QAC3B,CAAC;AACD,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,MAAM;AAC9C,eAAO,IAAI,KAAK,YAAY,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC;AAAA,MAC9E,CAAC,CAAC,EAAE,KAAK,CAACE,YAAW;AACjB,eAAO,YAAY,WAAW,QAAQA,OAAM;AAAA,MAChD,CAAC;AAAA,IACL;AACA,UAAM,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,MAAM;AAC1C,aAAO,IAAI,KAAK,WAAW,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC;AAAA,IAC7E,CAAC;AACD,WAAO,YAAY,WAAW,QAAQ,MAAM;AAAA,EAChD;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,WAAW,EAAE,OAAO,WAAW,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACxE,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,WAAW,EAAE,OAAO,WAAW,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACxE,CAAC;AAAA,EACL;AAAA,EACA,OAAO,KAAK,SAAS;AACjB,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,aAAa,EAAE,OAAO,KAAK,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACpE,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,IAAI,GAAG,OAAO;AAAA,EAC9B;AACJ;AACA,SAAS,SAAS,CAAC,QAAQ,WAAW;AAClC,SAAO,IAAI,SAAS;AAAA,IAChB,MAAM;AAAA,IACN,WAAW;AAAA,IACX,WAAW;AAAA,IACX,aAAa;AAAA,IACb,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,SAAS,eAAe,QAAQ;AAC5B,MAAI,kBAAkB,WAAW;AAC7B,UAAM,WAAW,CAAC;AAClB,eAAW,OAAO,OAAO,OAAO;AAC5B,YAAM,cAAc,OAAO,MAAM,GAAG;AACpC,eAAS,GAAG,IAAI,YAAY,OAAO,eAAe,WAAW,CAAC;AAAA,IAClE;AACA,WAAO,IAAI,UAAU;AAAA,MACjB,GAAG,OAAO;AAAA,MACV,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL,WACS,kBAAkB,UAAU;AACjC,WAAO,IAAI,SAAS;AAAA,MAChB,GAAG,OAAO;AAAA,MACV,MAAM,eAAe,OAAO,OAAO;AAAA,IACvC,CAAC;AAAA,EACL,WACS,kBAAkB,aAAa;AACpC,WAAO,YAAY,OAAO,eAAe,OAAO,OAAO,CAAC,CAAC;AAAA,EAC7D,WACS,kBAAkB,aAAa;AACpC,WAAO,YAAY,OAAO,eAAe,OAAO,OAAO,CAAC,CAAC;AAAA,EAC7D,WACS,kBAAkB,UAAU;AACjC,WAAO,SAAS,OAAO,OAAO,MAAM,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,CAAC;AAAA,EAC3E,OACK;AACD,WAAO;AAAA,EACX;AACJ;AACA,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EAC5B,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,UAAU;AAKf,SAAK,YAAY,KAAK;AAqCtB,SAAK,UAAU,KAAK;AAAA,EACxB;AAAA,EACA,aAAa;AACT,QAAI,KAAK,YAAY;AACjB,aAAO,KAAK;AAChB,UAAM,QAAQ,KAAK,KAAK,MAAM;AAC9B,UAAM,OAAO,KAAK,WAAW,KAAK;AAClC,WAAQ,KAAK,UAAU,EAAE,OAAO,KAAK;AAAA,EACzC;AAAA,EACA,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,QAAQ;AACrC,YAAMF,OAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,UAAM,EAAE,OAAO,MAAM,UAAU,IAAI,KAAK,WAAW;AACnD,UAAM,YAAY,CAAC;AACnB,QAAI,EAAE,KAAK,KAAK,oBAAoB,YAChC,KAAK,KAAK,gBAAgB,UAAU;AACpC,iBAAW,OAAO,IAAI,MAAM;AACxB,YAAI,CAAC,UAAU,SAAS,GAAG,GAAG;AAC1B,oBAAU,KAAK,GAAG;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,QAAQ,CAAC;AACf,eAAW,OAAO,WAAW;AACzB,YAAM,eAAe,MAAM,GAAG;AAC9B,YAAM,QAAQ,IAAI,KAAK,GAAG;AAC1B,YAAM,KAAK;AAAA,QACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,QACnC,OAAO,aAAa,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,GAAG,CAAC;AAAA,QAC5E,WAAW,OAAO,IAAI;AAAA,MAC1B,CAAC;AAAA,IACL;AACA,QAAI,KAAK,KAAK,oBAAoB,UAAU;AACxC,YAAM,cAAc,KAAK,KAAK;AAC9B,UAAI,gBAAgB,eAAe;AAC/B,mBAAW,OAAO,WAAW;AACzB,gBAAM,KAAK;AAAA,YACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,YACnC,OAAO,EAAE,QAAQ,SAAS,OAAO,IAAI,KAAK,GAAG,EAAE;AAAA,UACnD,CAAC;AAAA,QACL;AAAA,MACJ,WACS,gBAAgB,UAAU;AAC/B,YAAI,UAAU,SAAS,GAAG;AACtB,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,MAAM;AAAA,UACV,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,gBAAgB,QAAS;AAAA,WAC7B;AACD,cAAM,IAAI,MAAM,sDAAsD;AAAA,MAC1E;AAAA,IACJ,OACK;AAED,YAAM,WAAW,KAAK,KAAK;AAC3B,iBAAW,OAAO,WAAW;AACzB,cAAM,QAAQ,IAAI,KAAK,GAAG;AAC1B,cAAM,KAAK;AAAA,UACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,UACnC,OAAO,SAAS;AAAA,YAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,GAAG;AAAA;AAAA,UACvE;AAAA,UACA,WAAW,OAAO,IAAI;AAAA,QAC1B,CAAC;AAAA,MACL;AAAA,IACJ;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,QAAQ,EAClB,KAAK,YAAY;AAClB,cAAM,YAAY,CAAC;AACnB,mBAAW,QAAQ,OAAO;AACtB,gBAAM,MAAM,MAAM,KAAK;AACvB,gBAAM,QAAQ,MAAM,KAAK;AACzB,oBAAU,KAAK;AAAA,YACX;AAAA,YACA;AAAA,YACA,WAAW,KAAK;AAAA,UACpB,CAAC;AAAA,QACL;AACA,eAAO;AAAA,MACX,CAAC,EACI,KAAK,CAAC,cAAc;AACrB,eAAO,YAAY,gBAAgB,QAAQ,SAAS;AAAA,MACxD,CAAC;AAAA,IACL,OACK;AACD,aAAO,YAAY,gBAAgB,QAAQ,KAAK;AAAA,IACpD;AAAA,EACJ;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK,MAAM;AAAA,EAC3B;AAAA,EACA,OAAO,SAAS;AACZ,cAAU;AACV,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,MACb,GAAI,YAAY,SACV;AAAA,QACE,UAAU,CAAC,OAAO,QAAQ;AACtB,cAAI,IAAI,IAAI,IAAI;AAChB,gBAAM,gBAAgB,MAAM,MAAM,KAAK,KAAK,MAAM,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,IAAI,OAAO,GAAG,EAAE,aAAa,QAAQ,OAAO,SAAS,KAAK,IAAI;AACvK,cAAI,MAAM,SAAS;AACf,mBAAO;AAAA,cACH,UAAU,KAAK,UAAU,SAAS,OAAO,EAAE,aAAa,QAAQ,OAAO,SAAS,KAAK;AAAA,YACzF;AACJ,iBAAO;AAAA,YACH,SAAS;AAAA,UACb;AAAA,QACJ;AAAA,MACJ,IACE,CAAC;AAAA,IACX,CAAC;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,cAAc;AACV,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,cAAc;AACjB,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,OAAO;AAAA,QACV,GAAG,KAAK,KAAK,MAAM;AAAA,QACnB,GAAG;AAAA,MACP;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS;AACX,UAAM,SAAS,IAAI,WAAU;AAAA,MACzB,aAAa,QAAQ,KAAK;AAAA,MAC1B,UAAU,QAAQ,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,QACV,GAAG,KAAK,KAAK,MAAM;AAAA,QACnB,GAAG,QAAQ,KAAK,MAAM;AAAA,MAC1B;AAAA,MACA,UAAU,sBAAsB;AAAA,IACpC,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoCA,OAAO,KAAK,QAAQ;AAChB,WAAO,KAAK,QAAQ,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,SAASG,QAAO;AACZ,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,UAAUA;AAAA,IACd,CAAC;AAAA,EACL;AAAA,EACA,KAAK,MAAM;AACP,UAAM,QAAQ,CAAC;AACf,SAAK,WAAW,IAAI,EAAE,QAAQ,CAAC,QAAQ;AACnC,UAAI,KAAK,GAAG,KAAK,KAAK,MAAM,GAAG,GAAG;AAC9B,cAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,MAC/B;AAAA,IACJ,CAAC;AACD,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,KAAK,MAAM;AACP,UAAM,QAAQ,CAAC;AACf,SAAK,WAAW,KAAK,KAAK,EAAE,QAAQ,CAAC,QAAQ;AACzC,UAAI,CAAC,KAAK,GAAG,GAAG;AACZ,cAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,MAC/B;AAAA,IACJ,CAAC;AACD,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,cAAc;AACV,WAAO,eAAe,IAAI;AAAA,EAC9B;AAAA,EACA,QAAQ,MAAM;AACV,UAAM,WAAW,CAAC;AAClB,SAAK,WAAW,KAAK,KAAK,EAAE,QAAQ,CAAC,QAAQ;AACzC,YAAM,cAAc,KAAK,MAAM,GAAG;AAClC,UAAI,QAAQ,CAAC,KAAK,GAAG,GAAG;AACpB,iBAAS,GAAG,IAAI;AAAA,MACpB,OACK;AACD,iBAAS,GAAG,IAAI,YAAY,SAAS;AAAA,MACzC;AAAA,IACJ,CAAC;AACD,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,SAAS,MAAM;AACX,UAAM,WAAW,CAAC;AAClB,SAAK,WAAW,KAAK,KAAK,EAAE,QAAQ,CAAC,QAAQ;AACzC,UAAI,QAAQ,CAAC,KAAK,GAAG,GAAG;AACpB,iBAAS,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,MAClC,OACK;AACD,cAAM,cAAc,KAAK,MAAM,GAAG;AAClC,YAAI,WAAW;AACf,eAAO,oBAAoB,aAAa;AACpC,qBAAW,SAAS,KAAK;AAAA,QAC7B;AACA,iBAAS,GAAG,IAAI;AAAA,MACpB;AAAA,IACJ,CAAC;AACD,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,cAAc,KAAK,WAAW,KAAK,KAAK,CAAC;AAAA,EACpD;AACJ;AACA,UAAU,SAAS,CAAC,OAAO,WAAW;AAClC,SAAO,IAAI,UAAU;AAAA,IACjB,OAAO,MAAM;AAAA,IACb,aAAa;AAAA,IACb,UAAU,SAAS,OAAO;AAAA,IAC1B,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,UAAU,eAAe,CAAC,OAAO,WAAW;AACxC,SAAO,IAAI,UAAU;AAAA,IACjB,OAAO,MAAM;AAAA,IACb,aAAa;AAAA,IACb,UAAU,SAAS,OAAO;AAAA,IAC1B,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,UAAU,aAAa,CAAC,OAAO,WAAW;AACtC,SAAO,IAAI,UAAU;AAAA,IACjB;AAAA,IACA,aAAa;AAAA,IACb,UAAU,SAAS,OAAO;AAAA,IAC1B,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,WAAN,cAAuB,QAAQ;AAAA,EAC3B,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,UAAMF,WAAU,KAAK,KAAK;AAC1B,aAAS,cAAc,SAAS;AAE5B,iBAAW,UAAU,SAAS;AAC1B,YAAI,OAAO,OAAO,WAAW,SAAS;AAClC,iBAAO,OAAO;AAAA,QAClB;AAAA,MACJ;AACA,iBAAW,UAAU,SAAS;AAC1B,YAAI,OAAO,OAAO,WAAW,SAAS;AAElC,cAAI,OAAO,OAAO,KAAK,GAAG,OAAO,IAAI,OAAO,MAAM;AAClD,iBAAO,OAAO;AAAA,QAClB;AAAA,MACJ;AAEA,YAAM,cAAc,QAAQ,IAAI,CAAC,WAAW,IAAI,SAAS,OAAO,IAAI,OAAO,MAAM,CAAC;AAClF,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB;AAAA,MACJ,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,IAAIA,SAAQ,IAAI,OAAO,WAAW;AAC7C,cAAM,WAAW;AAAA,UACb,GAAG;AAAA,UACH,QAAQ;AAAA,YACJ,GAAG,IAAI;AAAA,YACP,QAAQ,CAAC;AAAA,UACb;AAAA,UACA,QAAQ;AAAA,QACZ;AACA,eAAO;AAAA,UACH,QAAQ,MAAM,OAAO,YAAY;AAAA,YAC7B,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AAAA,UACD,KAAK;AAAA,QACT;AAAA,MACJ,CAAC,CAAC,EAAE,KAAK,aAAa;AAAA,IAC1B,OACK;AACD,UAAI,QAAQ;AACZ,YAAM,SAAS,CAAC;AAChB,iBAAW,UAAUA,UAAS;AAC1B,cAAM,WAAW;AAAA,UACb,GAAG;AAAA,UACH,QAAQ;AAAA,YACJ,GAAG,IAAI;AAAA,YACP,QAAQ,CAAC;AAAA,UACb;AAAA,UACA,QAAQ;AAAA,QACZ;AACA,cAAM,SAAS,OAAO,WAAW;AAAA,UAC7B,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,OAAO,WAAW,SAAS;AAC3B,iBAAO;AAAA,QACX,WACS,OAAO,WAAW,WAAW,CAAC,OAAO;AAC1C,kBAAQ,EAAE,QAAQ,KAAK,SAAS;AAAA,QACpC;AACA,YAAI,SAAS,OAAO,OAAO,QAAQ;AAC/B,iBAAO,KAAK,SAAS,OAAO,MAAM;AAAA,QACtC;AAAA,MACJ;AACA,UAAI,OAAO;AACP,YAAI,OAAO,OAAO,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM;AACjD,eAAO,MAAM;AAAA,MACjB;AACA,YAAM,cAAc,OAAO,IAAI,CAACG,YAAW,IAAI,SAASA,OAAM,CAAC;AAC/D,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB;AAAA,MACJ,CAAC;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,SAAS,SAAS,CAAC,OAAO,WAAW;AACjC,SAAO,IAAI,SAAS;AAAA,IAChB,SAAS;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AAQA,IAAM,mBAAmB,CAAC,SAAS;AAC/B,MAAI,gBAAgB,SAAS;AACzB,WAAO,iBAAiB,KAAK,MAAM;AAAA,EACvC,WACS,gBAAgB,YAAY;AACjC,WAAO,iBAAiB,KAAK,UAAU,CAAC;AAAA,EAC5C,WACS,gBAAgB,YAAY;AACjC,WAAO,CAAC,KAAK,KAAK;AAAA,EACtB,WACS,gBAAgB,SAAS;AAC9B,WAAO,KAAK;AAAA,EAChB,WACS,gBAAgB,eAAe;AAEpC,WAAO,KAAK,aAAa,KAAK,IAAI;AAAA,EACtC,WACS,gBAAgB,YAAY;AACjC,WAAO,iBAAiB,KAAK,KAAK,SAAS;AAAA,EAC/C,WACS,gBAAgB,cAAc;AACnC,WAAO,CAAC,MAAS;AAAA,EACrB,WACS,gBAAgB,SAAS;AAC9B,WAAO,CAAC,IAAI;AAAA,EAChB,WACS,gBAAgB,aAAa;AAClC,WAAO,CAAC,QAAW,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC;AAAA,EACzD,WACS,gBAAgB,aAAa;AAClC,WAAO,CAAC,MAAM,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC;AAAA,EACpD,WACS,gBAAgB,YAAY;AACjC,WAAO,iBAAiB,KAAK,OAAO,CAAC;AAAA,EACzC,WACS,gBAAgB,aAAa;AAClC,WAAO,iBAAiB,KAAK,OAAO,CAAC;AAAA,EACzC,WACS,gBAAgB,UAAU;AAC/B,WAAO,iBAAiB,KAAK,KAAK,SAAS;AAAA,EAC/C,OACK;AACD,WAAO,CAAC;AAAA,EACZ;AACJ;AACA,IAAM,wBAAN,MAAM,+BAA8B,QAAQ;AAAA,EACxC,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,IAAI,eAAe,cAAc,QAAQ;AACzC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,gBAAgB,KAAK;AAC3B,UAAM,qBAAqB,IAAI,KAAK,aAAa;AACjD,UAAM,SAAS,KAAK,WAAW,IAAI,kBAAkB;AACrD,QAAI,CAAC,QAAQ;AACT,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,MAAM,KAAK,KAAK,WAAW,KAAK,CAAC;AAAA,QAC1C,MAAM,CAAC,aAAa;AAAA,MACxB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,OAAO,YAAY;AAAA,QACtB,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AAAA,IACL,OACK;AACD,aAAO,OAAO,WAAW;AAAA,QACrB,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,IAAI,gBAAgB;AAChB,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,OAAO,eAAeH,UAAS,QAAQ;AAE1C,UAAM,aAAa,oBAAI,IAAI;AAE3B,eAAW,QAAQA,UAAS;AACxB,YAAM,sBAAsB,iBAAiB,KAAK,MAAM,aAAa,CAAC;AACtE,UAAI,CAAC,oBAAoB,QAAQ;AAC7B,cAAM,IAAI,MAAM,mCAAmC,aAAa,mDAAmD;AAAA,MACvH;AACA,iBAAW,SAAS,qBAAqB;AACrC,YAAI,WAAW,IAAI,KAAK,GAAG;AACvB,gBAAM,IAAI,MAAM,0BAA0B,OAAO,aAAa,CAAC,wBAAwB,OAAO,KAAK,CAAC,EAAE;AAAA,QAC1G;AACA,mBAAW,IAAI,OAAO,IAAI;AAAA,MAC9B;AAAA,IACJ;AACA,WAAO,IAAI,uBAAsB;AAAA,MAC7B,UAAU,sBAAsB;AAAA,MAChC;AAAA,MACA,SAAAA;AAAA,MACA;AAAA,MACA,GAAG,oBAAoB,MAAM;AAAA,IACjC,CAAC;AAAA,EACL;AACJ;AACA,SAAS,YAAY,GAAG,GAAG;AACvB,QAAM,QAAQ,cAAc,CAAC;AAC7B,QAAM,QAAQ,cAAc,CAAC;AAC7B,MAAI,MAAM,GAAG;AACT,WAAO,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,EAClC,WACS,UAAU,cAAc,UAAU,UAAU,cAAc,QAAQ;AACvE,UAAM,QAAQ,KAAK,WAAW,CAAC;AAC/B,UAAM,aAAa,KACd,WAAW,CAAC,EACZ,OAAO,CAAC,QAAQ,MAAM,QAAQ,GAAG,MAAM,EAAE;AAC9C,UAAM,SAAS,EAAE,GAAG,GAAG,GAAG,EAAE;AAC5B,eAAW,OAAO,YAAY;AAC1B,YAAM,cAAc,YAAY,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;AAC9C,UAAI,CAAC,YAAY,OAAO;AACpB,eAAO,EAAE,OAAO,MAAM;AAAA,MAC1B;AACA,aAAO,GAAG,IAAI,YAAY;AAAA,IAC9B;AACA,WAAO,EAAE,OAAO,MAAM,MAAM,OAAO;AAAA,EACvC,WACS,UAAU,cAAc,SAAS,UAAU,cAAc,OAAO;AACrE,QAAI,EAAE,WAAW,EAAE,QAAQ;AACvB,aAAO,EAAE,OAAO,MAAM;AAAA,IAC1B;AACA,UAAM,WAAW,CAAC;AAClB,aAASE,SAAQ,GAAGA,SAAQ,EAAE,QAAQA,UAAS;AAC3C,YAAM,QAAQ,EAAEA,MAAK;AACrB,YAAM,QAAQ,EAAEA,MAAK;AACrB,YAAM,cAAc,YAAY,OAAO,KAAK;AAC5C,UAAI,CAAC,YAAY,OAAO;AACpB,eAAO,EAAE,OAAO,MAAM;AAAA,MAC1B;AACA,eAAS,KAAK,YAAY,IAAI;AAAA,IAClC;AACA,WAAO,EAAE,OAAO,MAAM,MAAM,SAAS;AAAA,EACzC,WACS,UAAU,cAAc,QAC7B,UAAU,cAAc,QACxB,CAAC,MAAM,CAAC,GAAG;AACX,WAAO,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,EAClC,OACK;AACD,WAAO,EAAE,OAAO,MAAM;AAAA,EAC1B;AACJ;AACA,IAAM,kBAAN,cAA8B,QAAQ;AAAA,EAClC,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,UAAM,eAAe,CAAC,YAAY,gBAAgB;AAC9C,UAAI,UAAU,UAAU,KAAK,UAAU,WAAW,GAAG;AACjD,eAAO;AAAA,MACX;AACA,YAAM,SAAS,YAAY,WAAW,OAAO,YAAY,KAAK;AAC9D,UAAI,CAAC,OAAO,OAAO;AACf,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,QACvB,CAAC;AACD,eAAO;AAAA,MACX;AACA,UAAI,QAAQ,UAAU,KAAK,QAAQ,WAAW,GAAG;AAC7C,eAAO,MAAM;AAAA,MACjB;AACA,aAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,IACtD;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,IAAI;AAAA,QACf,KAAK,KAAK,KAAK,YAAY;AAAA,UACvB,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,QACD,KAAK,KAAK,MAAM,YAAY;AAAA,UACxB,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,aAAa,MAAM,KAAK,CAAC;AAAA,IACxD,OACK;AACD,aAAO,aAAa,KAAK,KAAK,KAAK,WAAW;AAAA,QAC1C,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC,GAAG,KAAK,KAAK,MAAM,WAAW;AAAA,QAC3B,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC,CAAC;AAAA,IACN;AAAA,EACJ;AACJ;AACA,gBAAgB,SAAS,CAAC,MAAM,OAAO,WAAW;AAC9C,SAAO,IAAI,gBAAgB;AAAA,IACvB;AAAA,IACA;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,WAAN,MAAM,kBAAiB,QAAQ;AAAA,EAC3B,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc,OAAO;AACxC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,QAAQ;AAC1C,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,KAAK,KAAK,MAAM;AAAA,QACzB,WAAW;AAAA,QACX,OAAO;AAAA,QACP,MAAM;AAAA,MACV,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,OAAO,KAAK,KAAK;AACvB,QAAI,CAAC,QAAQ,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,QAAQ;AACnD,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,KAAK,KAAK,MAAM;AAAA,QACzB,WAAW;AAAA,QACX,OAAO;AAAA,QACP,MAAM;AAAA,MACV,CAAC;AACD,aAAO,MAAM;AAAA,IACjB;AACA,UAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,EACrB,IAAI,CAAC,MAAM,cAAc;AAC1B,YAAM,SAAS,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK,KAAK;AACvD,UAAI,CAAC;AACD,eAAO;AACX,aAAO,OAAO,OAAO,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC/E,CAAC,EACI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACtB,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,IAAI,KAAK,EAAE,KAAK,CAAC,YAAY;AACxC,eAAO,YAAY,WAAW,QAAQ,OAAO;AAAA,MACjD,CAAC;AAAA,IACL,OACK;AACD,aAAO,YAAY,WAAW,QAAQ,KAAK;AAAA,IAC/C;AAAA,EACJ;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,KAAK,MAAM;AACP,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;AACA,SAAS,SAAS,CAAC,SAAS,WAAW;AACnC,MAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACzB,UAAM,IAAI,MAAM,uDAAuD;AAAA,EAC3E;AACA,SAAO,IAAI,SAAS;AAAA,IAChB,OAAO;AAAA,IACP,UAAU,sBAAsB;AAAA,IAChC,MAAM;AAAA,IACN,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EAC5B,IAAI,YAAY;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc,QAAQ;AACzC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,QAAQ,CAAC;AACf,UAAM,UAAU,KAAK,KAAK;AAC1B,UAAM,YAAY,KAAK,KAAK;AAC5B,eAAW,OAAO,IAAI,MAAM;AACxB,YAAM,KAAK;AAAA,QACP,KAAK,QAAQ,OAAO,IAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC;AAAA,QACnE,OAAO,UAAU,OAAO,IAAI,mBAAmB,KAAK,IAAI,KAAK,GAAG,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,QACjF,WAAW,OAAO,IAAI;AAAA,MAC1B,CAAC;AAAA,IACL;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,YAAY,iBAAiB,QAAQ,KAAK;AAAA,IACrD,OACK;AACD,aAAO,YAAY,gBAAgB,QAAQ,KAAK;AAAA,IACpD;AAAA,EACJ;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO,OAAO,QAAQ,OAAO;AAChC,QAAI,kBAAkB,SAAS;AAC3B,aAAO,IAAI,WAAU;AAAA,QACjB,SAAS;AAAA,QACT,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,KAAK;AAAA,MAChC,CAAC;AAAA,IACL;AACA,WAAO,IAAI,WAAU;AAAA,MACjB,SAAS,UAAU,OAAO;AAAA,MAC1B,WAAW;AAAA,MACX,UAAU,sBAAsB;AAAA,MAChC,GAAG,oBAAoB,MAAM;AAAA,IACjC,CAAC;AAAA,EACL;AACJ;AACA,IAAM,SAAN,cAAqB,QAAQ;AAAA,EACzB,IAAI,YAAY;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,UAAU,KAAK,KAAK;AAC1B,UAAM,YAAY,KAAK,KAAK;AAC5B,UAAM,QAAQ,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAGA,WAAU;AAC/D,aAAO;AAAA,QACH,KAAK,QAAQ,OAAO,IAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,CAACA,QAAO,KAAK,CAAC,CAAC;AAAA,QAC9E,OAAO,UAAU,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,CAACA,QAAO,OAAO,CAAC,CAAC;AAAA,MAC1F;AAAA,IACJ,CAAC;AACD,QAAI,IAAI,OAAO,OAAO;AAClB,YAAM,WAAW,oBAAI,IAAI;AACzB,aAAO,QAAQ,QAAQ,EAAE,KAAK,YAAY;AACtC,mBAAW,QAAQ,OAAO;AACtB,gBAAM,MAAM,MAAM,KAAK;AACvB,gBAAM,QAAQ,MAAM,KAAK;AACzB,cAAI,IAAI,WAAW,aAAa,MAAM,WAAW,WAAW;AACxD,mBAAO;AAAA,UACX;AACA,cAAI,IAAI,WAAW,WAAW,MAAM,WAAW,SAAS;AACpD,mBAAO,MAAM;AAAA,UACjB;AACA,mBAAS,IAAI,IAAI,OAAO,MAAM,KAAK;AAAA,QACvC;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,MACnD,CAAC;AAAA,IACL,OACK;AACD,YAAM,WAAW,oBAAI,IAAI;AACzB,iBAAW,QAAQ,OAAO;AACtB,cAAM,MAAM,KAAK;AACjB,cAAM,QAAQ,KAAK;AACnB,YAAI,IAAI,WAAW,aAAa,MAAM,WAAW,WAAW;AACxD,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,WAAW,WAAW,MAAM,WAAW,SAAS;AACpD,iBAAO,MAAM;AAAA,QACjB;AACA,iBAAS,IAAI,IAAI,OAAO,MAAM,KAAK;AAAA,MACvC;AACA,aAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,IACnD;AAAA,EACJ;AACJ;AACA,OAAO,SAAS,CAAC,SAAS,WAAW,WAAW;AAC5C,SAAO,IAAI,OAAO;AAAA,IACd;AAAA,IACA;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,SAAN,MAAM,gBAAe,QAAQ;AAAA,EACzB,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,MAAM,KAAK;AACjB,QAAI,IAAI,YAAY,MAAM;AACtB,UAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,OAAO;AACnC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,IAAI,QAAQ;AAAA,UACrB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,IAAI,QAAQ;AAAA,QACzB,CAAC;AACD,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AACA,QAAI,IAAI,YAAY,MAAM;AACtB,UAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,OAAO;AACnC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,IAAI,QAAQ;AAAA,UACrB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,IAAI,QAAQ;AAAA,QACzB,CAAC;AACD,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AACA,UAAM,YAAY,KAAK,KAAK;AAC5B,aAAS,YAAYE,WAAU;AAC3B,YAAM,YAAY,oBAAI,IAAI;AAC1B,iBAAW,WAAWA,WAAU;AAC5B,YAAI,QAAQ,WAAW;AACnB,iBAAO;AACX,YAAI,QAAQ,WAAW;AACnB,iBAAO,MAAM;AACjB,kBAAU,IAAI,QAAQ,KAAK;AAAA,MAC/B;AACA,aAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,UAAU;AAAA,IACpD;AACA,UAAM,WAAW,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,MAAM,UAAU,OAAO,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AACzH,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,IAAI,QAAQ,EAAE,KAAK,CAACA,cAAa,YAAYA,SAAQ,CAAC;AAAA,IACzE,OACK;AACD,aAAO,YAAY,QAAQ;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,IAAI,QAAO;AAAA,MACd,GAAG,KAAK;AAAA,MACR,SAAS,EAAE,OAAO,SAAS,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACpE,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,IAAI,QAAO;AAAA,MACd,GAAG,KAAK;AAAA,MACR,SAAS,EAAE,OAAO,SAAS,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACpE,CAAC;AAAA,EACL;AAAA,EACA,KAAKC,OAAM,SAAS;AAChB,WAAO,KAAK,IAAIA,OAAM,OAAO,EAAE,IAAIA,OAAM,OAAO;AAAA,EACpD;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,IAAI,GAAG,OAAO;AAAA,EAC9B;AACJ;AACA,OAAO,SAAS,CAAC,WAAW,WAAW;AACnC,SAAO,IAAI,OAAO;AAAA,IACd;AAAA,IACA,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,cAAN,MAAM,qBAAoB,QAAQ;AAAA,EAC9B,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,WAAW,KAAK;AAAA,EACzB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,IAAI,eAAe,cAAc,UAAU;AAC3C,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,aAAS,cAAc,MAAM,OAAO;AAChC,aAAO,UAAU;AAAA,QACb,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,WAAW;AAAA,UACP,IAAI,OAAO;AAAA,UACX,IAAI;AAAA,UACJ,YAAY;AAAA,UACZ;AAAA,QACJ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,QACnB,WAAW;AAAA,UACP,MAAM,aAAa;AAAA,UACnB,gBAAgB;AAAA,QACpB;AAAA,MACJ,CAAC;AAAA,IACL;AACA,aAAS,iBAAiB,SAAS,OAAO;AACtC,aAAO,UAAU;AAAA,QACb,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,WAAW;AAAA,UACP,IAAI,OAAO;AAAA,UACX,IAAI;AAAA,UACJ,YAAY;AAAA,UACZ;AAAA,QACJ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,QACnB,WAAW;AAAA,UACP,MAAM,aAAa;AAAA,UACnB,iBAAiB;AAAA,QACrB;AAAA,MACJ,CAAC;AAAA,IACL;AACA,UAAM,SAAS,EAAE,UAAU,IAAI,OAAO,mBAAmB;AACzD,UAAM,KAAK,IAAI;AACf,QAAI,KAAK,KAAK,mBAAmB,YAAY;AAIzC,YAAM,KAAK;AACX,aAAO,GAAG,kBAAmB,MAAM;AAC/B,cAAM,QAAQ,IAAI,SAAS,CAAC,CAAC;AAC7B,cAAM,aAAa,MAAM,GAAG,KAAK,KAC5B,WAAW,MAAM,MAAM,EACvB,MAAM,CAAC,MAAM;AACd,gBAAM,SAAS,cAAc,MAAM,CAAC,CAAC;AACrC,gBAAM;AAAA,QACV,CAAC;AACD,cAAM,SAAS,MAAM,QAAQ,MAAM,IAAI,MAAM,UAAU;AACvD,cAAM,gBAAgB,MAAM,GAAG,KAAK,QAAQ,KAAK,KAC5C,WAAW,QAAQ,MAAM,EACzB,MAAM,CAAC,MAAM;AACd,gBAAM,SAAS,iBAAiB,QAAQ,CAAC,CAAC;AAC1C,gBAAM;AAAA,QACV,CAAC;AACD,eAAO;AAAA,MACX,CAAC;AAAA,IACL,OACK;AAID,YAAM,KAAK;AACX,aAAO,GAAG,YAAa,MAAM;AACzB,cAAM,aAAa,GAAG,KAAK,KAAK,UAAU,MAAM,MAAM;AACtD,YAAI,CAAC,WAAW,SAAS;AACrB,gBAAM,IAAI,SAAS,CAAC,cAAc,MAAM,WAAW,KAAK,CAAC,CAAC;AAAA,QAC9D;AACA,cAAM,SAAS,QAAQ,MAAM,IAAI,MAAM,WAAW,IAAI;AACtD,cAAM,gBAAgB,GAAG,KAAK,QAAQ,UAAU,QAAQ,MAAM;AAC9D,YAAI,CAAC,cAAc,SAAS;AACxB,gBAAM,IAAI,SAAS,CAAC,iBAAiB,QAAQ,cAAc,KAAK,CAAC,CAAC;AAAA,QACtE;AACA,eAAO,cAAc;AAAA,MACzB,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,aAAa;AACT,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,aAAa;AACT,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,QAAQ,OAAO;AACX,WAAO,IAAI,aAAY;AAAA,MACnB,GAAG,KAAK;AAAA,MACR,MAAM,SAAS,OAAO,KAAK,EAAE,KAAK,WAAW,OAAO,CAAC;AAAA,IACzD,CAAC;AAAA,EACL;AAAA,EACA,QAAQ,YAAY;AAChB,WAAO,IAAI,aAAY;AAAA,MACnB,GAAG,KAAK;AAAA,MACR,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AAAA,EACA,UAAU,MAAM;AACZ,UAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,WAAO;AAAA,EACX;AAAA,EACA,gBAAgB,MAAM;AAClB,UAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,WAAO;AAAA,EACX;AAAA,EACA,OAAO,OAAO,MAAM,SAAS,QAAQ;AACjC,WAAO,IAAI,aAAY;AAAA,MACnB,MAAO,OACD,OACA,SAAS,OAAO,CAAC,CAAC,EAAE,KAAK,WAAW,OAAO,CAAC;AAAA,MAClD,SAAS,WAAW,WAAW,OAAO;AAAA,MACtC,UAAU,sBAAsB;AAAA,MAChC,GAAG,oBAAoB,MAAM;AAAA,IACjC,CAAC;AAAA,EACL;AACJ;AACA,IAAM,UAAN,cAAsB,QAAQ;AAAA,EAC1B,IAAI,SAAS;AACT,WAAO,KAAK,KAAK,OAAO;AAAA,EAC5B;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,UAAM,aAAa,KAAK,KAAK,OAAO;AACpC,WAAO,WAAW,OAAO,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AAAA,EAC5E;AACJ;AACA,QAAQ,SAAS,CAAC,QAAQ,WAAW;AACjC,SAAO,IAAI,QAAQ;AAAA,IACf;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,OAAO,OAAO;AACV,QAAI,MAAM,SAAS,KAAK,KAAK,OAAO;AAChC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,QACnB,UAAU,KAAK,KAAK;AAAA,MACxB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,EAAE,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,EAChD;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,WAAW,SAAS,CAAC,OAAO,WAAW;AACnC,SAAO,IAAI,WAAW;AAAA,IAClB;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,SAAS,cAAc,QAAQ,QAAQ;AACnC,SAAO,IAAI,QAAQ;AAAA,IACf;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,UAAN,MAAM,iBAAgB,QAAQ;AAAA,EAC1B,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,mBAAe,IAAI,MAAM,MAAM;AAAA,EACnC;AAAA,EACA,OAAO,OAAO;AACV,QAAI,OAAO,MAAM,SAAS,UAAU;AAChC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,YAAM,iBAAiB,KAAK,KAAK;AACjC,wBAAkB,KAAK;AAAA,QACnB,UAAU,KAAK,WAAW,cAAc;AAAA,QACxC,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,MACvB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,CAAC,uBAAuB,MAAM,gBAAgB,GAAG,GAAG;AACpD,6BAAuB,MAAM,gBAAgB,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,GAAG;AAAA,IAC/E;AACA,QAAI,CAAC,uBAAuB,MAAM,gBAAgB,GAAG,EAAE,IAAI,MAAM,IAAI,GAAG;AACpE,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,YAAM,iBAAiB,KAAK,KAAK;AACjC,wBAAkB,KAAK;AAAA,QACnB,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,QACnB,SAAS;AAAA,MACb,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,OAAO;AACP,UAAM,aAAa,CAAC;AACpB,eAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,iBAAW,GAAG,IAAI;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,SAAS;AACT,UAAM,aAAa,CAAC;AACpB,eAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,iBAAW,GAAG,IAAI;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,OAAO;AACP,UAAM,aAAa,CAAC;AACpB,eAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,iBAAW,GAAG,IAAI;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA,EACA,QAAQ,QAAQ,SAAS,KAAK,MAAM;AAChC,WAAO,SAAQ,OAAO,QAAQ;AAAA,MAC1B,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACP,CAAC;AAAA,EACL;AAAA,EACA,QAAQ,QAAQ,SAAS,KAAK,MAAM;AAChC,WAAO,SAAQ,OAAO,KAAK,QAAQ,OAAO,CAAC,QAAQ,CAAC,OAAO,SAAS,GAAG,CAAC,GAAG;AAAA,MACvE,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACP,CAAC;AAAA,EACL;AACJ;AACA,iBAAiB,oBAAI,QAAQ;AAC7B,QAAQ,SAAS;AACjB,IAAM,gBAAN,cAA4B,QAAQ;AAAA,EAChC,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,yBAAqB,IAAI,MAAM,MAAM;AAAA,EACzC;AAAA,EACA,OAAO,OAAO;AACV,UAAM,mBAAmB,KAAK,mBAAmB,KAAK,KAAK,MAAM;AACjE,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,QAAI,IAAI,eAAe,cAAc,UACjC,IAAI,eAAe,cAAc,QAAQ;AACzC,YAAM,iBAAiB,KAAK,aAAa,gBAAgB;AACzD,wBAAkB,KAAK;AAAA,QACnB,UAAU,KAAK,WAAW,cAAc;AAAA,QACxC,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,MACvB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,CAAC,uBAAuB,MAAM,sBAAsB,GAAG,GAAG;AAC1D,6BAAuB,MAAM,sBAAsB,IAAI,IAAI,KAAK,mBAAmB,KAAK,KAAK,MAAM,CAAC,GAAG,GAAG;AAAA,IAC9G;AACA,QAAI,CAAC,uBAAuB,MAAM,sBAAsB,GAAG,EAAE,IAAI,MAAM,IAAI,GAAG;AAC1E,YAAM,iBAAiB,KAAK,aAAa,gBAAgB;AACzD,wBAAkB,KAAK;AAAA,QACnB,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,QACnB,SAAS;AAAA,MACb,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AAAA,EACA,IAAI,OAAO;AACP,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,uBAAuB,oBAAI,QAAQ;AACnC,cAAc,SAAS,CAAC,QAAQ,WAAW;AACvC,SAAO,IAAI,cAAc;AAAA,IACrB;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,IAAI,eAAe,cAAc,WACjC,IAAI,OAAO,UAAU,OAAO;AAC5B,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,cAAc,IAAI,eAAe,cAAc,UAC/C,IAAI,OACJ,QAAQ,QAAQ,IAAI,IAAI;AAC9B,WAAO,GAAG,YAAY,KAAK,CAAC,SAAS;AACjC,aAAO,KAAK,KAAK,KAAK,WAAW,MAAM;AAAA,QACnC,MAAM,IAAI;AAAA,QACV,UAAU,IAAI,OAAO;AAAA,MACzB,CAAC;AAAA,IACL,CAAC,CAAC;AAAA,EACN;AACJ;AACA,WAAW,SAAS,CAAC,QAAQ,WAAW;AACpC,SAAO,IAAI,WAAW;AAAA,IAClB,MAAM;AAAA,IACN,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,YAAY;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,aAAa;AACT,WAAO,KAAK,KAAK,OAAO,KAAK,aAAa,sBAAsB,aAC1D,KAAK,KAAK,OAAO,WAAW,IAC5B,KAAK,KAAK;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,UAAM,SAAS,KAAK,KAAK,UAAU;AACnC,UAAM,WAAW;AAAA,MACb,UAAU,CAAC,QAAQ;AACf,0BAAkB,KAAK,GAAG;AAC1B,YAAI,IAAI,OAAO;AACX,iBAAO,MAAM;AAAA,QACjB,OACK;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ;AAAA,MACA,IAAI,OAAO;AACP,eAAO,IAAI;AAAA,MACf;AAAA,IACJ;AACA,aAAS,WAAW,SAAS,SAAS,KAAK,QAAQ;AACnD,QAAI,OAAO,SAAS,cAAc;AAC9B,YAAM,YAAY,OAAO,UAAU,IAAI,MAAM,QAAQ;AACrD,UAAI,IAAI,OAAO,OAAO;AAClB,eAAO,QAAQ,QAAQ,SAAS,EAAE,KAAK,OAAOC,eAAc;AACxD,cAAI,OAAO,UAAU;AACjB,mBAAO;AACX,gBAAM,SAAS,MAAM,KAAK,KAAK,OAAO,YAAY;AAAA,YAC9C,MAAMA;AAAA,YACN,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AACD,cAAI,OAAO,WAAW;AAClB,mBAAO;AACX,cAAI,OAAO,WAAW;AAClB,mBAAO,MAAM,OAAO,KAAK;AAC7B,cAAI,OAAO,UAAU;AACjB,mBAAO,MAAM,OAAO,KAAK;AAC7B,iBAAO;AAAA,QACX,CAAC;AAAA,MACL,OACK;AACD,YAAI,OAAO,UAAU;AACjB,iBAAO;AACX,cAAM,SAAS,KAAK,KAAK,OAAO,WAAW;AAAA,UACvC,MAAM;AAAA,UACN,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,OAAO,WAAW;AAClB,iBAAO;AACX,YAAI,OAAO,WAAW;AAClB,iBAAO,MAAM,OAAO,KAAK;AAC7B,YAAI,OAAO,UAAU;AACjB,iBAAO,MAAM,OAAO,KAAK;AAC7B,eAAO;AAAA,MACX;AAAA,IACJ;AACA,QAAI,OAAO,SAAS,cAAc;AAC9B,YAAM,oBAAoB,CAAC,QAAQ;AAC/B,cAAM,SAAS,OAAO,WAAW,KAAK,QAAQ;AAC9C,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,QAAQ,MAAM;AAAA,QACjC;AACA,YAAI,kBAAkB,SAAS;AAC3B,gBAAM,IAAI,MAAM,2FAA2F;AAAA,QAC/G;AACA,eAAO;AAAA,MACX;AACA,UAAI,IAAI,OAAO,UAAU,OAAO;AAC5B,cAAM,QAAQ,KAAK,KAAK,OAAO,WAAW;AAAA,UACtC,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,MAAM,WAAW;AACjB,iBAAO;AACX,YAAI,MAAM,WAAW;AACjB,iBAAO,MAAM;AAEjB,0BAAkB,MAAM,KAAK;AAC7B,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,MAAM;AAAA,MACtD,OACK;AACD,eAAO,KAAK,KAAK,OACZ,YAAY,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,EAC3D,KAAK,CAAC,UAAU;AACjB,cAAI,MAAM,WAAW;AACjB,mBAAO;AACX,cAAI,MAAM,WAAW;AACjB,mBAAO,MAAM;AACjB,iBAAO,kBAAkB,MAAM,KAAK,EAAE,KAAK,MAAM;AAC7C,mBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,MAAM;AAAA,UACtD,CAAC;AAAA,QACL,CAAC;AAAA,MACL;AAAA,IACJ;AACA,QAAI,OAAO,SAAS,aAAa;AAC7B,UAAI,IAAI,OAAO,UAAU,OAAO;AAC5B,cAAM,OAAO,KAAK,KAAK,OAAO,WAAW;AAAA,UACrC,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,CAAC,QAAQ,IAAI;AACb,iBAAO;AACX,cAAM,SAAS,OAAO,UAAU,KAAK,OAAO,QAAQ;AACpD,YAAI,kBAAkB,SAAS;AAC3B,gBAAM,IAAI,MAAM,iGAAiG;AAAA,QACrH;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO;AAAA,MACjD,OACK;AACD,eAAO,KAAK,KAAK,OACZ,YAAY,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,EAC3D,KAAK,CAAC,SAAS;AAChB,cAAI,CAAC,QAAQ,IAAI;AACb,mBAAO;AACX,iBAAO,QAAQ,QAAQ,OAAO,UAAU,KAAK,OAAO,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO,EAAE;AAAA,QAC7H,CAAC;AAAA,MACL;AAAA,IACJ;AACA,SAAK,YAAY,MAAM;AAAA,EAC3B;AACJ;AACA,WAAW,SAAS,CAAC,QAAQ,QAAQ,WAAW;AAC5C,SAAO,IAAI,WAAW;AAAA,IAClB;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC;AAAA,IACA,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,WAAW,uBAAuB,CAACC,aAAY,QAAQ,WAAW;AAC9D,SAAO,IAAI,WAAW;AAAA,IAClB;AAAA,IACA,QAAQ,EAAE,MAAM,cAAc,WAAWA,YAAW;AAAA,IACpD,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,cAAN,cAA0B,QAAQ;AAAA,EAC9B,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,WAAW;AACxC,aAAO,GAAG,MAAS;AAAA,IACvB;AACA,WAAO,KAAK,KAAK,UAAU,OAAO,KAAK;AAAA,EAC3C;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,YAAY,SAAS,CAAC,MAAM,WAAW;AACnC,SAAO,IAAI,YAAY;AAAA,IACnB,WAAW;AAAA,IACX,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,cAAN,cAA0B,QAAQ;AAAA,EAC9B,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,MAAM;AACnC,aAAO,GAAG,IAAI;AAAA,IAClB;AACA,WAAO,KAAK,KAAK,UAAU,OAAO,KAAK;AAAA,EAC3C;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,YAAY,SAAS,CAAC,MAAM,WAAW;AACnC,SAAO,IAAI,YAAY;AAAA,IACnB,WAAW;AAAA,IACX,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,OAAO,IAAI;AACf,QAAI,IAAI,eAAe,cAAc,WAAW;AAC5C,aAAO,KAAK,KAAK,aAAa;AAAA,IAClC;AACA,WAAO,KAAK,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC;AAAA,EACL;AAAA,EACA,gBAAgB;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,WAAW,SAAS,CAAC,MAAM,WAAW;AAClC,SAAO,IAAI,WAAW;AAAA,IAClB,WAAW;AAAA,IACX,UAAU,sBAAsB;AAAA,IAChC,cAAc,OAAO,OAAO,YAAY,aAClC,OAAO,UACP,MAAM,OAAO;AAAA,IACnB,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,WAAN,cAAuB,QAAQ;AAAA,EAC3B,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAE9C,UAAM,SAAS;AAAA,MACX,GAAG;AAAA,MACH,QAAQ;AAAA,QACJ,GAAG,IAAI;AAAA,QACP,QAAQ,CAAC;AAAA,MACb;AAAA,IACJ;AACA,UAAM,SAAS,KAAK,KAAK,UAAU,OAAO;AAAA,MACtC,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,QAAQ;AAAA,QACJ,GAAG;AAAA,MACP;AAAA,IACJ,CAAC;AACD,QAAI,QAAQ,MAAM,GAAG;AACjB,aAAO,OAAO,KAAK,CAACN,YAAW;AAC3B,eAAO;AAAA,UACH,QAAQ;AAAA,UACR,OAAOA,QAAO,WAAW,UACnBA,QAAO,QACP,KAAK,KAAK,WAAW;AAAA,YACnB,IAAI,QAAQ;AACR,qBAAO,IAAI,SAAS,OAAO,OAAO,MAAM;AAAA,YAC5C;AAAA,YACA,OAAO,OAAO;AAAA,UAClB,CAAC;AAAA,QACT;AAAA,MACJ,CAAC;AAAA,IACL,OACK;AACD,aAAO;AAAA,QACH,QAAQ;AAAA,QACR,OAAO,OAAO,WAAW,UACnB,OAAO,QACP,KAAK,KAAK,WAAW;AAAA,UACnB,IAAI,QAAQ;AACR,mBAAO,IAAI,SAAS,OAAO,OAAO,MAAM;AAAA,UAC5C;AAAA,UACA,OAAO,OAAO;AAAA,QAClB,CAAC;AAAA,MACT;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,cAAc;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,SAAS,SAAS,CAAC,MAAM,WAAW;AAChC,SAAO,IAAI,SAAS;AAAA,IAChB,WAAW;AAAA,IACX,UAAU,sBAAsB;AAAA,IAChC,YAAY,OAAO,OAAO,UAAU,aAAa,OAAO,QAAQ,MAAM,OAAO;AAAA,IAC7E,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,SAAN,cAAqB,QAAQ;AAAA,EACzB,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,KAAK;AAClC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,EAAE,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,EAChD;AACJ;AACA,OAAO,SAAS,CAAC,WAAW;AACxB,SAAO,IAAI,OAAO;AAAA,IACd,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,QAAQ,OAAO,WAAW;AAChC,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,UAAM,OAAO,IAAI;AACjB,WAAO,KAAK,KAAK,KAAK,OAAO;AAAA,MACzB;AAAA,MACA,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC;AAAA,EACL;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,IAAM,cAAN,MAAM,qBAAoB,QAAQ;AAAA,EAC9B,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,OAAO,OAAO;AAClB,YAAM,cAAc,YAAY;AAC5B,cAAM,WAAW,MAAM,KAAK,KAAK,GAAG,YAAY;AAAA,UAC5C,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,SAAS,WAAW;AACpB,iBAAO;AACX,YAAI,SAAS,WAAW,SAAS;AAC7B,iBAAO,MAAM;AACb,iBAAO,MAAM,SAAS,KAAK;AAAA,QAC/B,OACK;AACD,iBAAO,KAAK,KAAK,IAAI,YAAY;AAAA,YAC7B,MAAM,SAAS;AAAA,YACf,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL;AAAA,MACJ;AACA,aAAO,YAAY;AAAA,IACvB,OACK;AACD,YAAM,WAAW,KAAK,KAAK,GAAG,WAAW;AAAA,QACrC,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AACD,UAAI,SAAS,WAAW;AACpB,eAAO;AACX,UAAI,SAAS,WAAW,SAAS;AAC7B,eAAO,MAAM;AACb,eAAO;AAAA,UACH,QAAQ;AAAA,UACR,OAAO,SAAS;AAAA,QACpB;AAAA,MACJ,OACK;AACD,eAAO,KAAK,KAAK,IAAI,WAAW;AAAA,UAC5B,MAAM,SAAS;AAAA,UACf,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,OAAO,GAAG,GAAG;AAChB,WAAO,IAAI,aAAY;AAAA,MACnB,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,UAAU,sBAAsB;AAAA,IACpC,CAAC;AAAA,EACL;AACJ;AACA,IAAM,cAAN,cAA0B,QAAQ;AAAA,EAC9B,OAAO,OAAO;AACV,UAAM,SAAS,KAAK,KAAK,UAAU,OAAO,KAAK;AAC/C,UAAM,SAAS,CAAC,SAAS;AACrB,UAAI,QAAQ,IAAI,GAAG;AACf,aAAK,QAAQ,OAAO,OAAO,KAAK,KAAK;AAAA,MACzC;AACA,aAAO;AAAA,IACX;AACA,WAAO,QAAQ,MAAM,IACf,OAAO,KAAK,CAAC,SAAS,OAAO,IAAI,CAAC,IAClC,OAAO,MAAM;AAAA,EACvB;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,YAAY,SAAS,CAAC,MAAM,WAAW;AACnC,SAAO,IAAI,YAAY;AAAA,IACnB,WAAW;AAAA,IACX,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,SAAS,OAAO,OAAO,SAAS,CAAC,GAWjC,OAAO;AACH,MAAI;AACA,WAAO,OAAO,OAAO,EAAE,YAAY,CAAC,MAAM,QAAQ;AAC9C,UAAI,IAAI;AACR,UAAI,CAAC,MAAM,IAAI,GAAG;AACd,cAAM,IAAI,OAAO,WAAW,aACtB,OAAO,IAAI,IACX,OAAO,WAAW,WACd,EAAE,SAAS,OAAO,IAClB;AACV,cAAM,UAAU,MAAM,KAAK,EAAE,WAAW,QAAQ,OAAO,SAAS,KAAK,WAAW,QAAQ,OAAO,SAAS,KAAK;AAC7G,cAAM,KAAK,OAAO,MAAM,WAAW,EAAE,SAAS,EAAE,IAAI;AACpD,YAAI,SAAS,EAAE,MAAM,UAAU,GAAG,IAAI,OAAO,OAAO,CAAC;AAAA,MACzD;AAAA,IACJ,CAAC;AACL,SAAO,OAAO,OAAO;AACzB;AACA,IAAM,OAAO;AAAA,EACT,QAAQ,UAAU;AACtB;AACA,IAAI;AAAA,CACH,SAAUO,wBAAuB;AAC9B,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,QAAQ,IAAI;AAClC,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,SAAS,IAAI;AACnC,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,cAAc,IAAI;AACxC,EAAAA,uBAAsB,SAAS,IAAI;AACnC,EAAAA,uBAAsB,QAAQ,IAAI;AAClC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,UAAU,IAAI;AACpC,EAAAA,uBAAsB,SAAS,IAAI;AACnC,EAAAA,uBAAsB,UAAU,IAAI;AACpC,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,UAAU,IAAI;AACpC,EAAAA,uBAAsB,uBAAuB,IAAI;AACjD,EAAAA,uBAAsB,iBAAiB,IAAI;AAC3C,EAAAA,uBAAsB,UAAU,IAAI;AACpC,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,QAAQ,IAAI;AAClC,EAAAA,uBAAsB,QAAQ,IAAI;AAClC,EAAAA,uBAAsB,aAAa,IAAI;AACvC,EAAAA,uBAAsB,SAAS,IAAI;AACnC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,SAAS,IAAI;AACnC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,eAAe,IAAI;AACzC,EAAAA,uBAAsB,aAAa,IAAI;AACvC,EAAAA,uBAAsB,aAAa,IAAI;AACvC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,UAAU,IAAI;AACpC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,aAAa,IAAI;AACvC,EAAAA,uBAAsB,aAAa,IAAI;AAC3C,GAAG,0BAA0B,wBAAwB,CAAC,EAAE;AACxD,IAAM,iBAAiB,CAEvB,KAAK,SAAS;AAAA,EACV,SAAS,yBAAyB,IAAI,IAAI;AAC9C,MAAM,OAAO,CAAC,SAAS,gBAAgB,KAAK,MAAM;AAClD,IAAM,aAAa,UAAU;AAC7B,IAAM,aAAa,UAAU;AAC7B,IAAM,UAAU,OAAO;AACvB,IAAM,aAAa,UAAU;AAC7B,IAAM,cAAc,WAAW;AAC/B,IAAM,WAAW,QAAQ;AACzB,IAAM,aAAa,UAAU;AAC7B,IAAM,gBAAgB,aAAa;AACnC,IAAM,WAAW,QAAQ;AACzB,IAAM,UAAU,OAAO;AACvB,IAAM,cAAc,WAAW;AAC/B,IAAM,YAAY,SAAS;AAC3B,IAAM,WAAW,QAAQ;AACzB,IAAM,YAAY,SAAS;AAC3B,IAAM,aAAa,UAAU;AAC7B,IAAM,mBAAmB,UAAU;AACnC,IAAM,YAAY,SAAS;AAC3B,IAAM,yBAAyB,sBAAsB;AACrD,IAAM,mBAAmB,gBAAgB;AACzC,IAAM,YAAY,SAAS;AAC3B,IAAM,aAAa,UAAU;AAC7B,IAAM,UAAU,OAAO;AACvB,IAAM,UAAU,OAAO;AACvB,IAAM,eAAe,YAAY;AACjC,IAAM,WAAW,QAAQ;AACzB,IAAM,cAAc,WAAW;AAC/B,IAAM,WAAW,QAAQ;AACzB,IAAM,iBAAiB,cAAc;AACrC,IAAM,cAAc,WAAW;AAC/B,IAAM,cAAc,WAAW;AAC/B,IAAM,eAAe,YAAY;AACjC,IAAM,eAAe,YAAY;AACjC,IAAM,iBAAiB,WAAW;AAClC,IAAM,eAAe,YAAY;AACjC,IAAM,UAAU,MAAM,WAAW,EAAE,SAAS;AAC5C,IAAM,UAAU,MAAM,WAAW,EAAE,SAAS;AAC5C,IAAM,WAAW,MAAM,YAAY,EAAE,SAAS;AAC9C,IAAM,SAAS;AAAA,EACX,QAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC3D,QAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC3D,SAAU,CAAC,QAAQ,WAAW,OAAO;AAAA,IACjC,GAAG;AAAA,IACH,QAAQ;AAAA,EACZ,CAAC;AAAA,EACD,QAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC3D,MAAO,CAAC,QAAQ,QAAQ,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAC3D;AACA,IAAM,QAAQ;AAEd,IAAI,IAAiB,uBAAO,OAAO;AAAA,EAC/B,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,IAAI,OAAQ;AAAE,WAAO;AAAA,EAAM;AAAA,EAC3B,IAAI,aAAc;AAAE,WAAO;AAAA,EAAY;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,WAAW;AAAA,EACX;AAAA,EACA,IAAI,wBAAyB;AAAE,WAAO;AAAA,EAAuB;AAAA,EAC7D;AAAA,EACA,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,oBAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,MAAM;AAAA,EACN,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,OAAO;AAAA,EACP,aAAa;AAAA,EACb,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;;;ADvxIM,IAAM,aAAa,EAAE,OAAO,EAAE,KAAK;AAEnC,SAAS,aAAa,OAA6B;AACtD,QAAM,SAAS,WAAW,UAAU,KAAK;AACzC,SAAO,OAAO,UAAU,OAAO,OAAO;AAC1C;AAEO,SAAS,aAAa,QAA+B;AACxD,MAAI,OAAO,WAAW,UAAU;AAC5B,aAAU,OAAkB,SAAS;AAAA,EACzC;AAEA,MAAI,OAAO,WAAW,UAAU;AAC5B,UAAM,UAAU,sBAAsB;AAAA,EAC1C;AAEA,QAAM,cAAc,CAAC,UAA0B;AAC3C,UAAM,QAAQ,SAAS;AACvB,UAAM,SAAS,SAAS,SAAS;AACjC,UAAM,aAAa,mBAAmB,MAAM,EAAE;AAC9C,WAAO,WAAW,KAAK,IAAI,WAAW,MAAM;AAAA,EAChD;AAEA,QAAM,mBAAmB,CAAC,QAA4B;AAClD,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,aAAO,YAAY,IAAI,CAAC,CAAC;AAAA,IAC7B;AACA,WAAO;AAAA,EACX;AAEA,QAAM,aAAa,mBAAmB,MAAM;AAC5C,QAAMC,UAAS,IAAI,WAAW,WAAW,MAAM;AAC/C,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,IAAAA,QAAO,CAAC,IAAI,WAAW,CAAC,EAAE,WAAW,CAAC;AAAA,EAC1C;AAEA,QAAM,OAAO,KAAKA,OAAM;AACxB,QAAM,aAAa,IAAI,WAAW,KAAK,SAAS,CAAC;AACjD,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AACrC,eAAW,IAAI,CAAC,IAAI,OAAO,SAAS,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AAAA,EAChE;AAEA,SAAQ,iBAAiB,WAAW,MAAM,GAAG,CAAC,CAAC,IAC3C,MACA,iBAAiB,WAAW,MAAM,GAAG,CAAC,CAAC,IACvC,MACA,YAAY,WAAW,CAAC,IAAI,EAAI,IAChC,YAAY,WAAW,CAAC,CAAC,IACzB,MACA,YAAa,WAAW,CAAC,IAAI,KAAQ,GAAI,IACzC,YAAY,WAAW,CAAC,CAAC,IACzB,MACA,iBAAiB,WAAW,MAAM,IAAI,EAAE,CAAC;AACjD;;;AEnDA,eAAe,IACX,SACA,SACwB;AAExB,MAAI,CAAC,SAAS,SAAS,MAAM;AACzB,mBAAY,KAAK,wCAAwC;AAAA,MACrD;AAAA,MACA,SAAS,SAAS;AAAA,MAClB,MAAM,SAAS,SAAS;AAAA,IAC5B,CAAC;AACD,WAAO,CAAC;AAAA,EACZ;AAEA,QAAM,YAAY,WAAW,QAAQ,QAAQ,IAAI;AACjD,iBAAY,MAAM,oBAAoB;AAAA,IAClC,UAAU,QAAQ,QAAQ;AAAA,IAC1B;AAAA,IACA,QAAQ,WAAW;AAAA,EACvB,CAAC;AAGD,MAAI,CAAC,aAAa,UAAU,KAAK,EAAE,WAAW,GAAG;AAC7C,mBAAY,KAAK,0CAA0C;AAC3D,WAAO,CAAC;AAAA,EACZ;AAEA,QAAM,YAAY,MAAM,MAAM,SAAS,SAAS;AAChD,QAAM,YAAY,MAAM,QAAQ,iBAAiB;AAAA,IAC7C;AAAA,IACA;AAAA,MACI,QAAQ,QAAQ;AAAA,MAChB,OAAO;AAAA,MACP,iBAAiB;AAAA,IACrB;AAAA,EACJ;AAEA,QAAM,gBAAgB;AAAA,IAClB,GAAG,IAAI;AAAA,MACH,UAAU,IAAI,CAAC,WAAW;AACtB,uBAAY;AAAA,UACR,qBAAqB,OAAO,QAAQ,IAAI,qBAAqB,OAAO,UAAU;AAAA,QAClF;AACA,eAAO,OAAO,QAAQ;AAAA,MAC1B,CAAC;AAAA,IACL;AAAA,EACJ;AAEA,QAAM,qBAAqB,MAAM,QAAQ;AAAA,IACrC,cAAc;AAAA,MAAI,CAAC,WACf,QAAQ,iBAAiB,cAAc,MAAc;AAAA,IACzD;AAAA,EACJ;AAEA,SAAO,mBACF,OAAO,CAAC,WAAW,WAAW,IAAI,EAClC,IAAI,CAAC,YAAY,EAAE,IAAI,OAAO,IAAI,SAAS,OAAO,QAAQ,EAAE;AACrE;AAEA,eAAe,IACX,SACA,MACA,YAAY,KACZ,QAAQ,IACV;AACE,QAAM,QAAQ,iBAAiB,aAAa;AAAA,IACxC,IAAI,KAAK;AAAA,IACT,SAAS,QAAQ;AAAA,IACjB,QAAQ,QAAQ;AAAA,IAChB,QAAQ,QAAQ;AAAA,IAChB,WAAW,KAAK,IAAI;AAAA,IACpB,SAAS,KAAK;AAAA,IACd,WAAW,uBAAuB;AAAA,EACtC,CAAC;AAED,QAAM,eAAe,WAAW,KAAK,QAAQ,IAAI;AACjD,QAAM,YAAY,MAAM,YAAY,cAAc,WAAW,KAAK;AAElE,aAAW,YAAY,WAAW;AAC9B,UAAM,YAAY,MAAM,MAAM,SAAS,QAAQ;AAC/C,UAAM,QAAQ,iBAAiB,aAAa;AAAA;AAAA;AAAA,MAGxC,IAAI,aAAa,KAAK,KAAK,QAAQ;AAAA,MACnC,QAAQ,QAAQ;AAAA,MAChB,SAAS,QAAQ;AAAA,MACjB,QAAQ,QAAQ;AAAA,MAChB,WAAW,KAAK,IAAI;AAAA,MACpB,SAAS;AAAA,QACL,QAAQ,KAAK;AAAA,QACb,MAAM;AAAA,MACV;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;AAEO,SAAS,WAAW,SAAyB;AAChD,iBAAY,MAAM,uBAAuB;AAAA,IACrC,OAAO;AAAA,IACP,QAAQ,SAAS;AAAA,EACrB,CAAC;AAED,MAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AACzC,mBAAY,KAAK,iCAAiC;AAClD,WAAO;AAAA,EACX;AAEA,SACI,QAEK,QAAQ,mBAAmB,EAAE,EAE7B,QAAQ,UAAU,EAAE,EAEpB,QAAQ,kBAAkB,IAAI,EAE9B,QAAQ,sBAAsB,IAAI,EAElC,QAAQ,qBAAqB,IAAI,EAEjC,QAAQ,2CAA2C,IAAI,EAEvD,QAAQ,gBAAgB,EAAE,EAE1B,QAAQ,YAAY,EAAE,EAEtB,QAAQ,uBAAuB,EAAE,EAEjC,QAAQ,qBAAqB,EAAE,EAC/B,QAAQ,WAAW,EAAE,EAErB,QAAQ,QAAQ,GAAG,EAEnB,QAAQ,WAAW,MAAM,EAEzB,QAAQ,4BAA4B,EAAE,EACtC,KAAK,EACL,YAAY;AAEzB;AAEA,IAAO,oBAAQ;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACJ;;;AC9IA,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AAKd,IAAM,sBAAN,MAA0D;AAAA;AAAA;AAAA;AAAA,EAI7D;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,MAIT;AACC,SAAK,UAAU,KAAK;AACpB,SAAK,YAAY,KAAK;AACtB,SAAK,gBAAgB,KAAK;AAAA,EAC9B;AAAA,EAEiB,2BAA2B;AAAA,EAC3B,uBAAuB;AAAA;AAAA;AAAA;AAAA,EAKvB,YAAY,oBAAI,IAAI;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AAAA;AAAA;AAAA;AAAA,EAKO,cAAc,OAAyB;AAC3C,WAAO,MACF,YAAY,EACZ,MAAM,GAAG,EACT,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,EAChC,OAAO,CAAC,SAAS,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,WAAW,SAAyB;AACxC,QAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AACzC,qBAAY,KAAK,iCAAiC;AAClD,aAAO;AAAA,IACX;AAEA,WACI,QACK,QAAQ,mBAAmB,EAAE,EAC7B,QAAQ,UAAU,EAAE,EACpB,QAAQ,kBAAkB,IAAI,EAC9B,QAAQ,sBAAsB,IAAI,EAClC,QAAQ,qBAAqB,IAAI,EACjC,QAAQ,2CAA2C,IAAI,EACvD,QAAQ,gBAAgB,EAAE,EAC1B,QAAQ,YAAY,EAAE,EACtB,QAAQ,uBAAuB,EAAE,EACjC,QAAQ,qBAAqB,EAAE,EAC/B,QAAQ,WAAW,EAAE,EACrB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,WAAW,MAAM,EAEzB,KAAK,EACL,YAAY;AAAA,EAEzB;AAAA,EAEQ,kBAAkB,MAAc,OAA0B;AAC9D,QAAI,CAAC,QAAQ,CAAC,MAAM,QAAQ;AACxB,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC;AAGpE,UAAM,eAAe,MAAM;AAAA,MAAQ,UAC/B,MAAM,OAAO,CAAC,WAAW,MAAM,QAAQ;AACnC,YAAI,KAAK,SAAS,IAAI,EAAG,WAAU,KAAK,GAAG;AAC3C,eAAO;AAAA,MACX,GAAG,CAAC,CAAa;AAAA,IACrB,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAEtB,QAAI,aAAa,SAAS,EAAG,QAAO;AAGpC,aAAS,IAAI,GAAG,IAAI,aAAa,SAAS,GAAG,KAAK;AAC9C,UAAI,KAAK,IAAI,aAAa,CAAC,IAAI,aAAa,IAAI,CAAC,CAAC,KAAK,GAAG;AACtD,uBAAY,MAAM,qBAAqB;AAAA,UACnC;AAAA,UACA,WAAW;AAAA,UACX,YAAY,GAAG,aAAa,CAAC,CAAC,MAAM,aAAa,IAAI,CAAC,CAAC;AAAA,QAC3D,CAAC;AACD,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,aAAa,QAMa;AAC5B,UAAM,UAAU,OAAO,WAAW,KAAK,QAAQ;AAG/C,QAAI,OAAO,IAAI;AACX,YAAM,gBACF,MAAM,KAAK,QAAQ,gBAAgB,aAAa;AAAA,QAC5C,IAAI,OAAO;AAAA,QACX;AAAA,MACJ,CAAC;AAEL,UAAI,cAAc,SAAS,GAAG;AAC1B,eAAO;AAAA,MACX;AAAA,IACJ;AAGA,QAAI,OAAO,OAAO;AACd,UAAI;AACA,cAAM,iBAAiB,KAAK,WAAW,OAAO,KAAK;AAGnD,YAAI,aAAa;AACjB,YAAI,OAAO,qBAAqB;AAC5B,gBAAM,kBAAkB,KAAK;AAAA,YACzB,OAAO;AAAA,UACX;AACA,uBAAa,GAAG,eAAe,IAAI,cAAc;AAAA,QACrD;AAEA,cAAM,iBAAiB,MAAM,MAAM,KAAK,SAAS,UAAU;AAE3D,cAAM,YAAY,IAAI,aAAa,cAAc;AAGjD,cAAM,UACF,MAAM,KAAK,QAAQ,gBAAgB,gBAAgB;AAAA,UAC/C,SAAS,KAAK,QAAQ;AAAA,UACtB;AAAA,UACA,iBAAiB,KAAK;AAAA,UACtB,cACK,OAAO,SAAS,KAAK,wBAAwB;AAAA,UAClD,YAAY;AAAA,QAChB,CAAC;AAGL,cAAM,kBAAkB,QACnB,IAAI,CAAC,WAAW;AACb,cAAI,QAAQ,OAAO;AAGnB,gBAAM,aAAa,KAAK,cAAc,cAAc;AAEpD,gBAAM,gBAAgB,WAAW;AAAA,YAAO,CAAC,SACrC,OAAO,QAAQ,KAAK,YAAY,EAAE,SAAS,IAAI;AAAA,UACnD;AAEA,cAAI,cAAc,SAAS,GAAG;AAE1B,qBACI,IACC,cAAc,SAAS,WAAW,SAAU;AAEjD,gBACI,KAAK;AAAA,cACD,OAAO,QAAQ;AAAA,cACf;AAAA,YACJ,GACF;AACE,uBAAS;AAAA,YACb;AAAA,UACJ,OAAO;AAEH,gBAAI,CAAC,OAAO,qBAAqB;AAC7B,uBAAS;AAAA,YACb;AAAA,UACJ;AAEA,iBAAO;AAAA,YACH,GAAG;AAAA,YACH;AAAA,YACA,cAAc;AAAA;AAAA,UAClB;AAAA,QACJ,CAAC,EACA,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAGrC,eAAO,gBACF;AAAA,UACG,CAAC,WACG,OAAO,SAAS,KAAK;AAAA,QAC7B,EACC,MAAM,GAAG,OAAO,SAAS,KAAK,oBAAoB;AAAA,MAC3D,SAAS,OAAO;AACZ,gBAAQ,IAAI,sBAAsB,KAAK,EAAE;AACzC,eAAO,CAAC;AAAA,MACZ;AAAA,IACJ;AAGA,WAAO,CAAC;AAAA,EACZ;AAAA,EAEA,MAAM,gBAAgB,MAAuC;AACzD,QAAI,CAAC,KAAK,QAAQ,MAAM;AACpB,qBAAY,KAAK,iCAAiC;AAClD;AAAA,IACJ;AAEA,QAAI;AAEA,YAAM,mBAAmB,KAAK,WAAW,KAAK,QAAQ,IAAI;AAC1D,YAAM,qBAAqB,MAAM;AAAA,QAC7B,KAAK;AAAA,QACL;AAAA,MACJ;AAEA,YAAM,gBAAgB,IAAI,aAAa,kBAAkB;AAGzD,YAAM,KAAK,QAAQ,gBAAgB,gBAAgB;AAAA,QAC/C,IAAI,KAAK;AAAA,QACT,SAAS,KAAK,QAAQ;AAAA,QACtB,SAAS;AAAA,UACL,MAAM,KAAK,QAAQ;AAAA,UACnB,UAAU;AAAA,YACN,GAAG,KAAK,QAAQ;AAAA,YAChB,QAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,QACA,WAAW;AAAA,QACX,WAAW,KAAK,IAAI;AAAA,MACxB,CAAC;AAGD,YAAM,SAAS,MAAM,YAAY,kBAAkB,KAAK,EAAE;AAE1D,iBAAW,CAACC,QAAO,KAAK,KAAK,OAAO,QAAQ,GAAG;AAC3C,cAAM,sBAAsB,MAAM,MAAM,KAAK,SAAS,KAAK;AAC3D,cAAM,iBAAiB,IAAI,aAAa,mBAAmB;AAC3D,cAAM,UAAU,GAAG,KAAK,EAAE,UAAUA,MAAK;AAEzC,cAAM,KAAK,QAAQ,gBAAgB,gBAAgB;AAAA,UAC/C,IAAI;AAAA,UACJ,SAAS,KAAK,QAAQ;AAAA,UACtB,SAAS;AAAA,YACL,MAAM;AAAA,YACN,UAAU;AAAA,cACN,GAAG,KAAK,QAAQ;AAAA,cAChB,SAAS;AAAA,cACT,YAAY,KAAK;AAAA,cACjB,YAAYA;AAAA,YAChB;AAAA,UACJ;AAAA,UACA,WAAW;AAAA,UACX,WAAW,KAAK,IAAI;AAAA,QACxB,CAAC;AAAA,MACL;AAAA,IACJ,SAAS,OAAO;AACZ,qBAAY,MAAM,8BAA8B,KAAK,EAAE,KAAK,KAAK;AACjE,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAM,gBAAgB,QAMU;AAC5B,UAAM;AAAA,MACF,kBAAkB,KAAK;AAAA,MACvB,cAAc,KAAK;AAAA,MACnB;AAAA,MACA;AAAA,IACJ,IAAI;AAEJ,UAAM,mBAAmB,MAAM,QAAQ,SAAS,IAC1C,IAAI,aAAa,SAAS,IAC1B;AAEN,WAAO,MAAM,KAAK,QAAQ,gBAAgB,gBAAgB;AAAA,MACtD,SAAS,OAAO,WAAW,KAAK,QAAQ;AAAA,MACxC,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,gBAAgB,IAAyB;AAC3C,UAAM,KAAK,QAAQ,gBAAgB,gBAAgB,EAAE;AAAA,EACzD;AAAA,EAEA,MAAM,eAAe,QAAiC;AAClD,UAAM,KAAK,QAAQ,gBAAgB;AAAA,MAC/B,KAAK,QAAQ;AAAA,MACb,SAAS,SAAS;AAAA,IACtB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,iBAAiB,SAA4C;AAC/D,mBAAY;AAAA,MACR,oDAAoD,OAAO;AAAA,IAC/D;AAEA,QAAI;AAEA,YAAM,UAAU,MAAM,KAAK,QAAQ,gBAAgB,aAAa;AAAA,QAC5D;AAAA,MACJ,CAAC;AAED,qBAAY;AAAA,QACR,0BAA0B,QAAQ,MAAM;AAAA,MAC5C;AACA,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,qBAAY;AAAA,QACR;AAAA,QACA;AAAA,MACJ;AACA,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAM,+BAA+B;AACjC,QAAI;AACA,qBAAY;AAAA,QACR;AAAA,QACA,KAAK,QAAQ;AAAA,MACjB;AAEA,qBAAY;AAAA,QACR,kCAAkC,KAAK,aAAa;AAAA,MACxD;AAEA,YAAM,oBAAoB,MAAM,KAAK;AAAA,QACjC,KAAK,QAAQ;AAAA,MACjB;AAEA,YAAM,kBAAkB,kBAAkB;AAAA,QACtC,CAAC,SACG,CAAC,KAAK,GAAG,SAAS,OAAO,KAAK,KAAK,QAAQ,UAAU;AAAA;AAAA,MAC7D;AAEA,qBAAY;AAAA,QACR,mBAAmB,gBAAgB,MAAM;AAAA,MAC7C;AAEA,iBAAW,QAAQ,iBAAiB;AAChC,cAAM,eAAe,KAAK,QAAQ,UAAU;AAC5C,cAAM,WAAW,KAAK,KAAK,eAAe,YAAY;AAEtD,uBAAY;AAAA,UACR,wCAAwC,QAAQ;AAAA,QACpD;AAEA,YAAI,CAAC,WAAW,QAAQ,GAAG;AACvB,yBAAY;AAAA,YACR,uDAAuD,QAAQ;AAAA,UACnE;AAEA,gBAAM,aAAa,KAAK;AACxB,yBAAY;AAAA,YACR,mCAAmC,UAAU;AAAA,UACjD;AAEA,cAAI;AAEA,kBAAM,KAAK,gBAAgB,UAAU;AAWrC,2BAAY;AAAA,cACR,sDAAsD,QAAQ;AAAA,YAClE;AAAA,UACJ,SAAS,aAAa;AAClB,2BAAY;AAAA,cACR,+CAA+C,QAAQ;AAAA,cACvD,uBAAuB,QACjB;AAAA,gBACI,SAAS,YAAY;AAAA,gBACrB,OAAO,YAAY;AAAA,gBACnB,MAAM,YAAY;AAAA,cACtB,IACA;AAAA,YACV;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAEA,qBAAY,MAAM,8CAA8C;AAAA,IACpE,SAAS,OAAO;AACZ,qBAAY;AAAA,QACR;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEO,iBAAiBC,OAAc,UAAyB;AAE3D,UAAM,QAAQ;AACd,UAAM,aAAa,GAAG,KAAK,IAAIA,KAAI;AACnC,WAAO,aAAa,UAAU;AAAA,EAClC;AAAA,EAEA,MAAM,YAAY,MAKA;AACd,UAAM,aAAa,CAAC,UAAkB;AAClC,YAAM,QAAQ,KAAK,IAAI,IAAI,aAAa;AACxC,qBAAY,KAAK,YAAY,KAAK,KAAK,KAAK,QAAQ,CAAC,CAAC,GAAG;AAAA,IAC7D;AAEA,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,UAAU,KAAK;AAErB,QAAI;AACA,YAAM,aAAa,IAAI,YAAY,EAAE,OAAO,OAAO,EAAE,SAAS;AAC9D,qBAAY;AAAA,QACR,4BAA4B,KAAK,IAAI,KAAK,WAAW,QAAQ,CAAC,CAAC;AAAA,MACnE;AAGA,YAAM,WAAW,KAAK;AAAA,QAClB,KAAK;AAAA,QACL,KAAK,YAAY;AAAA,MACrB;AAIA,YAAM,mBAAmB,KAAK,WAAW,OAAO;AAChD,iBAAW,eAAe;AAG1B,YAAM,qBAAqB,MAAM;AAAA,QAC7B,KAAK;AAAA,QACL;AAAA,MACJ;AACA,YAAM,gBAAgB,IAAI,aAAa,kBAAkB;AACzD,iBAAW,gBAAgB;AAG3B,YAAM,KAAK,QAAQ,gBAAgB,gBAAgB;AAAA,QAC/C,IAAI;AAAA,QACJ,SAAS,KAAK,QAAQ;AAAA,QACtB,SAAS;AAAA,UACL,MAAM;AAAA,UACN,UAAU;AAAA,YACN,QAAQ,KAAK;AAAA,YACb,MAAM,KAAK;AAAA,YACX,UAAU,KAAK,YAAY;AAAA,UAC/B;AAAA,QACJ;AAAA,QACA,WAAW;AAAA,QACX,WAAW,KAAK,IAAI;AAAA,MACxB,CAAC;AACD,iBAAW,uBAAuB;AAGlC,YAAM,SAAS,MAAM,YAAY,kBAAkB,KAAK,EAAE;AAC1D,YAAM,cAAc,OAAO;AAC3B,qBAAY,KAAK,aAAa,WAAW,SAAS;AAClD,iBAAW,kBAAkB;AAG7B,YAAM,aAAa;AACnB,UAAI,kBAAkB;AAEtB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,YAAY;AAChD,cAAM,aAAa,KAAK,IAAI;AAC5B,cAAM,QAAQ,OAAO;AAAA,UACjB;AAAA,UACA,KAAK,IAAI,IAAI,YAAY,OAAO,MAAM;AAAA,QAC1C;AAGA,cAAM,aAAa,MAAM,QAAQ;AAAA,UAC7B,MAAM,IAAI,CAAC,UAAU,MAAM,KAAK,SAAS,KAAK,CAAC;AAAA,QACnD;AAGA,cAAM,QAAQ;AAAA,UACV,WAAW,IAAI,OAAO,gBAAgBD,WAAU;AAC5C,kBAAM,UACF,GAAG,QAAQ,UAAU,IAAIA,MAAK;AAClC,kBAAM,iBAAiB,IAAI,aAAa,cAAc;AAEtD,kBAAM,KAAK,QAAQ,gBAAgB,gBAAgB;AAAA,cAC/C,IAAI;AAAA,cACJ,SAAS,KAAK,QAAQ;AAAA,cACtB,SAAS;AAAA,gBACL,MAAM,MAAMA,MAAK;AAAA,gBACjB,UAAU;AAAA,kBACN,QAAQ,KAAK;AAAA,kBACb,MAAM,KAAK;AAAA,kBACX,UAAU,KAAK,YAAY;AAAA,kBAC3B,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,YAAY,IAAIA;AAAA,kBAChB,cAAc,KAAK;AAAA,gBACvB;AAAA,cACJ;AAAA,cACA,WAAW;AAAA,cACX,WAAW,KAAK,IAAI;AAAA,YACxB,CAAC;AAAA,UACL,CAAC;AAAA,QACL;AAEA,2BAAmB,MAAM;AACzB,cAAM,aAAa,KAAK,IAAI,IAAI,cAAc;AAC9C,uBAAY;AAAA,UACR,oBAAoB,KAAK,IAAI,eAAe,eAAe,IAAI,WAAW,YAAY,UAAU,QAAQ,CAAC,CAAC;AAAA,QAC9G;AAAA,MACJ;AAEA,YAAM,aAAa,KAAK,IAAI,IAAI,aAAa;AAC7C,qBAAY;AAAA,QACR,wBAAwB,KAAK,IAAI,OAAO,UAAU,QAAQ,CAAC,CAAC;AAAA,MAChE;AAAA,IACJ,SAAS,OAAO;AACZ,UACI,KAAK,YACL,OAAO,SAAS,gCAClB;AACE,uBAAY;AAAA,UACR,oBAAoB,KAAK,IAAI;AAAA,QACjC;AACA;AAAA,MACJ;AACA,qBAAY,MAAM,yBAAyB,KAAK,IAAI,KAAK,KAAK;AAC9D,YAAM;AAAA,IACV;AAAA,EACJ;AACJ;;;AJrkBA,SAAS,YAAY;AACrB,SAAS,cAAAE,mBAAkB;AAM3B,SAAS,gBAAgB,MAAkC;AACvD,SACI,OAAO,SAAS,YAChB,SAAS,QACT,eAAe,QACf,OAAO,KAAK,cAAc;AAElC;AAEO,IAAM,eAAN,MAA4C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKtC,sBAAsB;AAAA;AAAA;AAAA;AAAA,EAI/B;AAAA;AAAA;AAAA;AAAA,EAIA,YAAY;AAAA;AAAA;AAAA;AAAA,EAKZ;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAoB,CAAC;AAAA;AAAA;AAAA;AAAA,EAKrB,aAA0B,CAAC;AAAA;AAAA;AAAA;AAAA,EAK3B,YAAwB,CAAC;AAAA;AAAA;AAAA;AAAA,EAKzB,WAAsB,CAAC;AAAA,EAEvB,UAAoB,CAAC;AAAA;AAAA;AAAA;AAAA,EAKrB;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ;AAAA;AAAA;AAAA;AAAA,EAKR;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,EAEA;AAAA,EAEiB;AAAA,EAEjB,WAAsC,oBAAI,IAAI;AAAA,EAC9C,iBAA8C,oBAAI,IAAI;AAAA,EACtD;AAAA,EACA,UAA4B,CAAC;AAAA;AAAA,EAI7B,sBAAsB,SAA+B;AACjD,QAAI,CAAC,QAAQ,WAAW;AACpB,YAAM,IAAI,MAAM,sCAAsC;AAAA,IAC1D;AAEA,QAAI,KAAK,eAAe,IAAI,QAAQ,SAAS,GAAG;AAC5C,kBAAY;AAAA,QACR,kBAAkB,QAAQ,SAAS;AAAA,MACvC;AACA;AAAA,IACJ;AAEA,SAAK,eAAe,IAAI,QAAQ,WAAW,OAAO;AAAA,EACtD;AAAA,EAEA,iBAAiB,WAA0C;AACvD,WAAO,KAAK,eAAe,IAAI,SAAS,KAAK;AAAA,EACjD;AAAA,EAEA,WAA8B,SAAgC;AAC1D,UAAM,kBAAkB,KAAK,SAAS,IAAI,OAAO;AACjD,QAAI,CAAC,iBAAiB;AAClB,kBAAY,MAAM,WAAW,OAAO,YAAY;AAChD,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,gBAAgB,SAAiC;AACnD,UAAM,cAAc,QAAQ;AAC5B,gBAAY,IAAI,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,4BAA4B,WAAW;AAE7F,QAAI,KAAK,SAAS,IAAI,WAAW,GAAG;AAChC,kBAAY;AAAA,QACR,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,eAAe,WAAW;AAAA,MACpE;AACA;AAAA,IACJ;AAGA,SAAK,SAAS,IAAI,aAAa,OAAO;AACtC,gBAAY,QAAQ,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,eAAe,WAAW,0BAA0B;AAAA,EAClH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,YAAY,MAoBT;AAEC,SAAK,UACD,KAAK,WAAW,MAChB,MAAM,WACN,aAAa,KAAK,WAAW,QAAQ,OAAO,CAAC;AACjD,SAAK,YAAY,KAAK;AAEtB,QAAG,CAAC,KAAK,WAAW;AAChB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IACjD;AAEA,gBAAY,KAAK,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,+CAA+C;AAAA,MAClG,WAAW,KAAK,WAAW;AAAA,MAC3B,eAAe,KAAK;AAAA,MACpB,wBAAwB,KAAK,WAAW;AAAA,IAC5C,CAAC;AAED,gBAAY;AAAA,MACR,6CAA6C,QAAQ,IAAI,CAAC;AAAA,IAC9D;AAGA,SAAK,gBAAgBC;AAAA,MACjB,QAAQ,IAAI;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAEA,gBAAY;AAAA,MACR,yCAAyC,KAAK,aAAa;AAAA,IAC/D;AAEA,SAAK,sBACD,KAAK,sBAAsB,KAAK;AAEpC,SAAK,kBAAkB,KAAK;AAE5B,gBAAY,QAAQ,aAAa,KAAK,OAAO,EAAE;AAE/C,SAAK,QAAS,KAAK,SAA0B,KAAK;AAElD,SAAK,eAAe,KAAK;AAEzB,SAAK,iBAAiB,IAAI,cAAc;AAAA,MACpC,SAAS;AAAA,MACT,WAAW;AAAA,IACf,CAAC;AAED,SAAK,qBAAqB,IAAI,cAAc;AAAA,MACxC,SAAS;AAAA,MACT,WAAW;AAAA,IACf,CAAC;AAED,SAAK,cAAc,IAAI,cAAc;AAAA,MACjC,SAAS;AAAA,MACT,WAAW;AAAA,IACf,CAAC;AAED,SAAK,mBAAmB,IAAI,cAAc;AAAA,MACtC,SAAS;AAAA,MACT,WAAW;AAAA,IACf,CAAC;AAED,SAAK,mBAAmB,IAAI,cAAc;AAAA,MACtC,SAAS;AAAA,MACT,WAAW;AAAA,IACf,CAAC;AAED,SAAK,sBAAsB,IAAI,oBAAoB;AAAA,MAC/C,SAAS;AAAA,MACT,WAAW;AAAA,MACX,eAAe,KAAK;AAAA,IACxB,CAAC;AAED,KAAC,KAAK,YAAY,CAAC,GAAG,QAAQ,CAAC,YAA4B;AACvD,WAAK,sBAAsB,OAAO;AAAA,IACtC,CAAC;AAED,KAAC,KAAK,YAAY,CAAC,GAAG,QAAQ,CAAC,YAAqB;AAChD,WAAK,gBAAgB,OAAO;AAAA,IAChC,CAAC;AAED,SAAK,YAAY,KAAK,aAAa,KAAK;AAExC,gBAAY,KAAK,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,+BAA+B;AAAA,MAClF,wBAAwB,KAAK,UAAU;AAAA,MACvC,mBAAmB,KAAK;AAAA,MACxB,sBAAsB,KAAK;AAAA,MAC3B,gBACI,KAAK,UAAU,iBACf,KAAK,iBACL,KAAK;AAAA,IACb,CAAC;AAED,SAAK,gBACD,KAAK,UAAU,iBACf,KAAK,iBACL,KAAK;AAET,SAAK,qBACD,KAAK,UAAU,sBAAsB,KAAK;AAE9C,SAAK,2BACD,KAAK,UAAU,4BAA4B,KAAK;AAEpD,gBAAY;AAAA,MACV,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO;AAAA,MACtC,KAAK;AAAA,IACP;AAEA,gBAAY;AAAA,MACV,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO;AAAA,MACtC,KAAK;AAAA,IACP;AAEA,gBAAY;AAAA,MACR,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO;AAAA,MACtC,KAAK;AAAA,IACT;AAGA,QAAI,CAAC,OAAO,OAAO,iBAAiB,EAAE,SAAS,KAAK,aAAa,GAAG;AAChE,kBAAY,MAAM,2BAA2B,KAAK,aAAa;AAC/D,kBAAY;AAAA,QACR;AAAA,QACA,OAAO,OAAO,iBAAiB;AAAA,MACnC;AACA,YAAM,IAAI,MAAM,2BAA2B,KAAK,aAAa,EAAE;AAAA,IACnE;AAEA,QAAI,CAAC,KAAK,WAAW;AACjB,kBAAY,KAAK,gDAAgD;AAAA,IACrE;AAEA,SAAK,QAAQ,KAAK;AAElB,SAAK,UAAU;AAAA,MACX,GAAI,KAAK,WAAW,WAAW,CAAC;AAAA,MAChC,GAAI,KAAK,WAAW,CAAC;AAAA,IACzB;AAEA,SAAK,QAAQ,QAAQ,CAAC,WAAW;AAC7B,aAAO,SAAS,QAAQ,CAAC,WAAW;AAChC,aAAK,eAAe,MAAM;AAAA,MAC9B,CAAC;AAED,aAAO,YAAY,QAAQ,CAAC,cAAc;AACtC,aAAK,kBAAkB,SAAS;AAAA,MACpC,CAAC;AAED,aAAO,UAAU,QAAQ,CAAC,YAAY;AAClC,aAAK,gBAAgB,OAAO;AAAA,MAChC,CAAC;AAED,aAAO,WAAW,QAAQ,CAAC,aAAa;AACpC,aAAK,wBAAwB,QAAQ;AAAA,MACzC,CAAC;AAED,aAAO,UAAU,QAAQ,CAAC,YAAY;AAClC,aAAK,gBAAgB,OAAO;AAAA,MAChC,CAAC;AAAA,IACL,CAAC;AAED,KAAC,KAAK,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW;AACrC,WAAK,eAAe,MAAM;AAAA,IAC9B,CAAC;AAED,KAAC,KAAK,aAAa,CAAC,GAAG,QAAQ,CAAC,aAAa;AACzC,WAAK,wBAAwB,QAAQ;AAAA,IACzC,CAAC;AAED,KAAC,KAAK,cAAc,CAAC,GAAG,QAAQ,CAAC,cAAyB;AACtD,WAAK,kBAAkB,SAAS;AAAA,IACpC,CAAC;AAAA,EAGL;AAAA,EAEA,MAAc,qBAAqB;AAG/B,SAAK,iBAAiB,KAAK,OAAO;AAClC,SAAK;AAAA,MACD,KAAK;AAAA,MACL,KAAK,UAAU,YAAY,KAAK,UAAU;AAAA,MAC1C,KAAK,UAAU;AAAA,IACnB,EAAE,KAAK,MAAM;AAET,WAAK,wBAAwB,KAAK,SAAS,KAAK,OAAO;AAAA,IAC3D,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,aAAa;AACf,SAAK,mBAAmB;AAExB,eAAW,CAAC,aAAa,OAAO,KAAK,KAAK,SAAS,QAAQ,GAAG;AAC1D,UAAI;AACA,cAAM,QAAQ,WAAW,IAAI;AAC7B,aAAK,SAAS,IAAI,aAAa,OAAO;AACtC,oBAAY;AAAA,UACR,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,eAAe,WAAW;AAAA,QACpE;AAAA,MACJ,SAAS,OAAO;AACZ,oBAAY;AAAA,UACR,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,oCAAoC,WAAW;AAAA,UACrF;AAAA,QACJ;AACA,cAAM;AAAA,MACV;AAAA,IACJ;AAYA,QACI,KAAK,aACL,KAAK,UAAU,aACf,KAAK,UAAU,UAAU,SAAS,GACpC;AACE,kBAAY;AAAA,QACR,sCAAsC,KAAK,UAAU,SAAS,eAAe,OAAO,KAAK;AAAA,MAC7F;AACA,kBAAY;AAAA,QACR;AAAA,QACA,KAAK,UAAU;AAAA,MACnB;AAEA,UAAI,KAAK,UAAU,SAAS,cAAc;AAEtC,cAAM,CAAC,oBAAoB,eAAe,eAAe,IACrD,KAAK,UAAU,UAAU;AAAA,UACrB,CAAC,KAAK,SAAS;AACX,gBAAI,OAAO,SAAS,UAAU;AAC1B,kBAAI,gBAAgB,IAAI,GAAG;AACvB,4BAAY;AAAA,kBACR,sCAAsC,KAAK,UAAU,IAAI,CAAC;AAAA,gBAC9D;AACA,oBAAI,CAAC,EAAE,KAAK,IAAI;AAAA,cACpB,WAAW,UAAU,MAAM;AACvB,4BAAY;AAAA,kBACR,iCAAiC,KAAK,UAAU,IAAI,CAAC;AAAA,gBACzD;AACA,oBAAI,CAAC,EAAE,KAAK,IAAI;AAAA,cACpB;AAAA,YACJ,WAAW,OAAO,SAAS,UAAU;AACjC,0BAAY;AAAA,gBACR,mCAAmC,KAAK,MAAM,GAAG,GAAG,CAAC;AAAA,cACzD;AACA,kBAAI,CAAC,EAAE,KAAK,IAAI;AAAA,YACpB;AACA,mBAAO;AAAA,UACX;AAAA,UACA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,QAKf;AAEJ,oBAAY;AAAA,UACR,uBAAuB,mBAAmB,MAAM,iBAAiB,cAAc,MAAM,eAAe,gBAAgB,MAAM;AAAA,QAC9H;AAGA,YAAI,mBAAmB,SAAS,GAAG;AAC/B,sBAAY;AAAA,YACR;AAAA,UACJ;AACA,qBAAW,OAAO,oBAAoB;AAClC,wBAAY;AAAA,cACR,kBAAkB,IAAI,SAAS,aAAa,CAAC,CAAC,IAAI,MAAM;AAAA,YAC5D;AACA,kBAAM,KAAK,6BAA6B,GAAG;AAAA,UAC/C;AAAA,QACJ;AAEA,YAAI,cAAc,SAAS,GAAG;AAC1B,sBAAY;AAAA,YACR;AAAA,UACJ;AACA,gBAAM,KAAK,6BAA6B,aAAa;AAAA,QACzD;AAEA,YAAI,gBAAgB,SAAS,GAAG;AAC5B,sBAAY;AAAA,YACR;AAAA,UACJ;AACA,gBAAM,KAAK,6BAA6B,eAAe;AAAA,QAC3D;AAAA,MACJ,OAAO;AAEH,cAAM,kBAAkB,KAAK,UAAU,UAAU;AAAA,UAC7C,CAAC,SAAyB,OAAO,SAAS;AAAA,QAC9C;AACA,cAAM,KAAK,0BAA0B,eAAe;AAAA,MACxD;AAGA,kBAAY;AAAA,QACR;AAAA,MACJ;AACA,YAAM,KAAK,oBAAoB,6BAA6B;AAC5D,kBAAY,KAAK,gCAAgC;AAAA,IACrD;AAAA,EACJ;AAAA,EAEA,MAAM,OAAO;AACT,gBAAY,MAAM,6BAA6B,KAAK,UAAU,IAAI;AASlE,eAAW,KAAK,KAAK,SAAS;AAC1B,kBAAY;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,UAAU;AAAA,MACnB;AACA,QAAE,KAAK,IAAI;AAAA,IACf;AAAA,EAGJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,0BAA0B,OAAiB;AACrD,eAAW,QAAQ,OAAO;AACtB,YAAM,cAAc,aAAa,IAAI;AACrC,YAAM,mBACF,MAAM,KAAK,iBAAiB,cAAc,WAAW;AACzD,UAAI,kBAAkB;AAClB;AAAA,MACJ;AAEA,kBAAY;AAAA,QACR;AAAA,QACA,KAAK,UAAU;AAAA,QACf;AAAA,QACA,KAAK,MAAM,GAAG,GAAG;AAAA,MACrB;AAEA,YAAM,kBAAU,IAAI,MAAM;AAAA,QACtB,IAAI;AAAA,QACJ,SAAS;AAAA,UACL,MAAM;AAAA,QACV;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,6BACV,OACF;AACE,QAAI,WAAW;AAEf,eAAW,QAAQ,OAAO;AACtB,UAAI,CAAC,KAAM;AAEX,UAAI;AAEA,YAAI,WAAW;AACf,YAAI,cAAc;AAGlB,YAAI,OAAO,SAAS,YAAY,UAAU,MAAM;AAC5C,qBAAW,KAAK,WAAW;AAC3B,wBAAc,KAAK;AAAA,QACvB,OAAO;AACH,wBAAc;AAAA,QAClB;AAGA,cAAM,cAAc,KAAK,oBAAoB;AAAA,UACzC;AAAA,UACA;AAAA,QACJ;AACA,cAAM,gBAAgB,YACjB,MAAM,GAAG,EACT,IAAI,GACH,YAAY;AAGlB,YACI,iBACA,CAAC,MAAM,OAAO,KAAK,EAAE,SAAS,aAAa,GAC7C;AACE,cAAI;AACA,kBAAM,WAAWA,MAAK,KAAK,eAAe,WAAW;AAErD,wBAAY,MAAM,eAAe;AAAA,cAC7B;AAAA,cACA,SAAS,KAAK;AAAA,cACd,cAAc;AAAA,cACd,UAAU;AAAA,cACV;AAAA,cACA,eAAe,KAAK;AAAA,YACxB,CAAC;AAGD,kBAAM,oBACF,MAAM,KAAK,oBAAoB,aAAa;AAAA,cACxC,IAAI;AAAA,cACJ,SAAS,KAAK;AAAA;AAAA,YAClB,CAAC;AAEL,wBAAY,MAAM,sBAAsB;AAAA,cACpC,cAAc;AAAA,cACd,UAAU;AAAA,cACV;AAAA,cACA;AAAA,cACA,QAAQ,kBAAkB,SAAS;AAAA,cACnC,gBAAgB,kBAAkB;AAAA,cAClC,aAAa,kBAAkB,CAAC,IAC1B;AAAA,gBACI,IAAI,kBAAkB,CAAC,EAAE;AAAA,gBACzB,SAAS,kBAAkB,CAAC,EAAE;AAAA,gBAC9B,eACI,kBAAkB,CAAC,EAAE,QAAQ,KACxB;AAAA,cACb,IACA;AAAA,cACN,SAAS,kBAAkB,IAAI,CAAC,OAAO;AAAA,gBACnC,IAAI,EAAE;AAAA,gBACN,SAAS,EAAE;AAAA,gBACX,iBAAiB,CAAC,EAAE,GAAG,SAAS,OAAO;AAAA,cAC3C,EAAE;AAAA,YACN,CAAC;AAGD,kBAAM,UAAkB,MAAM;AAAA,cAC1B;AAAA,cACA;AAAA,YACJ;AACA,gBAAI,CAAC,SAAS;AACV,yBAAW;AACX;AAAA,YACJ;AAEA,gBAAI,kBAAkB,SAAS,GAAG;AAC9B,oBAAM,kBACF,kBAAkB,CAAC,EAAE,QAAQ;AAEjC,0BAAY,MAAM,iBAAiB;AAAA,gBAC/B,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA,uBAAuB,gBAAgB;AAAA,gBACvC,kBAAkB,QAAQ;AAAA,gBAC1B,eAAe,QAAQ,MAAM,GAAG,GAAG;AAAA,gBACnC,uBAAuB,gBAAgB;AAAA,kBACnC;AAAA,kBACA;AAAA,gBACJ;AAAA,gBACA,SAAS,oBAAoB;AAAA,cACjC,CAAC;AAED,kBAAI,oBAAoB,SAAS;AAC7B,4BAAY;AAAA,kBACR,GAAG,WAAW,qBAAqB,WAAW,IAAI,WAAW;AAAA,gBACjE;AACA;AAAA,cACJ;AAGA,0BAAY;AAAA,gBACR,GAAG,WAAW,qBAAqB,WAAW,IAAI,WAAW;AAAA,cACjE;AACA,oBAAM,KAAK,oBAAoB;AAAA,gBAC3B;AAAA,cACJ;AACA,oBAAM,KAAK,oBAAoB;AAAA,gBAC3B,GAAG,WAAW;AAAA,cAClB;AAAA,YACJ;AAEA,wBAAY;AAAA,cACR,cAAc,cAAc,YAAY,CAAC;AAAA,cACzC,KAAK,UAAU;AAAA,cACf;AAAA,cACA;AAAA,YACJ;AAEA,kBAAM,KAAK,oBAAoB,YAAY;AAAA,cACvC,MAAM;AAAA,cACN;AAAA,cACA,MAAM;AAAA,cACN;AAAA,YACJ,CAAC;AAAA,UACL,SAAS,OAAY;AACjB,uBAAW;AACX,wBAAY;AAAA,cACR,iCAAiC,WAAW;AAAA,cAC5C,OAAO,WAAW,SAAS;AAAA,YAC/B;AACA;AAAA,UACJ;AAAA,QACJ,OAAO;AAEH,sBAAY;AAAA,YACR;AAAA,YACA,KAAK,UAAU;AAAA,YACf;AAAA,YACA,YAAY,MAAM,GAAG,GAAG;AAAA,UAC5B;AAEA,gBAAM,oBACF,MAAM,KAAK,oBAAoB,aAAa;AAAA,YACxC,IAAI;AAAA,YACJ,SAAS,KAAK;AAAA,UAClB,CAAC;AAEL,cAAI,kBAAkB,SAAS,GAAG;AAC9B,wBAAY;AAAA,cACR,oBAAoB,WAAW;AAAA,YACnC;AACA;AAAA,UACJ;AAEA,gBAAM,KAAK,oBAAoB,gBAAgB;AAAA,YAC3C,IAAI;AAAA,YACJ,SAAS,KAAK;AAAA,YACd,SAAS;AAAA,cACL,MAAM;AAAA,cACN,UAAU;AAAA,gBACN,MAAM;AAAA,cACV;AAAA,YACJ;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ,SAAS,OAAY;AACjB,mBAAW;AACX,oBAAY;AAAA,UACR,mCAAmC,IAAI;AAAA,UACvC,OAAO,WAAW,SAAS;AAAA,QAC/B;AACA;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,UAAU;AACV,kBAAY;AAAA,QACR;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,6BAA6B,WAGxC;AACC,QAAI,CAAC,UAAU,WAAW;AACtB,kBAAY,MAAM,wCAAwC;AAC1D;AAAA,IACJ;AAGA,UAAM,eAAe,UAAU,UAAU,QAAQ,SAAS,EAAE;AAC5D,UAAM,UAAUA,MAAK,KAAK,eAAe,YAAY;AAErD,QAAI;AAEA,YAAM,YAAYD,YAAW,OAAO;AACpC,UAAI,CAAC,WAAW;AACZ,oBAAY;AAAA,UACR,6CAA6C,YAAY;AAAA,QAC7D;AACA;AAAA,MACJ;AAEA,kBAAY,MAAM,iCAAiC,OAAO,EAAE;AAE5D,YAAM,QAAQ,MAAM,KAAK,qBAAqB;AAAA,QAC1C,KAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,MACd,CAAC;AAED,UAAI,MAAM,WAAW,GAAG;AACpB,oBAAY;AAAA,UACR,yCAAyC,UAAU,SAAS;AAAA,QAChE;AACA;AAAA,MACJ;AAEA,kBAAY;AAAA,QACR,yBAAyB,MAAM,MAAM,aAAa,UAAU,SAAS;AAAA,MACzE;AAGA,YAAM,aAAa;AACnB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,YAAY;AAC/C,cAAM,QAAQ,MAAM,MAAM,GAAG,IAAI,UAAU;AAE3C,cAAM,QAAQ;AAAA,UACV,MAAM,IAAI,OAAO,SAAS;AACtB,gBAAI;AACA,oBAAM,eAAeC,MAAK,cAAc,IAAI;AAE5C,0BAAY;AAAA,gBACR,mCAAmC,IAAI,CAAC,IAAI,MAAM,MAAM;AAAA,gBACxD;AAAA,kBACI;AAAA,kBACA;AAAA,kBACA,QAAQ,UAAU;AAAA,gBACtB;AAAA,cACJ;AAEA,oBAAM,KAAK,6BAA6B;AAAA,gBACpC;AAAA,kBACI,MAAM;AAAA,kBACN,QAAQ,UAAU;AAAA,gBACtB;AAAA,cACJ,CAAC;AAAA,YACL,SAAS,OAAO;AACZ,0BAAY;AAAA,gBACR,2CAA2C,IAAI;AAAA,gBAC/C,iBAAiB,QACX;AAAA,kBACI,MAAM,MAAM;AAAA,kBACZ,SAAS,MAAM;AAAA,kBACf,OAAO,MAAM;AAAA,gBACjB,IACA;AAAA,cACV;AAAA,YACJ;AAAA,UACJ,CAAC;AAAA,QACL;AAEA,oBAAY;AAAA,UACR,mCAAmC,KAAK,IAAI,IAAI,YAAY,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM;AAAA,QAC7F;AAAA,MACJ;AAEA,kBAAY;AAAA,QACR,qDAAqD,YAAY;AAAA,MACrE;AAAA,IACJ,SAAS,OAAO;AACZ,kBAAY;AAAA,QACR,gDAAgD,YAAY;AAAA,QAC5D,iBAAiB,QACX;AAAA,UACI,MAAM,MAAM;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,OAAO,MAAM;AAAA,QACjB,IACA;AAAA,MACV;AACA,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,WAAW,KAAa;AAEpB,QAAI,KAAK,UAAU,UAAU,UAAU,GAAG,GAAG;AACzC,aAAO,KAAK,UAAU,SAAS,QAAQ,GAAG;AAAA,IAC9C;AAEA,QAAI,KAAK,UAAU,WAAW,GAAG,GAAG;AAChC,aAAO,KAAK,UAAU,SAAS,GAAG;AAAA,IACtC;AAGA,QAAI,iBAAS,GAAG,GAAG;AACf,aAAO,iBAAS,GAAG;AAAA,IACvB;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,wBAAwB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,QAAgB;AAC3B,gBAAY,QAAQ,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,2BAA2B,OAAO,IAAI,EAAE;AAClG,SAAK,QAAQ,KAAK,MAAM;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,WAAsB;AACpC,SAAK,WAAW,KAAK,SAAS;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,wBAAwB,UAAoB;AACxC,SAAK,UAAU,KAAK,QAAQ;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB,SAAkB;AAC9B,SAAK,SAAS,KAAK,OAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eACF,SACA,WACA,OACA,UACa;AACb,eAAW,YAAY,WAAW;AAC9B,UAAI,CAAC,SAAS,SAAS,QAAQ;AAC3B,oBAAY,KAAK,0CAA0C;AAC3D;AAAA,MACJ;AAEA,YAAM,mBAAmB,SAAS,QAAQ,OACrC,YAAY,EACZ,QAAQ,KAAK,EAAE;AAEpB,kBAAY,QAAQ,sBAAsB,gBAAgB,EAAE;AAE5D,UAAI,SAAS,KAAK,QAAQ;AAAA,QACtB,CAAC,MACG,EAAE,KACG,YAAY,EACZ,QAAQ,KAAK,EAAE,EACf,SAAS,gBAAgB,KAC9B,iBAAiB;AAAA,UACb,EAAE,KAAK,YAAY,EAAE,QAAQ,KAAK,EAAE;AAAA,QACxC;AAAA,MACR;AAEA,UAAI,CAAC,QAAQ;AACT,oBAAY,KAAK,uCAAuC;AACxD,mBAAW,WAAW,KAAK,SAAS;AAChC,gBAAM,eAAe,QAAQ,QAAQ;AAAA,YACjC,CAAC,WACG,OACK,YAAY,EACZ,QAAQ,KAAK,EAAE,EACf,SAAS,gBAAgB,KAC9B,iBAAiB;AAAA,cACb,OAAO,YAAY,EAAE,QAAQ,KAAK,EAAE;AAAA,YACxC;AAAA,UACR;AACA,cAAI,cAAc;AACd,qBAAS;AACT,wBAAY;AAAA,cACR,4BAA4B,OAAO,IAAI;AAAA,YAC3C;AACA;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,CAAC,QAAQ;AACT,oBAAY;AAAA,UACR;AAAA,UACA,SAAS,QAAQ;AAAA,QACrB;AACA;AAAA,MACJ;AAEA,UAAI,CAAC,OAAO,SAAS;AACjB,oBAAY,MAAM,UAAU,OAAO,IAAI,kBAAkB;AACzD;AAAA,MACJ;AAEA,UAAI;AACA,oBAAY;AAAA,UACR,iCAAiC,OAAO,IAAI;AAAA,QAChD;AACA,cAAM,OAAO,QAAQ,MAAM,SAAS,OAAO,CAAC,GAAG,QAAQ;AAAA,MAC3D,SAAS,OAAO;AACZ,oBAAY,MAAM,KAAK;AAAA,MAC3B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,SACF,SACA,OACA,YACA,UACF;AACE,UAAM,oBAAoB,KAAK,WAAW;AAAA,MACtC,OAAO,cAAyB;AAC5B,oBAAY,IAAI,cAAc,UAAU,IAAI;AAC5C,YAAI,CAAC,UAAU,SAAS;AACpB,iBAAO;AAAA,QACX;AACA,YAAI,CAAC,cAAc,CAAC,UAAU,WAAW;AACrC,iBAAO;AAAA,QACX;AACA,cAAMC,UAAS,MAAM,UAAU,SAAS,MAAM,SAAS,KAAK;AAC5D,YAAIA,SAAQ;AACR,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,UAAM,qBAAqB,MAAM,QAAQ,IAAI,iBAAiB;AAC9D,UAAM,iBAAiB,mBAAmB;AAAA,MACtC,CAAC,cAAsC,cAAc;AAAA,IACzD;AAGA,QAAI,CAAC,kBAAkB,eAAe,WAAW,GAAG;AAChD,aAAO,CAAC;AAAA,IACZ;AAEA,UAAM,UAAU,eAAe;AAAA,MAC3B,OAAO;AAAA,QACH,GAAG;AAAA,QACH,YAAY,iBAAiB,cAAc;AAAA,QAC3C,gBAAgB,qBAAqB,cAAc;AAAA,MACvD;AAAA,MACA,UACI,KAAK,UAAU,WAAW,sBAC1B;AAAA,IACR,CAAC;AAED,UAAM,SAAS,MAAM,aAAa;AAAA,MAC9B,SAAS;AAAA,MACT;AAAA,MACA;AAAA;AAAA,IAEJ,CAAC;AAED,UAAM,aAAa;AAAA,MACf;AAAA,IACJ;AAEA,eAAW,aAAa,KAAK,YAAY;AACrC,UAAI,CAAC,YAAY,SAAS,UAAU,IAAI,EAAG;AAE3C,UAAI,UAAU;AACV,cAAM,UAAU,QAAQ,MAAM,SAAS,OAAO,CAAC,GAAG,QAAQ;AAAA,IAClE;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,wBAAwB,QAAc,QAAc;AACtD,UAAM,eACF,MAAM,KAAK,gBAAgB,0BAA0B,MAAM;AAE/D,QAAI,cAAc,WAAW,GAAG;AAC5B,YAAM,KAAK,gBAAgB,eAAe,QAAQ,MAAM;AAAA,IAC5D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,iBACF,QACA,UACA,MACA,OACA,QACF;AACE,UAAM,UAAU,MAAM,KAAK,gBAAgB,eAAe,MAAM;AAChE,QAAI,CAAC,SAAS;AACV,YAAM,KAAK,gBAAgB,cAAc;AAAA,QACrC,IAAI;AAAA,QACJ,MAAM,QAAQ,KAAK,UAAU,QAAQ;AAAA,QACrC,UAAU,YAAY,KAAK,UAAU,YAAY;AAAA;AAAA,QAEjD,OAAO,SAAS,KAAK,UAAU,SAAS;AAAA;AAAA;AAAA,QAGxC,SAAS,KAAK,YAAY,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW;AAAA,UACxD;AAAA,UACA,SAAS,KAAK,WAAW,SAAS,IAAI,CAAC,WAAW,OAAO,IAAI;AAAA,QACjE,CAAC,IAAI,EAAE,SAAS,GAAG;AAAA,MACvB,CAAC;AACD,kBAAY,QAAQ,QAAQ,QAAQ,wBAAwB;AAAA,IAChE;AAAA,EACJ;AAAA,EAEA,MAAM,wBAAwB,QAAc,QAAc;AACtD,UAAM,eACF,MAAM,KAAK,gBAAgB,uBAAuB,MAAM;AAC5D,QAAI,CAAC,aAAa,SAAS,MAAM,GAAG;AAChC,YAAM,KAAK,gBAAgB,eAAe,QAAQ,MAAM;AACxD,UAAI,WAAW,KAAK,SAAS;AACzB,oBAAY;AAAA,UACR,SAAS,KAAK,UAAU,IAAI,mBAAmB,MAAM;AAAA,QACzD;AAAA,MACJ,OAAO;AACH,oBAAY;AAAA,UACR,QAAQ,MAAM,mBAAmB,MAAM;AAAA,QAC3C;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,iBACF,QACA,QACA,UACA,gBACA,QACF;AACE,UAAM,QAAQ,IAAI;AAAA,MACd,KAAK;AAAA,QACD,KAAK;AAAA,QACL,KAAK,UAAU,YAAY;AAAA,QAC3B,KAAK,UAAU,QAAQ;AAAA,QACvB;AAAA,MACJ;AAAA,MACA,KAAK;AAAA,QACD;AAAA,QACA,YAAY,SAAS;AAAA,QACrB,kBAAkB,SAAS;AAAA,QAC3B;AAAA,MACJ;AAAA,MACA,KAAK,iBAAiB,MAAM;AAAA,IAChC,CAAC;AAED,UAAM,QAAQ,IAAI;AAAA,MACd,KAAK,wBAAwB,QAAQ,MAAM;AAAA,MAC3C,KAAK,wBAAwB,KAAK,SAAS,MAAM;AAAA,IACrD,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,iBAAiB,QAAc;AACjC,UAAM,OAAO,MAAM,KAAK,gBAAgB,QAAQ,MAAM;AACtD,QAAI,CAAC,MAAM;AACP,YAAM,KAAK,gBAAgB,WAAW,MAAM;AAC5C,kBAAY,IAAI,QAAQ,MAAM,wBAAwB;AAAA,IAC1D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aACF,SACA,iBAA6C,CAAC,GAChD;AACE,UAAM,EAAE,QAAQ,OAAO,IAAI;AAE3B,UAAM,qBAAqB,KAAK,sBAAsB;AAEtD,UAAM,CAAC,YAAY,oBAAoB,SAAS,IAI5C,MAAM,QAAQ,IAAI;AAAA,MAClB,gBAAgB,EAAE,SAAS,MAAM,OAAO,CAAC;AAAA,MACzC,KAAK,eAAe,YAAY;AAAA,QAC5B;AAAA,QACA,OAAO;AAAA,QACP,QAAQ;AAAA,MACZ,CAAC;AAAA,MACD,SAAS;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,gBAAgB;AAAA,QAChB;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAED,UAAM,QAAQ,oBAAoB,EAAE,OAAO,UAAU,CAAC;AAEtD,UAAM,SAAS,aAAa,EAAE,QAAQ,cAAc,CAAC,EAAE,CAAC;AAExD,UAAM,iBAAiB,eAAe;AAAA,MAClC,UAAU;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC;AAED,UAAM,cAAc,YAAY;AAAA,MAC5B,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,oBAAoB;AAAA,IACxB,CAAC;AAID,UAAM,aAAa,YAAY;AAAA,MAC3B,CAAC,UAAiB,MAAM,OAAO;AAAA,IACnC,GAAG;AAGH,UAAM,YACF,YAAY,KAAK,CAAC,UAAiB,MAAM,OAAO,KAAK,OAAO,GACtD,QAAQ,KAAK,UAAU;AAEjC,QAAI,iBAAiB,QAAQ,QAAQ,eAAe,CAAC;AAErD,QAAI,sBAAsB,MAAM,QAAQ,kBAAkB,GAAG;AACzD,YAAM,4BAA4B,mBAAmB;AAAA,QACjD,CAAC,QACG,IAAI,QAAQ,eACZ,IAAI,QAAQ,YAAY,SAAS;AAAA,MACzC;AAEA,UAAI,2BAA2B;AAC3B,cAAM,kBACF,2BAA2B,aAAa,KAAK,IAAI;AACrD,cAAM,2BACF,kBAAkB,KAAK,KAAK;AAEhC,yBAAiB,mBAAmB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;AAC3D,gBAAM,UAAU,IAAI,aAAa,KAAK,IAAI;AAC1C,gBAAM,eAAe,WAAW;AAChC,gBAAM,cAAc,IAAI,QAAQ,eAAe,CAAC;AAChD,cAAI,CAAC,cAAc;AACf,wBAAY,QAAQ,CAAC,eAAe;AAChC,yBAAW,OAAO;AAAA,YACtB,CAAC;AAAA,UACL;AACA,iBAAO;AAAA,QACX,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,UAAM,uBAAuB,eACxB;AAAA,MACG,CAAC,eACG,OAAO,WAAW,EAAE;AAAA,QAChC,WAAW,KAAK;AAAA,OACjB,WAAW,GAAG;AAAA,QACb,WAAW,MAAM;AAAA,eACV,WAAW,WAAW;AAAA,QAC7B,WAAW,IAAI;AAAA;AAAA,IAEX,EACC,KAAK,IAAI;AAGd,QAAI,OAAO;AAEX,QAAI,KAAK,UAAU,QAAQ,KAAK,UAAU,KAAK,SAAS,GAAG;AACvD,YAAM,eAAe,CAAC,GAAG,KAAK,UAAU,IAAI,EAAE;AAAA,QAC1C,MAAM,KAAK,OAAO,IAAI;AAAA,MAC1B;AACA,YAAM,eAAe,aAAa,MAAM,GAAG,EAAE;AAC7C,aAAO,aAAa,KAAK,IAAI;AAAA,IACjC;AAEA,UAAM,iCAAiC,KAAK,UAAU,aACjD,KAAK,MAAM,MAAM,KAAK,OAAO,CAAC,EAC9B,IAAI,CAAC,SAAS;AACX,YAAM,gBAAgB,GAAG,IAAI;AAC7B,aAAO;AAAA,IACX,CAAC,EACA,MAAM,GAAG,EAAE,EACX,KAAK,IAAI;AAEd,UAAM,oCAAoC,KAAK,UAAU,gBACpD,KAAK,MAAM,MAAM,KAAK,OAAO,CAAC,EAC9B,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,YAAY;AACd,YAAM,eAAe,MAAM;AAAA,QAAK,EAAE,QAAQ,EAAE;AAAA,QAAG,MAC3CC,sBAAqB,EAAE,cAAc,CAACC,MAAK,EAAE,CAAC;AAAA,MAClD;AAEA,aAAO,QACF,IAAI,CAACC,aAAY;AACd,YAAI,gBAAgB,GAAGA,SAAQ,IAAI,KAAKA,SAAQ,QAAQ,IAAI;AAC5D,qBAAa,QAAQ,CAAC,MAAMC,WAAU;AAClC,gBAAM,cAAc,SAASA,SAAQ,CAAC;AACtC,0BAAgB,cAAc;AAAA,YAC1B;AAAA,YACA;AAAA,UACJ;AAAA,QACJ,CAAC;AACD,eAAO;AAAA,MACX,CAAC,EACA,KAAK,IAAI;AAAA,IAClB,CAAC,EACA,KAAK,MAAM;AAEhB,UAAM,wBAAwB,OAC1B,OACA,UACoB;AAEpB,YAAM,QAAQ,MAAM,KAAK,gBAAgB,wBAAwB;AAAA,QAC7D;AAAA,QACA;AAAA,MACJ,CAAC;AAGD,aAAO,KAAK,eAAe,qBAAqB;AAAA;AAAA,QAE5C,SAAS,MAAM,OAAO,CAAC,SAAS,SAAS,MAAM;AAAA,QAC/C,OAAO;AAAA,MACX,CAAC;AAAA,IACL;AAEA,UAAM,qBACF,WAAW,KAAK,UACV,MAAM,sBAAsB,QAAQ,KAAK,OAAO,IAChD,CAAC;AAEX,UAAM,+BAA+B,OACjC,2BACkB;AAElB,YAAM,wBAAwB,MAAM,QAAQ;AAAA,QACxC,uBAAuB,IAAI,OAAOD,aAAY;AAC1C,gBAAM,SAASA,SAAQ,WAAW,KAAK;AACvC,cAAI;AACJ,cAAI,QAAQ;AACR,qBAAS,KAAK,UAAU;AAAA,UAC5B,OAAO;AACH,kBAAM,YACF,MAAM,KAAK,gBAAgB;AAAA,cACvBA,SAAQ;AAAA,YACZ;AACJ,qBAAS,WAAW,YAAY;AAAA,UACpC;AACA,iBAAO,GAAG,MAAM,KAAKA,SAAQ,QAAQ,IAAI;AAAA,QAC7C,CAAC;AAAA,MACL;AAEA,aAAO,sBAAsB,KAAK,IAAI;AAAA,IAC1C;AAEA,UAAM,+BACF,MAAM,6BAA6B,kBAAkB;AAEzD,UAAM,4BAA4B,OAC9B,wBACAE,YACkB;AAClB,YAAM,wBAAwB,YAAY;AAAA,QACtC,UAAU;AAAA,QACV,QAAAA;AAAA,QACA,oBAAoB;AAAA,MACxB,CAAC;AAED,aAAO;AAAA,IACX;AAEA,UAAM,4BAA4B,MAAM;AAAA,MACpC;AAAA,MACA;AAAA,IACJ;AAGA,QAAI,MAAM,KAAK,UAAU,OAAO;AAChC,QAAI,MAAM,QAAQ,GAAG,GAAG;AAEpB,YAAM,IACD,KAAK,MAAM,MAAM,KAAK,OAAO,CAAC,EAC9B,MAAM,GAAG,CAAC,EACV,KAAK,GAAG;AAAA,IACjB;AAEA,QAAI,gBAAgB,CAAC;AACrB,QAAI,qBAAqB;AAEzB,QAAI,KAAK,UAAU,UAAU,cAAc;AACvC,YAAM,gBAAgB,mBACjB,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS,EACxC,MAAM,GAAG,CAAC,EACV,QAAQ,EACR,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,EAC7B,KAAK,GAAG;AAEb,sBAAgB,MAAM,KAAK,oBAAoB,aAAa;AAAA,QACxD,OAAO,QAAQ,QAAQ;AAAA,QACvB,qBAAqB;AAAA,QACrB,OAAO;AAAA,MACX,CAAC;AAED,2BAAqB,gBAAgB,aAAa;AAAA,IACtD,OAAO;AACH,sBAAgB,MAAM,kBAAU,IAAI,MAAM,OAAO;AAEjD,2BAAqB,gBAAgB,aAAa;AAAA,IACtD;AAEA,UAAM,eAAe;AAAA,MACjB,SAAS,KAAK;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA,WACI,KAAK,UAAU,cACf,KAAK,UAAU,WAAW,SAAS,IAC7B,KAAK,UAAU,WACX,KAAK;AAAA,QACD,KAAK,OAAO,IAAI,KAAK,UAAU,WAAW;AAAA,MAC9C,CACJ,IACA;AAAA,MACV,WAAW;AAAA,MACX;AAAA,MACA,kBAAkB;AAAA;AAAA,MAElB,2BAA2B;AAAA;AAAA,MAE3B,wBAAwB;AAAA;AAAA,MAExB,wBAAwB;AAAA;AAAA,MAExB,OACI,KAAK,UAAU,UAAU,KAAK,UAAU,OAAO,SAAS,IAClD,KAAK,UAAU,OACX,KAAK;AAAA,QACD,KAAK,OAAO,IAAI,KAAK,UAAU,OAAO;AAAA,MAC1C,CACJ,IACA;AAAA,MACV,QACI,KAAK,UAAU,UAAU,KAAK,UAAU,OAAO,SAAS,IAClD,GAAG,KAAK,UAAU,IAAI,uBACtB,KAAK,UAAU,OACV,KAAK,MAAM,MAAM,KAAK,OAAO,CAAC,EAC9B,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,OAAOD,QAAO,UAAU;AAC1B,YAAIA,WAAU,MAAM,SAAS,GAAG;AAC5B,iBAAO,QAAQ;AAAA,QACnB;AAEA,YAAIA,WAAU,MAAM,SAAS,GAAG;AAC5B,iBAAO;AAAA,QACX;AACA,eAAO,QAAQ;AAAA,MACnB,CAAC,EACA,KAAK,EAAE,IACZ;AAAA,MACV,uBACI,kCACA,+BAA+B,WAAW,MAAM,EAAE,EAAE,SAAS,IACvD;AAAA,QACI,uBAAuB,KAAK,UAAU,IAAI;AAAA,QAC1C;AAAA,MACJ,IACA;AAAA,MACV,0BACI,qCACA,kCAAkC,WAAW,MAAM,EAAE,EAAE,SACnD,IACE;AAAA,QACI,+BAA+B,KAAK,UAAU,IAAI;AAAA,QAClD;AAAA,MACJ,IACA;AAAA,MACV,mBACI,KAAK,WAAW,OAAO,KAAK,SAAS,KACrC,KAAK,WAAW,OAAO,KAAK,SAAS,IAC/B;AAAA,QACI,8BAA8B,KAAK,UAAU;AAAA,SAC5C,MAAM;AACH,gBAAM,MAAM,KAAK,WAAW,OAAO,OAAO,CAAC;AAC3C,gBAAM,OAAO,KAAK,WAAW,OAAO,QAAQ,CAAC;AAC7C,iBAAO,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI;AAAA,QACtC,GAAG;AAAA,MACP,IACA;AAAA,MAEV,gBACI,KAAK,WAAW,OAAO,KAAK,SAAS,KACrC,KAAK,WAAW,OAAO,KAAK,SAAS,IAC/B;AAAA,QACI,2BAA2B,KAAK,UAAU;AAAA,SACzC,MAAM;AACH,gBAAM,MAAM,KAAK,WAAW,OAAO,OAAO,CAAC;AAC3C,gBAAM,OAAO,KAAK,WAAW,OAAO,QAAQ,CAAC;AAC7C,iBAAO,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI;AAAA,QACtC,GAAG;AAAA,MACP,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuBV;AAAA,MACA,QACI,UAAU,OAAO,SAAS,IACpB,UAAU,YAAY,MAAM,IAC5B;AAAA,MACV;AAAA,MACA;AAAA,MACA,OACI,SAAS,MAAM,SAAS,IAClB;AAAA,QACI;AAAA,QACA;AAAA,MACJ,IACA;AAAA,MACV;AAAA,MACA,gBACI,kBAAkB,eAAe,SAAS,IACpC,UAAU,2BAA2B,cAAc,IACnD;AAAA,MACV,aACI,eAAe,YAAY,SAAS,IAC9B,UAAU,qBAAqB,WAAW,IAC1C;AAAA,MACV;AAAA,MACA,aACI,wBAAwB,qBAAqB,SAAS,IAChD,UAAU,iBAAiB,oBAAoB,IAC/C;AAAA,MACV,GAAG;AAAA,IACP;AAEA,UAAM,iBAAiB,KAAK,QAAQ,IAAI,OAAO,WAAmB;AAC9D,YAAM,SAAS,MAAM,OAAO,SAAS,MAAM,SAAS,YAAY;AAChE,UAAI,QAAQ;AACR,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX,CAAC;AAED,UAAM,oBAAoB,KAAK,WAAW,IAAI,OAAO,cAAc;AAC/D,YAAM,SAAS,MAAM,UAAU;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AACA,UAAI,QAAQ;AACR,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX,CAAC;AAED,UAAM,CAAC,oBAAoB,iBAAiB,SAAS,IACjD,MAAM,QAAQ,IAAI;AAAA,MACd,QAAQ,IAAI,iBAAiB;AAAA,MAC7B,QAAQ,IAAI,cAAc;AAAA,MAC1B,aAAa,MAAM,SAAS,YAAY;AAAA,IAC5C,CAAC;AAEL,UAAM,iBAAiB,mBAAmB;AAAA,MACtC;AAAA,IACJ;AACA,UAAM,cAAc,gBAAgB,OAAO,OAAO;AAElD,UAAM,cAAc;AAAA,MAChB,aACI,gCAAgC,kBAAkB,WAAW;AAAA,MACjE,SACI,YAAY,SAAS,IACf;AAAA,QACI;AAAA,QACA,cAAc,WAAW;AAAA,MAC7B,IACA;AAAA,MACV,gBACI,YAAY,SAAS,IACf;AAAA,QACI;AAAA,QACA,sBAAsB,aAAa,EAAE;AAAA,MACzC,IACA;AAAA,MACV;AAAA,MACA,YACI,eAAe,SAAS,IAClB,iBAAiB,cAAc,IAC/B;AAAA,MACV,gBACI,eAAe,SAAS,IAClB,qBAAqB,cAAc,IACnC;AAAA,MACV,mBACI,eAAe,SAAS,IAClB,wBAAwB,cAAc,IACtC;AAAA,MACV,WAAW;AAAA,QACP,kCAAkC,KAAK,UAAU,IAAI;AAAA,QACrD;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,EAAE,GAAG,cAAc,GAAG,YAAY;AAAA,EAC7C;AAAA,EAEA,MAAM,yBAAyB,OAA8B;AACzD,UAAM,qBAAqB,KAAK,sBAAsB;AACtD,UAAM,qBAAqB,MAAM,KAAK,eAAe,YAAY;AAAA,MAC7D,QAAQ,MAAM;AAAA,MACd,OAAO;AAAA,MACP,QAAQ;AAAA,IACZ,CAAC;AAED,UAAM,iBAAiB,eAAe;AAAA,MAClC,QAAQ,MAAM,cAAc,CAAC;AAAA,MAC7B,UAAU,mBAAmB,IAAI,CAAC,WAAmB;AACjD,cAAM,YAAY,EAAE,GAAG,OAAO;AAC9B,eAAO,UAAU;AACjB,eAAO;AAAA,MACX,CAAC;AAAA,IACL,CAAC;AAED,QAAI,iBAAiB,CAAC;AAEtB,QAAI,sBAAsB,MAAM,QAAQ,kBAAkB,GAAG;AACzD,YAAM,4BAA4B,mBAAmB;AAAA,QACjD,CAAC,QACG,IAAI,QAAQ,eACZ,IAAI,QAAQ,YAAY,SAAS;AAAA,MACzC;AAEA,UAAI,2BAA2B;AAC3B,cAAM,kBACF,2BAA2B,aAAa,KAAK,IAAI;AACrD,cAAM,2BACF,kBAAkB,KAAK,KAAK;AAEhC,yBAAiB,mBACZ,OAAO,CAAC,QAAQ;AACb,gBAAM,UAAU,IAAI,aAAa,KAAK,IAAI;AAC1C,iBAAO,WAAW;AAAA,QACtB,CAAC,EACA,QAAQ,CAAC,QAAQ,IAAI,QAAQ,eAAe,CAAC,CAAC;AAAA,MACvD;AAAA,IACJ;AAEA,UAAM,uBAAuB,eACxB;AAAA,MACG,CAAC,eACG,OAAO,WAAW,EAAE;AAAA,QAChC,WAAW,KAAK;AAAA,OACjB,WAAW,GAAG;AAAA,QACb,WAAW,MAAM;AAAA,eACV,WAAW,WAAW;AAAA,QAC7B,WAAW,IAAI;AAAA;AAAA,IAEX,EACC,KAAK,IAAI;AAEd,WAAO;AAAA,MACH,GAAG;AAAA,MACH,gBAAgB;AAAA,QACZ;AAAA,QACA;AAAA,MACJ;AAAA,MACA;AAAA,MACA,aAAa;AAAA,IACjB;AAAA,EACJ;AACJ;AAEA,IAAM,kBAAkB,CAAC,cAA+B;AAEpD,SAAO,UAAU,IAAI,UAAQ;AAEzB,UAAM,OAAO,KAAK,QAAQ;AAG1B,UAAM,cAAc,KACf,KAAK,EACL,QAAQ,WAAW,MAAM;AAE9B,WAAO;AAAA,EACX,CAAC,EAAE,KAAK,MAAM;AAClB;;;AKzwDO,IAAM,YAAY,EAAE,OAAO;AAAA;AAAA,EAE9B,gBAAgB,EACX,OAAO,EACP,WAAW,OAAO,sCAAsC;AAAA,EAC7D,iBAAiB,EAAE,OAAO,EAAE,IAAI,GAAG,6BAA6B;AAAA,EAChE,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,0BAA0B;AAAA,EAC1D,cAAc,EACT,OAAO,EACP,WAAW,QAAQ,qCAAqC;AAAA,EAC7D,oBAAoB,EAAE,OAAO,EAAE,IAAI,GAAG,gCAAgC;AAAA,EACtE,8BAA8B,EACzB,OAAO,EACP,IAAI,GAAG,4BAA4B;AAAA,EACxC,uBAAuB,EAAE,OAAO,EAAE,IAAI,GAAG,gCAAgC;AAC7E,CAAC;AAMM,SAAS,cAAyB;AACrC,MAAI;AACA,WAAO,UAAU,MAAM,QAAQ,GAAG;AAAA,EACtC,SAAS,OAAO;AACZ,QAAI,iBAAiB,EAAE,UAAU;AAC7B,YAAM,gBAAgB,MAAM,OACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,KAAK,IAAI,OAAO,EAAE,EAC1C,KAAK,IAAI;AACd,YAAM,IAAI,MAAM;AAAA,EAAmC,aAAa,EAAE;AAAA,IACtE;AACA,UAAM;AAAA,EACV;AACJ;AAGA,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAClC,MAAM,EAAE,OAAO;AAAA,EACf,SAAS,EACJ,OAAO;AAAA,IACJ,MAAM,EAAE,OAAO;AAAA,IACf,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,KAAK,EAAE,OAAO,EAAE,SAAS;AAAA,IACzB,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,IACtC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC3C,CAAC,EACA,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC;AAAA;AAC9C,CAAC;AAED,IAAM,eAAe,EAAE,OAAO;AAAA,EAC1B,MAAM,EAAE,OAAO;AAAA,EACf,aAAa,EAAE,OAAO;AAAA,EACtB,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACnC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACrC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACtC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACpC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS;AACvC,CAAC;AAGM,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACpC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EAC/B,MAAM,EAAE,OAAO;AAAA,EACf,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,eAAe,EAAE,WAAW,iBAAiB;AAAA,EAC7C,uBAAuB,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,KAAK,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAAA,EAC9C,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACxB,iBAAiB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACtD,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAChC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC1B,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC9B,WAAW,EACN;AAAA,IACG,EAAE,MAAM;AAAA,MACJ,EAAE,OAAO;AAAA;AAAA,MACT,EAAE,OAAO;AAAA;AAAA,QAEL,MAAM,EAAE,OAAO;AAAA,QACf,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,MACjC,CAAC;AAAA,MACD,EAAE,OAAO;AAAA;AAAA,QAEL,WAAW,EAAE,OAAO;AAAA,QACpB,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,MACjC,CAAC;AAAA,IACL,CAAC;AAAA,EACL,EACC,SAAS;AAAA,EACd,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,YAAY,CAAC,CAAC;AAAA,EAC7D,UAAU,EACL,OAAO;AAAA,IACJ,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACvC,OAAO,EACF,OAAO;AAAA,MACJ,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,KAAK,EAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC,EACA,SAAS;AAAA,IACd,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,aAAa,EAAE,OAAO;AAAA,MAClB,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,MACpC,iBAAiB,EAAE,OAAO,EAAE,SAAS;AAAA,MACrC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,MACjC,mBAAmB,EAAE,OAAO,EAAE,SAAS;AAAA,MACvC,kBAAiB,EAAE,OAAO,EAAE,SAAS;AAAA,IACzC,CAAC,EACA,SAAS;AAAA,IACV,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,CAAC,EACA,SAAS;AAAA,EACd,cAAc,EACT,OAAO;AAAA,IACJ,SAAS,EACJ,OAAO;AAAA,MACJ,yBAAyB,EAAE,QAAQ,EAAE,SAAS;AAAA,MAC9C,4BAA4B,EAAE,QAAQ,EAAE,SAAS;AAAA,IACrD,CAAC,EACA,SAAS;AAAA,IACd,UAAU,EACL,OAAO;AAAA,MACJ,yBAAyB,EAAE,QAAQ,EAAE,SAAS;AAAA,MAC9C,4BAA4B,EAAE,QAAQ,EAAE,SAAS;AAAA,IACrD,CAAC,EACA,SAAS;AAAA,EAClB,CAAC,EACA,SAAS;AAAA,EACd,OAAO,EAAE,OAAO;AAAA,IACZ,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IACvB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IACxB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC5B,CAAC;AAAA,EACD,gBAAgB,EACX,OAAO;AAAA,IACJ,UAAU,EAAE,OAAO;AAAA,IACnB,YAAY,EAAE,OAAO;AAAA,IACrB,KAAK,EAAE,OAAO;AAAA,IACd,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,CAAC,EACA,SAAS;AAAA,EACd,KAAK,EACA,OAAO;AAAA,IACJ,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,CAAC,EACA,SAAS;AAAA,EACd,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAC1C,CAAC;AAMM,SAAS,wBAAwB,MAAgC;AACpE,MAAI;AACA,WAAO,gBAAgB,MAAM,IAAI;AAAA,EACrC,SAAS,OAAO;AACZ,QAAI,iBAAiB,EAAE,UAAU;AAC7B,YAAM,gBAAgB,MAAM,OAAO;AAAA,QAC/B,CAAC,KAAK,QAAQ;AACV,gBAAME,QAAO,IAAI,KAAK,KAAK,GAAG;AAC9B,cAAI,CAAC,IAAIA,KAAI,GAAG;AACZ,gBAAIA,KAAI,IAAI,CAAC;AAAA,UACjB;AACA,cAAIA,KAAI,EAAE,KAAK,IAAI,OAAO;AAC1B,iBAAO;AAAA,QACX;AAAA,QACA,CAAC;AAAA,MACL;AAEA,aAAO,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,OAAO,QAAQ,MAAM;AACzD,uBAAY;AAAA,UACR,wBAAwB,KAAK,KAAK,SAAS,KAAK,KAAK,CAAC;AAAA,QAC1D;AAAA,MACJ,CAAC;AAED,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AACA,UAAM;AAAA,EACV;AACJ;;;AC5LA,OAAOC,WAAU;AACjB,OAAOC,SAAQ;AAcR,IAAM,qBAAN,MAAkD;AAAA,EACrD;AAAA,EAEA,YAAY,YAAkC;AAC1C,SAAK,OAAO,cAAc,oBAAI,IAAoB;AAAA,EACtD;AAAA,EAEA,MAAM,IAAI,KAA0C;AAChD,WAAO,KAAK,KAAK,IAAI,GAAG;AAAA,EAC5B;AAAA,EAEA,MAAM,IAAI,KAAa,OAA8B;AACjD,SAAK,KAAK,IAAI,KAAK,KAAK;AAAA,EAC5B;AAAA,EAEA,MAAM,OAAO,KAA4B;AACrC,SAAK,KAAK,OAAO,GAAG;AAAA,EACxB;AACJ;AAEO,IAAM,iBAAN,MAA8C;AAAA,EACjD,YAAoB,SAAiB;AAAjB;AAAA,EAAkB;AAAA,EAEtC,MAAM,IAAI,KAA0C;AAChD,QAAI;AACA,aAAO,MAAMA,IAAG,SAASD,MAAK,KAAK,KAAK,SAAS,GAAG,GAAG,MAAM;AAAA,IACjE,QAAQ;AAEJ,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,MAAM,IAAI,KAAa,OAA8B;AACjD,QAAI;AACA,YAAM,WAAWA,MAAK,KAAK,KAAK,SAAS,GAAG;AAE5C,YAAMC,IAAG,MAAMD,MAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAC1D,YAAMC,IAAG,UAAU,UAAU,OAAO,MAAM;AAAA,IAC9C,SAAS,OAAO;AACZ,cAAQ,MAAM,KAAK;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,MAAM,OAAO,KAA4B;AACrC,QAAI;AACA,YAAM,WAAWD,MAAK,KAAK,KAAK,SAAS,GAAG;AAC5C,YAAMC,IAAG,OAAO,QAAQ;AAAA,IAC5B,QAAQ;AAAA,IAER;AAAA,EACJ;AACJ;AAEO,IAAM,iBAAN,MAA8C;AAAA,EACjD,YACY,IACA,SACV;AAFU;AACA;AAAA,EACT;AAAA,EAEH,MAAM,IAAI,KAA0C;AAChD,WAAO,KAAK,GAAG,SAAS,EAAE,SAAS,KAAK,SAAS,IAAI,CAAC;AAAA,EAC1D;AAAA,EAEA,MAAM,IAAI,KAAa,OAA8B;AACjD,UAAM,KAAK,GAAG,SAAS,EAAE,SAAS,KAAK,SAAS,KAAK,MAAM,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,OAAO,KAA4B;AACrC,UAAM,KAAK,GAAG,YAAY,EAAE,SAAS,KAAK,SAAS,IAAI,CAAC;AAAA,EAC5D;AACJ;AAEO,IAAM,eAAN,MAEP;AAAA,EACI;AAAA,EAEA,YAAY,SAAuB;AAC/B,SAAK,UAAU;AAAA,EACnB;AAAA,EAEA,MAAM,IAAiB,KAAqC;AACxD,UAAM,OAAO,MAAM,KAAK,QAAQ,IAAI,GAAG;AAEvC,QAAI,MAAM;AACN,YAAM,EAAE,OAAO,QAAQ,IAAI,KAAK,MAAM,IAAI;AAK1C,UAAI,CAAC,WAAW,UAAU,KAAK,IAAI,GAAG;AAClC,eAAO;AAAA,MACX;AAEA,WAAK,QAAQ,OAAO,GAAG,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC3C;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,IAAO,KAAa,OAAU,MAAoC;AACpE,WAAO,KAAK,QAAQ;AAAA,MAChB;AAAA,MACA,KAAK,UAAU,EAAE,OAAO,SAAS,MAAM,WAAW,EAAE,CAAC;AAAA,IACzD;AAAA,EACJ;AAAA,EAEA,MAAM,OAAO,KAA4B;AACrC,WAAO,KAAK,QAAQ,OAAO,GAAG;AAAA,EAClC;AACJ;","names":["names","uniqueNamesGenerator","config","path","path","settings","GoalStatus","ModelClass","ModelProviderName","CacheStore","IrysMessageType","IrysDataType","ServiceType","LoggingLevel","TokenizerType","TranscriptionProvider","ActionTimelineType","KnowledgeScope","CacheKeyPrefix","path","fileURLToPath","__filename","fileURLToPath","__dirname","path","fs","options","config","input","runtime","names","uniqueNamesGenerator","uniqueNamesGenerator","names","index","abi","abi","abi","docsPath","err","secp256k1","yParityOrV","recoveryBit","docsPath","docsPath","cause","buffer","toBytes","sha256","sha256","size","size","getBlock","getChainId","chainId","block","block","request","rpcStateOverride","value","estimate","abi","docsPath","abi","abi","abiItem","eventName","index","value","input","event","abi","abi","abi","listeners","cleanup","poll","cacheKey","abi","transport","eventName","args","size","config","key","promiseCache","shouldRetry","options","uid","uid","options","body","response","config","wait","body","custom","res","event","struct","index","abi","result","transport","block","transport","transport","event","args","isValid","fs","path","baseURL","options","apiKey","config","buffer","settings","actor","join","names","uniqueNamesGenerator","util","objectUtil","path","errorUtil","path","errorMap","base64Regex","ctx","options","result","index","issues","elements","size","processed","preprocess","ZodFirstPartyTypeKind","buffer","index","path","existsSync","join","result","uniqueNamesGenerator","names","message","index","actors","path","path","fs"]}
1
+ {"version":3,"sources":["../src/config.ts","../src/actions.ts","../src/context.ts","../src/database/CircuitBreaker.ts","../src/logger.ts","../src/parsing.ts","../src/database.ts","../src/settings.ts","../src/types.ts","../src/models.ts","../src/localembeddingManager.ts","../src/embedding.ts","../src/evaluators.ts","../src/generation.ts","../src/goals.ts","../src/memory.ts","../src/messages.ts","../src/posts.ts","../src/providers.ts","../src/relationships.ts","../src/runtime.ts","../src/uuid.ts","../src/knowledge.ts","../src/ragknowledge.ts","../src/environment.ts","../src/cache.ts"],"sourcesContent":["import dotenv from \"dotenv\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Load environment variables from root .env file\ndotenv.config({ path: path.resolve(__dirname, \"../../../.env\") });\n","import { names, uniqueNamesGenerator } from \"unique-names-generator\";\nimport type { Action, ActionExample } from \"./types.ts\";\n\n/**\n * Composes a set of example conversations based on provided actions and a specified count.\n * It randomly selects examples from the provided actions and formats them with generated names.\n * @param actionsData - An array of `Action` objects from which to draw examples.\n * @param count - The number of examples to generate.\n * @returns A string containing formatted examples of conversations.\n */\nexport const composeActionExamples = (actionsData: Action[], count: number) => {\n const data: ActionExample[][][] = actionsData.map((action: Action) => [\n ...action.examples,\n ]);\n\n const actionExamples: ActionExample[][] = [];\n let length = data.length;\n for (let i = 0; i < count && length; i++) {\n const actionId = i % length;\n const examples = data[actionId];\n if (examples.length) {\n const rand = ~~(Math.random() * examples.length);\n actionExamples[i] = examples.splice(rand, 1)[0];\n } else {\n i--;\n }\n\n if (examples.length == 0) {\n data.splice(actionId, 1);\n length--;\n }\n }\n\n const formattedExamples = actionExamples.map((example) => {\n const exampleNames = Array.from({ length: 5 }, () =>\n uniqueNamesGenerator({ dictionaries: [names] })\n );\n\n return `\\n${example\n .map((message) => {\n let messageString = `${message.user}: ${message.content.text}${message.content.action ? ` (${message.content.action})` : \"\"}`;\n for (let i = 0; i < exampleNames.length; i++) {\n messageString = messageString.replaceAll(\n `{{user${i + 1}}}`,\n exampleNames[i]\n );\n }\n return messageString;\n })\n .join(\"\\n\")}`;\n });\n\n return formattedExamples.join(\"\\n\");\n};\n\n/**\n * Formats the names of the provided actions into a comma-separated string.\n * @param actions - An array of `Action` objects from which to extract names.\n * @returns A comma-separated string of action names.\n */\nexport function formatActionNames(actions: Action[]) {\n return actions\n .sort(() => 0.5 - Math.random())\n .map((action: Action) => `${action.name}`)\n .join(\", \");\n}\n\n/**\n * Formats the provided actions into a detailed string listing each action's name and description, separated by commas and newlines.\n * @param actions - An array of `Action` objects to format.\n * @returns A detailed string of actions, including names and descriptions.\n */\nexport function formatActions(actions: Action[]) {\n return actions\n .sort(() => 0.5 - Math.random())\n .map((action: Action) => `${action.name}: ${action.description}`)\n .join(\",\\n\");\n}\n","import handlebars from \"handlebars\";\nimport type { State, TemplateType } from \"./types.ts\";\nimport { names, uniqueNamesGenerator } from \"unique-names-generator\";\n\n/**\n * Composes a context string by replacing placeholders in a template with corresponding values from the state.\n *\n * This function takes a template string with placeholders in the format `{{placeholder}}` and a state object.\n * It replaces each placeholder with the value from the state object that matches the placeholder's name.\n * If a matching key is not found in the state object for a given placeholder, the placeholder is replaced with an empty string.\n *\n * By default, this function uses a simple string replacement approach. However, when `templatingEngine` is set to `'handlebars'`, it uses Handlebars templating engine instead, compiling the template into a reusable function and evaluating it with the provided state object.\n *\n * @param {Object} params - The parameters for composing the context.\n * @param {State} params.state - The state object containing values to replace the placeholders in the template.\n * @param {TemplateType} params.template - The template string or function containing placeholders to be replaced with state values.\n * @param {\"handlebars\" | undefined} [params.templatingEngine] - The templating engine to use for compiling and evaluating the template (optional, default: `undefined`).\n * @returns {string} The composed context string with placeholders replaced by corresponding state values.\n *\n * @example\n * // Given a state object and a template\n * const state = { userName: \"Alice\", userAge: 30 };\n * const template = \"Hello, {{userName}}! You are {{userAge}} years old\";\n *\n * // Composing the context with simple string replacement will result in:\n * // \"Hello, Alice! You are 30 years old.\"\n * const contextSimple = composeContext({ state, template });\n *\n * // Using composeContext with a template function for dynamic template\n * const template = ({ state }) => {\n * const tone = Math.random() > 0.5 ? \"kind\" : \"rude\";\n * return `Hello, {{userName}}! You are {{userAge}} years old. Be ${tone}`;\n * };\n * const contextSimple = composeContext({ state, template });\n */\n\nexport const composeContext = ({\n state,\n template,\n templatingEngine,\n}: {\n state: State;\n template: TemplateType;\n templatingEngine?: \"handlebars\";\n}) => {\n const templateStr =\n typeof template === \"function\" ? template({ state }) : template;\n\n if (templatingEngine === \"handlebars\") {\n const templateFunction = handlebars.compile(templateStr);\n return templateFunction(state);\n }\n\n // @ts-expect-error match isn't working as expected\n const out = templateStr.replace(/{{\\w+}}/g, (match) => {\n const key = match.replace(/{{|}}/g, \"\");\n return state[key] ?? \"\";\n });\n return out;\n};\n\n/**\n * Adds a header to a body of text.\n *\n * This function takes a header string and a body string and returns a new string with the header prepended to the body.\n * If the body string is empty, the header is returned as is.\n *\n * @param {string} header - The header to add to the body.\n * @param {string} body - The body to which to add the header.\n * @returns {string} The body with the header prepended.\n *\n * @example\n * // Given a header and a body\n * const header = \"Header\";\n * const body = \"Body\";\n *\n * // Adding the header to the body will result in:\n * // \"Header\\nBody\"\n * const text = addHeader(header, body);\n */\nexport const addHeader = (header: string, body: string) => {\n return body.length > 0 ? `${header ? header + \"\\n\" : header}${body}\\n` : \"\";\n};\n\n/**\n * Generates a string with random user names populated in a template.\n *\n * This function generates a specified number of random user names and populates placeholders\n * in the provided template with these names. Placeholders in the template should follow the format `{{userX}}`\n * where `X` is the position of the user (e.g., `{{user1}}`, `{{user2}}`).\n *\n * @param {string} params.template - The template string containing placeholders for random user names.\n * @param {number} params.length - The number of random user names to generate.\n * @returns {string} The template string with placeholders replaced by random user names.\n *\n * @example\n * // Given a template and a length\n * const template = \"Hello, {{user1}}! Meet {{user2}} and {{user3}}.\";\n * const length = 3;\n *\n * // Composing the random user string will result in:\n * // \"Hello, John! Meet Alice and Bob.\"\n * const result = composeRandomUser({ template, length });\n */\nexport const composeRandomUser = (template: string, length: number) => {\n const exampleNames = Array.from({ length }, () =>\n uniqueNamesGenerator({ dictionaries: [names] })\n );\n let result = template;\n for (let i = 0; i < exampleNames.length; i++) {\n result = result.replaceAll(`{{user${i + 1}}}`, exampleNames[i]);\n }\n\n return result;\n};\n","export type CircuitBreakerState = \"CLOSED\" | \"OPEN\" | \"HALF_OPEN\";\n\nexport class CircuitBreaker {\n private state: CircuitBreakerState = \"CLOSED\";\n private failureCount = 0;\n private lastFailureTime?: number;\n private halfOpenSuccesses = 0;\n\n private readonly failureThreshold: number;\n private readonly resetTimeout: number;\n private readonly halfOpenMaxAttempts: number;\n\n constructor(\n private readonly config: {\n failureThreshold?: number;\n resetTimeout?: number;\n halfOpenMaxAttempts?: number;\n } = {}\n ) {\n this.failureThreshold = config.failureThreshold ?? 5;\n this.resetTimeout = config.resetTimeout ?? 60000;\n this.halfOpenMaxAttempts = config.halfOpenMaxAttempts ?? 3;\n }\n\n async execute<T>(operation: () => Promise<T>): Promise<T> {\n if (this.state === \"OPEN\") {\n if (Date.now() - (this.lastFailureTime || 0) > this.resetTimeout) {\n this.state = \"HALF_OPEN\";\n this.halfOpenSuccesses = 0;\n } else {\n throw new Error(\"Circuit breaker is OPEN\");\n }\n }\n\n try {\n const result = await operation();\n\n if (this.state === \"HALF_OPEN\") {\n this.halfOpenSuccesses++;\n if (this.halfOpenSuccesses >= this.halfOpenMaxAttempts) {\n this.reset();\n }\n }\n\n return result;\n } catch (error) {\n this.handleFailure();\n throw error;\n }\n }\n\n private handleFailure(): void {\n this.failureCount++;\n this.lastFailureTime = Date.now();\n\n if (\n this.state !== \"OPEN\" &&\n this.failureCount >= this.failureThreshold\n ) {\n this.state = \"OPEN\";\n }\n }\n\n private reset(): void {\n this.state = \"CLOSED\";\n this.failureCount = 0;\n this.lastFailureTime = undefined;\n }\n\n getState(): \"CLOSED\" | \"OPEN\" | \"HALF_OPEN\" {\n return this.state;\n }\n}\n","import pino, { type LogFn } from \"pino\";\nimport pretty from \"pino-pretty\";\n\nimport { parseBooleanFromText } from \"./parsing.ts\";\n\n\nconst customLevels: Record<string, number> = {\n fatal: 60,\n error: 50,\n warn: 40,\n info: 30,\n log: 29,\n progress: 28,\n success: 27,\n debug: 20,\n trace: 10,\n};\n\nconst raw = parseBooleanFromText(process?.env?.LOG_JSON_FORMAT) || false;\n\nconst createStream = () => {\n if (raw) {\n return undefined;\n }\n return pretty({\n colorize: true,\n translateTime: \"yyyy-mm-dd HH:MM:ss\",\n ignore: \"pid,hostname\",\n });\n};\n\nconst defaultLevel = process?.env?.DEFAULT_LOG_LEVEL || \"info\";\n\nconst options = {\n level: defaultLevel,\n customLevels,\n hooks: {\n logMethod(\n inputArgs: [string | Record<string, unknown>, ...unknown[]],\n method: LogFn\n ): void {\n const [arg1, ...rest] = inputArgs;\n\n if (typeof arg1 === \"object\") {\n const messageParts = rest.map((arg) =>\n typeof arg === \"string\" ? arg : JSON.stringify(arg)\n );\n const message = messageParts.join(\" \");\n method.apply(this, [arg1, message]);\n } else {\n const context = {};\n const messageParts = [arg1, ...rest].map((arg) =>\n typeof arg === \"string\" ? arg : arg\n );\n const message = messageParts\n .filter((part) => typeof part === \"string\")\n .join(\" \");\n const jsonParts = messageParts.filter(\n (part) => typeof part === \"object\"\n );\n\n Object.assign(context, ...jsonParts);\n\n method.apply(this, [context, message]);\n }\n },\n },\n};\n\nexport const elizaLogger = pino(options, createStream());\n\nexport default elizaLogger;\n","import type { ActionResponse } from \"./types.ts\";\nconst jsonBlockPattern = /```json\\n([\\s\\S]*?)\\n```/;\n\nexport const messageCompletionFooter = `\\nResponse format should be formatted in a valid JSON block like this:\n\\`\\`\\`json\n{ \"user\": \"{{agentName}}\", \"text\": \"<string>\", \"action\": \"<string>\" }\n\\`\\`\\`\n\nThe “action” field should be one of the options in [Available Actions] and the \"text\" field should be the response you want to send.\n`;\n\nexport const shouldRespondFooter = `The available options are [RESPOND], [IGNORE], or [STOP]. Choose the most appropriate option.\nIf {{agentName}} is talking too much, you can choose [IGNORE]\n\nYour response must include one of the options.`;\n\nexport const parseShouldRespondFromText = (\n text: string\n): \"RESPOND\" | \"IGNORE\" | \"STOP\" | null => {\n const match = text\n .split(\"\\n\")[0]\n .trim()\n .replace(\"[\", \"\")\n .toUpperCase()\n .replace(\"]\", \"\")\n .match(/^(RESPOND|IGNORE|STOP)$/i);\n return match\n ? (match[0].toUpperCase() as \"RESPOND\" | \"IGNORE\" | \"STOP\")\n : text.includes(\"RESPOND\")\n ? \"RESPOND\"\n : text.includes(\"IGNORE\")\n ? \"IGNORE\"\n : text.includes(\"STOP\")\n ? \"STOP\"\n : null;\n};\n\nexport const booleanFooter = `Respond with only a YES or a NO.`;\n\n/**\n * Parses a string to determine its boolean equivalent.\n *\n * Recognized affirmative values: \"YES\", \"Y\", \"TRUE\", \"T\", \"1\", \"ON\", \"ENABLE\".\n * Recognized negative values: \"NO\", \"N\", \"FALSE\", \"F\", \"0\", \"OFF\", \"DISABLE\".\n *\n * @param {string} text - The input text to parse.\n * @returns {boolean|null} - Returns `true` for affirmative inputs, `false` for negative inputs, and `null` for unrecognized inputs or null/undefined.\n */\nexport const parseBooleanFromText = (text: string) => {\n if (!text) return null; // Handle null or undefined input\n\n const affirmative = [\"YES\", \"Y\", \"TRUE\", \"T\", \"1\", \"ON\", \"ENABLE\"];\n const negative = [\"NO\", \"N\", \"FALSE\", \"F\", \"0\", \"OFF\", \"DISABLE\"];\n\n const normalizedText = text.trim().toUpperCase();\n\n if (affirmative.includes(normalizedText)) {\n return true;\n } else if (negative.includes(normalizedText)) {\n return false;\n }\n\n return null; // Return null for unrecognized inputs\n};\n\nexport const stringArrayFooter = `Respond with a JSON array containing the values in a valid JSON block formatted for markdown with this structure:\n\\`\\`\\`json\n[\n 'value',\n 'value'\n]\n\\`\\`\\`\n\nYour response must include the valid JSON block.`;\n\n/**\n * Parses a JSON array from a given text. The function looks for a JSON block wrapped in triple backticks\n * with `json` language identifier, and if not found, it searches for an array pattern within the text.\n * It then attempts to parse the JSON string into a JavaScript object. If parsing is successful and the result\n * is an array, it returns the array; otherwise, it returns null.\n *\n * @param text - The input text from which to extract and parse the JSON array.\n * @returns An array parsed from the JSON string if successful; otherwise, null.\n */\nexport function parseJsonArrayFromText(text: string) {\n let jsonData = null;\n\n // First try to parse with the original JSON format\n const jsonBlockMatch = text.match(jsonBlockPattern);\n\n if (jsonBlockMatch) {\n try {\n // Only replace quotes that are actually being used for string delimitation\n const normalizedJson = jsonBlockMatch[1].replace(\n /(?<!\\\\)'([^']*)'(?=\\s*[,}\\]])/g,\n '\"$1\"'\n );\n jsonData = JSON.parse(normalizedJson);\n } catch (e) {\n console.error(\"Error parsing JSON:\", e);\n console.error(\"Failed parsing text:\", jsonBlockMatch[1]);\n }\n }\n\n // If that fails, try to find an array pattern\n if (!jsonData) {\n const arrayPattern = /\\[\\s*(['\"])(.*?)\\1\\s*\\]/;\n const arrayMatch = text.match(arrayPattern);\n\n if (arrayMatch) {\n try {\n // Only replace quotes that are actually being used for string delimitation\n const normalizedJson = arrayMatch[0].replace(\n /(?<!\\\\)'([^']*)'(?=\\s*[,}\\]])/g,\n '\"$1\"'\n );\n jsonData = JSON.parse(normalizedJson);\n } catch (e) {\n console.error(\"Error parsing JSON:\", e);\n console.error(\"Failed parsing text:\", arrayMatch[0]);\n }\n }\n }\n\n if (Array.isArray(jsonData)) {\n return jsonData;\n }\n\n return null;\n}\n\n/**\n * Parses a JSON object from a given text. The function looks for a JSON block wrapped in triple backticks\n * with `json` language identifier, and if not found, it searches for an object pattern within the text.\n * It then attempts to parse the JSON string into a JavaScript object. If parsing is successful and the result\n * is an object (but not an array), it returns the object; otherwise, it tries to parse an array if the result\n * is an array, or returns null if parsing is unsuccessful or the result is neither an object nor an array.\n *\n * @param text - The input text from which to extract and parse the JSON object.\n * @returns An object parsed from the JSON string if successful; otherwise, null or the result of parsing an array.\n */\nexport function parseJSONObjectFromText(\n text: string\n): Record<string, any> | null {\n let jsonData = null;\n const jsonBlockMatch = text.match(jsonBlockPattern);\n\n if (jsonBlockMatch) {\n text = cleanJsonResponse(text);\n const parsingText = normalizeJsonString(text);\n try {\n jsonData = JSON.parse(parsingText);\n } catch (e) {\n console.error(\"Error parsing JSON:\", e);\n console.error(\"Text is not JSON\", text);\n return extractAttributes(text);\n }\n } else {\n const objectPattern = /{[\\s\\S]*?}?/;\n const objectMatch = text.match(objectPattern);\n\n if (objectMatch) {\n text = cleanJsonResponse(text);\n const parsingText = normalizeJsonString(text);\n try {\n jsonData = JSON.parse(parsingText);\n } catch (e) {\n console.error(\"Error parsing JSON:\", e);\n console.error(\"Text is not JSON\", text);\n return extractAttributes(text);\n }\n }\n }\n\n if (\n typeof jsonData === \"object\" &&\n jsonData !== null &&\n !Array.isArray(jsonData)\n ) {\n return jsonData;\n } else if (typeof jsonData === \"object\" && Array.isArray(jsonData)) {\n return parseJsonArrayFromText(text);\n } else {\n return null;\n }\n}\n\n/**\n * Extracts specific attributes (e.g., user, text, action) from a JSON-like string using regex.\n * @param response - The cleaned string response to extract attributes from.\n * @param attributesToExtract - An array of attribute names to extract.\n * @returns An object containing the extracted attributes.\n */\nexport function extractAttributes(\n response: string,\n attributesToExtract?: string[]\n): { [key: string]: string | undefined } {\n response = response.trim();\n const attributes: { [key: string]: string | undefined } = {};\n\n if (!attributesToExtract || attributesToExtract.length === 0) {\n // Extract all attributes if no specific attributes are provided\n const matches = response.matchAll(/\"([^\"]+)\"\\s*:\\s*\"([^\"]*)\"?/g);\n for (const match of matches) {\n attributes[match[1]] = match[2];\n }\n } else {\n // Extract only specified attributes\n attributesToExtract.forEach((attribute) => {\n const match = response.match(\n new RegExp(`\"${attribute}\"\\\\s*:\\\\s*\"([^\"]*)\"?`, \"i\")\n );\n if (match) {\n attributes[attribute] = match[1];\n }\n });\n }\n\n return Object.entries(attributes).length > 0 ? attributes : null;\n}\n\n/**\n * Normalizes a JSON-like string by correcting formatting issues:\n * - Removes extra spaces after '{' and before '}'.\n * - Wraps unquoted values in double quotes.\n * - Converts single-quoted values to double-quoted.\n * - Ensures consistency in key-value formatting.\n * - Normalizes mixed adjacent quote pairs.\n *\n * This is useful for cleaning up improperly formatted JSON strings\n * before parsing them into valid JSON.\n *\n * @param str - The JSON-like string to normalize.\n * @returns A properly formatted JSON string.\n */\n\nexport const normalizeJsonString = (str: string) => {\n // Remove extra spaces after '{' and before '}'\n str = str.replace(/\\{\\s+/, '{').replace(/\\s+\\}/, '}').trim();\n\n // \"key\": unquotedValue → \"key\": \"unquotedValue\"\n str = str.replace(\n /(\"[\\w\\d_-]+\")\\s*: \\s*(?!\"|\\[)([\\s\\S]+?)(?=(,\\s*\"|\\}$))/g,\n '$1: \"$2\"',\n );\n\n // \"key\": 'value' → \"key\": \"value\"\n str = str.replace(\n /\"([^\"]+)\"\\s*:\\s*'([^']*)'/g,\n (_, key, value) => `\"${key}\": \"${value}\"`,\n );\n\n // \"key\": someWord → \"key\": \"someWord\"\n str = str.replace(/(\"[\\w\\d_-]+\")\\s*:\\s*([A-Za-z_]+)(?![\"\\w])/g, '$1: \"$2\"');\n\n // Replace adjacent quote pairs with a single double quote\n str = str.replace(/(?:\"')|(?:'\")/g, '\"');\n return str;\n};\n\n/**\n * Cleans a JSON-like response string by removing unnecessary markers, line breaks, and extra whitespace.\n * This is useful for handling improperly formatted JSON responses from external sources.\n *\n * @param response - The raw JSON-like string response to clean.\n * @returns The cleaned string, ready for parsing or further processing.\n */\n\nexport function cleanJsonResponse(response: string): string {\n return response\n .replace(/```json\\s*/g, \"\") // Remove ```json\n .replace(/```\\s*/g, \"\") // Remove any remaining ```\n .replace(/(\\r\\n|\\n|\\r)/g, \"\") // Remove line breaks\n .trim();\n}\n\nexport const postActionResponseFooter = `Choose any combination of [LIKE], [RETWEET], [QUOTE], and [REPLY] that are appropriate. Each action must be on its own line. Your response must only include the chosen actions.`;\n\nexport const parseActionResponseFromText = (\n text: string\n): { actions: ActionResponse } => {\n const actions: ActionResponse = {\n like: false,\n retweet: false,\n quote: false,\n reply: false,\n };\n\n // Regex patterns\n const likePattern = /\\[LIKE\\]/i;\n const retweetPattern = /\\[RETWEET\\]/i;\n const quotePattern = /\\[QUOTE\\]/i;\n const replyPattern = /\\[REPLY\\]/i;\n\n // Check with regex\n actions.like = likePattern.test(text);\n actions.retweet = retweetPattern.test(text);\n actions.quote = quotePattern.test(text);\n actions.reply = replyPattern.test(text);\n\n // Also do line by line parsing as backup\n const lines = text.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed === \"[LIKE]\") actions.like = true;\n if (trimmed === \"[RETWEET]\") actions.retweet = true;\n if (trimmed === \"[QUOTE]\") actions.quote = true;\n if (trimmed === \"[REPLY]\") actions.reply = true;\n }\n\n return { actions };\n};\n\n/**\n * Truncate text to fit within the character limit, ensuring it ends at a complete sentence.\n */\nexport function truncateToCompleteSentence(\n text: string,\n maxLength: number\n): string {\n if (text.length <= maxLength) {\n return text;\n }\n\n // Attempt to truncate at the last period within the limit\n const lastPeriodIndex = text.lastIndexOf(\".\", maxLength - 1);\n if (lastPeriodIndex !== -1) {\n const truncatedAtPeriod = text.slice(0, lastPeriodIndex + 1).trim();\n if (truncatedAtPeriod.length > 0) {\n return truncatedAtPeriod;\n }\n }\n\n // If no period, truncate to the nearest whitespace within the limit\n const lastSpaceIndex = text.lastIndexOf(\" \", maxLength - 1);\n if (lastSpaceIndex !== -1) {\n const truncatedAtSpace = text.slice(0, lastSpaceIndex).trim();\n if (truncatedAtSpace.length > 0) {\n return truncatedAtSpace + \"...\";\n }\n }\n\n // Fallback: Hard truncate and add ellipsis\n const hardTruncated = text.slice(0, maxLength - 3).trim();\n return hardTruncated + \"...\";\n}\n","import type {\n Account,\n Actor,\n GoalStatus,\n Goal,\n Memory,\n Relationship,\n UUID,\n RAGKnowledgeItem,\n Participant,\n IDatabaseAdapter,\n} from \"./types.ts\";\nimport { CircuitBreaker } from \"./database/CircuitBreaker\";\nimport { elizaLogger } from \"./logger\";\n\n/**\n * An abstract class representing a database adapter for managing various entities\n * like accounts, memories, actors, goals, and rooms.\n */\nexport abstract class DatabaseAdapter<DB = any> implements IDatabaseAdapter {\n /**\n * The database instance.\n */\n db: DB;\n\n /**\n * Circuit breaker instance used to handle fault tolerance and prevent cascading failures.\n * Implements the Circuit Breaker pattern to temporarily disable operations when a failure threshold is reached.\n *\n * The circuit breaker has three states:\n * - CLOSED: Normal operation, requests pass through\n * - OPEN: Failure threshold exceeded, requests are blocked\n * - HALF_OPEN: Testing if service has recovered\n *\n * @protected\n */\n protected circuitBreaker: CircuitBreaker;\n\n /**\n * Creates a new DatabaseAdapter instance with optional circuit breaker configuration.\n *\n * @param circuitBreakerConfig - Configuration options for the circuit breaker\n * @param circuitBreakerConfig.failureThreshold - Number of failures before circuit opens (defaults to 5)\n * @param circuitBreakerConfig.resetTimeout - Time in ms before attempting to close circuit (defaults to 60000)\n * @param circuitBreakerConfig.halfOpenMaxAttempts - Number of successful attempts needed to close circuit (defaults to 3)\n */\n constructor(circuitBreakerConfig?: {\n failureThreshold?: number;\n resetTimeout?: number;\n halfOpenMaxAttempts?: number;\n }) {\n this.circuitBreaker = new CircuitBreaker(circuitBreakerConfig);\n }\n\n /**\n * Optional initialization method for the database adapter.\n * @returns A Promise that resolves when initialization is complete.\n */\n abstract init(): Promise<void>;\n\n /**\n * Optional close method for the database adapter.\n * @returns A Promise that resolves when closing is complete.\n */\n abstract close(): Promise<void>;\n\n /**\n * Retrieves an account by its ID.\n * @param userId The UUID of the user account to retrieve.\n * @returns A Promise that resolves to the Account object or null if not found.\n */\n abstract getAccountById(userId: UUID): Promise<Account | null>;\n\n /**\n * Creates a new account in the database.\n * @param account The account object to create.\n * @returns A Promise that resolves when the account creation is complete.\n */\n abstract createAccount(account: Account): Promise<boolean>;\n\n /**\n * Retrieves memories based on the specified parameters.\n * @param params An object containing parameters for the memory retrieval.\n * @returns A Promise that resolves to an array of Memory objects.\n */\n abstract getMemories(params: {\n agentId: UUID;\n roomId: UUID;\n count?: number;\n unique?: boolean;\n tableName: string;\n }): Promise<Memory[]>;\n\n abstract getMemoriesByRoomIds(params: {\n agentId: UUID;\n roomIds: UUID[];\n tableName: string;\n limit?: number;\n }): Promise<Memory[]>;\n\n abstract getMemoryById(id: UUID): Promise<Memory | null>;\n\n /**\n * Retrieves multiple memories by their IDs\n * @param memoryIds Array of UUIDs of the memories to retrieve\n * @param tableName Optional table name to filter memories by type\n * @returns Promise resolving to array of Memory objects\n */\n abstract getMemoriesByIds(\n memoryIds: UUID[],\n tableName?: string\n ): Promise<Memory[]>;\n\n /**\n * Retrieves cached embeddings based on the specified query parameters.\n * @param params An object containing parameters for the embedding retrieval.\n * @returns A Promise that resolves to an array of objects containing embeddings and levenshtein scores.\n */\n abstract getCachedEmbeddings({\n query_table_name,\n query_threshold,\n query_input,\n query_field_name,\n query_field_sub_name,\n query_match_count,\n }: {\n query_table_name: string;\n query_threshold: number;\n query_input: string;\n query_field_name: string;\n query_field_sub_name: string;\n query_match_count: number;\n }): Promise<\n {\n embedding: number[];\n levenshtein_score: number;\n }[]\n >;\n\n /**\n * Logs an event or action with the specified details.\n * @param params An object containing parameters for the log entry.\n * @returns A Promise that resolves when the log entry has been saved.\n */\n abstract log(params: {\n body: { [key: string]: unknown };\n userId: UUID;\n roomId: UUID;\n type: string;\n }): Promise<void>;\n\n /**\n * Retrieves details of actors in a given room.\n * @param params An object containing the roomId to search for actors.\n * @returns A Promise that resolves to an array of Actor objects.\n */\n abstract getActorDetails(params: { roomId: UUID }): Promise<Actor[]>;\n\n /**\n * Searches for memories based on embeddings and other specified parameters.\n * @param params An object containing parameters for the memory search.\n * @returns A Promise that resolves to an array of Memory objects.\n */\n abstract searchMemories(params: {\n tableName: string;\n agentId: UUID;\n roomId: UUID;\n embedding: number[];\n match_threshold: number;\n match_count: number;\n unique: boolean;\n }): Promise<Memory[]>;\n\n /**\n * Updates the status of a specific goal.\n * @param params An object containing the goalId and the new status.\n * @returns A Promise that resolves when the goal status has been updated.\n */\n abstract updateGoalStatus(params: {\n goalId: UUID;\n status: GoalStatus;\n }): Promise<void>;\n\n /**\n * Searches for memories by embedding and other specified parameters.\n * @param embedding The embedding vector to search with.\n * @param params Additional parameters for the search.\n * @returns A Promise that resolves to an array of Memory objects.\n */\n abstract searchMemoriesByEmbedding(\n embedding: number[],\n params: {\n match_threshold?: number;\n count?: number;\n roomId?: UUID;\n agentId?: UUID;\n unique?: boolean;\n tableName: string;\n }\n ): Promise<Memory[]>;\n\n /**\n * Creates a new memory in the database.\n * @param memory The memory object to create.\n * @param tableName The table where the memory should be stored.\n * @param unique Indicates if the memory should be unique.\n * @returns A Promise that resolves when the memory has been created.\n */\n abstract createMemory(\n memory: Memory,\n tableName: string,\n unique?: boolean\n ): Promise<void>;\n\n /**\n * Removes a specific memory from the database.\n * @param memoryId The UUID of the memory to remove.\n * @param tableName The table from which the memory should be removed.\n * @returns A Promise that resolves when the memory has been removed.\n */\n abstract removeMemory(memoryId: UUID, tableName: string): Promise<void>;\n\n /**\n * Removes all memories associated with a specific room.\n * @param roomId The UUID of the room whose memories should be removed.\n * @param tableName The table from which the memories should be removed.\n * @returns A Promise that resolves when all memories have been removed.\n */\n abstract removeAllMemories(roomId: UUID, tableName: string): Promise<void>;\n\n /**\n * Counts the number of memories in a specific room.\n * @param roomId The UUID of the room for which to count memories.\n * @param unique Specifies whether to count only unique memories.\n * @param tableName Optional table name to count memories from.\n * @returns A Promise that resolves to the number of memories.\n */\n abstract countMemories(\n roomId: UUID,\n unique?: boolean,\n tableName?: string\n ): Promise<number>;\n\n /**\n * Retrieves goals based on specified parameters.\n * @param params An object containing parameters for goal retrieval.\n * @returns A Promise that resolves to an array of Goal objects.\n */\n abstract getGoals(params: {\n agentId: UUID;\n roomId: UUID;\n userId?: UUID | null;\n onlyInProgress?: boolean;\n count?: number;\n }): Promise<Goal[]>;\n\n /**\n * Updates a specific goal in the database.\n * @param goal The goal object with updated properties.\n * @returns A Promise that resolves when the goal has been updated.\n */\n abstract updateGoal(goal: Goal): Promise<void>;\n\n /**\n * Creates a new goal in the database.\n * @param goal The goal object to create.\n * @returns A Promise that resolves when the goal has been created.\n */\n abstract createGoal(goal: Goal): Promise<void>;\n\n /**\n * Removes a specific goal from the database.\n * @param goalId The UUID of the goal to remove.\n * @returns A Promise that resolves when the goal has been removed.\n */\n abstract removeGoal(goalId: UUID): Promise<void>;\n\n /**\n * Removes all goals associated with a specific room.\n * @param roomId The UUID of the room whose goals should be removed.\n * @returns A Promise that resolves when all goals have been removed.\n */\n abstract removeAllGoals(roomId: UUID): Promise<void>;\n\n /**\n * Retrieves the room ID for a given room, if it exists.\n * @param roomId The UUID of the room to retrieve.\n * @returns A Promise that resolves to the room ID or null if not found.\n */\n abstract getRoom(roomId: UUID): Promise<UUID | null>;\n\n /**\n * Creates a new room with an optional specified ID.\n * @param roomId Optional UUID to assign to the new room.\n * @returns A Promise that resolves to the UUID of the created room.\n */\n abstract createRoom(roomId?: UUID): Promise<UUID>;\n\n /**\n * Removes a specific room from the database.\n * @param roomId The UUID of the room to remove.\n * @returns A Promise that resolves when the room has been removed.\n */\n abstract removeRoom(roomId: UUID): Promise<void>;\n\n /**\n * Retrieves room IDs for which a specific user is a participant.\n * @param userId The UUID of the user.\n * @returns A Promise that resolves to an array of room IDs.\n */\n abstract getRoomsForParticipant(userId: UUID): Promise<UUID[]>;\n\n /**\n * Retrieves room IDs for which specific users are participants.\n * @param userIds An array of UUIDs of the users.\n * @returns A Promise that resolves to an array of room IDs.\n */\n abstract getRoomsForParticipants(userIds: UUID[]): Promise<UUID[]>;\n\n /**\n * Adds a user as a participant to a specific room.\n * @param userId The UUID of the user to add as a participant.\n * @param roomId The UUID of the room to which the user will be added.\n * @returns A Promise that resolves to a boolean indicating success or failure.\n */\n abstract addParticipant(userId: UUID, roomId: UUID): Promise<boolean>;\n\n /**\n * Removes a user as a participant from a specific room.\n * @param userId The UUID of the user to remove as a participant.\n * @param roomId The UUID of the room from which the user will be removed.\n * @returns A Promise that resolves to a boolean indicating success or failure.\n */\n abstract removeParticipant(userId: UUID, roomId: UUID): Promise<boolean>;\n\n /**\n * Retrieves participants associated with a specific account.\n * @param userId The UUID of the account.\n * @returns A Promise that resolves to an array of Participant objects.\n */\n abstract getParticipantsForAccount(userId: UUID): Promise<Participant[]>;\n\n /**\n * Retrieves participants associated with a specific account.\n * @param userId The UUID of the account.\n * @returns A Promise that resolves to an array of Participant objects.\n */\n abstract getParticipantsForAccount(userId: UUID): Promise<Participant[]>;\n\n /**\n * Retrieves participants for a specific room.\n * @param roomId The UUID of the room for which to retrieve participants.\n * @returns A Promise that resolves to an array of UUIDs representing the participants.\n */\n abstract getParticipantsForRoom(roomId: UUID): Promise<UUID[]>;\n\n abstract getParticipantUserState(\n roomId: UUID,\n userId: UUID\n ): Promise<\"FOLLOWED\" | \"MUTED\" | null>;\n abstract setParticipantUserState(\n roomId: UUID,\n userId: UUID,\n state: \"FOLLOWED\" | \"MUTED\" | null\n ): Promise<void>;\n\n /**\n * Creates a new relationship between two users.\n * @param params An object containing the UUIDs of the two users (userA and userB).\n * @returns A Promise that resolves to a boolean indicating success or failure of the creation.\n */\n abstract createRelationship(params: {\n userA: UUID;\n userB: UUID;\n }): Promise<boolean>;\n\n /**\n * Retrieves a relationship between two users if it exists.\n * @param params An object containing the UUIDs of the two users (userA and userB).\n * @returns A Promise that resolves to the Relationship object or null if not found.\n */\n abstract getRelationship(params: {\n userA: UUID;\n userB: UUID;\n }): Promise<Relationship | null>;\n\n /**\n * Retrieves all relationships for a specific user.\n * @param params An object containing the UUID of the user.\n * @returns A Promise that resolves to an array of Relationship objects.\n */\n abstract getRelationships(params: {\n userId: UUID;\n }): Promise<Relationship[]>;\n\n /**\n * Retrieves knowledge items based on specified parameters.\n * @param params Object containing search parameters\n * @returns Promise resolving to array of knowledge items\n */\n abstract getKnowledge(params: {\n id?: UUID;\n agentId: UUID;\n limit?: number;\n query?: string;\n conversationContext?: string;\n }): Promise<RAGKnowledgeItem[]>;\n\n abstract searchKnowledge(params: {\n agentId: UUID;\n embedding: Float32Array;\n match_threshold: number;\n match_count: number;\n searchText?: string;\n }): Promise<RAGKnowledgeItem[]>;\n\n /**\n * Creates a new knowledge item in the database.\n * @param knowledge The knowledge item to create\n * @returns Promise resolving when creation is complete\n */\n abstract createKnowledge(knowledge: RAGKnowledgeItem): Promise<void>;\n\n /**\n * Removes a knowledge item and its associated chunks from the database.\n * @param id The ID of the knowledge item to remove\n * @returns Promise resolving when removal is complete\n */\n abstract removeKnowledge(id: UUID): Promise<void>;\n\n /**\n * Removes an agents full knowledge database and its associated chunks from the database.\n * @param agentId The Agent ID of the knowledge items to remove\n * @returns Promise resolving when removal is complete\n */\n abstract clearKnowledge(agentId: UUID, shared?: boolean): Promise<void>;\n\n /**\n * Executes an operation with circuit breaker protection.\n * @param operation A function that returns a Promise to be executed with circuit breaker protection\n * @param context A string describing the context/operation being performed for logging purposes\n * @returns A Promise that resolves to the result of the operation\n * @throws Will throw an error if the circuit breaker is open or if the operation fails\n * @protected\n */\n protected async withCircuitBreaker<T>(\n operation: () => Promise<T>,\n context: string\n ): Promise<T> {\n try {\n return await this.circuitBreaker.execute(operation);\n } catch (error) {\n elizaLogger.error(`Circuit breaker error in ${context}:`, {\n error: error instanceof Error ? error.message : String(error),\n state: this.circuitBreaker.getState(),\n });\n throw error;\n }\n }\n}\n","import { config } from \"dotenv\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport elizaLogger from \"./logger.ts\";\n\nelizaLogger.info(\"Loading embedding settings:\", {\n USE_OPENAI_EMBEDDING: process.env.USE_OPENAI_EMBEDDING,\n USE_OLLAMA_EMBEDDING: process.env.USE_OLLAMA_EMBEDDING,\n OLLAMA_EMBEDDING_MODEL:\n process.env.OLLAMA_EMBEDDING_MODEL || \"mxbai-embed-large\",\n});\n\n// Add this logging block\nelizaLogger.debug(\"Loading character settings:\", {\n CHARACTER_PATH: process.env.CHARACTER_PATH,\n ARGV: process.argv,\n CHARACTER_ARG: process.argv.find((arg) => arg.startsWith(\"--character=\")),\n CWD: process.cwd(),\n});\n\ninterface Settings {\n [key: string]: string | undefined;\n}\n\ninterface NamespacedSettings {\n [namespace: string]: Settings;\n}\n\nlet environmentSettings: Settings = {};\n\n/**\n * Determines if code is running in a browser environment\n * @returns {boolean} True if in browser environment\n */\nconst isBrowser = (): boolean => {\n return (\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\"\n );\n};\n\n/**\n * Recursively searches for a .env file starting from the current directory\n * and moving up through parent directories (Node.js only)\n * @param {string} [startDir=process.cwd()] - Starting directory for the search\n * @returns {string|null} Path to the nearest .env file or null if not found\n */\nexport function findNearestEnvFile(startDir = process.cwd()) {\n if (isBrowser()) return null;\n\n let currentDir = startDir;\n\n // Continue searching until we reach the root directory\n while (currentDir !== path.parse(currentDir).root) {\n const envPath = path.join(currentDir, \".env\");\n\n if (fs.existsSync(envPath)) {\n return envPath;\n }\n\n // Move up to parent directory\n currentDir = path.dirname(currentDir);\n }\n\n // Check root directory as well\n const rootEnvPath = path.join(path.parse(currentDir).root, \".env\");\n return fs.existsSync(rootEnvPath) ? rootEnvPath : null;\n}\n\n/**\n * Configures environment settings for browser usage\n * @param {Settings} settings - Object containing environment variables\n */\nexport function configureSettings(settings: Settings) {\n environmentSettings = { ...settings };\n}\n\n/**\n * Loads environment variables from the nearest .env file in Node.js\n * or returns configured settings in browser\n * @returns {Settings} Environment variables object\n * @throws {Error} If no .env file is found in Node.js environment\n */\nexport function loadEnvConfig(): Settings {\n // For browser environments, return the configured settings\n if (isBrowser()) {\n return environmentSettings;\n }\n\n // Node.js environment: load from .env file\n const envPath = findNearestEnvFile();\n\n // attempt to Load the .env file into process.env\n const result = config(envPath ? { path: envPath } : {});\n\n if (!result.error) {\n elizaLogger.log(`Loaded .env file from: ${envPath}`);\n }\n\n // Parse namespaced settings\n const namespacedSettings = parseNamespacedSettings(process.env as Settings);\n\n // Attach to process.env for backward compatibility\n Object.entries(namespacedSettings).forEach(([namespace, settings]) => {\n process.env[`__namespaced_${namespace}`] = JSON.stringify(settings);\n });\n\n return process.env as Settings;\n}\n\n/**\n * Gets a specific environment variable\n * @param {string} key - The environment variable key\n * @param {string} [defaultValue] - Optional default value if key doesn't exist\n * @returns {string|undefined} The environment variable value or default value\n */\nexport function getEnvVariable(\n key: string,\n defaultValue?: string\n): string | undefined {\n if (isBrowser()) {\n return environmentSettings[key] || defaultValue;\n }\n return process.env[key] || defaultValue;\n}\n\n/**\n * Checks if a specific environment variable exists\n * @param {string} key - The environment variable key\n * @returns {boolean} True if the environment variable exists\n */\nexport function hasEnvVariable(key: string): boolean {\n if (isBrowser()) {\n return key in environmentSettings;\n }\n return key in process.env;\n}\n\n// Initialize settings based on environment\nexport const settings = isBrowser() ? environmentSettings : loadEnvConfig();\n\nelizaLogger.info(\"Parsed settings:\", {\n USE_OPENAI_EMBEDDING: settings.USE_OPENAI_EMBEDDING,\n USE_OPENAI_EMBEDDING_TYPE: typeof settings.USE_OPENAI_EMBEDDING,\n USE_OLLAMA_EMBEDDING: settings.USE_OLLAMA_EMBEDDING,\n USE_OLLAMA_EMBEDDING_TYPE: typeof settings.USE_OLLAMA_EMBEDDING,\n OLLAMA_EMBEDDING_MODEL:\n settings.OLLAMA_EMBEDDING_MODEL || \"mxbai-embed-large\",\n});\n\nexport default settings;\n\n// Add this function to parse namespaced settings\nfunction parseNamespacedSettings(env: Settings): NamespacedSettings {\n const namespaced: NamespacedSettings = {};\n\n for (const [key, value] of Object.entries(env)) {\n if (!value) continue;\n\n const [namespace, ...rest] = key.split(\".\");\n if (!namespace || rest.length === 0) continue;\n\n const settingKey = rest.join(\".\");\n namespaced[namespace] = namespaced[namespace] || {};\n namespaced[namespace][settingKey] = value;\n }\n\n return namespaced;\n}\n","import type { Readable } from \"stream\";\n\n/**\n * Represents a UUID string in the format \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n */\nexport type UUID = `${string}-${string}-${string}-${string}-${string}`;\n\n/**\n * Represents the content of a message or communication\n */\nexport interface Content {\n /** The main text content */\n text: string;\n\n /** Optional action associated with the message */\n action?: string;\n\n /** Optional source/origin of the content */\n source?: string;\n\n /** URL of the original message/post (e.g. tweet URL, Discord message link) */\n url?: string;\n\n /** UUID of parent message if this is a reply/thread */\n inReplyTo?: UUID;\n\n /** Array of media attachments */\n attachments?: Media[];\n\n /** Additional dynamic properties */\n [key: string]: unknown;\n}\n\n/**\n * Example content with associated user for demonstration purposes\n */\nexport interface ActionExample {\n /** User associated with the example */\n user: string;\n\n /** Content of the example */\n content: Content;\n}\n\n/**\n * Example conversation content with user ID\n */\nexport interface ConversationExample {\n /** UUID of user in conversation */\n userId: UUID;\n\n /** Content of the conversation */\n content: Content;\n}\n\n/**\n * Represents an actor/participant in a conversation\n */\nexport interface Actor {\n /** Display name */\n name: string;\n\n /** Username/handle */\n username: string;\n\n /** Additional profile details */\n details: {\n /** Short profile tagline */\n tagline: string;\n\n /** Longer profile summary */\n summary: string;\n\n /** Favorite quote */\n quote: string;\n };\n\n /** Unique identifier */\n id: UUID;\n}\n\n/**\n * Represents a single objective within a goal\n */\nexport interface Objective {\n /** Optional unique identifier */\n id?: string;\n\n /** Description of what needs to be achieved */\n description: string;\n\n /** Whether objective is completed */\n completed: boolean;\n}\n\n/**\n * Status enum for goals\n */\nexport enum GoalStatus {\n DONE = \"DONE\",\n FAILED = \"FAILED\",\n IN_PROGRESS = \"IN_PROGRESS\",\n}\n\n/**\n * Represents a high-level goal composed of objectives\n */\nexport interface Goal {\n /** Optional unique identifier */\n id?: UUID;\n\n /** Room ID where goal exists */\n roomId: UUID;\n\n /** User ID of goal owner */\n userId: UUID;\n\n /** Name/title of the goal */\n name: string;\n\n /** Current status */\n status: GoalStatus;\n\n /** Component objectives */\n objectives: Objective[];\n}\n\n/**\n * Model size/type classification\n */\nexport enum ModelClass {\n SMALL = \"small\",\n MEDIUM = \"medium\",\n LARGE = \"large\",\n EMBEDDING = \"embedding\",\n IMAGE = \"image\",\n}\n\n/**\n * Model settings\n */\nexport type ModelSettings = {\n /** Model name */\n name: string;\n\n /** Maximum input tokens */\n maxInputTokens: number;\n\n /** Maximum output tokens */\n maxOutputTokens: number;\n\n /** Optional frequency penalty */\n frequency_penalty?: number;\n\n /** Optional presence penalty */\n presence_penalty?: number;\n\n /** Optional repetition penalty */\n repetition_penalty?: number;\n\n /** Stop sequences */\n stop: string[];\n\n /** Temperature setting */\n temperature: number;\n\n /** Optional telemetry configuration (experimental) */\n experimental_telemetry?: TelemetrySettings;\n};\n\n/** Image model settings */\nexport type ImageModelSettings = {\n name: string;\n steps?: number;\n};\n\n/** Embedding model settings */\nexport type EmbeddingModelSettings = {\n name: string;\n dimensions?: number;\n};\n\n/**\n * Configuration for an AI model\n */\nexport type Model = {\n /** Optional API endpoint */\n endpoint?: string;\n\n /** Model names by size class */\n model: {\n [ModelClass.SMALL]?: ModelSettings;\n [ModelClass.MEDIUM]?: ModelSettings;\n [ModelClass.LARGE]?: ModelSettings;\n [ModelClass.EMBEDDING]?: EmbeddingModelSettings;\n [ModelClass.IMAGE]?: ImageModelSettings;\n };\n};\n\n/**\n * Model configurations by provider\n */\nexport type Models = {\n [ModelProviderName.OPENAI]: Model;\n [ModelProviderName.ETERNALAI]: Model;\n [ModelProviderName.ANTHROPIC]: Model;\n [ModelProviderName.GROK]: Model;\n [ModelProviderName.GROQ]: Model;\n [ModelProviderName.LLAMACLOUD]: Model;\n [ModelProviderName.TOGETHER]: Model;\n [ModelProviderName.LLAMALOCAL]: Model;\n [ModelProviderName.LMSTUDIO]: Model;\n [ModelProviderName.GOOGLE]: Model;\n [ModelProviderName.MISTRAL]: Model;\n [ModelProviderName.CLAUDE_VERTEX]: Model;\n [ModelProviderName.REDPILL]: Model;\n [ModelProviderName.OPENROUTER]: Model;\n [ModelProviderName.OLLAMA]: Model;\n [ModelProviderName.HEURIST]: Model;\n [ModelProviderName.GALADRIEL]: Model;\n [ModelProviderName.FAL]: Model;\n [ModelProviderName.GAIANET]: Model;\n [ModelProviderName.ALI_BAILIAN]: Model;\n [ModelProviderName.VOLENGINE]: Model;\n [ModelProviderName.NANOGPT]: Model;\n [ModelProviderName.HYPERBOLIC]: Model;\n [ModelProviderName.VENICE]: Model;\n [ModelProviderName.NVIDIA]: Model;\n [ModelProviderName.NINETEEN_AI]: Model;\n [ModelProviderName.AKASH_CHAT_API]: Model;\n [ModelProviderName.LIVEPEER]: Model;\n [ModelProviderName.DEEPSEEK]: Model;\n [ModelProviderName.INFERA]: Model;\n [ModelProviderName.BEDROCK]: Model;\n [ModelProviderName.ATOMA]: Model;\n [ModelProviderName.SECRETAI]: Model;\n [ModelProviderName.NEARAI]: Model;\n};\n\n/**\n * Available model providers\n */\nexport enum ModelProviderName {\n OPENAI = \"openai\",\n ETERNALAI = \"eternalai\",\n ANTHROPIC = \"anthropic\",\n GROK = \"grok\",\n GROQ = \"groq\",\n LLAMACLOUD = \"llama_cloud\",\n TOGETHER = \"together\",\n LLAMALOCAL = \"llama_local\",\n LMSTUDIO = \"lmstudio\",\n GOOGLE = \"google\",\n MISTRAL = \"mistral\",\n CLAUDE_VERTEX = \"claude_vertex\",\n REDPILL = \"redpill\",\n OPENROUTER = \"openrouter\",\n OLLAMA = \"ollama\",\n HEURIST = \"heurist\",\n GALADRIEL = \"galadriel\",\n FAL = \"falai\",\n GAIANET = \"gaianet\",\n ALI_BAILIAN = \"ali_bailian\",\n VOLENGINE = \"volengine\",\n NANOGPT = \"nanogpt\",\n HYPERBOLIC = \"hyperbolic\",\n VENICE = \"venice\",\n NVIDIA = \"nvidia\",\n NINETEEN_AI = \"nineteen_ai\",\n AKASH_CHAT_API = \"akash_chat_api\",\n LIVEPEER = \"livepeer\",\n LETZAI = \"letzai\",\n DEEPSEEK = \"deepseek\",\n INFERA = \"infera\",\n BEDROCK = \"bedrock\",\n ATOMA = \"atoma\",\n SECRETAI = \"secret_ai\",\n NEARAI = \"nearai\",\n}\n\n/**\n * Represents the current state/context of a conversation\n */\nexport interface State {\n /** ID of user who sent current message */\n userId?: UUID;\n\n /** ID of agent in conversation */\n agentId?: UUID;\n\n /** Agent's biography */\n bio: string;\n\n /** Agent's background lore */\n lore: string;\n\n /** Message handling directions */\n messageDirections: string;\n\n /** Post handling directions */\n postDirections: string;\n\n /** Current room/conversation ID */\n roomId: UUID;\n\n /** Optional agent name */\n agentName?: string;\n\n /** Optional message sender name */\n senderName?: string;\n\n /** String representation of conversation actors */\n actors: string;\n\n /** Optional array of actor objects */\n actorsData?: Actor[];\n\n /** Optional string representation of goals */\n goals?: string;\n\n /** Optional array of goal objects */\n goalsData?: Goal[];\n\n /** Recent message history as string */\n recentMessages: string;\n\n /** Recent message objects */\n recentMessagesData: Memory[];\n\n /** Optional valid action names */\n actionNames?: string;\n\n /** Optional action descriptions */\n actions?: string;\n\n /** Optional action objects */\n actionsData?: Action[];\n\n /** Optional action examples */\n actionExamples?: string;\n\n /** Optional provider descriptions */\n providers?: string;\n\n /** Optional response content */\n responseData?: Content;\n\n /** Optional recent interaction objects */\n recentInteractionsData?: Memory[];\n\n /** Optional recent interactions string */\n recentInteractions?: string;\n\n /** Optional formatted conversation */\n formattedConversation?: string;\n\n /** Optional formatted knowledge */\n knowledge?: string;\n /** Optional knowledge data */\n knowledgeData?: KnowledgeItem[];\n /** Optional knowledge data */\n ragKnowledgeData?: RAGKnowledgeItem[];\n\n /** Additional dynamic properties */\n [key: string]: unknown;\n}\n\n/**\n * Represents a stored memory/message\n */\nexport interface Memory {\n /** Optional unique identifier */\n id?: UUID;\n\n /** Associated user ID */\n userId: UUID;\n\n /** Associated agent ID */\n agentId: UUID;\n\n /** Optional creation timestamp */\n createdAt?: number;\n\n /** Memory content */\n content: Content;\n\n /** Optional embedding vector */\n embedding?: number[];\n\n /** Associated room ID */\n roomId: UUID;\n\n /** Whether memory is unique */\n unique?: boolean;\n\n /** Embedding similarity score */\n similarity?: number;\n}\n\n/**\n * Example message for demonstration\n */\nexport interface MessageExample {\n /** Associated user */\n user: string;\n\n /** Message content */\n content: Content;\n}\n\n/**\n * Handler function type for processing messages\n */\nexport type Handler = (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n options?: { [key: string]: unknown },\n callback?: HandlerCallback,\n) => Promise<unknown>;\n\n/**\n * Callback function type for handlers\n */\nexport type HandlerCallback = (\n response: Content,\n files?: any,\n) => Promise<Memory[]>;\n\n/**\n * Validator function type for actions/evaluators\n */\nexport type Validator = (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n) => Promise<boolean>;\n\n/**\n * Represents an action the agent can perform\n */\nexport interface Action {\n /** Similar action descriptions */\n similes: string[];\n\n /** Detailed description */\n description: string;\n\n /** Example usages */\n examples: ActionExample[][];\n\n /** Handler function */\n handler: Handler;\n\n /** Action name */\n name: string;\n\n /** Validation function */\n validate: Validator;\n\n /** Whether to suppress the initial message when this action is used */\n suppressInitialMessage?: boolean;\n}\n\n/**\n * Example for evaluating agent behavior\n */\nexport interface EvaluationExample {\n /** Evaluation context */\n context: string;\n\n /** Example messages */\n messages: Array<ActionExample>;\n\n /** Expected outcome */\n outcome: string;\n}\n\n/**\n * Evaluator for assessing agent responses\n */\nexport interface Evaluator {\n /** Whether to always run */\n alwaysRun?: boolean;\n\n /** Detailed description */\n description: string;\n\n /** Similar evaluator descriptions */\n similes: string[];\n\n /** Example evaluations */\n examples: EvaluationExample[];\n\n /** Handler function */\n handler: Handler;\n\n /** Evaluator name */\n name: string;\n\n /** Validation function */\n validate: Validator;\n}\n\n/**\n * Provider for external data/services\n */\nexport interface Provider {\n /** Data retrieval function */\n get: (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n ) => Promise<any>;\n}\n\n/**\n * Represents a relationship between users\n */\nexport interface Relationship {\n /** Unique identifier */\n id: UUID;\n\n /** First user ID */\n userA: UUID;\n\n /** Second user ID */\n userB: UUID;\n\n /** Primary user ID */\n userId: UUID;\n\n /** Associated room ID */\n roomId: UUID;\n\n /** Relationship status */\n status: string;\n\n /** Optional creation timestamp */\n createdAt?: string;\n}\n\n/**\n * Represents a user account\n */\nexport interface Account {\n /** Unique identifier */\n id: UUID;\n\n /** Display name */\n name: string;\n\n /** Username */\n username: string;\n\n /** Optional additional details */\n details?: { [key: string]: any };\n\n /** Optional email */\n email?: string;\n\n /** Optional avatar URL */\n avatarUrl?: string;\n}\n\n/**\n * Room participant with account details\n */\nexport interface Participant {\n /** Unique identifier */\n id: UUID;\n\n /** Associated account */\n account: Account;\n}\n\n/**\n * Represents a conversation room\n */\nexport interface Room {\n /** Unique identifier */\n id: UUID;\n\n /** Room participants */\n participants: Participant[];\n}\n\n/**\n * Represents a media attachment\n */\nexport type Media = {\n /** Unique identifier */\n id: string;\n\n /** Media URL */\n url: string;\n\n /** Media title */\n title: string;\n\n /** Media source */\n source: string;\n\n /** Media description */\n description: string;\n\n /** Text content */\n text: string;\n\n /** Content type */\n contentType?: string;\n};\n\n/**\n * Client instance\n */\nexport type ClientInstance = {\n /** Client name */\n // name: string;\n\n /** Stop client connection */\n stop: (runtime: IAgentRuntime) => Promise<unknown>;\n};\n\n/**\n * Client interface for platform connections\n */\nexport type Client = {\n /** Client name */\n name: string;\n\n /** Client configuration */\n config?: { [key: string]: any };\n\n /** Start client connection */\n start: (runtime: IAgentRuntime) => Promise<ClientInstance>;\n};\n\n/**\n * Database adapter initialization\n */\nexport type Adapter = {\n /** Initialize the adapter */\n init: (runtime: IAgentRuntime) => IDatabaseAdapter & IDatabaseCacheAdapter;\n};\n\n/**\n * Plugin for extending agent functionality\n */\nexport type Plugin = {\n /** Plugin name */\n name: string;\n\n /** Plugin npm name */\n npmName?: string;\n\n /** Plugin configuration */\n config?: { [key: string]: any };\n\n /** Plugin description */\n description: string;\n\n /** Optional actions */\n actions?: Action[];\n\n /** Optional providers */\n providers?: Provider[];\n\n /** Optional evaluators */\n evaluators?: Evaluator[];\n\n /** Optional services */\n services?: Service[];\n\n /** Optional clients */\n clients?: Client[];\n\n /** Optional adapters */\n adapters?: Adapter[];\n\n /** Optional post charactor processor handler */\n handlePostCharacterLoaded?: (char: Character) => Promise<Character>;\n};\n\nexport interface IAgentConfig {\n [key: string]: string;\n}\n\nexport type TelemetrySettings = {\n /**\n * Enable or disable telemetry. Disabled by default while experimental.\n */\n isEnabled?: boolean;\n /**\n * Enable or disable input recording. Enabled by default.\n *\n * You might want to disable input recording to avoid recording sensitive\n * information, to reduce data transfers, or to increase performance.\n */\n recordInputs?: boolean;\n /**\n * Enable or disable output recording. Enabled by default.\n *\n * You might want to disable output recording to avoid recording sensitive\n * information, to reduce data transfers, or to increase performance.\n */\n recordOutputs?: boolean;\n /**\n * Identifier for this function. Used to group telemetry data by function.\n */\n functionId?: string;\n};\n\nexport interface ModelConfiguration {\n temperature?: number;\n maxOutputTokens?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n maxInputTokens?: number;\n experimental_telemetry?: TelemetrySettings;\n}\n\nexport type TemplateType = string | ((options: { state: State }) => string);\n\n/**\n * Configuration for an agent character\n */\nexport type Character = {\n /** Optional unique identifier */\n id?: UUID;\n\n /** Character name */\n name: string;\n\n /** Optional username */\n username?: string;\n\n /** Optional email */\n email?: string;\n\n /** Optional system prompt */\n system?: string;\n\n /** Model provider to use */\n modelProvider: ModelProviderName;\n\n /** Image model provider to use, if different from modelProvider */\n imageModelProvider?: ModelProviderName;\n\n /** Image Vision model provider to use, if different from modelProvider */\n imageVisionModelProvider?: ModelProviderName;\n\n /** Optional model endpoint override */\n modelEndpointOverride?: string;\n\n /** Optional prompt templates */\n templates?: {\n goalsTemplate?: TemplateType;\n factsTemplate?: TemplateType;\n messageHandlerTemplate?: TemplateType;\n shouldRespondTemplate?: TemplateType;\n continueMessageHandlerTemplate?: TemplateType;\n evaluationTemplate?: TemplateType;\n twitterSearchTemplate?: TemplateType;\n twitterActionTemplate?: TemplateType;\n twitterPostTemplate?: TemplateType;\n twitterMessageHandlerTemplate?: TemplateType;\n twitterShouldRespondTemplate?: TemplateType;\n twitterVoiceHandlerTemplate?: TemplateType;\n instagramPostTemplate?: TemplateType;\n instagramMessageHandlerTemplate?: TemplateType;\n instagramShouldRespondTemplate?: TemplateType;\n farcasterPostTemplate?: TemplateType;\n lensPostTemplate?: TemplateType;\n farcasterMessageHandlerTemplate?: TemplateType;\n lensMessageHandlerTemplate?: TemplateType;\n farcasterShouldRespondTemplate?: TemplateType;\n lensShouldRespondTemplate?: TemplateType;\n telegramMessageHandlerTemplate?: TemplateType;\n telegramShouldRespondTemplate?: TemplateType;\n telegramAutoPostTemplate?: string;\n telegramPinnedMessageTemplate?: string;\n discordAutoPostTemplate?: string;\n discordAnnouncementHypeTemplate?: string;\n discordVoiceHandlerTemplate?: TemplateType;\n discordShouldRespondTemplate?: TemplateType;\n discordMessageHandlerTemplate?: TemplateType;\n slackMessageHandlerTemplate?: TemplateType;\n slackShouldRespondTemplate?: TemplateType;\n jeeterPostTemplate?: string;\n jeeterSearchTemplate?: string;\n jeeterInteractionTemplate?: string;\n jeeterMessageHandlerTemplate?: string;\n jeeterShouldRespondTemplate?: string;\n devaPostTemplate?: string;\n };\n\n /** Character biography */\n bio: string | string[];\n\n /** Character background lore */\n lore: string[];\n\n /** Example messages */\n messageExamples: MessageExample[][];\n\n /** Example posts */\n postExamples: string[];\n\n /** Known topics */\n topics: string[];\n\n /** Character traits */\n adjectives: string[];\n\n /** Optional knowledge base */\n knowledge?: (string | { path: string; shared?: boolean } | { directory: string; shared?: boolean })[];\n\n /** Available plugins */\n plugins: Plugin[];\n\n /** Character Processor Plugins */\n postProcessors?: Pick<Plugin, 'name' | 'description' | 'handlePostCharacterLoaded'>[];\n\n /** Optional configuration */\n settings?: {\n secrets?: { [key: string]: string };\n intiface?: boolean;\n imageSettings?: {\n steps?: number;\n width?: number;\n height?: number;\n cfgScale?: number;\n negativePrompt?: string;\n numIterations?: number;\n guidanceScale?: number;\n seed?: number;\n modelId?: string;\n jobId?: string;\n count?: number;\n stylePreset?: string;\n hideWatermark?: boolean;\n safeMode?: boolean;\n };\n voice?: {\n model?: string; // For VITS\n url?: string; // Legacy VITS support\n elevenlabs?: {\n // New structured ElevenLabs config\n voiceId: string;\n model?: string;\n stability?: string;\n similarityBoost?: string;\n style?: string;\n useSpeakerBoost?: string;\n };\n };\n model?: string;\n modelConfig?: ModelConfiguration;\n embeddingModel?: string;\n chains?: {\n evm?: any[];\n solana?: any[];\n [key: string]: any[];\n };\n transcription?: TranscriptionProvider;\n ragKnowledge?: boolean;\n };\n\n /** Optional client-specific config */\n clientConfig?: {\n discord?: {\n shouldIgnoreBotMessages?: boolean;\n shouldIgnoreDirectMessages?: boolean;\n shouldRespondOnlyToMentions?: boolean;\n messageSimilarityThreshold?: number;\n isPartOfTeam?: boolean;\n teamAgentIds?: string[];\n teamLeaderId?: string;\n teamMemberInterestKeywords?: string[];\n allowedChannelIds?: string[];\n autoPost?: {\n enabled?: boolean;\n monitorTime?: number;\n inactivityThreshold?: number;\n mainChannelId?: string;\n announcementChannelIds?: string[];\n minTimeBetweenPosts?: number;\n };\n };\n telegram?: {\n shouldIgnoreBotMessages?: boolean;\n shouldIgnoreDirectMessages?: boolean;\n shouldRespondOnlyToMentions?: boolean;\n shouldOnlyJoinInAllowedGroups?: boolean;\n allowedGroupIds?: string[];\n messageSimilarityThreshold?: number;\n isPartOfTeam?: boolean;\n teamAgentIds?: string[];\n teamLeaderId?: string;\n teamMemberInterestKeywords?: string[];\n autoPost?: {\n enabled?: boolean;\n monitorTime?: number;\n inactivityThreshold?: number;\n mainChannelId?: string;\n pinnedMessagesGroups?: string[];\n minTimeBetweenPosts?: number;\n };\n };\n slack?: {\n shouldIgnoreBotMessages?: boolean;\n shouldIgnoreDirectMessages?: boolean;\n };\n gitbook?: {\n keywords?: {\n projectTerms?: string[];\n generalQueries?: string[];\n };\n documentTriggers?: string[];\n };\n };\n\n /** Writing style guides */\n style: {\n all: string[];\n chat: string[];\n post: string[];\n };\n\n /** Optional Twitter profile */\n twitterProfile?: {\n id: string;\n username: string;\n screenName: string;\n bio: string;\n nicknames?: string[];\n };\n\n /** Optional Instagram profile */\n instagramProfile?: {\n id: string;\n username: string;\n bio: string;\n nicknames?: string[];\n };\n\n /** Optional SimsAI profile */\n simsaiProfile?: {\n id: string;\n username: string;\n screenName: string;\n bio: string;\n };\n\n /** Optional NFT prompt */\n nft?: {\n prompt: string;\n };\n\n /**Optinal Parent characters to inherit information from */\n extends?: string[];\n\n twitterSpaces?: TwitterSpaceDecisionOptions;\n};\n\nexport interface TwitterSpaceDecisionOptions {\n maxSpeakers?: number;\n topics?: string[];\n typicalDurationMinutes?: number;\n idleKickTimeoutMs?: number;\n minIntervalBetweenSpacesMinutes?: number;\n businessHoursOnly?: boolean;\n randomChance?: number;\n enableIdleMonitor?: boolean;\n enableSttTts?: boolean;\n enableRecording?: boolean;\n voiceId?: string;\n sttLanguage?: string;\n speakerMaxDurationMs?: number;\n}\n\n/**\n * Interface for database operations\n */\nexport interface IDatabaseAdapter {\n /** Database instance */\n db: any;\n\n /** Optional initialization */\n init(): Promise<void>;\n\n /** Close database connection */\n close(): Promise<void>;\n\n /** Get account by ID */\n getAccountById(userId: UUID): Promise<Account | null>;\n\n /** Create new account */\n createAccount(account: Account): Promise<boolean>;\n\n /** Get memories matching criteria */\n getMemories(params: {\n roomId: UUID;\n count?: number;\n unique?: boolean;\n tableName: string;\n agentId: UUID;\n start?: number;\n end?: number;\n }): Promise<Memory[]>;\n\n getMemoryById(id: UUID): Promise<Memory | null>;\n\n getMemoriesByIds(ids: UUID[], tableName?: string): Promise<Memory[]>;\n\n getMemoriesByRoomIds(params: {\n tableName: string;\n agentId: UUID;\n roomIds: UUID[];\n limit?: number;\n }): Promise<Memory[]>;\n\n getCachedEmbeddings(params: {\n query_table_name: string;\n query_threshold: number;\n query_input: string;\n query_field_name: string;\n query_field_sub_name: string;\n query_match_count: number;\n }): Promise<{ embedding: number[]; levenshtein_score: number }[]>;\n\n log(params: {\n body: { [key: string]: unknown };\n userId: UUID;\n roomId: UUID;\n type: string;\n }): Promise<void>;\n\n getActorDetails(params: { roomId: UUID }): Promise<Actor[]>;\n\n searchMemories(params: {\n tableName: string;\n agentId: UUID;\n roomId: UUID;\n embedding: number[];\n match_threshold: number;\n match_count: number;\n unique: boolean;\n }): Promise<Memory[]>;\n\n updateGoalStatus(params: {\n goalId: UUID;\n status: GoalStatus;\n }): Promise<void>;\n\n searchMemoriesByEmbedding(\n embedding: number[],\n params: {\n match_threshold?: number;\n count?: number;\n roomId?: UUID;\n agentId?: UUID;\n unique?: boolean;\n tableName: string;\n },\n ): Promise<Memory[]>;\n\n createMemory(\n memory: Memory,\n tableName: string,\n unique?: boolean,\n ): Promise<void>;\n\n removeMemory(memoryId: UUID, tableName: string): Promise<void>;\n\n removeAllMemories(roomId: UUID, tableName: string): Promise<void>;\n\n countMemories(\n roomId: UUID,\n unique?: boolean,\n tableName?: string,\n ): Promise<number>;\n\n getGoals(params: {\n agentId: UUID;\n roomId: UUID;\n userId?: UUID | null;\n onlyInProgress?: boolean;\n count?: number;\n }): Promise<Goal[]>;\n\n updateGoal(goal: Goal): Promise<void>;\n\n createGoal(goal: Goal): Promise<void>;\n\n removeGoal(goalId: UUID): Promise<void>;\n\n removeAllGoals(roomId: UUID): Promise<void>;\n\n getRoom(roomId: UUID): Promise<UUID | null>;\n\n createRoom(roomId?: UUID): Promise<UUID>;\n\n removeRoom(roomId: UUID): Promise<void>;\n\n getRoomsForParticipant(userId: UUID): Promise<UUID[]>;\n\n getRoomsForParticipants(userIds: UUID[]): Promise<UUID[]>;\n\n addParticipant(userId: UUID, roomId: UUID): Promise<boolean>;\n\n removeParticipant(userId: UUID, roomId: UUID): Promise<boolean>;\n\n getParticipantsForAccount(userId: UUID): Promise<Participant[]>;\n\n getParticipantsForRoom(roomId: UUID): Promise<UUID[]>;\n\n getParticipantUserState(\n roomId: UUID,\n userId: UUID,\n ): Promise<\"FOLLOWED\" | \"MUTED\" | null>;\n\n setParticipantUserState(\n roomId: UUID,\n userId: UUID,\n state: \"FOLLOWED\" | \"MUTED\" | null,\n ): Promise<void>;\n\n createRelationship(params: { userA: UUID; userB: UUID }): Promise<boolean>;\n\n getRelationship(params: {\n userA: UUID;\n userB: UUID;\n }): Promise<Relationship | null>;\n\n getRelationships(params: { userId: UUID }): Promise<Relationship[]>;\n\n getKnowledge(params: {\n id?: UUID;\n agentId: UUID;\n limit?: number;\n query?: string;\n conversationContext?: string;\n }): Promise<RAGKnowledgeItem[]>;\n\n searchKnowledge(params: {\n agentId: UUID;\n embedding: Float32Array;\n match_threshold: number;\n match_count: number;\n searchText?: string;\n }): Promise<RAGKnowledgeItem[]>;\n\n createKnowledge(knowledge: RAGKnowledgeItem): Promise<void>;\n removeKnowledge(id: UUID): Promise<void>;\n clearKnowledge(agentId: UUID, shared?: boolean): Promise<void>;\n}\n\nexport interface IDatabaseCacheAdapter {\n getCache(params: {\n agentId: UUID;\n key: string;\n }): Promise<string | undefined>;\n\n setCache(params: {\n agentId: UUID;\n key: string;\n value: string;\n }): Promise<boolean>;\n\n deleteCache(params: { agentId: UUID; key: string }): Promise<boolean>;\n}\n\nexport interface IMemoryManager {\n runtime: IAgentRuntime;\n tableName: string;\n constructor: Function;\n\n addEmbeddingToMemory(memory: Memory): Promise<Memory>;\n\n getMemories(opts: {\n roomId: UUID;\n count?: number;\n unique?: boolean;\n start?: number;\n end?: number;\n }): Promise<Memory[]>;\n\n getCachedEmbeddings(\n content: string,\n ): Promise<{ embedding: number[]; levenshtein_score: number }[]>;\n\n getMemoryById(id: UUID): Promise<Memory | null>;\n getMemoriesByRoomIds(params: {\n roomIds: UUID[];\n limit?: number;\n }): Promise<Memory[]>;\n searchMemoriesByEmbedding(\n embedding: number[],\n opts: {\n match_threshold?: number;\n count?: number;\n roomId: UUID;\n unique?: boolean;\n },\n ): Promise<Memory[]>;\n\n createMemory(memory: Memory, unique?: boolean): Promise<void>;\n\n removeMemory(memoryId: UUID): Promise<void>;\n\n removeAllMemories(roomId: UUID): Promise<void>;\n\n countMemories(roomId: UUID, unique?: boolean): Promise<number>;\n}\n\nexport interface IRAGKnowledgeManager {\n runtime: IAgentRuntime;\n tableName: string;\n\n getKnowledge(params: {\n query?: string;\n id?: UUID;\n limit?: number;\n conversationContext?: string;\n agentId?: UUID;\n }): Promise<RAGKnowledgeItem[]>;\n createKnowledge(item: RAGKnowledgeItem): Promise<void>;\n removeKnowledge(id: UUID): Promise<void>;\n searchKnowledge(params: {\n agentId: UUID;\n embedding: Float32Array | number[];\n match_threshold?: number;\n match_count?: number;\n searchText?: string;\n }): Promise<RAGKnowledgeItem[]>;\n clearKnowledge(shared?: boolean): Promise<void>;\n processFile(file: {\n path: string;\n content: string;\n type: \"pdf\" | \"md\" | \"txt\";\n isShared: boolean;\n }): Promise<void>;\n cleanupDeletedKnowledgeFiles(): Promise<void>;\n generateScopedId(path: string, isShared: boolean): UUID;\n}\n\nexport type CacheOptions = {\n expires?: number;\n};\n\nexport enum CacheStore {\n REDIS = \"redis\",\n DATABASE = \"database\",\n FILESYSTEM = \"filesystem\",\n}\n\nexport interface ICacheManager {\n get<T = unknown>(key: string): Promise<T | undefined>;\n set<T>(key: string, value: T, options?: CacheOptions): Promise<void>;\n delete(key: string): Promise<void>;\n}\n\nexport abstract class Service {\n private static instance: Service | null = null;\n\n static get serviceType(): ServiceType {\n throw new Error(\"Service must implement static serviceType getter\");\n }\n\n public static getInstance<T extends Service>(): T {\n if (!Service.instance) {\n Service.instance = new (this as any)();\n }\n return Service.instance as T;\n }\n\n get serviceType(): ServiceType {\n return (this.constructor as typeof Service).serviceType;\n }\n\n // Add abstract initialize method that must be implemented by derived classes\n abstract initialize(runtime: IAgentRuntime): Promise<void>;\n}\n\nexport interface IAgentRuntime {\n // Properties\n agentId: UUID;\n serverUrl: string;\n databaseAdapter: IDatabaseAdapter;\n token: string | null;\n modelProvider: ModelProviderName;\n imageModelProvider: ModelProviderName;\n imageVisionModelProvider: ModelProviderName;\n character: Character;\n providers: Provider[];\n actions: Action[];\n evaluators: Evaluator[];\n plugins: Plugin[];\n\n fetch?: typeof fetch | null;\n\n messageManager: IMemoryManager;\n descriptionManager: IMemoryManager;\n documentsManager: IMemoryManager;\n knowledgeManager: IMemoryManager;\n ragKnowledgeManager: IRAGKnowledgeManager;\n loreManager: IMemoryManager;\n\n cacheManager: ICacheManager;\n\n services: Map<ServiceType, Service>;\n clients: ClientInstance[];\n\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter | null;\n\n initialize(): Promise<void>;\n\n registerMemoryManager(manager: IMemoryManager): void;\n\n getMemoryManager(name: string): IMemoryManager | null;\n\n getService<T extends Service>(service: ServiceType): T | null;\n\n registerService(service: Service): void;\n\n getSetting(key: string): string | null;\n\n // Methods\n getConversationLength(): number;\n\n processActions(\n message: Memory,\n responses: Memory[],\n state?: State,\n callback?: HandlerCallback,\n ): Promise<void>;\n\n evaluate(\n message: Memory,\n state?: State,\n didRespond?: boolean,\n callback?: HandlerCallback,\n ): Promise<string[] | null>;\n\n ensureParticipantExists(userId: UUID, roomId: UUID): Promise<void>;\n\n ensureUserExists(\n userId: UUID,\n userName: string | null,\n name: string | null,\n source: string | null,\n ): Promise<void>;\n\n registerAction(action: Action): void;\n\n ensureConnection(\n userId: UUID,\n roomId: UUID,\n userName?: string,\n userScreenName?: string,\n source?: string,\n ): Promise<void>;\n\n ensureParticipantInRoom(userId: UUID, roomId: UUID): Promise<void>;\n\n ensureRoomExists(roomId: UUID): Promise<void>;\n\n composeState(\n message: Memory,\n additionalKeys?: { [key: string]: unknown },\n ): Promise<State>;\n\n updateRecentMessageState(state: State): Promise<State>;\n}\n\nexport interface IImageDescriptionService extends Service {\n describeImage(\n imageUrl: string,\n ): Promise<{ title: string; description: string }>;\n}\n\nexport interface ITranscriptionService extends Service {\n transcribeAttachment(audioBuffer: ArrayBuffer): Promise<string | null>;\n transcribeAttachmentLocally(\n audioBuffer: ArrayBuffer,\n ): Promise<string | null>;\n transcribe(audioBuffer: ArrayBuffer): Promise<string | null>;\n transcribeLocally(audioBuffer: ArrayBuffer): Promise<string | null>;\n}\n\nexport interface IVideoService extends Service {\n isVideoUrl(url: string): boolean;\n fetchVideoInfo(url: string): Promise<Media>;\n downloadVideo(videoInfo: Media): Promise<string>;\n processVideo(url: string, runtime: IAgentRuntime): Promise<Media>;\n}\n\nexport interface ITextGenerationService extends Service {\n initializeModel(): Promise<void>;\n queueMessageCompletion(\n context: string,\n temperature: number,\n stop: string[],\n frequency_penalty: number,\n presence_penalty: number,\n max_tokens: number,\n ): Promise<any>;\n queueTextCompletion(\n context: string,\n temperature: number,\n stop: string[],\n frequency_penalty: number,\n presence_penalty: number,\n max_tokens: number,\n ): Promise<string>;\n getEmbeddingResponse(input: string): Promise<number[] | undefined>;\n}\n\nexport interface IBrowserService extends Service {\n closeBrowser(): Promise<void>;\n getPageContent(\n url: string,\n runtime: IAgentRuntime,\n ): Promise<{ title: string; description: string; bodyContent: string }>;\n}\n\nexport interface ISpeechService extends Service {\n getInstance(): ISpeechService;\n generate(runtime: IAgentRuntime, text: string): Promise<Readable>;\n}\n\nexport interface IPdfService extends Service {\n getInstance(): IPdfService;\n convertPdfToText(pdfBuffer: Buffer): Promise<string>;\n}\n\nexport interface IAwsS3Service extends Service {\n uploadFile(\n imagePath: string,\n subDirectory: string,\n useSignedUrl: boolean,\n expiresIn: number,\n ): Promise<{\n success: boolean;\n url?: string;\n error?: string;\n }>;\n generateSignedUrl(fileName: string, expiresIn: number): Promise<string>;\n}\n\nexport interface UploadIrysResult {\n success: boolean;\n url?: string;\n error?: string;\n data?: any;\n}\n\nexport interface DataIrysFetchedFromGQL {\n success: boolean;\n data: any;\n error?: string;\n}\n\nexport interface GraphQLTag {\n name: string;\n values: any[];\n}\n\nexport enum IrysMessageType {\n REQUEST = \"REQUEST\",\n DATA_STORAGE = \"DATA_STORAGE\",\n REQUEST_RESPONSE = \"REQUEST_RESPONSE\",\n}\n\nexport enum IrysDataType {\n FILE = \"FILE\",\n IMAGE = \"IMAGE\",\n OTHER = \"OTHER\",\n}\n\nexport interface IrysTimestamp {\n from: number;\n to: number;\n}\n\nexport interface IIrysService extends Service {\n getDataFromAnAgent(\n agentsWalletPublicKeys: string[],\n tags: GraphQLTag[],\n timestamp: IrysTimestamp,\n ): Promise<DataIrysFetchedFromGQL>;\n workerUploadDataOnIrys(\n data: any,\n dataType: IrysDataType,\n messageType: IrysMessageType,\n serviceCategory: string[],\n protocol: string[],\n validationThreshold: number[],\n minimumProviders: number[],\n testProvider: boolean[],\n reputation: number[],\n ): Promise<UploadIrysResult>;\n providerUploadDataOnIrys(\n data: any,\n dataType: IrysDataType,\n serviceCategory: string[],\n protocol: string[],\n ): Promise<UploadIrysResult>;\n}\n\nexport interface ITeeLogService extends Service {\n getInstance(): ITeeLogService;\n log(\n agentId: string,\n roomId: string,\n userId: string,\n type: string,\n content: string,\n ): Promise<boolean>;\n}\n\nexport enum ServiceType {\n IMAGE_DESCRIPTION = \"image_description\",\n TRANSCRIPTION = \"transcription\",\n VIDEO = \"video\",\n TEXT_GENERATION = \"text_generation\",\n BROWSER = \"browser\",\n SPEECH_GENERATION = \"speech_generation\",\n PDF = \"pdf\",\n INTIFACE = \"intiface\",\n AWS_S3 = \"aws_s3\",\n BUTTPLUG = \"buttplug\",\n SLACK = \"slack\",\n VERIFIABLE_LOGGING = \"verifiable_logging\",\n IRYS = \"irys\",\n TEE_LOG = \"tee_log\",\n GOPLUS_SECURITY = \"goplus_security\",\n WEB_SEARCH = \"web_search\",\n EMAIL_AUTOMATION = \"email_automation\",\n NKN_CLIENT_SERVICE = \"nkn_client_service\",\n}\n\nexport enum LoggingLevel {\n DEBUG = \"debug\",\n VERBOSE = \"verbose\",\n NONE = \"none\",\n}\n\nexport type KnowledgeItem = {\n id: UUID;\n content: Content;\n};\n\nexport interface RAGKnowledgeItem {\n id: UUID;\n agentId: UUID;\n content: {\n text: string;\n metadata?: {\n isMain?: boolean;\n isChunk?: boolean;\n originalId?: UUID;\n chunkIndex?: number;\n source?: string;\n type?: string;\n isShared?: boolean;\n [key: string]: unknown;\n };\n };\n embedding?: Float32Array;\n createdAt?: number;\n similarity?: number;\n score?: number;\n}\n\nexport interface ActionResponse {\n like: boolean;\n retweet: boolean;\n quote?: boolean;\n reply?: boolean;\n}\n\nexport interface ISlackService extends Service {\n client: any;\n}\n\nexport enum TokenizerType {\n Auto = \"auto\",\n TikToken = \"tiktoken\",\n}\n\nexport enum TranscriptionProvider {\n OpenAI = \"openai\",\n Deepgram = \"deepgram\",\n Local = \"local\",\n}\n\nexport enum ActionTimelineType {\n ForYou = \"foryou\",\n Following = \"following\",\n}\nexport enum KnowledgeScope {\n SHARED = \"shared\",\n PRIVATE = \"private\",\n}\n\nexport enum CacheKeyPrefix {\n KNOWLEDGE = \"knowledge\",\n}\n\nexport interface DirectoryItem {\n directory: string;\n shared?: boolean;\n}\n\nexport interface ChunkRow {\n id: string;\n // Add other properties if needed\n}\n","import settings from \"./settings.ts\";\nimport {\n type EmbeddingModelSettings,\n type ImageModelSettings,\n ModelClass,\n ModelProviderName,\n type Models,\n type ModelSettings,\n} from \"./types.ts\";\n\nexport const models: Models = {\n [ModelProviderName.OPENAI]: {\n endpoint: settings.OPENAI_API_URL || \"https://api.openai.com/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_OPENAI_MODEL || \"gpt-4o-mini\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_OPENAI_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_OPENAI_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.EMBEDDING]: {\n name:\n settings.EMBEDDING_OPENAI_MODEL || \"text-embedding-3-small\",\n dimensions: 1536,\n },\n [ModelClass.IMAGE]: {\n name: settings.IMAGE_OPENAI_MODEL || \"dall-e-3\",\n },\n },\n },\n [ModelProviderName.ETERNALAI]: {\n endpoint: settings.ETERNALAI_URL,\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.ETERNALAI_MODEL ||\n \"neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.ETERNALAI_MODEL ||\n \"neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.ETERNALAI_MODEL ||\n \"neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n },\n },\n [ModelProviderName.ANTHROPIC]: {\n endpoint: settings.ANTHROPIC_API_URL || \"https://api.anthropic.com/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_ANTHROPIC_MODEL || \"claude-3-haiku-20240307\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 4096,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_ANTHROPIC_MODEL ||\n \"claude-3-5-sonnet-20241022\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 4096,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_ANTHROPIC_MODEL ||\n \"claude-3-5-sonnet-20241022\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 4096,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.CLAUDE_VERTEX]: {\n endpoint: settings.ANTHROPIC_API_URL || \"https://api.anthropic.com/v1\", // TODO: check\n model: {\n [ModelClass.SMALL]: {\n name: \"claude-3-5-sonnet-20241022\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: \"claude-3-5-sonnet-20241022\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: \"claude-3-opus-20240229\",\n stop: [],\n maxInputTokens: 200000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.GROK]: {\n endpoint: \"https://api.x.ai/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_GROK_MODEL || \"grok-2-1212\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_GROK_MODEL || \"grok-2-1212\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_GROK_MODEL || \"grok-2-1212\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: settings.EMBEDDING_GROK_MODEL || \"grok-2-1212\", // not sure about this one\n },\n },\n },\n [ModelProviderName.GROQ]: {\n endpoint: \"https://api.groq.com/openai/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_GROQ_MODEL || \"llama-3.1-8b-instant\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8000,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_GROQ_MODEL || \"llama-3.3-70b-versatile\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8000,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_GROQ_MODEL || \"llama-3.2-90b-vision-preview\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8000,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: settings.EMBEDDING_GROQ_MODEL || \"llama-3.1-8b-instant\",\n },\n },\n },\n [ModelProviderName.LLAMACLOUD]: {\n endpoint: \"https://api.llamacloud.com/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: \"meta-llama/Llama-3.2-3B-Instruct-Turbo\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: \"meta-llama-3.1-8b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: \"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: \"togethercomputer/m2-bert-80M-32k-retrieval\",\n },\n [ModelClass.IMAGE]: {\n name: \"black-forest-labs/FLUX.1-schnell\",\n steps: 4,\n },\n },\n },\n [ModelProviderName.TOGETHER]: {\n endpoint: \"https://api.together.ai/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: \"meta-llama/Llama-3.2-3B-Instruct-Turbo\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: \"meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo-128K\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: \"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: \"togethercomputer/m2-bert-80M-32k-retrieval\",\n },\n [ModelClass.IMAGE]: {\n name: \"black-forest-labs/FLUX.1-schnell\",\n steps: 4,\n },\n },\n },\n [ModelProviderName.LLAMALOCAL]: {\n model: {\n [ModelClass.SMALL]: {\n name: \"NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true\",\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: \"NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true\", // TODO: ?download=true\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: \"NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true\", // \"RichardErkhov/NousResearch_-_Meta-Llama-3.1-70B-gguf\", // TODO:\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: \"togethercomputer/m2-bert-80M-32k-retrieval\",\n },\n },\n },\n [ModelProviderName.LMSTUDIO]: {\n endpoint: settings.LMSTUDIO_SERVER_URL || \"http://localhost:1234/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_LMSTUDIO_MODEL || settings.LMSTUDIO_MODEL || \"hermes-3-llama-3.1-8b\",\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_LMSTUDIO_MODEL || settings.LMSTUDIO_MODEL || \"hermes-3-llama-3.1-8b\",\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_LMSTUDIO_MODEL || settings.LMSTUDIO_MODEL || \"hermes-3-llama-3.1-8b\",\n stop: [\"<|eot_id|>\", \"<|eom_id|>\"],\n maxInputTokens: 32768,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.GOOGLE]: {\n endpoint: \"https://generativelanguage.googleapis.com\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_GOOGLE_MODEL ||\n settings.GOOGLE_MODEL ||\n \"gemini-2.0-flash-exp\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_GOOGLE_MODEL ||\n settings.GOOGLE_MODEL ||\n \"gemini-2.0-flash-exp\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_GOOGLE_MODEL ||\n settings.GOOGLE_MODEL ||\n \"gemini-2.0-flash-exp\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name:\n settings.EMBEDDING_GOOGLE_MODEL ||\n settings.GOOGLE_MODEL ||\n \"text-embedding-004\",\n },\n },\n },\n [ModelProviderName.MISTRAL]: {\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_MISTRAL_MODEL ||\n settings.MISTRAL_MODEL ||\n \"mistral-small-latest\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_MISTRAL_MODEL ||\n settings.MISTRAL_MODEL ||\n \"mistral-large-latest\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_MISTRAL_MODEL ||\n settings.MISTRAL_MODEL ||\n \"mistral-large-latest\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.REDPILL]: {\n endpoint: \"https://api.red-pill.ai/v1\",\n // Available models: https://docs.red-pill.ai/get-started/supported-models\n // To test other models, change the models below\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_REDPILL_MODEL ||\n settings.REDPILL_MODEL ||\n \"gpt-4o-mini\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_REDPILL_MODEL ||\n settings.REDPILL_MODEL ||\n \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_REDPILL_MODEL ||\n settings.REDPILL_MODEL ||\n \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n\n [ModelClass.EMBEDDING]: {\n name: \"text-embedding-3-small\",\n },\n },\n },\n [ModelProviderName.OPENROUTER]: {\n endpoint: \"https://openrouter.ai/api/v1\",\n // Available models: https://openrouter.ai/models\n // To test other models, change the models below\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_OPENROUTER_MODEL ||\n settings.OPENROUTER_MODEL ||\n \"nousresearch/hermes-3-llama-3.1-405b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_OPENROUTER_MODEL ||\n settings.OPENROUTER_MODEL ||\n \"nousresearch/hermes-3-llama-3.1-405b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_OPENROUTER_MODEL ||\n settings.OPENROUTER_MODEL ||\n \"nousresearch/hermes-3-llama-3.1-405b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: \"text-embedding-3-small\",\n },\n },\n },\n [ModelProviderName.OLLAMA]: {\n endpoint: settings.OLLAMA_SERVER_URL || \"http://localhost:11434\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_OLLAMA_MODEL ||\n settings.OLLAMA_MODEL ||\n \"llama3.2\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_OLLAMA_MODEL ||\n settings.OLLAMA_MODEL ||\n \"hermes3\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_OLLAMA_MODEL ||\n settings.OLLAMA_MODEL ||\n \"hermes3:70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.7,\n },\n\n [ModelClass.EMBEDDING]: {\n name: settings.OLLAMA_EMBEDDING_MODEL || \"mxbai-embed-large\",\n dimensions: 1024,\n },\n },\n },\n [ModelProviderName.HEURIST]: {\n endpoint: \"https://llm-gateway.heurist.xyz\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_HEURIST_MODEL ||\n \"meta-llama/llama-3-70b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_HEURIST_MODEL ||\n \"meta-llama/llama-3-70b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_HEURIST_MODEL ||\n \"meta-llama/llama-3.3-70b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.IMAGE]: {\n name: settings.HEURIST_IMAGE_MODEL || \"FLUX.1-dev\",\n steps: 20,\n },\n [ModelClass.EMBEDDING]: {\n name: \"BAAI/bge-large-en-v1.5\",\n dimensions: 1024,\n },\n },\n },\n [ModelProviderName.GALADRIEL]: {\n endpoint: \"https://api.galadriel.com/v1/verified\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_GALADRIEL_MODEL || \"gpt-4o-mini\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_GALADRIEL_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_GALADRIEL_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n },\n },\n [ModelProviderName.FAL]: {\n endpoint: \"https://api.fal.ai/v1\",\n model: {\n [ModelClass.IMAGE]: { name: \"fal-ai/flux-lora\", steps: 28 },\n },\n },\n [ModelProviderName.GAIANET]: {\n endpoint: settings.GAIANET_SERVER_URL,\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.GAIANET_MODEL ||\n settings.SMALL_GAIANET_MODEL ||\n \"llama3b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.GAIANET_MODEL ||\n settings.MEDIUM_GAIANET_MODEL ||\n \"llama\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.GAIANET_MODEL ||\n settings.LARGE_GAIANET_MODEL ||\n \"qwen72b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n repetition_penalty: 0.4,\n temperature: 0.7,\n },\n [ModelClass.EMBEDDING]: {\n name: settings.GAIANET_EMBEDDING_MODEL || \"nomic-embed\",\n dimensions: 768,\n },\n },\n },\n [ModelProviderName.ALI_BAILIAN]: {\n endpoint: \"https://dashscope.aliyuncs.com/compatible-mode/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: \"qwen-turbo\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: \"qwen-plus\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: \"qwen-max\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.IMAGE]: {\n name: \"wanx-v1\",\n },\n },\n },\n [ModelProviderName.VOLENGINE]: {\n endpoint:\n settings.VOLENGINE_API_URL ||\n \"https://open.volcengineapi.com/api/v3/\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_VOLENGINE_MODEL ||\n settings.VOLENGINE_MODEL ||\n \"doubao-lite-128k\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_VOLENGINE_MODEL ||\n settings.VOLENGINE_MODEL ||\n \"doubao-pro-128k\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_VOLENGINE_MODEL ||\n settings.VOLENGINE_MODEL ||\n \"doubao-pro-256k\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.4,\n presence_penalty: 0.4,\n temperature: 0.6,\n },\n [ModelClass.EMBEDDING]: {\n name: settings.VOLENGINE_EMBEDDING_MODEL || \"doubao-embedding\",\n },\n },\n },\n [ModelProviderName.NANOGPT]: {\n endpoint: \"https://nano-gpt.com/api/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_NANOGPT_MODEL || \"gpt-4o-mini\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_NANOGPT_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_NANOGPT_MODEL || \"gpt-4o\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n },\n },\n },\n [ModelProviderName.HYPERBOLIC]: {\n endpoint: \"https://api.hyperbolic.xyz/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_HYPERBOLIC_MODEL ||\n settings.HYPERBOLIC_MODEL ||\n \"meta-llama/Llama-3.2-3B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_HYPERBOLIC_MODEL ||\n settings.HYPERBOLIC_MODEL ||\n \"meta-llama/Meta-Llama-3.1-70B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_HYPERBOLIC_MODEL ||\n settings.HYPERBOLIC_MODEL ||\n \"meta-llama/Meta-Llama-3.1-405-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.IMAGE]: {\n name: settings.IMAGE_HYPERBOLIC_MODEL || \"FLUX.1-dev\",\n },\n },\n },\n [ModelProviderName.VENICE]: {\n endpoint: \"https://api.venice.ai/api/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_VENICE_MODEL || \"llama-3.3-70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_VENICE_MODEL || \"llama-3.3-70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_VENICE_MODEL || \"llama-3.1-405b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.IMAGE]: {\n name: settings.IMAGE_VENICE_MODEL || \"fluently-xl\",\n },\n },\n },\n [ModelProviderName.NVIDIA]: {\n endpoint: \"https://integrate.api.nvidia.com/v1\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_NVIDIA_MODEL || \"meta/llama-3.2-3b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_NVIDIA_MODEL || \"meta/llama-3.3-70b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_NVIDIA_MODEL || \"meta/llama-3.1-405b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n },\n },\n [ModelProviderName.NINETEEN_AI]: {\n endpoint: \"https://api.nineteen.ai/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_NINETEEN_AI_MODEL ||\n \"unsloth/Llama-3.2-3B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_NINETEEN_AI_MODEL ||\n \"unsloth/Meta-Llama-3.1-8B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_NINETEEN_AI_MODEL ||\n \"hugging-quants/Meta-Llama-3.1-70B-Instruct-AWQ-INT4\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.IMAGE]: {\n name:\n settings.IMAGE_NINETEEN_AI_MODEL ||\n \"dataautogpt3/ProteusV0.4-Lightning\",\n },\n },\n },\n [ModelProviderName.AKASH_CHAT_API]: {\n endpoint: \"https://chatapi.akash.network/api/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_AKASH_CHAT_API_MODEL ||\n \"Meta-Llama-3-2-3B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_AKASH_CHAT_API_MODEL ||\n \"Meta-Llama-3-3-70B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_AKASH_CHAT_API_MODEL ||\n \"Meta-Llama-3-1-405B-Instruct-FP8\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n },\n },\n [ModelProviderName.LIVEPEER]: {\n endpoint: settings.LIVEPEER_GATEWAY_URL || \"http://gateway.test-gateway\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_LIVEPEER_MODEL ||\n \"meta-llama/Meta-Llama-3.1-8B-Instruct\",\n stop: [],\n maxInputTokens: 8000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_LIVEPEER_MODEL ||\n \"meta-llama/Meta-Llama-3.1-8B-Instruct\",\n stop: [],\n maxInputTokens: 8000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_LIVEPEER_MODEL ||\n \"meta-llama/Meta-Llama-3.1-8B-Instruct\",\n stop: [],\n maxInputTokens: 8000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n [ModelClass.IMAGE]: {\n name:\n settings.IMAGE_LIVEPEER_MODEL || \"ByteDance/SDXL-Lightning\",\n },\n },\n },\n [ModelProviderName.INFERA]: {\n endpoint: \"https://api.infera.org\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_INFERA_MODEL || \"llama3.2:3b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_INFERA_MODEL || \"mistral-nemo:latest\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_INFERA_MODEL || \"mistral-small:latest\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0,\n },\n },\n },\n [ModelProviderName.DEEPSEEK]: {\n endpoint: settings.DEEPSEEK_API_URL || \"https://api.deepseek.com\",\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_DEEPSEEK_MODEL || \"deepseek-chat\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_DEEPSEEK_MODEL || \"deepseek-chat\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_DEEPSEEK_MODEL || \"deepseek-chat\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.BEDROCK]: {\n model: {\n [ModelClass.SMALL]: {\n name: settings.SMALL_BEDROCK_MODEL || \"amazon.nova-micro-v1:0\",\n maxInputTokens: 128000,\n maxOutputTokens: 5120,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n stop: [],\n },\n [ModelClass.MEDIUM]: {\n name: settings.MEDIUM_BEDROCK_MODEL || \"amazon.nova-lite-v1:0\",\n maxInputTokens: 128000,\n maxOutputTokens: 5120,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n stop: [],\n },\n [ModelClass.LARGE]: {\n name: settings.LARGE_BEDROCK_MODEL || \"amazon.nova-pro-v1:0\",\n maxInputTokens: 128000,\n maxOutputTokens: 5120,\n frequency_penalty: 0.0,\n presence_penalty: 0.0,\n temperature: 0.6,\n stop: [],\n },\n [ModelClass.EMBEDDING]: {\n name:\n settings.EMBEDDING_BEDROCK_MODEL ||\n \"amazon.titan-embed-text-v1\",\n },\n [ModelClass.IMAGE]: {\n name: settings.IMAGE_BEDROCK_MODEL || \"amazon.nova-canvas-v1:0\",\n },\n },\n },\n [ModelProviderName.ATOMA]: {\n endpoint: settings.ATOMA_API_URL || \"https://api.atoma.network/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_ATOMA_MODEL ||\n \"meta-llama/Llama-3.3-70B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_ATOMA_MODEL ||\n \"meta-llama/Llama-3.3-70B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_ATOMA_MODEL ||\n \"meta-llama/Llama-3.3-70B-Instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.SECRETAI]: {\n endpoint: settings.SECRET_AI_URL || \"https://ai1.scrtlabs.com:21434\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_SECRET_AI_MODEL ||\n \"deepseek-r1:70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_SECRET_AI_MODEL ||\n \"deepseek-r1:70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_SECRET_AI_MODEL ||\n \"deepseek-r1:70b\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.7,\n },\n },\n },\n [ModelProviderName.NEARAI]: {\n endpoint: settings.NEARAI_API_URL || \"https://api.near.ai/v1\",\n model: {\n [ModelClass.SMALL]: {\n name:\n settings.SMALL_NEARAI_MODEL ||\n settings.NEARAI_MODEL ||\n \"fireworks::accounts/fireworks/models/llama-v3p2-3b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.MEDIUM]: {\n name:\n settings.MEDIUM_NEARAI_MODEL ||\n settings.NEARAI_MODEL ||\n \"fireworks::accounts/fireworks/models/llama-v3p1-70b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.LARGE]: {\n name:\n settings.LARGE_NEARAI_MODEL ||\n settings.NEARAI_MODEL ||\n \"fireworks::accounts/fireworks/models/llama-v3p1-405b-instruct\",\n stop: [],\n maxInputTokens: 128000,\n maxOutputTokens: 8192,\n temperature: 0.6,\n },\n [ModelClass.IMAGE]: {\n name: settings.IMAGE_NEARAI_MODEL || \"fireworks::accounts/fireworks/models/playground-v2-5-1024px-aesthetic\",\n },\n },\n },\n};\n\nexport function getModelSettings(\n provider: ModelProviderName,\n type: ModelClass\n): ModelSettings | undefined {\n return models[provider]?.model[type] as ModelSettings | undefined;\n}\n\nexport function getImageModelSettings(\n provider: ModelProviderName\n): ImageModelSettings | undefined {\n return models[provider]?.model[ModelClass.IMAGE] as\n | ImageModelSettings\n | undefined;\n}\n\nexport function getEmbeddingModelSettings(\n provider: ModelProviderName\n): EmbeddingModelSettings | undefined {\n return models[provider]?.model[ModelClass.EMBEDDING] as\n | EmbeddingModelSettings\n | undefined;\n}\n\nexport function getEndpoint(provider: ModelProviderName) {\n return models[provider].endpoint;\n}\n","import path from \"node:path\";\nimport { fileURLToPath } from \"url\";\nimport { FlagEmbedding, EmbeddingModel } from \"fastembed\";\nimport elizaLogger from \"./logger\";\n\nclass LocalEmbeddingModelManager {\n private static instance: LocalEmbeddingModelManager | null;\n private model: FlagEmbedding | null = null;\n private initPromise: Promise<void> | null = null;\n private initializationLock = false;\n\n private constructor() {}\n\n public static getInstance(): LocalEmbeddingModelManager {\n if (!LocalEmbeddingModelManager.instance) {\n LocalEmbeddingModelManager.instance =\n new LocalEmbeddingModelManager();\n }\n return LocalEmbeddingModelManager.instance;\n }\n\n private async getRootPath(): Promise<string> {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const rootPath = path.resolve(__dirname, \"..\");\n return rootPath.includes(\"/eliza/\")\n ? rootPath.split(\"/eliza/\")[0] + \"/eliza/\"\n : path.resolve(__dirname, \"..\");\n }\n\n public async initialize(): Promise<void> {\n // If already initialized, return immediately\n if (this.model) {\n return;\n }\n\n // If initialization is in progress, wait for it\n if (this.initPromise) {\n return this.initPromise;\n }\n\n // Use a lock to prevent multiple simultaneous initializations\n if (this.initializationLock) {\n // Wait for current initialization to complete\n while (this.initializationLock) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n return;\n }\n\n this.initializationLock = true;\n\n try {\n this.initPromise = this.initializeModel();\n await this.initPromise;\n } finally {\n this.initializationLock = false;\n this.initPromise = null;\n }\n }\n\n private async initializeModel(): Promise<void> {\n const isNode =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\n if (!isNode) {\n throw new Error(\"Local embedding not supported in browser\");\n }\n\n try {\n const fs = await import(\"fs\");\n const cacheDir = (await this.getRootPath()) + \"/cache/\";\n\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true });\n }\n\n elizaLogger.debug(\"Initializing BGE embedding model...\");\n\n this.model = await FlagEmbedding.init({\n cacheDir: cacheDir,\n model: EmbeddingModel.BGESmallENV15,\n maxLength: 512,\n });\n\n elizaLogger.debug(\"BGE model initialized successfully\");\n } catch (error) {\n elizaLogger.error(\"Failed to initialize BGE model:\", error);\n throw error;\n }\n }\n\n public async generateEmbedding(input: string): Promise<number[]> {\n if (!this.model) {\n await this.initialize();\n }\n\n if (!this.model) {\n throw new Error(\"Failed to initialize model\");\n }\n\n try {\n // Let fastembed handle tokenization internally\n const embedding = await this.model.queryEmbed(input);\n // Debug the raw embedding - uncomment if debugging embeddings\n // elizaLogger.debug(\"Raw embedding from BGE:\", {\n // type: typeof embedding,\n // isArray: Array.isArray(embedding),\n // dimensions: Array.isArray(embedding)\n // ? embedding.length\n // : \"not an array\",\n // sample: Array.isArray(embedding)\n // ? embedding.slice(0, 5)\n // : embedding,\n // });\n return this.processEmbedding(embedding);\n } catch (error) {\n elizaLogger.error(\"Embedding generation failed:\", error);\n throw error;\n }\n }\n\n private processEmbedding(embedding: number[]): number[] {\n let finalEmbedding: number[];\n\n if (\n ArrayBuffer.isView(embedding) &&\n embedding.constructor === Float32Array\n ) {\n finalEmbedding = Array.from(embedding);\n } else if (\n Array.isArray(embedding) &&\n ArrayBuffer.isView(embedding[0]) &&\n embedding[0].constructor === Float32Array\n ) {\n finalEmbedding = Array.from(embedding[0]);\n } else if (Array.isArray(embedding)) {\n finalEmbedding = embedding;\n } else {\n throw new Error(`Unexpected embedding format: ${typeof embedding}`);\n }\n\n finalEmbedding = finalEmbedding.map((n) => Number(n));\n\n if (!Array.isArray(finalEmbedding) || finalEmbedding[0] === undefined) {\n throw new Error(\n \"Invalid embedding format: must be an array starting with a number\"\n );\n }\n\n if (finalEmbedding.length !== 384) {\n elizaLogger.warn(\n `Unexpected embedding dimension: ${finalEmbedding.length}`\n );\n }\n\n return finalEmbedding;\n }\n\n public async reset(): Promise<void> {\n if (this.model) {\n // Add any cleanup logic here if needed\n this.model = null;\n }\n this.initPromise = null;\n this.initializationLock = false;\n }\n\n // For testing purposes\n public static resetInstance(): void {\n if (LocalEmbeddingModelManager.instance) {\n LocalEmbeddingModelManager.instance.reset();\n LocalEmbeddingModelManager.instance = null;\n }\n }\n}\n\nexport default LocalEmbeddingModelManager;\n","import { getEmbeddingModelSettings, getEndpoint } from \"./models.ts\";\nimport { type IAgentRuntime, ModelProviderName } from \"./types.ts\";\nimport settings from \"./settings.ts\";\nimport elizaLogger from \"./logger.ts\";\nimport LocalEmbeddingModelManager from \"./localembeddingManager.ts\";\n\ninterface EmbeddingOptions {\n model: string;\n endpoint: string;\n apiKey?: string;\n length?: number;\n isOllama?: boolean;\n dimensions?: number;\n provider?: string;\n}\n\nexport const EmbeddingProvider = {\n OpenAI: \"OpenAI\",\n Ollama: \"Ollama\",\n GaiaNet: \"GaiaNet\",\n Heurist: \"Heurist\",\n BGE: \"BGE\",\n} as const;\n\nexport type EmbeddingProviderType =\n (typeof EmbeddingProvider)[keyof typeof EmbeddingProvider];\n\nexport type EmbeddingConfig = {\n readonly dimensions: number;\n readonly model: string;\n readonly provider: EmbeddingProviderType;\n};\n\nexport const getEmbeddingConfig = (): EmbeddingConfig => ({\n dimensions:\n settings.USE_OPENAI_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.OPENAI).dimensions\n : settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.OLLAMA).dimensions\n : settings.USE_GAIANET_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.GAIANET)\n .dimensions\n : settings.USE_HEURIST_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.HEURIST)\n .dimensions\n : 384, // BGE\n model:\n settings.USE_OPENAI_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.OPENAI).name\n : settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.OLLAMA).name\n : settings.USE_GAIANET_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.GAIANET).name\n : settings.USE_HEURIST_EMBEDDING?.toLowerCase() === \"true\"\n ? getEmbeddingModelSettings(ModelProviderName.HEURIST).name\n : \"BGE-small-en-v1.5\",\n provider:\n settings.USE_OPENAI_EMBEDDING?.toLowerCase() === \"true\"\n ? \"OpenAI\"\n : settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === \"true\"\n ? \"Ollama\"\n : settings.USE_GAIANET_EMBEDDING?.toLowerCase() === \"true\"\n ? \"GaiaNet\"\n : settings.USE_HEURIST_EMBEDDING?.toLowerCase() === \"true\"\n ? \"Heurist\"\n : \"BGE\",\n});\n\nasync function getRemoteEmbedding(\n input: string,\n options: EmbeddingOptions\n): Promise<number[]> {\n // Ensure endpoint ends with /v1 for OpenAI\n const baseEndpoint = options.endpoint.endsWith(\"/v1\")\n ? options.endpoint\n : `${options.endpoint}${options.isOllama ? \"/v1\" : \"\"}`;\n\n // Construct full URL\n const fullUrl = `${baseEndpoint}/embeddings`;\n\n const requestOptions = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(options.apiKey\n ? {\n Authorization: `Bearer ${options.apiKey}`,\n }\n : {}),\n },\n body: JSON.stringify({\n input,\n model: options.model,\n dimensions:\n options.dimensions ||\n options.length ||\n getEmbeddingConfig().dimensions, // Prefer dimensions, fallback to length\n }),\n };\n\n try {\n const response = await fetch(fullUrl, requestOptions);\n\n if (!response.ok) {\n elizaLogger.error(\"API Response:\", await response.text()); // Debug log\n throw new Error(\n `Embedding API Error: ${response.status} ${response.statusText}`\n );\n }\n\n interface EmbeddingResponse {\n data: Array<{ embedding: number[] }>;\n }\n\n const data: EmbeddingResponse = await response.json();\n return data?.data?.[0].embedding;\n } catch (e) {\n elizaLogger.error(\"Full error details:\", e);\n throw e;\n }\n}\n\nexport function getEmbeddingType(runtime: IAgentRuntime): \"local\" | \"remote\" {\n const isNode =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\n // Use local embedding if:\n // - Running in Node.js\n // - Not using OpenAI provider\n // - Not forcing OpenAI embeddings\n const isLocal =\n isNode &&\n runtime.character.modelProvider !== ModelProviderName.OPENAI &&\n runtime.character.modelProvider !== ModelProviderName.GAIANET &&\n runtime.character.modelProvider !== ModelProviderName.HEURIST &&\n !settings.USE_OPENAI_EMBEDDING;\n\n return isLocal ? \"local\" : \"remote\";\n}\n\nexport function getEmbeddingZeroVector(): number[] {\n let embeddingDimension = 384; // Default BGE dimension\n\n if (settings.USE_OPENAI_EMBEDDING?.toLowerCase() === \"true\") {\n embeddingDimension = getEmbeddingModelSettings(\n ModelProviderName.OPENAI\n ).dimensions; // OpenAI dimension\n } else if (settings.USE_OLLAMA_EMBEDDING?.toLowerCase() === \"true\") {\n embeddingDimension = getEmbeddingModelSettings(\n ModelProviderName.OLLAMA\n ).dimensions; // Ollama mxbai-embed-large dimension\n } else if (settings.USE_GAIANET_EMBEDDING?.toLowerCase() === \"true\") {\n embeddingDimension = getEmbeddingModelSettings(\n ModelProviderName.GAIANET\n ).dimensions; // GaiaNet dimension\n } else if (settings.USE_HEURIST_EMBEDDING?.toLowerCase() === \"true\") {\n embeddingDimension = getEmbeddingModelSettings(\n ModelProviderName.HEURIST\n ).dimensions; // Heurist dimension\n }\n\n return Array(embeddingDimension).fill(0);\n}\n\n/**\n * Gets embeddings from a remote API endpoint. Falls back to local BGE/384\n *\n * @param {string} input - The text to generate embeddings for\n * @param {EmbeddingOptions} options - Configuration options including:\n * - model: The model name to use\n * - endpoint: Base API endpoint URL\n * - apiKey: Optional API key for authentication\n * - isOllama: Whether this is an Ollama endpoint\n * - dimensions: Desired embedding dimensions\n * @param {IAgentRuntime} runtime - The agent runtime context\n * @returns {Promise<number[]>} Array of embedding values\n * @throws {Error} If the API request fails\n */\n\nexport async function embed(runtime: IAgentRuntime, input: string) {\n elizaLogger.debug(\"Embedding request:\", {\n modelProvider: runtime.character.modelProvider,\n useOpenAI: process.env.USE_OPENAI_EMBEDDING,\n input: input?.slice(0, 50) + \"...\",\n inputType: typeof input,\n inputLength: input?.length,\n isString: typeof input === \"string\",\n isEmpty: !input,\n });\n\n // Validate input\n if (!input || typeof input !== \"string\" || input.trim().length === 0) {\n elizaLogger.warn(\"Invalid embedding input:\", {\n input,\n type: typeof input,\n length: input?.length,\n });\n return []; // Return empty embedding array\n }\n\n // Check cache first\n const cachedEmbedding = await retrieveCachedEmbedding(runtime, input);\n if (cachedEmbedding) return cachedEmbedding;\n\n const config = getEmbeddingConfig();\n const isNode = typeof process !== \"undefined\" && process.versions?.node;\n\n // Determine which embedding path to use\n if (config.provider === EmbeddingProvider.OpenAI) {\n return await getRemoteEmbedding(input, {\n model: config.model,\n endpoint: settings.OPENAI_API_URL || \"https://api.openai.com/v1\",\n apiKey: settings.OPENAI_API_KEY,\n dimensions: config.dimensions,\n });\n }\n\n if (config.provider === EmbeddingProvider.Ollama) {\n return await getRemoteEmbedding(input, {\n model: config.model,\n endpoint:\n runtime.character.modelEndpointOverride ||\n getEndpoint(ModelProviderName.OLLAMA),\n isOllama: true,\n dimensions: config.dimensions,\n });\n }\n\n if (config.provider == EmbeddingProvider.GaiaNet) {\n return await getRemoteEmbedding(input, {\n model: config.model,\n endpoint:\n runtime.character.modelEndpointOverride ||\n getEndpoint(ModelProviderName.GAIANET) ||\n settings.SMALL_GAIANET_SERVER_URL ||\n settings.MEDIUM_GAIANET_SERVER_URL ||\n settings.LARGE_GAIANET_SERVER_URL,\n apiKey: settings.GAIANET_API_KEY || runtime.token,\n dimensions: config.dimensions,\n });\n }\n\n if (config.provider === EmbeddingProvider.Heurist) {\n return await getRemoteEmbedding(input, {\n model: config.model,\n endpoint: getEndpoint(ModelProviderName.HEURIST),\n apiKey: runtime.token,\n dimensions: config.dimensions,\n });\n }\n\n // BGE - try local first if in Node\n if (isNode) {\n try {\n return await getLocalEmbedding(input);\n } catch (error) {\n elizaLogger.warn(\n \"Local embedding failed, falling back to remote\",\n error\n );\n }\n }\n\n // Fallback to remote override\n return await getRemoteEmbedding(input, {\n model: config.model,\n endpoint:\n runtime.character.modelEndpointOverride ||\n getEndpoint(runtime.character.modelProvider),\n apiKey: runtime.token,\n dimensions: config.dimensions,\n });\n\n async function getLocalEmbedding(input: string): Promise<number[]> {\n elizaLogger.debug(\"DEBUG - Inside getLocalEmbedding function\");\n\n try {\n const embeddingManager = LocalEmbeddingModelManager.getInstance();\n return await embeddingManager.generateEmbedding(input);\n } catch (error) {\n elizaLogger.error(\"Local embedding failed:\", error);\n throw error;\n }\n }\n\n async function retrieveCachedEmbedding(\n runtime: IAgentRuntime,\n input: string\n ) {\n if (!input) {\n elizaLogger.log(\"No input to retrieve cached embedding for\");\n return null;\n }\n\n const similaritySearchResult =\n await runtime.messageManager.getCachedEmbeddings(input);\n if (similaritySearchResult.length > 0) {\n return similaritySearchResult[0].embedding;\n }\n return null;\n }\n}\n","import { names, uniqueNamesGenerator } from \"unique-names-generator\";\nimport type { ActionExample, Evaluator } from \"./types.ts\";\nimport { stringArrayFooter } from \"./parsing.ts\";\n\n/**\n * Template used for the evaluation generateText.\n */\nexport const evaluationTemplate =\n `TASK: Based on the conversation and conditions, determine which evaluation functions are appropriate to call.\nExamples:\n{{evaluatorExamples}}\n\nINSTRUCTIONS: You are helping me to decide which appropriate functions to call based on the conversation between {{senderName}} and {{agentName}}.\n\n{{recentMessages}}\n\nEvaluator Functions:\n{{evaluators}}\n\nTASK: Based on the most recent conversation, determine which evaluators functions are appropriate to call to call.\nInclude the name of evaluators that are relevant and should be called in the array\nAvailable evaluator names to include are {{evaluatorNames}}\n` + stringArrayFooter;\n\n/**\n * Formats the names of evaluators into a comma-separated list, each enclosed in single quotes.\n * @param evaluators - An array of evaluator objects.\n * @returns A string that concatenates the names of all evaluators, each enclosed in single quotes and separated by commas.\n */\nexport function formatEvaluatorNames(evaluators: Evaluator[]) {\n return evaluators\n .map((evaluator: Evaluator) => `'${evaluator.name}'`)\n .join(\",\\n\");\n}\n\n/**\n * Formats evaluator details into a string, including both the name and description of each evaluator.\n * @param evaluators - An array of evaluator objects.\n * @returns A string that concatenates the name and description of each evaluator, separated by a colon and a newline character.\n */\nexport function formatEvaluators(evaluators: Evaluator[]) {\n return evaluators\n .map(\n (evaluator: Evaluator) =>\n `'${evaluator.name}: ${evaluator.description}'`\n )\n .join(\",\\n\");\n}\n\n/**\n * Formats evaluator examples into a readable string, replacing placeholders with generated names.\n * @param evaluators - An array of evaluator objects, each containing examples to format.\n * @returns A string that presents each evaluator example in a structured format, including context, messages, and outcomes, with placeholders replaced by generated names.\n */\nexport function formatEvaluatorExamples(evaluators: Evaluator[]) {\n return evaluators\n .map((evaluator) => {\n return evaluator.examples\n .map((example) => {\n const exampleNames = Array.from({ length: 5 }, () =>\n uniqueNamesGenerator({ dictionaries: [names] })\n );\n\n let formattedContext = example.context;\n let formattedOutcome = example.outcome;\n\n exampleNames.forEach((name, index) => {\n const placeholder = `{{user${index + 1}}}`;\n formattedContext = formattedContext.replaceAll(\n placeholder,\n name\n );\n formattedOutcome = formattedOutcome.replaceAll(\n placeholder,\n name\n );\n });\n\n const formattedMessages = example.messages\n .map((message: ActionExample) => {\n let messageString = `${message.user}: ${message.content.text}`;\n exampleNames.forEach((name, index) => {\n const placeholder = `{{user${index + 1}}}`;\n messageString = messageString.replaceAll(\n placeholder,\n name\n );\n });\n return (\n messageString +\n (message.content.action\n ? ` (${message.content.action})`\n : \"\")\n );\n })\n .join(\"\\n\");\n\n return `Context:\\n${formattedContext}\\n\\nMessages:\\n${formattedMessages}\\n\\nOutcome:\\n${formattedOutcome}`;\n })\n .join(\"\\n\\n\");\n })\n .join(\"\\n\\n\");\n}\n\n/**\n * Generates a string summarizing the descriptions of each evaluator example.\n * @param evaluators - An array of evaluator objects, each containing examples.\n * @returns A string that summarizes the descriptions for each evaluator example, formatted with the evaluator name, example number, and description.\n */\nexport function formatEvaluatorExampleDescriptions(evaluators: Evaluator[]) {\n return evaluators\n .map((evaluator) =>\n evaluator.examples\n .map(\n (_example, index) =>\n `${evaluator.name} Example ${index + 1}: ${evaluator.description}`\n )\n .join(\"\\n\")\n )\n .join(\"\\n\\n\");\n}\n","import { createAnthropic } from \"@ai-sdk/anthropic\";\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { createMistral } from \"@ai-sdk/mistral\";\nimport { createGroq } from \"@ai-sdk/groq\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport { bedrock } from \"@ai-sdk/amazon-bedrock\";\nimport {\n generateObject as aiGenerateObject,\n generateText as aiGenerateText,\n type CoreTool,\n type GenerateObjectResult,\n type StepResult as AIStepResult,\n} from \"ai\";\nimport { Buffer } from \"buffer\";\nimport { createOllama } from \"ollama-ai-provider\";\nimport OpenAI from \"openai\";\nimport { encodingForModel, type TiktokenModel } from \"js-tiktoken\";\n// import { AutoTokenizer } from \"@huggingface/transformers\";\nimport Together from \"together-ai\";\nimport type { ZodSchema } from \"zod\";\nimport { elizaLogger } from \"./index.ts\";\nimport {\n models,\n getModelSettings,\n getImageModelSettings,\n getEndpoint,\n} from \"./models.ts\";\nimport {\n parseBooleanFromText,\n parseJsonArrayFromText,\n parseJSONObjectFromText,\n parseShouldRespondFromText,\n parseActionResponseFromText,\n} from \"./parsing.ts\";\nimport settings from \"./settings.ts\";\nimport {\n type Content,\n type IAgentRuntime,\n type IImageDescriptionService,\n type ITextGenerationService,\n ModelClass,\n ModelProviderName,\n ServiceType,\n type ActionResponse,\n // type IVerifiableInferenceAdapter,\n // type VerifiableInferenceOptions,\n // type VerifiableInferenceResult,\n //VerifiableInferenceProvider,\n type TelemetrySettings,\n TokenizerType,\n} from \"./types.ts\";\nimport { fal } from \"@fal-ai/client\";\n\nimport BigNumber from \"bignumber.js\";\nimport { createPublicClient, http } from \"viem\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\n\ntype Tool = CoreTool<any, any>;\ntype StepResult = AIStepResult<any>;\n\n// Simplify the types to avoid deep recursion\ntype GenerationResult = GenerateObjectResult<unknown>;\n\ninterface ProviderOptions {\n runtime: IAgentRuntime;\n provider: ModelProviderName;\n model: string;\n apiKey: string;\n schema?: ZodSchema;\n schemaName?: string;\n schemaDescription?: string;\n mode?: \"auto\" | \"json\" | \"tool\";\n modelOptions: ModelSettings;\n modelClass: ModelClass;\n context: string;\n}\n\n/**\n * Trims the provided text context to a specified token limit using a tokenizer model and type.\n *\n * The function dynamically determines the truncation method based on the tokenizer settings\n * provided by the runtime. If no tokenizer settings are defined, it defaults to using the\n * TikToken truncation method with the \"gpt-4o\" model.\n *\n * @async\n * @function trimTokens\n * @param {string} context - The text to be tokenized and trimmed.\n * @param {number} maxTokens - The maximum number of tokens allowed after truncation.\n * @param {IAgentRuntime} runtime - The runtime interface providing tokenizer settings.\n *\n * @returns {Promise<string>} A promise that resolves to the trimmed text.\n *\n * @throws {Error} Throws an error if the runtime settings are invalid or missing required fields.\n *\n * @example\n * const trimmedText = await trimTokens(\"This is an example text\", 50, runtime);\n * console.log(trimmedText); // Output will be a truncated version of the input text.\n */\nexport async function trimTokens(\n context: string,\n maxTokens: number,\n runtime: IAgentRuntime\n) {\n if (!context) return \"\";\n if (maxTokens <= 0) throw new Error(\"maxTokens must be positive\");\n\n const tokenizerModel = runtime.getSetting(\"TOKENIZER_MODEL\");\n const tokenizerType = runtime.getSetting(\"TOKENIZER_TYPE\");\n\n if (!tokenizerModel || !tokenizerType) {\n // Default to TikToken truncation using the \"gpt-4o\" model if tokenizer settings are not defined\n return truncateTiktoken(\"gpt-4o\", context, maxTokens);\n }\n\n // Choose the truncation method based on tokenizer type\n // if (tokenizerType === TokenizerType.Auto) {\n // return truncateAuto(tokenizerModel, context, maxTokens);\n // }\n\n if (tokenizerType === TokenizerType.TikToken) {\n return truncateTiktoken(\n tokenizerModel as TiktokenModel,\n context,\n maxTokens\n );\n }\n\n elizaLogger.warn(`Unsupported tokenizer type: ${tokenizerType}`);\n return truncateTiktoken(\"gpt-4o\", context, maxTokens);\n}\n\n// async function truncateAuto(\n// modelPath: string,\n// context: string,\n// maxTokens: number\n// ) {\n// try {\n// const tokenizer = await AutoTokenizer.from_pretrained(modelPath);\n// const tokens = tokenizer.encode(context);\n\n// // If already within limits, return unchanged\n// if (tokens.length <= maxTokens) {\n// return context;\n// }\n\n// // Keep the most recent tokens by slicing from the end\n// const truncatedTokens = tokens.slice(-maxTokens);\n\n// // Decode back to text - js-tiktoken decode() returns a string directly\n// return tokenizer.decode(truncatedTokens);\n// } catch (error) {\n// elizaLogger.error(\"Error in trimTokens:\", error);\n// // Return truncated string if tokenization fails\n// return context.slice(-maxTokens * 4); // Rough estimate of 4 chars per token\n// }\n// }\n\nasync function truncateTiktoken(\n model: TiktokenModel,\n context: string,\n maxTokens: number\n) {\n try {\n const encoding = encodingForModel(model);\n\n // Encode the text into tokens\n const tokens = encoding.encode(context);\n\n // If already within limits, return unchanged\n if (tokens.length <= maxTokens) {\n return context;\n }\n\n // Keep the most recent tokens by slicing from the end\n const truncatedTokens = tokens.slice(-maxTokens);\n\n // Decode back to text - js-tiktoken decode() returns a string directly\n return encoding.decode(truncatedTokens);\n } catch (error) {\n elizaLogger.error(\"Error in trimTokens:\", error);\n // Return truncated string if tokenization fails\n return context.slice(-maxTokens * 4); // Rough estimate of 4 chars per token\n }\n}\n\n/**\n * Get OnChain EternalAI System Prompt\n * @returns System Prompt\n */\nasync function getOnChainEternalAISystemPrompt(\n runtime: IAgentRuntime\n): Promise<string> | undefined {\n const agentId = runtime.getSetting(\"ETERNALAI_AGENT_ID\");\n const providerUrl = runtime.getSetting(\"ETERNALAI_RPC_URL\");\n const contractAddress = runtime.getSetting(\n \"ETERNALAI_AGENT_CONTRACT_ADDRESS\"\n );\n if (agentId && providerUrl && contractAddress) {\n // get on-chain system-prompt\n const contractABI = [\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_agentId\",\n type: \"uint256\",\n },\n ],\n name: \"getAgentSystemPrompt\",\n outputs: [\n { internalType: \"bytes[]\", name: \"\", type: \"bytes[]\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n ];\n\n const publicClient = createPublicClient({\n transport: http(providerUrl),\n });\n\n try {\n const validAddress: `0x${string}` =\n contractAddress as `0x${string}`;\n const result = await publicClient.readContract({\n address: validAddress,\n abi: contractABI,\n functionName: \"getAgentSystemPrompt\",\n args: [new BigNumber(agentId)],\n });\n if (result) {\n elizaLogger.info(\"on-chain system-prompt response\", result[0]);\n const value = result[0].toString().replace(\"0x\", \"\");\n const content = Buffer.from(value, \"hex\").toString(\"utf-8\");\n elizaLogger.info(\"on-chain system-prompt\", content);\n return await fetchEternalAISystemPrompt(runtime, content);\n } else {\n return undefined;\n }\n } catch (error) {\n elizaLogger.error(error);\n elizaLogger.error(\"err\", error);\n }\n }\n return undefined;\n}\n\n/**\n * Fetch EternalAI System Prompt\n * @returns System Prompt\n */\nasync function fetchEternalAISystemPrompt(\n runtime: IAgentRuntime,\n content: string\n): Promise<string> | undefined {\n const IPFS = \"ipfs://\";\n const containsSubstring: boolean = content.includes(IPFS);\n if (containsSubstring) {\n const lightHouse = content.replace(\n IPFS,\n \"https://gateway.lighthouse.storage/ipfs/\"\n );\n elizaLogger.info(\"fetch lightHouse\", lightHouse);\n const responseLH = await fetch(lightHouse, {\n method: \"GET\",\n });\n elizaLogger.info(\"fetch lightHouse resp\", responseLH);\n if (responseLH.ok) {\n const data = await responseLH.text();\n return data;\n } else {\n const gcs = content.replace(\n IPFS,\n \"https://cdn.eternalai.org/upload/\"\n );\n elizaLogger.info(\"fetch gcs\", gcs);\n const responseGCS = await fetch(gcs, {\n method: \"GET\",\n });\n elizaLogger.info(\"fetch lightHouse gcs\", responseGCS);\n if (responseGCS.ok) {\n const data = await responseGCS.text();\n return data;\n } else {\n throw new Error(\"invalid on-chain system prompt\");\n }\n }\n } else {\n return content;\n }\n}\n\n/**\n * Gets the Cloudflare Gateway base URL for a specific provider if enabled\n * @param runtime The runtime environment\n * @param provider The model provider name\n * @returns The Cloudflare Gateway base URL if enabled, undefined otherwise\n */\nfunction getCloudflareGatewayBaseURL(\n runtime: IAgentRuntime,\n provider: string\n): string | undefined {\n const isCloudflareEnabled =\n runtime.getSetting(\"CLOUDFLARE_GW_ENABLED\") === \"true\";\n const cloudflareAccountId = runtime.getSetting(\"CLOUDFLARE_AI_ACCOUNT_ID\");\n const cloudflareGatewayId = runtime.getSetting(\"CLOUDFLARE_AI_GATEWAY_ID\");\n\n elizaLogger.debug(\"Cloudflare Gateway Configuration:\", {\n isEnabled: isCloudflareEnabled,\n hasAccountId: !!cloudflareAccountId,\n hasGatewayId: !!cloudflareGatewayId,\n provider: provider,\n });\n\n if (!isCloudflareEnabled) {\n elizaLogger.debug(\"Cloudflare Gateway is not enabled\");\n return undefined;\n }\n\n if (!cloudflareAccountId) {\n elizaLogger.warn(\n \"Cloudflare Gateway is enabled but CLOUDFLARE_AI_ACCOUNT_ID is not set\"\n );\n return undefined;\n }\n\n if (!cloudflareGatewayId) {\n elizaLogger.warn(\n \"Cloudflare Gateway is enabled but CLOUDFLARE_AI_GATEWAY_ID is not set\"\n );\n return undefined;\n }\n\n const baseURL = `https://gateway.ai.cloudflare.com/v1/${cloudflareAccountId}/${cloudflareGatewayId}/${provider.toLowerCase()}`;\n elizaLogger.info(\"Using Cloudflare Gateway:\", {\n provider,\n baseURL,\n accountId: cloudflareAccountId,\n gatewayId: cloudflareGatewayId,\n });\n\n return baseURL;\n}\n\n/**\n * Send a message to the model for a text generateText - receive a string back and parse how you'd like\n * @param opts - The options for the generateText request.\n * @param opts.context The context of the message to be completed.\n * @param opts.stop A list of strings to stop the generateText at.\n * @param opts.model The model to use for generateText.\n * @param opts.frequency_penalty The frequency penalty to apply to the generateText.\n * @param opts.presence_penalty The presence penalty to apply to the generateText.\n * @param opts.temperature The temperature to apply to the generateText.\n * @param opts.max_context_length The maximum length of the context to apply to the generateText.\n * @returns The completed message.\n */\n\nexport async function generateText({\n runtime,\n context,\n modelClass,\n tools = {},\n onStepFinish,\n maxSteps = 1,\n stop,\n customSystemPrompt,\n}: // verifiableInference = process.env.VERIFIABLE_INFERENCE_ENABLED === \"true\",\n// verifiableInferenceOptions,\n{\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n tools?: Record<string, Tool>;\n onStepFinish?: (event: StepResult) => Promise<void> | void;\n maxSteps?: number;\n stop?: string[];\n customSystemPrompt?: string;\n // verifiableInference?: boolean;\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter;\n // verifiableInferenceOptions?: VerifiableInferenceOptions;\n}): Promise<string> {\n if (!context) {\n console.error(\"generateText context is empty\");\n return \"\";\n }\n\n elizaLogger.log(\"Generating text...\");\n\n elizaLogger.info(\"Generating text with options:\", {\n modelProvider: runtime.modelProvider,\n model: modelClass,\n // verifiableInference,\n });\n elizaLogger.log(\"Using provider:\", runtime.modelProvider);\n // If verifiable inference is requested and adapter is provided, use it\n // if (verifiableInference && runtime.verifiableInferenceAdapter) {\n // elizaLogger.log(\n // \"Using verifiable inference adapter:\",\n // runtime.verifiableInferenceAdapter\n // );\n // try {\n // const result: VerifiableInferenceResult =\n // await runtime.verifiableInferenceAdapter.generateText(\n // context,\n // modelClass,\n // verifiableInferenceOptions\n // );\n // elizaLogger.log(\"Verifiable inference result:\", result);\n // // Verify the proof\n // const isValid =\n // await runtime.verifiableInferenceAdapter.verifyProof(result);\n // if (!isValid) {\n // throw new Error(\"Failed to verify inference proof\");\n // }\n\n // return result.text;\n // } catch (error) {\n // elizaLogger.error(\"Error in verifiable inference:\", error);\n // throw error;\n // }\n // }\n\n const provider = runtime.modelProvider;\n elizaLogger.debug(\"Provider settings:\", {\n provider,\n hasRuntime: !!runtime,\n runtimeSettings: {\n CLOUDFLARE_GW_ENABLED: runtime.getSetting(\"CLOUDFLARE_GW_ENABLED\"),\n CLOUDFLARE_AI_ACCOUNT_ID: runtime.getSetting(\n \"CLOUDFLARE_AI_ACCOUNT_ID\"\n ),\n CLOUDFLARE_AI_GATEWAY_ID: runtime.getSetting(\n \"CLOUDFLARE_AI_GATEWAY_ID\"\n ),\n },\n });\n\n const endpoint =\n runtime.character.modelEndpointOverride || getEndpoint(provider);\n const modelSettings = getModelSettings(runtime.modelProvider, modelClass);\n let model = modelSettings.name;\n\n // allow character.json settings => secrets to override models\n // FIXME: add MODEL_MEDIUM support\n switch (provider) {\n // if runtime.getSetting(\"LLAMACLOUD_MODEL_LARGE\") is true and modelProvider is LLAMACLOUD, then use the large model\n case ModelProviderName.LLAMACLOUD:\n {\n switch (modelClass) {\n case ModelClass.LARGE:\n {\n model =\n runtime.getSetting(\"LLAMACLOUD_MODEL_LARGE\") ||\n model;\n }\n break;\n case ModelClass.SMALL:\n {\n model =\n runtime.getSetting(\"LLAMACLOUD_MODEL_SMALL\") ||\n model;\n }\n break;\n }\n }\n break;\n case ModelProviderName.TOGETHER:\n {\n switch (modelClass) {\n case ModelClass.LARGE:\n {\n model =\n runtime.getSetting(\"TOGETHER_MODEL_LARGE\") ||\n model;\n }\n break;\n case ModelClass.SMALL:\n {\n model =\n runtime.getSetting(\"TOGETHER_MODEL_SMALL\") ||\n model;\n }\n break;\n }\n }\n break;\n case ModelProviderName.OPENROUTER:\n {\n switch (modelClass) {\n case ModelClass.LARGE:\n {\n model =\n runtime.getSetting(\"LARGE_OPENROUTER_MODEL\") ||\n model;\n }\n break;\n case ModelClass.SMALL:\n {\n model =\n runtime.getSetting(\"SMALL_OPENROUTER_MODEL\") ||\n model;\n }\n break;\n }\n }\n break;\n }\n\n elizaLogger.info(\"Selected model:\", model);\n\n const modelConfiguration = runtime.character?.settings?.modelConfig;\n const temperature =\n modelConfiguration?.temperature || modelSettings.temperature;\n const frequency_penalty =\n modelConfiguration?.frequency_penalty ||\n modelSettings.frequency_penalty;\n const presence_penalty =\n modelConfiguration?.presence_penalty || modelSettings.presence_penalty;\n const max_context_length =\n modelConfiguration?.maxInputTokens || modelSettings.maxInputTokens;\n const max_response_length =\n modelConfiguration?.maxOutputTokens || modelSettings.maxOutputTokens;\n const experimental_telemetry =\n modelConfiguration?.experimental_telemetry ||\n modelSettings.experimental_telemetry;\n\n const apiKey = runtime.token;\n\n try {\n elizaLogger.debug(\n `Trimming context to max length of ${max_context_length} tokens.`\n );\n\n context = await trimTokens(context, max_context_length, runtime);\n\n let response: string;\n\n const _stop = stop || modelSettings.stop;\n elizaLogger.debug(\n `Using provider: ${provider}, model: ${model}, temperature: ${temperature}, max response length: ${max_response_length}`\n );\n\n switch (provider) {\n // OPENAI & LLAMACLOUD shared same structure.\n case ModelProviderName.OPENAI:\n case ModelProviderName.ALI_BAILIAN:\n case ModelProviderName.VOLENGINE:\n case ModelProviderName.LLAMACLOUD:\n case ModelProviderName.NANOGPT:\n case ModelProviderName.HYPERBOLIC:\n case ModelProviderName.TOGETHER:\n case ModelProviderName.NINETEEN_AI:\n case ModelProviderName.AKASH_CHAT_API:\n case ModelProviderName.LMSTUDIO:\n case ModelProviderName.NEARAI: {\n elizaLogger.debug(\n \"Initializing OpenAI model with Cloudflare check\"\n );\n const baseURL =\n getCloudflareGatewayBaseURL(runtime, \"openai\") || endpoint;\n\n //elizaLogger.debug(\"OpenAI baseURL result:\", { baseURL });\n const openai = createOpenAI({\n apiKey,\n baseURL,\n fetch: runtime.fetch,\n });\n\n const { text: openaiResponse } = await aiGenerateText({\n model: openai.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = openaiResponse;\n console.log(\"Received response from OpenAI model.\");\n break;\n }\n\n case ModelProviderName.ETERNALAI: {\n elizaLogger.debug(\"Initializing EternalAI model.\");\n const openai = createOpenAI({\n apiKey,\n baseURL: endpoint,\n fetch: async (\n input: RequestInfo | URL,\n init?: RequestInit\n ): Promise<Response> => {\n const url =\n typeof input === \"string\"\n ? input\n : input.toString();\n const chain_id =\n runtime.getSetting(\"ETERNALAI_CHAIN_ID\") || \"45762\";\n\n const options: RequestInit = { ...init };\n if (options?.body) {\n const body = JSON.parse(options.body as string);\n body.chain_id = chain_id;\n options.body = JSON.stringify(body);\n }\n\n const fetching = await runtime.fetch(url, options);\n\n if (\n parseBooleanFromText(\n runtime.getSetting(\"ETERNALAI_LOG\")\n )\n ) {\n elizaLogger.info(\n \"Request data: \",\n JSON.stringify(options, null, 2)\n );\n const clonedResponse = fetching.clone();\n try {\n clonedResponse.json().then((data) => {\n elizaLogger.info(\n \"Response data: \",\n JSON.stringify(data, null, 2)\n );\n });\n } catch (e) {\n elizaLogger.debug(e);\n }\n }\n return fetching;\n },\n });\n\n let system_prompt =\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined;\n try {\n const on_chain_system_prompt =\n await getOnChainEternalAISystemPrompt(runtime);\n if (!on_chain_system_prompt) {\n elizaLogger.error(\n new Error(\"invalid on_chain_system_prompt\")\n );\n } else {\n system_prompt = on_chain_system_prompt;\n elizaLogger.info(\n \"new on-chain system prompt\",\n system_prompt\n );\n }\n } catch (e) {\n elizaLogger.error(e);\n }\n\n const { text: openaiResponse } = await aiGenerateText({\n model: openai.languageModel(model),\n prompt: context,\n system: system_prompt,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n });\n\n response = openaiResponse;\n elizaLogger.debug(\"Received response from EternalAI model.\");\n break;\n }\n\n case ModelProviderName.GOOGLE: {\n const google = createGoogleGenerativeAI({\n apiKey,\n fetch: runtime.fetch,\n });\n\n const { text: googleResponse } = await aiGenerateText({\n model: google(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = googleResponse;\n elizaLogger.debug(\"Received response from Google model.\");\n break;\n }\n\n case ModelProviderName.MISTRAL: {\n const mistral = createMistral();\n\n const { text: mistralResponse } = await aiGenerateText({\n model: mistral(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n });\n\n response = mistralResponse;\n elizaLogger.debug(\"Received response from Mistral model.\");\n break;\n }\n\n case ModelProviderName.ANTHROPIC: {\n elizaLogger.debug(\n \"Initializing Anthropic model with Cloudflare check\"\n );\n const baseURL =\n getCloudflareGatewayBaseURL(runtime, \"anthropic\") ||\n \"https://api.anthropic.com/v1\";\n elizaLogger.debug(\"Anthropic baseURL result:\", { baseURL });\n\n const anthropic = createAnthropic({\n apiKey,\n baseURL,\n fetch: runtime.fetch,\n });\n const { text: anthropicResponse } = await aiGenerateText({\n model: anthropic.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = anthropicResponse;\n elizaLogger.debug(\"Received response from Anthropic model.\");\n break;\n }\n\n case ModelProviderName.CLAUDE_VERTEX: {\n elizaLogger.debug(\"Initializing Claude Vertex model.\");\n\n const anthropic = createAnthropic({\n apiKey,\n fetch: runtime.fetch,\n });\n\n const { text: anthropicResponse } = await aiGenerateText({\n model: anthropic.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = anthropicResponse;\n elizaLogger.debug(\n \"Received response from Claude Vertex model.\"\n );\n break;\n }\n\n case ModelProviderName.GROK: {\n elizaLogger.debug(\"Initializing Grok model.\");\n const grok = createOpenAI({\n apiKey,\n baseURL: endpoint,\n fetch: runtime.fetch,\n });\n\n const { text: grokResponse } = await aiGenerateText({\n model: grok.languageModel(model, {\n parallelToolCalls: false,\n }),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = grokResponse;\n elizaLogger.debug(\"Received response from Grok model.\");\n break;\n }\n\n case ModelProviderName.GROQ: {\n elizaLogger.debug(\n \"Initializing Groq model with Cloudflare check\"\n );\n const baseURL = getCloudflareGatewayBaseURL(runtime, \"groq\");\n elizaLogger.debug(\"Groq baseURL result:\", { baseURL });\n const groq = createGroq({\n apiKey,\n fetch: runtime.fetch,\n baseURL,\n });\n\n const { text: groqResponse } = await aiGenerateText({\n model: groq.languageModel(model),\n prompt: context,\n temperature,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools,\n onStepFinish: onStepFinish,\n maxSteps,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry,\n });\n\n response = groqResponse;\n elizaLogger.debug(\"Received response from Groq model.\");\n break;\n }\n\n case ModelProviderName.LLAMALOCAL: {\n elizaLogger.debug(\n \"Using local Llama model for text completion.\"\n );\n const textGenerationService =\n runtime.getService<ITextGenerationService>(\n ServiceType.TEXT_GENERATION\n );\n\n if (!textGenerationService) {\n throw new Error(\"Text generation service not found\");\n }\n\n response = await textGenerationService.queueTextCompletion(\n context,\n temperature,\n _stop,\n frequency_penalty,\n presence_penalty,\n max_response_length\n );\n elizaLogger.debug(\"Received response from local Llama model.\");\n break;\n }\n\n case ModelProviderName.REDPILL: {\n elizaLogger.debug(\"Initializing RedPill model.\");\n const serverUrl = getEndpoint(provider);\n const openai = createOpenAI({\n apiKey,\n baseURL: serverUrl,\n fetch: runtime.fetch,\n });\n\n const { text: redpillResponse } = await aiGenerateText({\n model: openai.languageModel(model),\n prompt: context,\n temperature: temperature,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = redpillResponse;\n elizaLogger.debug(\"Received response from redpill model.\");\n break;\n }\n\n case ModelProviderName.OPENROUTER: {\n elizaLogger.debug(\"Initializing OpenRouter model.\");\n const serverUrl = getEndpoint(provider);\n const openrouter = createOpenAI({\n apiKey,\n baseURL: serverUrl,\n fetch: runtime.fetch,\n });\n\n const { text: openrouterResponse } = await aiGenerateText({\n model: openrouter.languageModel(model),\n prompt: context,\n temperature: temperature,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = openrouterResponse;\n elizaLogger.debug(\"Received response from OpenRouter model.\");\n break;\n }\n\n case ModelProviderName.OLLAMA:\n {\n elizaLogger.debug(\"Initializing Ollama model.\");\n\n const ollamaProvider = createOllama({\n baseURL: getEndpoint(provider) + \"/api\",\n fetch: runtime.fetch,\n });\n const ollama = ollamaProvider(model);\n\n elizaLogger.debug(\"****** MODEL\\n\", model);\n\n const { text: ollamaResponse } = await aiGenerateText({\n model: ollama,\n prompt: context,\n tools: tools,\n onStepFinish: onStepFinish,\n temperature: temperature,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = ollamaResponse.replace(\n /<think>[\\s\\S]*?<\\/think>\\s*\\n*/g,\n \"\"\n );\n }\n elizaLogger.debug(\"Received response from Ollama model.\");\n break;\n\n case ModelProviderName.HEURIST: {\n elizaLogger.debug(\"Initializing Heurist model.\");\n const heurist = createOpenAI({\n apiKey: apiKey,\n baseURL: endpoint,\n fetch: runtime.fetch,\n });\n\n const { text: heuristResponse } = await aiGenerateText({\n model: heurist.languageModel(model),\n prompt: context,\n system:\n customSystemPrompt ??\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n temperature: temperature,\n maxTokens: max_response_length,\n maxSteps: maxSteps,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = heuristResponse;\n elizaLogger.debug(\"Received response from Heurist model.\");\n break;\n }\n case ModelProviderName.GAIANET: {\n elizaLogger.debug(\"Initializing GAIANET model.\");\n\n var baseURL = getEndpoint(provider);\n if (!baseURL) {\n switch (modelClass) {\n case ModelClass.SMALL:\n baseURL =\n settings.SMALL_GAIANET_SERVER_URL ||\n \"https://llama3b.gaia.domains/v1\";\n break;\n case ModelClass.MEDIUM:\n baseURL =\n settings.MEDIUM_GAIANET_SERVER_URL ||\n \"https://llama8b.gaia.domains/v1\";\n break;\n case ModelClass.LARGE:\n baseURL =\n settings.LARGE_GAIANET_SERVER_URL ||\n \"https://qwen72b.gaia.domains/v1\";\n break;\n }\n }\n\n elizaLogger.debug(\"Using GAIANET model with baseURL:\", baseURL);\n\n const openai = createOpenAI({\n apiKey,\n baseURL: endpoint,\n fetch: runtime.fetch,\n });\n\n const { text: openaiResponse } = await aiGenerateText({\n model: openai.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = openaiResponse;\n elizaLogger.debug(\"Received response from GAIANET model.\");\n break;\n }\n\n case ModelProviderName.ATOMA: {\n elizaLogger.debug(\"Initializing Atoma model.\");\n const atoma = createOpenAI({\n apiKey,\n baseURL: endpoint,\n fetch: runtime.fetch,\n });\n\n const { text: atomaResponse } = await aiGenerateText({\n model: atoma.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = atomaResponse;\n elizaLogger.debug(\"Received response from Atoma model.\");\n break;\n }\n\n case ModelProviderName.GALADRIEL: {\n elizaLogger.debug(\"Initializing Galadriel model.\");\n const headers = {};\n const fineTuneApiKey = runtime.getSetting(\n \"GALADRIEL_FINE_TUNE_API_KEY\"\n );\n if (fineTuneApiKey) {\n headers[\"Fine-Tune-Authentication\"] = fineTuneApiKey;\n }\n const galadriel = createOpenAI({\n headers,\n apiKey: apiKey,\n baseURL: endpoint,\n fetch: runtime.fetch,\n });\n\n const { text: galadrielResponse } = await aiGenerateText({\n model: galadriel.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = galadrielResponse;\n elizaLogger.debug(\"Received response from Galadriel model.\");\n break;\n }\n\n case ModelProviderName.INFERA: {\n elizaLogger.debug(\"Initializing Infera model.\");\n\n const apiKey = settings.INFERA_API_KEY || runtime.token;\n\n const infera = createOpenAI({\n apiKey,\n baseURL: endpoint,\n headers: {\n api_key: apiKey,\n \"Content-Type\": \"application/json\",\n },\n });\n\n const { text: inferaResponse } = await aiGenerateText({\n model: infera.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n });\n response = inferaResponse;\n elizaLogger.debug(\"Received response from Infera model.\");\n break;\n }\n\n case ModelProviderName.VENICE: {\n elizaLogger.debug(\"Initializing Venice model.\");\n const venice = createOpenAI({\n apiKey: apiKey,\n baseURL: endpoint,\n });\n\n const { text: veniceResponse } = await aiGenerateText({\n model: venice.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n temperature: temperature,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n });\n\n // console.warn(\"veniceResponse:\")\n // console.warn(veniceResponse)\n //rferrari: remove all text from <think> to </think>\\n\\n\n response = veniceResponse.replace(\n /<think>[\\s\\S]*?<\\/think>\\s*\\n*/g,\n \"\"\n );\n // console.warn(response)\n\n // response = veniceResponse;\n elizaLogger.debug(\"Received response from Venice model.\");\n break;\n }\n\n case ModelProviderName.NVIDIA: {\n elizaLogger.debug(\"Initializing NVIDIA model.\");\n const nvidia = createOpenAI({\n apiKey: apiKey,\n baseURL: endpoint,\n });\n\n const { text: nvidiaResponse } = await aiGenerateText({\n model: nvidia.languageModel(model),\n prompt: context,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n temperature: temperature,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n });\n\n response = nvidiaResponse;\n elizaLogger.debug(\"Received response from NVIDIA model.\");\n break;\n }\n\n case ModelProviderName.DEEPSEEK: {\n elizaLogger.debug(\"Initializing Deepseek model.\");\n const serverUrl = models[provider].endpoint;\n const deepseek = createOpenAI({\n apiKey,\n baseURL: serverUrl,\n fetch: runtime.fetch,\n });\n\n const { text: deepseekResponse } = await aiGenerateText({\n model: deepseek.languageModel(model),\n prompt: context,\n temperature: temperature,\n system:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n undefined,\n tools: tools,\n onStepFinish: onStepFinish,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n });\n\n response = deepseekResponse;\n elizaLogger.debug(\"Received response from Deepseek model.\");\n break;\n }\n\n case ModelProviderName.LIVEPEER: {\n elizaLogger.debug(\"Initializing Livepeer model.\");\n\n if (!endpoint) {\n throw new Error(\"Livepeer Gateway URL is not defined\");\n }\n\n const requestBody = {\n model: model,\n messages: [\n {\n role: \"system\",\n content:\n runtime.character.system ??\n settings.SYSTEM_PROMPT ??\n \"You are a helpful assistant\",\n },\n {\n role: \"user\",\n content: context,\n },\n ],\n max_tokens: max_response_length,\n stream: false,\n };\n\n const fetchResponse = await runtime.fetch(endpoint + \"/llm\", {\n method: \"POST\",\n headers: {\n accept: \"text/event-stream\",\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer eliza-app-llm\",\n },\n body: JSON.stringify(requestBody),\n });\n\n if (!fetchResponse.ok) {\n const errorText = await fetchResponse.text();\n throw new Error(\n `Livepeer request failed (${fetchResponse.status}): ${errorText}`\n );\n }\n\n const json = await fetchResponse.json();\n\n if (!json?.choices?.[0]?.message?.content) {\n throw new Error(\"Invalid response format from Livepeer\");\n }\n\n response = json.choices[0].message.content.replace(\n /<\\|start_header_id\\|>assistant<\\|end_header_id\\|>\\n\\n/,\n \"\"\n );\n elizaLogger.debug(\n \"Successfully received response from Livepeer model\"\n );\n break;\n }\n\n case ModelProviderName.SECRETAI:\n {\n elizaLogger.debug(\"Initializing SecretAI model.\");\n\n const secretAiProvider = createOllama({\n baseURL: getEndpoint(provider) + \"/api\",\n fetch: runtime.fetch,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n });\n const secretAi = secretAiProvider(model);\n\n const { text: secretAiResponse } = await aiGenerateText({\n model: secretAi,\n prompt: context,\n tools: tools,\n onStepFinish: onStepFinish,\n temperature: temperature,\n maxSteps: maxSteps,\n maxTokens: max_response_length,\n });\n\n response = secretAiResponse;\n }\n break;\n\n case ModelProviderName.BEDROCK: {\n elizaLogger.debug(\"Initializing Bedrock model.\");\n\n const { text: bedrockResponse } = await aiGenerateText({\n model: bedrock(model),\n maxSteps: maxSteps,\n temperature: temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n experimental_telemetry: experimental_telemetry,\n prompt: context,\n });\n\n response = bedrockResponse;\n elizaLogger.debug(\"Received response from Bedrock model.\");\n break;\n }\n\n default: {\n const errorMessage = `Unsupported provider: ${provider}`;\n elizaLogger.error(errorMessage);\n throw new Error(errorMessage);\n }\n }\n\n return response;\n } catch (error) {\n elizaLogger.error(\"Error in generateText:\", error);\n throw error;\n }\n}\n\n/**\n * Sends a message to the model to determine if it should respond to the given context.\n * @param opts - The options for the generateText request\n * @param opts.context The context to evaluate for response\n * @param opts.stop A list of strings to stop the generateText at\n * @param opts.model The model to use for generateText\n * @param opts.frequency_penalty The frequency penalty to apply (0.0 to 2.0)\n * @param opts.presence_penalty The presence penalty to apply (0.0 to 2.0)\n * @param opts.temperature The temperature to control randomness (0.0 to 2.0)\n * @param opts.serverUrl The URL of the API server\n * @param opts.max_context_length Maximum allowed context length in tokens\n * @param opts.max_response_length Maximum allowed response length in tokens\n * @returns Promise resolving to \"RESPOND\", \"IGNORE\", \"STOP\" or null\n */\nexport async function generateShouldRespond({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<\"RESPOND\" | \"IGNORE\" | \"STOP\" | null> {\n let retryDelay = 1000;\n while (true) {\n try {\n elizaLogger.debug(\n \"Attempting to generate text with context:\",\n context\n );\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n\n elizaLogger.debug(\"Received response from generateText:\", response);\n const parsedResponse = parseShouldRespondFromText(response.trim());\n if (parsedResponse) {\n elizaLogger.debug(\"Parsed response:\", parsedResponse);\n return parsedResponse;\n } else {\n elizaLogger.debug(\"generateShouldRespond no response\");\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateShouldRespond:\", error);\n if (\n error instanceof TypeError &&\n error.message.includes(\"queueTextCompletion\")\n ) {\n elizaLogger.error(\n \"TypeError: Cannot read properties of null (reading 'queueTextCompletion')\"\n );\n }\n }\n\n elizaLogger.log(`Retrying in ${retryDelay}ms...`);\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n\n/**\n * Splits content into chunks of specified size with optional overlapping bleed sections\n * @param content - The text content to split into chunks\n * @param chunkSize - The maximum size of each chunk in tokens\n * @param bleed - Number of characters to overlap between chunks (default: 100)\n * @returns Promise resolving to array of text chunks with bleed sections\n */\nexport async function splitChunks(\n content: string,\n chunkSize = 1500,\n bleed = 100\n): Promise<string[]> {\n elizaLogger.debug(`[splitChunks] Starting text split`);\n\n // Validate parameters\n if (chunkSize <= 0) {\n elizaLogger.warn(\n `Invalid chunkSize (${chunkSize}), using default 1500`\n );\n chunkSize = 1500;\n }\n\n if (bleed >= chunkSize) {\n elizaLogger.warn(\n `Bleed (${bleed}) >= chunkSize (${chunkSize}), adjusting bleed to 1/4 of chunkSize`\n );\n bleed = Math.floor(chunkSize / 4);\n }\n\n if (bleed < 0) {\n elizaLogger.warn(`Invalid bleed (${bleed}), using default 100`);\n bleed = 100;\n }\n\n const chunks = splitText(content, chunkSize, bleed);\n\n elizaLogger.debug(`[splitChunks] Split complete:`, {\n numberOfChunks: chunks.length,\n averageChunkSize:\n chunks.reduce((acc, chunk) => acc + chunk.length, 0) /\n chunks.length,\n });\n\n return chunks;\n}\n\nexport function splitText(\n content: string,\n chunkSize: number,\n bleed: number\n): string[] {\n const chunks: string[] = [];\n let start = 0;\n\n while (start < content.length) {\n const end = Math.min(start + chunkSize, content.length);\n // Ensure we're not creating empty or invalid chunks\n if (end > start) {\n chunks.push(content.substring(start, end));\n }\n\n // Ensure forward progress while preventing infinite loops\n start = Math.max(end - bleed, start + 1);\n }\n\n return chunks;\n}\n\n/**\n * Sends a message to the model and parses the response as a boolean value\n * @param opts - The options for the generateText request\n * @param opts.context The context to evaluate for the boolean response\n * @param opts.stop A list of strings to stop the generateText at\n * @param opts.model The model to use for generateText\n * @param opts.frequency_penalty The frequency penalty to apply (0.0 to 2.0)\n * @param opts.presence_penalty The presence penalty to apply (0.0 to 2.0)\n * @param opts.temperature The temperature to control randomness (0.0 to 2.0)\n * @param opts.serverUrl The URL of the API server\n * @param opts.max_context_length Maximum allowed context length in tokens\n * @param opts.max_response_length Maximum allowed response length in tokens\n * @returns Promise resolving to a boolean value parsed from the model's response\n */\nexport async function generateTrueOrFalse({\n runtime,\n context = \"\",\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<boolean> {\n let retryDelay = 1000;\n const modelSettings = getModelSettings(runtime.modelProvider, modelClass);\n const stop = Array.from(\n new Set([...(modelSettings.stop || []), [\"\\n\"]])\n ) as string[];\n\n while (true) {\n try {\n const response = await generateText({\n stop,\n runtime,\n context,\n modelClass,\n });\n\n const parsedResponse = parseBooleanFromText(response.trim());\n if (parsedResponse !== null) {\n return parsedResponse;\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateTrueOrFalse:\", error);\n }\n\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n\n/**\n * Send a message to the model and parse the response as a string array\n * @param opts - The options for the generateText request\n * @param opts.context The context/prompt to send to the model\n * @param opts.stop Array of strings that will stop the model's generation if encountered\n * @param opts.model The language model to use\n * @param opts.frequency_penalty The frequency penalty to apply (0.0 to 2.0)\n * @param opts.presence_penalty The presence penalty to apply (0.0 to 2.0)\n * @param opts.temperature The temperature to control randomness (0.0 to 2.0)\n * @param opts.serverUrl The URL of the API server\n * @param opts.token The API token for authentication\n * @param opts.max_context_length Maximum allowed context length in tokens\n * @param opts.max_response_length Maximum allowed response length in tokens\n * @returns Promise resolving to an array of strings parsed from the model's response\n */\nexport async function generateTextArray({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<string[]> {\n if (!context) {\n elizaLogger.error(\"generateTextArray context is empty\");\n return [];\n }\n let retryDelay = 1000;\n\n while (true) {\n try {\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n\n const parsedResponse = parseJsonArrayFromText(response);\n if (parsedResponse) {\n return parsedResponse;\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateTextArray:\", error);\n }\n\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n\nexport async function generateObjectDeprecated({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<any> {\n if (!context) {\n elizaLogger.error(\"generateObjectDeprecated context is empty\");\n return null;\n }\n let retryDelay = 1000;\n\n while (true) {\n try {\n // this is slightly different than generateObjectArray, in that we parse object, not object array\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n const parsedResponse = parseJSONObjectFromText(response);\n if (parsedResponse) {\n return parsedResponse;\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateObject:\", error);\n }\n\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n\nexport async function generateObjectArray({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<any[]> {\n if (!context) {\n elizaLogger.error(\"generateObjectArray context is empty\");\n return [];\n }\n let retryDelay = 1000;\n\n while (true) {\n try {\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n\n const parsedResponse = parseJsonArrayFromText(response);\n if (parsedResponse) {\n return parsedResponse;\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateTextArray:\", error);\n }\n\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n\n/**\n * Send a message to the model for generateText.\n * @param opts - The options for the generateText request.\n * @param opts.context The context of the message to be completed.\n * @param opts.stop A list of strings to stop the generateText at.\n * @param opts.model The model to use for generateText.\n * @param opts.frequency_penalty The frequency penalty to apply to the generateText.\n * @param opts.presence_penalty The presence penalty to apply to the generateText.\n * @param opts.temperature The temperature to apply to the generateText.\n * @param opts.max_context_length The maximum length of the context to apply to the generateText.\n * @returns The completed message.\n */\nexport async function generateMessageResponse({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<Content> {\n const modelSettings = getModelSettings(runtime.modelProvider, modelClass);\n const max_context_length = modelSettings.maxInputTokens;\n\n context = await trimTokens(context, max_context_length, runtime);\n elizaLogger.debug(\"Context:\", context);\n let retryLength = 1000; // exponential backoff\n while (true) {\n try {\n elizaLogger.log(\"Generating message response..\");\n\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n\n // try parsing the response as JSON, if null then try again\n const parsedContent = parseJSONObjectFromText(response) as Content;\n if (!parsedContent) {\n elizaLogger.debug(\"parsedContent is null, retrying\");\n continue;\n }\n\n return parsedContent;\n } catch (error) {\n elizaLogger.error(\"ERROR:\", error);\n // wait for 2 seconds\n retryLength *= 2;\n await new Promise((resolve) => setTimeout(resolve, retryLength));\n elizaLogger.debug(\"Retrying...\");\n }\n }\n}\n\nexport const generateImage = async (\n data: {\n prompt: string;\n width: number;\n height: number;\n count?: number;\n negativePrompt?: string;\n numIterations?: number;\n guidanceScale?: number;\n seed?: number;\n modelId?: string;\n jobId?: string;\n stylePreset?: string;\n hideWatermark?: boolean;\n safeMode?: boolean;\n cfgScale?: number;\n },\n runtime: IAgentRuntime\n): Promise<{\n success: boolean;\n data?: string[];\n error?: any;\n}> => {\n const modelSettings = getImageModelSettings(runtime.imageModelProvider);\n if (!modelSettings) {\n elizaLogger.warn(\n \"No model settings found for the image model provider.\"\n );\n return { success: false, error: \"No model settings available\" };\n }\n const model = modelSettings.name;\n elizaLogger.info(\"Generating image with options:\", {\n imageModelProvider: model,\n });\n\n const apiKey =\n runtime.imageModelProvider === runtime.modelProvider\n ? runtime.token\n : (() => {\n // First try to match the specific provider\n switch (runtime.imageModelProvider) {\n case ModelProviderName.HEURIST:\n return runtime.getSetting(\"HEURIST_API_KEY\");\n case ModelProviderName.TOGETHER:\n return runtime.getSetting(\"TOGETHER_API_KEY\");\n case ModelProviderName.FAL:\n return runtime.getSetting(\"FAL_API_KEY\");\n case ModelProviderName.OPENAI:\n return runtime.getSetting(\"OPENAI_API_KEY\");\n case ModelProviderName.VENICE:\n return runtime.getSetting(\"VENICE_API_KEY\");\n case ModelProviderName.LIVEPEER:\n return runtime.getSetting(\"LIVEPEER_GATEWAY_URL\");\n case ModelProviderName.SECRETAI:\n return runtime.getSetting(\"SECRET_AI_API_KEY\");\n case ModelProviderName.NEARAI:\n try {\n // Read auth config from ~/.nearai/config.json if it exists\n const config = JSON.parse(\n fs.readFileSync(\n path.join(\n os.homedir(),\n \".nearai/config.json\"\n ),\n \"utf8\"\n )\n );\n return JSON.stringify(config?.auth);\n } catch (e) {\n elizaLogger.warn(\n `Error loading NEAR AI config. The environment variable NEARAI_API_KEY will be used. ${e}`\n );\n }\n return runtime.getSetting(\"NEARAI_API_KEY\");\n default:\n // If no specific match, try the fallback chain\n return (\n runtime.getSetting(\"HEURIST_API_KEY\") ??\n runtime.getSetting(\"NINETEEN_AI_API_KEY\") ??\n runtime.getSetting(\"TOGETHER_API_KEY\") ??\n runtime.getSetting(\"FAL_API_KEY\") ??\n runtime.getSetting(\"OPENAI_API_KEY\") ??\n runtime.getSetting(\"VENICE_API_KEY\") ??\n runtime.getSetting(\"LIVEPEER_GATEWAY_URL\")\n );\n }\n })();\n try {\n if (runtime.imageModelProvider === ModelProviderName.HEURIST) {\n const response = await fetch(\n \"http://sequencer.heurist.xyz/submit_job\",\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n job_id: data.jobId || crypto.randomUUID(),\n model_input: {\n SD: {\n prompt: data.prompt,\n neg_prompt: data.negativePrompt,\n num_iterations: data.numIterations || 20,\n width: data.width || 512,\n height: data.height || 512,\n guidance_scale: data.guidanceScale || 3,\n seed: data.seed || -1,\n },\n },\n model_id: model,\n deadline: 60,\n priority: 1,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(\n `Heurist image generation failed: ${response.statusText}`\n );\n }\n\n const imageURL = await response.json();\n return { success: true, data: [imageURL] };\n } else if (\n runtime.imageModelProvider === ModelProviderName.TOGETHER ||\n // for backwards compat\n runtime.imageModelProvider === ModelProviderName.LLAMACLOUD\n ) {\n const together = new Together({ apiKey: apiKey as string });\n const response = await together.images.create({\n model: model,\n prompt: data.prompt,\n width: data.width,\n height: data.height,\n steps: modelSettings?.steps ?? 4,\n n: data.count,\n });\n\n // Add type assertion to handle the response properly\n const togetherResponse =\n response as unknown as TogetherAIImageResponse;\n\n if (\n !togetherResponse.data ||\n !Array.isArray(togetherResponse.data)\n ) {\n throw new Error(\"Invalid response format from Together AI\");\n }\n\n // Rest of the code remains the same...\n const base64s = await Promise.all(\n togetherResponse.data.map(async (image) => {\n if (!image.url) {\n elizaLogger.error(\"Missing URL in image data:\", image);\n throw new Error(\"Missing URL in Together AI response\");\n }\n\n // Fetch the image from the URL\n const imageResponse = await fetch(image.url);\n if (!imageResponse.ok) {\n throw new Error(\n `Failed to fetch image: ${imageResponse.statusText}`\n );\n }\n\n // Convert to blob and then to base64\n const blob = await imageResponse.blob();\n const arrayBuffer = await blob.arrayBuffer();\n const base64 = Buffer.from(arrayBuffer).toString(\"base64\");\n\n // Return with proper MIME type\n return `data:image/jpeg;base64,${base64}`;\n })\n );\n\n if (base64s.length === 0) {\n throw new Error(\"No images generated by Together AI\");\n }\n\n elizaLogger.debug(`Generated ${base64s.length} images`);\n return { success: true, data: base64s };\n } else if (runtime.imageModelProvider === ModelProviderName.FAL) {\n fal.config({\n credentials: apiKey as string,\n });\n\n // Prepare the input parameters according to their schema\n const input = {\n prompt: data.prompt,\n image_size: \"square\" as const,\n num_inference_steps: modelSettings?.steps ?? 50,\n guidance_scale: data.guidanceScale || 3.5,\n num_images: data.count,\n enable_safety_checker:\n runtime.getSetting(\"FAL_AI_ENABLE_SAFETY_CHECKER\") ===\n \"true\",\n safety_tolerance: Number(\n runtime.getSetting(\"FAL_AI_SAFETY_TOLERANCE\") || \"2\"\n ),\n output_format: \"png\" as const,\n seed: data.seed ?? 6252023,\n ...(runtime.getSetting(\"FAL_AI_LORA_PATH\")\n ? {\n loras: [\n {\n path: runtime.getSetting(\"FAL_AI_LORA_PATH\"),\n scale: 1,\n },\n ],\n }\n : {}),\n };\n\n // Subscribe to the model\n const result = await fal.subscribe(model, {\n input,\n logs: true,\n onQueueUpdate: (update) => {\n if (update.status === \"IN_PROGRESS\") {\n elizaLogger.info(update.logs.map((log) => log.message));\n }\n },\n });\n // Convert the returned image URLs to base64 to match existing functionality\n const base64Promises = result.data.images.map(async (image) => {\n const response = await fetch(image.url);\n const blob = await response.blob();\n const buffer = await blob.arrayBuffer();\n const base64 = Buffer.from(buffer).toString(\"base64\");\n return `data:${image.content_type};base64,${base64}`;\n });\n\n const base64s = await Promise.all(base64Promises);\n return { success: true, data: base64s };\n } else if (runtime.imageModelProvider === ModelProviderName.VENICE) {\n const response = await fetch(\n \"https://api.venice.ai/api/v1/image/generate\",\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n model: model,\n prompt: data.prompt,\n cfg_scale: data.guidanceScale,\n negative_prompt: data.negativePrompt,\n width: data.width,\n height: data.height,\n steps: data.numIterations,\n safe_mode: data.safeMode,\n seed: data.seed,\n style_preset: data.stylePreset,\n hide_watermark: data.hideWatermark,\n }),\n }\n );\n\n const result = await response.json();\n\n if (!result.images || !Array.isArray(result.images)) {\n throw new Error(\"Invalid response format from Venice AI\");\n }\n\n const base64s = result.images.map((base64String) => {\n if (!base64String) {\n throw new Error(\n \"Empty base64 string in Venice AI response\"\n );\n }\n return `data:image/png;base64,${base64String}`;\n });\n\n return { success: true, data: base64s };\n } else if (\n runtime.imageModelProvider === ModelProviderName.NINETEEN_AI\n ) {\n const response = await fetch(\n \"https://api.nineteen.ai/v1/text-to-image\",\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n model: model,\n prompt: data.prompt,\n negative_prompt: data.negativePrompt,\n width: data.width,\n height: data.height,\n steps: data.numIterations,\n cfg_scale: data.guidanceScale || 3,\n }),\n }\n );\n\n const result = await response.json();\n\n if (!result.images || !Array.isArray(result.images)) {\n throw new Error(\"Invalid response format from Nineteen AI\");\n }\n\n const base64s = result.images.map((base64String) => {\n if (!base64String) {\n throw new Error(\n \"Empty base64 string in Nineteen AI response\"\n );\n }\n return `data:image/png;base64,${base64String}`;\n });\n\n return { success: true, data: base64s };\n } else if (runtime.imageModelProvider === ModelProviderName.LIVEPEER) {\n if (!apiKey) {\n throw new Error(\"Livepeer Gateway is not defined\");\n }\n try {\n const baseUrl = new URL(apiKey);\n if (!baseUrl.protocol.startsWith(\"http\")) {\n throw new Error(\"Invalid Livepeer Gateway URL protocol\");\n }\n\n const response = await fetch(\n `${baseUrl.toString()}text-to-image`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer eliza-app-img\",\n },\n body: JSON.stringify({\n model_id:\n data.modelId || \"ByteDance/SDXL-Lightning\",\n prompt: data.prompt,\n width: data.width || 1024,\n height: data.height || 1024,\n }),\n }\n );\n const result = await response.json();\n if (!result.images?.length) {\n throw new Error(\"No images generated\");\n }\n const base64Images = await Promise.all(\n result.images.map(async (image) => {\n console.log(\"imageUrl console log\", image.url);\n let imageUrl;\n if (image.url.includes(\"http\")) {\n imageUrl = image.url;\n } else {\n imageUrl = `${apiKey}${image.url}`;\n }\n const imageResponse = await fetch(imageUrl);\n if (!imageResponse.ok) {\n throw new Error(\n `Failed to fetch image: ${imageResponse.statusText}`\n );\n }\n const blob = await imageResponse.blob();\n const arrayBuffer = await blob.arrayBuffer();\n const base64 =\n Buffer.from(arrayBuffer).toString(\"base64\");\n return `data:image/jpeg;base64,${base64}`;\n })\n );\n return {\n success: true,\n data: base64Images,\n };\n } catch (error) {\n console.error(error);\n return { success: false, error: error };\n }\n } else {\n let targetSize = `${data.width}x${data.height}`;\n if (\n targetSize !== \"1024x1024\" &&\n targetSize !== \"1792x1024\" &&\n targetSize !== \"1024x1792\"\n ) {\n targetSize = \"1024x1024\";\n }\n const openaiApiKey = runtime.getSetting(\"OPENAI_API_KEY\") as string;\n if (!openaiApiKey) {\n throw new Error(\"OPENAI_API_KEY is not set\");\n }\n const openai = new OpenAI({\n apiKey: openaiApiKey as string,\n });\n const response = await openai.images.generate({\n model,\n prompt: data.prompt,\n size: targetSize as \"1024x1024\" | \"1792x1024\" | \"1024x1792\",\n n: data.count,\n response_format: \"b64_json\",\n });\n const base64s = response.data.map(\n (image) => `data:image/png;base64,${image.b64_json}`\n );\n return { success: true, data: base64s };\n }\n } catch (error) {\n console.error(error);\n return { success: false, error: error };\n }\n};\n\nexport const generateCaption = async (\n data: { imageUrl: string },\n runtime: IAgentRuntime\n): Promise<{\n title: string;\n description: string;\n}> => {\n const { imageUrl } = data;\n const imageDescriptionService =\n runtime.getService<IImageDescriptionService>(\n ServiceType.IMAGE_DESCRIPTION\n );\n\n if (!imageDescriptionService) {\n throw new Error(\"Image description service not found\");\n }\n\n const resp = await imageDescriptionService.describeImage(imageUrl);\n return {\n title: resp.title.trim(),\n description: resp.description.trim(),\n };\n};\n\n/**\n * Configuration options for generating objects with a model.\n */\nexport interface GenerationOptions {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n schema?: ZodSchema;\n schemaName?: string;\n schemaDescription?: string;\n stop?: string[];\n mode?: \"auto\" | \"json\" | \"tool\";\n experimental_providerMetadata?: Record<string, unknown>;\n // verifiableInference?: boolean;\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter;\n // verifiableInferenceOptions?: VerifiableInferenceOptions;\n}\n\n/**\n * Base settings for model generation.\n */\ninterface ModelSettings {\n prompt: string;\n temperature: number;\n maxTokens: number;\n frequencyPenalty: number;\n presencePenalty: number;\n stop?: string[];\n experimental_telemetry?: TelemetrySettings;\n}\n\n/**\n * Generates structured objects from a prompt using specified AI models and configuration options.\n *\n * @param {GenerationOptions} options - Configuration options for generating objects.\n * @returns {Promise<any[]>} - A promise that resolves to an array of generated objects.\n * @throws {Error} - Throws an error if the provider is unsupported or if generation fails.\n */\nexport const generateObject = async ({\n runtime,\n context,\n modelClass,\n schema,\n schemaName,\n schemaDescription,\n stop,\n mode = \"json\",\n}: // verifiableInference = false,\n// verifiableInferenceAdapter,\n// verifiableInferenceOptions,\nGenerationOptions): Promise<GenerateObjectResult<unknown>> => {\n if (!context) {\n const errorMessage = \"generateObject context is empty\";\n console.error(errorMessage);\n throw new Error(errorMessage);\n }\n\n const provider = runtime.modelProvider;\n const modelSettings = getModelSettings(runtime.modelProvider, modelClass);\n const model = modelSettings.name;\n const temperature = modelSettings.temperature;\n const frequency_penalty = modelSettings.frequency_penalty;\n const presence_penalty = modelSettings.presence_penalty;\n const max_context_length = modelSettings.maxInputTokens;\n const max_response_length = modelSettings.maxOutputTokens;\n const experimental_telemetry = modelSettings.experimental_telemetry;\n const apiKey = runtime.token;\n\n try {\n context = await trimTokens(context, max_context_length, runtime);\n\n const modelOptions: ModelSettings = {\n prompt: context,\n temperature,\n maxTokens: max_response_length,\n frequencyPenalty: frequency_penalty,\n presencePenalty: presence_penalty,\n stop: stop || modelSettings.stop,\n experimental_telemetry: experimental_telemetry,\n };\n\n const response = await handleProvider({\n provider,\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode,\n modelOptions,\n runtime,\n context,\n modelClass,\n // verifiableInference,\n // verifiableInferenceAdapter,\n // verifiableInferenceOptions,\n });\n\n return response;\n } catch (error) {\n console.error(\"Error in generateObject:\", error);\n throw error;\n }\n};\n\n/**\n * Handles AI generation based on the specified provider.\n *\n * @param {ProviderOptions} options - Configuration options specific to the provider.\n * @returns {Promise<any[]>} - A promise that resolves to an array of generated objects.\n */\nexport async function handleProvider(\n options: ProviderOptions\n): Promise<GenerationResult> {\n const {\n provider,\n runtime,\n context,\n modelClass,\n //verifiableInference,\n //verifiableInferenceAdapter,\n //verifiableInferenceOptions,\n } = options;\n switch (provider) {\n case ModelProviderName.OPENAI:\n case ModelProviderName.ETERNALAI:\n case ModelProviderName.ALI_BAILIAN:\n case ModelProviderName.VOLENGINE:\n case ModelProviderName.LLAMACLOUD:\n case ModelProviderName.TOGETHER:\n case ModelProviderName.NANOGPT:\n case ModelProviderName.AKASH_CHAT_API:\n case ModelProviderName.LMSTUDIO:\n return await handleOpenAI(options);\n case ModelProviderName.ANTHROPIC:\n case ModelProviderName.CLAUDE_VERTEX:\n return await handleAnthropic(options);\n case ModelProviderName.GROK:\n return await handleGrok(options);\n case ModelProviderName.GROQ:\n return await handleGroq(options);\n case ModelProviderName.LLAMALOCAL:\n return await generateObjectDeprecated({\n runtime,\n context,\n modelClass,\n });\n case ModelProviderName.GOOGLE:\n return await handleGoogle(options);\n case ModelProviderName.MISTRAL:\n return await handleMistral(options);\n case ModelProviderName.REDPILL:\n return await handleRedPill(options);\n case ModelProviderName.OPENROUTER:\n return await handleOpenRouter(options);\n case ModelProviderName.OLLAMA:\n return await handleOllama(options);\n case ModelProviderName.DEEPSEEK:\n return await handleDeepSeek(options);\n case ModelProviderName.LIVEPEER:\n return await handleLivepeer(options);\n case ModelProviderName.SECRETAI:\n return await handleSecretAi(options);\n case ModelProviderName.NEARAI:\n return await handleNearAi(options);\n case ModelProviderName.BEDROCK:\n return await handleBedrock(options);\n default: {\n const errorMessage = `Unsupported provider: ${provider}`;\n elizaLogger.error(errorMessage);\n throw new Error(errorMessage);\n }\n }\n}\n/**\n * Handles object generation for OpenAI.\n *\n * @param {ProviderOptions} options - Options specific to OpenAI.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleOpenAI({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n provider,\n runtime,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const endpoint = runtime.character.modelEndpointOverride || getEndpoint(provider);\n const baseURL = getCloudflareGatewayBaseURL(runtime, \"openai\") || endpoint;\n const openai = createOpenAI({ \n apiKey, \n baseURL,\n fetch: runtime.fetch \n });\n return aiGenerateObject({\n model: openai.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Anthropic models.\n *\n * @param {ProviderOptions} options - Options specific to Anthropic.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleAnthropic({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"auto\",\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n elizaLogger.debug(\"Handling Anthropic request with Cloudflare check\");\n if (mode === \"json\") {\n elizaLogger.warn(\"Anthropic mode is set to json, changing to auto\");\n mode = \"auto\";\n }\n const baseURL = getCloudflareGatewayBaseURL(runtime, \"anthropic\");\n elizaLogger.debug(\"Anthropic handleAnthropic baseURL:\", { baseURL });\n\n const anthropic = createAnthropic({ \n apiKey, \n baseURL,\n fetch: runtime.fetch \n });\n return await aiGenerateObject({\n model: anthropic.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Grok models.\n *\n * @param {ProviderOptions} options - Options specific to Grok.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleGrok({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n const grok = createOpenAI({ \n apiKey, \n baseURL: models.grok.endpoint,\n fetch: runtime.fetch \n });\n return aiGenerateObject({\n model: grok.languageModel(model, { parallelToolCalls: false }),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Groq models.\n *\n * @param {ProviderOptions} options - Options specific to Groq.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleGroq({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n elizaLogger.debug(\"Handling Groq request with Cloudflare check\");\n const baseURL = getCloudflareGatewayBaseURL(runtime, \"groq\");\n elizaLogger.debug(\"Groq handleGroq baseURL:\", { baseURL });\n\n const groq = createGroq({ \n apiKey, \n baseURL,\n fetch: runtime.fetch \n });\n return await aiGenerateObject({\n model: groq.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Google models.\n *\n * @param {ProviderOptions} options - Options specific to Google.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleGoogle({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerateObjectResult<unknown>> {\n const google = createGoogleGenerativeAI({\n apiKey,\n fetch: runtime.fetch \n });\n return aiGenerateObject({\n model: google(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Mistral models.\n *\n * @param {ProviderOptions} options - Options specific to Mistral.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleMistral({\n model,\n schema,\n schemaName,\n schemaDescription,\n mode,\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n const mistral = createMistral({ fetch: runtime.fetch });\n return aiGenerateObject({\n model: mistral(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Redpill models.\n *\n * @param {ProviderOptions} options - Options specific to Redpill.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleRedPill({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n const redPill = createOpenAI({ \n apiKey, \n baseURL: models.redpill.endpoint,\n fetch: runtime.fetch \n });\n return aiGenerateObject({\n model: redPill.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for OpenRouter models.\n *\n * @param {ProviderOptions} options - Options specific to OpenRouter.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleOpenRouter({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n const openRouter = createOpenAI({\n apiKey,\n baseURL: models.openrouter.endpoint,\n fetch: runtime.fetch\n });\n return aiGenerateObject({\n model: openRouter.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Ollama models.\n *\n * @param {ProviderOptions} options - Options specific to Ollama.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleOllama({\n model,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n provider,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n const ollamaProvider = createOllama({\n baseURL: getEndpoint(provider) + \"/api\",\n fetch: runtime.fetch\n });\n const ollama = ollamaProvider(model);\n return aiGenerateObject({\n model: ollama,\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for DeepSeek models.\n *\n * @param {ProviderOptions} options - Options specific to DeepSeek.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleDeepSeek({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode,\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n const openai = createOpenAI({ \n apiKey, \n baseURL: models.deepseek.endpoint,\n fetch: runtime.fetch \n });\n return aiGenerateObject({\n model: openai.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Amazon Bedrock models.\n *\n * @param {ProviderOptions} options - Options specific to Amazon Bedrock.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleBedrock({\n model,\n schema,\n schemaName,\n schemaDescription,\n mode,\n modelOptions,\n provider,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n const bedrockClient = bedrock(model);\n return aiGenerateObject({\n model: bedrockClient,\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\nasync function handleLivepeer({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode,\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n console.log(\"Livepeer provider api key:\", apiKey);\n if (!apiKey) {\n throw new Error(\n \"Livepeer provider requires LIVEPEER_GATEWAY_URL to be configured\"\n );\n }\n\n const livepeerClient = createOpenAI({\n apiKey,\n baseURL: apiKey,\n fetch: runtime.fetch\n });\n return aiGenerateObject({\n model: livepeerClient.languageModel(model),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for Secret AI models.\n *\n * @param {ProviderOptions} options - Options specific to Secret AI.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleSecretAi({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n provider,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n const secretAiProvider = createOllama({\n baseURL: getEndpoint(provider) + \"/api\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n fetch: runtime.fetch\n });\n const secretAi = secretAiProvider(model);\n return aiGenerateObject({\n model: secretAi,\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n/**\n * Handles object generation for NEAR AI models.\n *\n * @param {ProviderOptions} options - Options specific to NEAR AI.\n * @returns {Promise<GenerateObjectResult<unknown>>} - A promise that resolves to generated objects.\n */\nasync function handleNearAi({\n model,\n apiKey,\n schema,\n schemaName,\n schemaDescription,\n mode = \"json\",\n modelOptions,\n runtime,\n}: ProviderOptions): Promise<GenerationResult> {\n const nearai = createOpenAI({ \n apiKey, \n baseURL: models.nearai.endpoint,\n fetch: runtime.fetch \n });\n const settings = schema ? { structuredOutputs: true } : undefined;\n return aiGenerateObject({\n model: nearai.languageModel(model, settings),\n schema,\n schemaName,\n schemaDescription,\n mode,\n ...modelOptions,\n });\n}\n\n// Add type definition for Together AI response\ninterface TogetherAIImageResponse {\n data: Array<{\n url: string;\n content_type?: string;\n image_type?: string;\n }>;\n}\n\n// doesn't belong here\nexport async function generateTweetActions({\n runtime,\n context,\n modelClass,\n}: {\n runtime: IAgentRuntime;\n context: string;\n modelClass: ModelClass;\n}): Promise<ActionResponse | null> {\n let retryDelay = 1000;\n while (true) {\n try {\n const response = await generateText({\n runtime,\n context,\n modelClass,\n });\n elizaLogger.debug(\n \"Received response from generateText for tweet actions:\",\n response\n );\n const { actions } = parseActionResponseFromText(response.trim());\n if (actions) {\n elizaLogger.debug(\"Parsed tweet actions:\", actions);\n return actions;\n } else {\n elizaLogger.debug(\"generateTweetActions no valid response\");\n }\n } catch (error) {\n elizaLogger.error(\"Error in generateTweetActions:\", error);\n if (\n error instanceof TypeError &&\n error.message.includes(\"queueTextCompletion\")\n ) {\n elizaLogger.error(\n \"TypeError: Cannot read properties of null (reading 'queueTextCompletion')\"\n );\n }\n }\n elizaLogger.log(`Retrying in ${retryDelay}ms...`);\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n retryDelay *= 2;\n }\n}\n","import type {\n IAgentRuntime,\n Goal,\n Objective,\n UUID,\n} from \"./types.ts\";\n\nexport const getGoals = async ({\n runtime,\n roomId,\n userId,\n onlyInProgress = true,\n count = 5,\n}: {\n runtime: IAgentRuntime;\n roomId: UUID;\n userId?: UUID;\n onlyInProgress?: boolean;\n count?: number;\n}) => {\n return runtime.databaseAdapter.getGoals({\n agentId: runtime.agentId,\n roomId,\n userId,\n onlyInProgress,\n count,\n });\n};\n\nexport const formatGoalsAsString = ({ goals }: { goals: Goal[] }) => {\n const goalStrings = goals.map((goal: Goal) => {\n const header = `Goal: ${goal.name}\\nid: ${goal.id}`;\n const objectives =\n \"Objectives:\\n\" +\n goal.objectives\n .map((objective: Objective) => {\n return `- ${objective.completed ? \"[x]\" : \"[ ]\"} ${objective.description} ${objective.completed ? \" (DONE)\" : \" (IN PROGRESS)\"}`;\n })\n .join(\"\\n\");\n return `${header}\\n${objectives}`;\n });\n return goalStrings.join(\"\\n\");\n};\n\nexport const updateGoal = async ({\n runtime,\n goal,\n}: {\n runtime: IAgentRuntime;\n goal: Goal;\n}) => {\n return runtime.databaseAdapter.updateGoal(goal);\n};\n\nexport const createGoal = async ({\n runtime,\n goal,\n}: {\n runtime: IAgentRuntime;\n goal: Goal;\n}) => {\n return runtime.databaseAdapter.createGoal(goal);\n};\n","import { embed, getEmbeddingZeroVector } from \"./embedding.ts\";\nimport elizaLogger from \"./logger.ts\";\nimport type {\n IAgentRuntime,\n IMemoryManager,\n Memory,\n UUID,\n} from \"./types.ts\";\n\nconst defaultMatchThreshold = 0.1;\nconst defaultMatchCount = 10;\n\n/**\n * Manage memories in the database.\n */\nexport class MemoryManager implements IMemoryManager {\n /**\n * The AgentRuntime instance associated with this manager.\n */\n runtime: IAgentRuntime;\n\n /**\n * The name of the database table this manager operates on.\n */\n tableName: string;\n\n /**\n * Constructs a new MemoryManager instance.\n * @param opts Options for the manager.\n * @param opts.tableName The name of the table this manager will operate on.\n * @param opts.runtime The AgentRuntime instance associated with this manager.\n */\n constructor(opts: { tableName: string; runtime: IAgentRuntime }) {\n this.runtime = opts.runtime;\n this.tableName = opts.tableName;\n }\n\n /**\n * Adds an embedding vector to a memory object. If the memory already has an embedding, it is returned as is.\n * @param memory The memory object to add an embedding to.\n * @returns A Promise resolving to the memory object, potentially updated with an embedding vector.\n */\n /**\n * Adds an embedding vector to a memory object if one doesn't already exist.\n * The embedding is generated from the memory's text content using the runtime's\n * embedding model. If the memory has no text content, an error is thrown.\n *\n * @param memory The memory object to add an embedding to\n * @returns The memory object with an embedding vector added\n * @throws Error if the memory content is empty\n */\n async addEmbeddingToMemory(memory: Memory): Promise<Memory> {\n // Return early if embedding already exists\n if (memory.embedding) {\n return memory;\n }\n\n const memoryText = memory.content.text;\n\n // Validate memory has text content\n if (!memoryText) {\n throw new Error(\n \"Cannot generate embedding: Memory content is empty\"\n );\n }\n\n try {\n // Generate embedding from text content\n memory.embedding = await embed(this.runtime, memoryText);\n } catch (error) {\n elizaLogger.error(\"Failed to generate embedding:\", error);\n // Fallback to zero vector if embedding fails\n memory.embedding = getEmbeddingZeroVector().slice();\n }\n\n return memory;\n }\n\n /**\n * Retrieves a list of memories by user IDs, with optional deduplication.\n * @param opts Options including user IDs, count, and uniqueness.\n * @param opts.roomId The room ID to retrieve memories for.\n * @param opts.count The number of memories to retrieve.\n * @param opts.unique Whether to retrieve unique memories only.\n * @returns A Promise resolving to an array of Memory objects.\n */\n async getMemories({\n roomId,\n count = 10,\n unique = true,\n start,\n end,\n }: {\n roomId: UUID;\n count?: number;\n unique?: boolean;\n start?: number;\n end?: number;\n }): Promise<Memory[]> {\n return await this.runtime.databaseAdapter.getMemories({\n roomId,\n count,\n unique,\n tableName: this.tableName,\n agentId: this.runtime.agentId,\n start,\n end,\n });\n }\n\n async getCachedEmbeddings(content: string): Promise<\n {\n embedding: number[];\n levenshtein_score: number;\n }[]\n > {\n return await this.runtime.databaseAdapter.getCachedEmbeddings({\n query_table_name: this.tableName,\n query_threshold: 2,\n query_input: content,\n query_field_name: \"content\",\n query_field_sub_name: \"text\",\n query_match_count: 10,\n });\n }\n\n /**\n * Searches for memories similar to a given embedding vector.\n * @param embedding The embedding vector to search with.\n * @param opts Options including match threshold, count, user IDs, and uniqueness.\n * @param opts.match_threshold The similarity threshold for matching memories.\n * @param opts.count The maximum number of memories to retrieve.\n * @param opts.roomId The room ID to retrieve memories for.\n * @param opts.unique Whether to retrieve unique memories only.\n * @returns A Promise resolving to an array of Memory objects that match the embedding.\n */\n async searchMemoriesByEmbedding(\n embedding: number[],\n opts: {\n match_threshold?: number;\n count?: number;\n roomId: UUID;\n unique?: boolean;\n }\n ): Promise<Memory[]> {\n const {\n match_threshold = defaultMatchThreshold,\n count = defaultMatchCount,\n roomId,\n unique,\n } = opts;\n\n const result = await this.runtime.databaseAdapter.searchMemories({\n tableName: this.tableName,\n roomId,\n agentId: this.runtime.agentId,\n embedding: embedding,\n match_threshold: match_threshold,\n match_count: count,\n unique: !!unique,\n });\n\n return result;\n }\n\n /**\n * Creates a new memory in the database, with an option to check for similarity before insertion.\n * @param memory The memory object to create.\n * @param unique Whether to check for similarity before insertion.\n * @returns A Promise that resolves when the operation completes.\n */\n async createMemory(memory: Memory, unique = false): Promise<void> {\n // TODO: check memory.agentId == this.runtime.agentId\n\n const existingMessage =\n await this.runtime.databaseAdapter.getMemoryById(memory.id);\n\n if (existingMessage) {\n elizaLogger.debug(\"Memory already exists, skipping\");\n return;\n }\n\n elizaLogger.log(\"Creating Memory\", memory.id, memory.content.text);\n\n await this.runtime.databaseAdapter.createMemory(\n memory,\n this.tableName,\n unique\n );\n }\n\n async getMemoriesByRoomIds(params: { roomIds: UUID[], limit?: number; }): Promise<Memory[]> {\n return await this.runtime.databaseAdapter.getMemoriesByRoomIds({\n tableName: this.tableName,\n agentId: this.runtime.agentId,\n roomIds: params.roomIds,\n limit: params.limit\n });\n }\n\n async getMemoryById(id: UUID): Promise<Memory | null> {\n const result = await this.runtime.databaseAdapter.getMemoryById(id);\n if (result && result.agentId !== this.runtime.agentId) return null;\n return result;\n }\n\n /**\n * Removes a memory from the database by its ID.\n * @param memoryId The ID of the memory to remove.\n * @returns A Promise that resolves when the operation completes.\n */\n async removeMemory(memoryId: UUID): Promise<void> {\n await this.runtime.databaseAdapter.removeMemory(\n memoryId,\n this.tableName\n );\n }\n\n /**\n * Removes all memories associated with a set of user IDs.\n * @param roomId The room ID to remove memories for.\n * @returns A Promise that resolves when the operation completes.\n */\n async removeAllMemories(roomId: UUID): Promise<void> {\n await this.runtime.databaseAdapter.removeAllMemories(\n roomId,\n this.tableName\n );\n }\n\n /**\n * Counts the number of memories associated with a set of user IDs, with an option for uniqueness.\n * @param roomId The room ID to count memories for.\n * @param unique Whether to count unique memories only.\n * @returns A Promise resolving to the count of memories.\n */\n async countMemories(roomId: UUID, unique = true): Promise<number> {\n return await this.runtime.databaseAdapter.countMemories(\n roomId,\n unique,\n this.tableName\n );\n }\n}\n","import type {\n IAgentRuntime,\n Actor,\n Content,\n Memory,\n UUID,\n} from \"./types.ts\";\n\n/**\n * Get details for a list of actors.\n */\nexport async function getActorDetails({\n runtime,\n roomId,\n}: {\n runtime: IAgentRuntime;\n roomId: UUID;\n}) {\n const participantIds =\n await runtime.databaseAdapter.getParticipantsForRoom(roomId);\n const actors = await Promise.all(\n participantIds.map(async (userId) => {\n const account =\n await runtime.databaseAdapter.getAccountById(userId);\n if (account) {\n return {\n id: account.id,\n name: account.name,\n username: account.username,\n details: account.details,\n };\n }\n return null;\n })\n );\n\n return actors.filter((actor): actor is Actor => actor !== null);\n}\n\n/**\n * Format actors into a string\n * @param actors - list of actors\n * @returns string\n */\nexport function formatActors({ actors }: { actors: Actor[] }) {\n const actorStrings = actors.map((actor: Actor) => {\n const header = `${actor.name}${actor.details?.tagline ? \": \" + actor.details?.tagline : \"\"}${actor.details?.summary ? \"\\n\" + actor.details?.summary : \"\"}`;\n return header;\n });\n const finalActorStrings = actorStrings.join(\"\\n\");\n return finalActorStrings;\n}\n\n/**\n * Format messages into a string\n * @param messages - list of messages\n * @param actors - list of actors\n * @returns string\n */\nexport const formatMessages = ({\n messages,\n actors,\n}: {\n messages: Memory[];\n actors: Actor[];\n}) => {\n const messageStrings = messages\n .reverse()\n .filter((message: Memory) => message.userId)\n .map((message: Memory) => {\n const messageContent = (message.content as Content).text;\n const messageAction = (message.content as Content).action;\n const formattedName =\n actors.find((actor: Actor) => actor.id === message.userId)\n ?.name || \"Unknown User\";\n\n const attachments = (message.content as Content).attachments;\n\n const attachmentString =\n attachments && attachments.length > 0\n ? ` (Attachments: ${attachments.map((media) => `[${media.id} - ${media.title} (${media.url})]`).join(\", \")})`\n : \"\";\n\n const timestamp = formatTimestamp(message.createdAt);\n\n const shortId = message.userId.slice(-5);\n\n return `(${timestamp}) [${shortId}] ${formattedName}: ${messageContent}${attachmentString}${messageAction && messageAction !== \"null\" ? ` (${messageAction})` : \"\"}`;\n })\n .join(\"\\n\");\n return messageStrings;\n};\n\nexport const formatTimestamp = (messageDate: number) => {\n const now = new Date();\n const diff = now.getTime() - messageDate;\n\n const absDiff = Math.abs(diff);\n const seconds = Math.floor(absDiff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (absDiff < 60000) {\n return \"just now\";\n } else if (minutes < 60) {\n return `${minutes} minute${minutes !== 1 ? \"s\" : \"\"} ago`;\n } else if (hours < 24) {\n return `${hours} hour${hours !== 1 ? \"s\" : \"\"} ago`;\n } else {\n return `${days} day${days !== 1 ? \"s\" : \"\"} ago`;\n }\n};\n","import { formatTimestamp } from \"./messages.ts\";\nimport type { Actor, Memory } from \"./types.ts\";\n\nexport const formatPosts = ({\n messages,\n actors,\n conversationHeader = true,\n}: {\n messages: Memory[];\n actors: Actor[];\n conversationHeader?: boolean;\n}) => {\n // Group messages by roomId\n const groupedMessages: { [roomId: string]: Memory[] } = {};\n messages.forEach((message) => {\n if (message.roomId) {\n if (!groupedMessages[message.roomId]) {\n groupedMessages[message.roomId] = [];\n }\n groupedMessages[message.roomId].push(message);\n }\n });\n\n // Sort messages within each roomId by createdAt (oldest to newest)\n Object.values(groupedMessages).forEach((roomMessages) => {\n roomMessages.sort((a, b) => a.createdAt - b.createdAt);\n });\n\n // Sort rooms by the newest message's createdAt\n const sortedRooms = Object.entries(groupedMessages).sort(\n ([, messagesA], [, messagesB]) =>\n messagesB[messagesB.length - 1].createdAt -\n messagesA[messagesA.length - 1].createdAt\n );\n\n const formattedPosts = sortedRooms.map(([roomId, roomMessages]) => {\n const messageStrings = roomMessages\n .filter((message: Memory) => message.userId)\n .map((message: Memory) => {\n const actor = actors.find(\n (actor: Actor) => actor.id === message.userId\n );\n const userName = actor?.name || \"Unknown User\";\n const displayName = actor?.username || \"unknown\";\n\n return `Name: ${userName} (@${displayName})\nID: ${message.id}${message.content.inReplyTo ? `\\nIn reply to: ${message.content.inReplyTo}` : \"\"}\nDate: ${formatTimestamp(message.createdAt)}\nText:\n${message.content.text}`;\n });\n\n const header = conversationHeader\n ? `Conversation: ${roomId.slice(-5)}\\n`\n : \"\";\n return `${header}${messageStrings.join(\"\\n\\n\")}`;\n });\n\n return formattedPosts.join(\"\\n\\n\");\n};\n","import type { IAgentRuntime, State, Memory } from \"./types.ts\";\n\n/**\n * Formats provider outputs into a string which can be injected into the context.\n * @param runtime The AgentRuntime object.\n * @param message The incoming message object.\n * @param state The current state object.\n * @returns A string that concatenates the outputs of each provider.\n */\nexport async function getProviders(\n runtime: IAgentRuntime,\n message: Memory,\n state?: State\n) {\n const providerResults = (\n await Promise.all(\n runtime.providers.map(async (provider) => {\n return await provider.get(runtime, message, state);\n })\n )\n ).filter((result) => result != null && result !== \"\");\n\n return providerResults.join(\"\\n\");\n}\n","import type { IAgentRuntime, Relationship, UUID } from \"./types.ts\";\n\nexport async function createRelationship({\n runtime,\n userA,\n userB,\n}: {\n runtime: IAgentRuntime;\n userA: UUID;\n userB: UUID;\n}): Promise<boolean> {\n return runtime.databaseAdapter.createRelationship({\n userA,\n userB,\n });\n}\n\nexport async function getRelationship({\n runtime,\n userA,\n userB,\n}: {\n runtime: IAgentRuntime;\n userA: UUID;\n userB: UUID;\n}) {\n return runtime.databaseAdapter.getRelationship({\n userA,\n userB,\n });\n}\n\nexport async function getRelationships({\n runtime,\n userId,\n}: {\n runtime: IAgentRuntime;\n userId: UUID;\n}) {\n return runtime.databaseAdapter.getRelationships({ userId });\n}\n\nexport async function formatRelationships({\n runtime,\n userId,\n}: {\n runtime: IAgentRuntime;\n userId: UUID;\n}) {\n const relationships = await getRelationships({ runtime, userId });\n\n const formattedRelationships = relationships.map(\n (relationship: Relationship) => {\n const { userA, userB } = relationship;\n\n if (userA === userId) {\n return userB;\n }\n\n return userA;\n }\n );\n\n return formattedRelationships;\n}\n","import { readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { names, uniqueNamesGenerator } from \"unique-names-generator\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n composeActionExamples,\n formatActionNames,\n formatActions,\n} from \"./actions.ts\";\nimport { addHeader, composeContext } from \"./context.ts\";\nimport {\n evaluationTemplate,\n formatEvaluatorExamples,\n formatEvaluatorNames,\n formatEvaluators,\n} from \"./evaluators.ts\";\nimport { generateText } from \"./generation.ts\";\nimport { formatGoalsAsString, getGoals } from \"./goals.ts\";\nimport { elizaLogger } from \"./index.ts\";\nimport knowledge from \"./knowledge.ts\";\nimport { MemoryManager } from \"./memory.ts\";\nimport { formatActors, formatMessages, getActorDetails } from \"./messages.ts\";\nimport { parseJsonArrayFromText } from \"./parsing.ts\";\nimport { formatPosts } from \"./posts.ts\";\nimport { getProviders } from \"./providers.ts\";\nimport { RAGKnowledgeManager } from \"./ragknowledge.ts\";\nimport settings from \"./settings.ts\";\nimport {\n type Character,\n type Goal,\n type HandlerCallback,\n type IAgentRuntime,\n type ICacheManager,\n type IDatabaseAdapter,\n type IMemoryManager,\n type IRAGKnowledgeManager,\n // type IVerifiableInferenceAdapter,\n type KnowledgeItem,\n // RAGKnowledgeItem,\n //Media,\n ModelClass,\n ModelProviderName,\n type Plugin,\n type Provider,\n type Adapter,\n type Service,\n type ServiceType,\n type State,\n type UUID,\n type Action,\n type Actor,\n type Evaluator,\n type Memory,\n type DirectoryItem,\n type ClientInstance,\n} from \"./types.ts\";\nimport { stringToUuid } from \"./uuid.ts\";\nimport { glob } from \"glob\";\nimport { existsSync } from \"fs\";\n/**\n * Represents the runtime environment for an agent, handling message processing,\n * action registration, and interaction with external services like OpenAI and Supabase.\n */\n\nfunction isDirectoryItem(item: any): item is DirectoryItem {\n return (\n typeof item === \"object\" &&\n item !== null &&\n \"directory\" in item &&\n typeof item.directory === \"string\"\n );\n}\n\nexport class AgentRuntime implements IAgentRuntime {\n /**\n * Default count for recent messages to be kept in memory.\n * @private\n */\n readonly #conversationLength = 32 as number;\n /**\n * The ID of the agent\n */\n agentId: UUID;\n /**\n * The base URL of the server where the agent's requests are processed.\n */\n serverUrl = \"http://localhost:7998\";\n\n /**\n * The database adapter used for interacting with the database.\n */\n databaseAdapter: IDatabaseAdapter;\n\n /**\n * Authentication token used for securing requests.\n */\n token: string | null;\n\n /**\n * Custom actions that the agent can perform.\n */\n actions: Action[] = [];\n\n /**\n * Evaluators used to assess and guide the agent's responses.\n */\n evaluators: Evaluator[] = [];\n\n /**\n * Context providers used to provide context for message generation.\n */\n providers: Provider[] = [];\n\n /**\n * Database adapters used to interact with the database.\n */\n adapters: Adapter[] = [];\n\n plugins: Plugin[] = [];\n\n /**\n * The model to use for generateText.\n */\n modelProvider: ModelProviderName;\n\n /**\n * The model to use for generateImage.\n */\n imageModelProvider: ModelProviderName;\n\n /**\n * The model to use for describing images.\n */\n imageVisionModelProvider: ModelProviderName;\n\n /**\n * Fetch function to use\n * Some environments may not have access to the global fetch function and need a custom fetch override.\n */\n fetch = fetch;\n\n /**\n * The character to use for the agent\n */\n character: Character;\n\n /**\n * Store messages that are sent and received by the agent.\n */\n messageManager: IMemoryManager;\n\n /**\n * Store and recall descriptions of users based on conversations.\n */\n descriptionManager: IMemoryManager;\n\n /**\n * Manage the creation and recall of static information (documents, historical game lore, etc)\n */\n loreManager: IMemoryManager;\n\n /**\n * Hold large documents that can be referenced\n */\n documentsManager: IMemoryManager;\n\n /**\n * Searchable document fragments\n */\n knowledgeManager: IMemoryManager;\n\n ragKnowledgeManager: IRAGKnowledgeManager;\n\n private readonly knowledgeRoot: string;\n\n services: Map<ServiceType, Service> = new Map();\n memoryManagers: Map<string, IMemoryManager> = new Map();\n cacheManager: ICacheManager;\n clients: ClientInstance[] = [];\n\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter;\n\n registerMemoryManager(manager: IMemoryManager): void {\n if (!manager.tableName) {\n throw new Error(\"Memory manager must have a tableName\");\n }\n\n if (this.memoryManagers.has(manager.tableName)) {\n elizaLogger.warn(\n `Memory manager ${manager.tableName} is already registered. Skipping registration.`,\n );\n return;\n }\n\n this.memoryManagers.set(manager.tableName, manager);\n }\n\n getMemoryManager(tableName: string): IMemoryManager | null {\n return this.memoryManagers.get(tableName) || null;\n }\n\n getService<T extends Service>(service: ServiceType): T | null {\n const serviceInstance = this.services.get(service);\n if (!serviceInstance) {\n elizaLogger.error(`Service ${service} not found`);\n return null;\n }\n return serviceInstance as T;\n }\n\n async registerService(service: Service): Promise<void> {\n const serviceType = service.serviceType;\n elizaLogger.log(`${this.character.name}(${this.agentId}) - Registering service:`, serviceType);\n\n if (this.services.has(serviceType)) {\n elizaLogger.warn(\n `${this.character.name}(${this.agentId}) - Service ${serviceType} is already registered. Skipping registration.`\n );\n return;\n }\n\n // Add the service to the services map\n this.services.set(serviceType, service);\n elizaLogger.success(`${this.character.name}(${this.agentId}) - Service ${serviceType} registered successfully`);\n }\n\n /**\n * Creates an instance of AgentRuntime.\n * @param opts - The options for configuring the AgentRuntime.\n * @param opts.conversationLength - The number of messages to hold in the recent message cache.\n * @param opts.token - The JWT token, can be a JWT token if outside worker, or an OpenAI token if inside worker.\n * @param opts.serverUrl - The URL of the worker.\n * @param opts.actions - Optional custom actions.\n * @param opts.evaluators - Optional custom evaluators.\n * @param opts.services - Optional custom services.\n * @param opts.memoryManagers - Optional custom memory managers.\n * @param opts.providers - Optional context providers.\n * @param opts.model - The model to use for generateText.\n * @param opts.embeddingModel - The model to use for embedding.\n * @param opts.agentId - Optional ID of the agent.\n * @param opts.databaseAdapter - The database adapter used for interacting with the database.\n * @param opts.fetch - Custom fetch function to use for making requests.\n */\n\n constructor(opts: {\n conversationLength?: number; // number of messages to hold in the recent message cache\n agentId?: UUID; // ID of the agent\n character?: Character; // The character to use for the agent\n token: string; // JWT token, can be a JWT token if outside worker, or an OpenAI token if inside worker\n serverUrl?: string; // The URL of the worker\n actions?: Action[]; // Optional custom actions\n evaluators?: Evaluator[]; // Optional custom evaluators\n plugins?: Plugin[];\n providers?: Provider[];\n modelProvider: ModelProviderName;\n\n services?: Service[]; // Map of service name to service instance\n managers?: IMemoryManager[]; // Map of table name to memory manager\n databaseAdapter?: IDatabaseAdapter; // The database adapter used for interacting with the database\n fetch?: typeof fetch | unknown;\n speechModelPath?: string;\n cacheManager?: ICacheManager;\n logging?: boolean;\n // verifiableInferenceAdapter?: IVerifiableInferenceAdapter;\n }) {\n // use the character id if it exists, otherwise use the agentId if it is passed in, otherwise use the character name\n this.agentId =\n opts.character?.id ??\n opts?.agentId ??\n stringToUuid(opts.character?.name ?? uuidv4());\n this.character = opts.character;\n\n if(!this.character) {\n throw new Error(\"Character input is required\");\n }\n\n elizaLogger.info(`${this.character.name}(${this.agentId}) - Initializing AgentRuntime with options:`, {\n character: opts.character?.name,\n modelProvider: opts.modelProvider,\n characterModelProvider: opts.character?.modelProvider,\n });\n\n elizaLogger.debug(\n `[AgentRuntime] Process working directory: ${process.cwd()}`,\n );\n\n // Define the root path once\n this.knowledgeRoot = join(\n process.cwd(),\n \"..\",\n \"characters\",\n \"knowledge\",\n );\n\n elizaLogger.debug(\n `[AgentRuntime] Process knowledgeRoot: ${this.knowledgeRoot}`,\n );\n\n this.#conversationLength =\n opts.conversationLength ?? this.#conversationLength;\n\n this.databaseAdapter = opts.databaseAdapter;\n\n elizaLogger.success(`Agent ID: ${this.agentId}`);\n\n this.fetch = (opts.fetch as typeof fetch) ?? this.fetch;\n\n this.cacheManager = opts.cacheManager;\n\n this.messageManager = new MemoryManager({\n runtime: this,\n tableName: \"messages\",\n });\n\n this.descriptionManager = new MemoryManager({\n runtime: this,\n tableName: \"descriptions\",\n });\n\n this.loreManager = new MemoryManager({\n runtime: this,\n tableName: \"lore\",\n });\n\n this.documentsManager = new MemoryManager({\n runtime: this,\n tableName: \"documents\",\n });\n\n this.knowledgeManager = new MemoryManager({\n runtime: this,\n tableName: \"fragments\",\n });\n\n this.ragKnowledgeManager = new RAGKnowledgeManager({\n runtime: this,\n tableName: \"knowledge\",\n knowledgeRoot: this.knowledgeRoot,\n });\n\n (opts.managers ?? []).forEach((manager: IMemoryManager) => {\n this.registerMemoryManager(manager);\n });\n\n (opts.services ?? []).forEach((service: Service) => {\n this.registerService(service);\n });\n\n this.serverUrl = opts.serverUrl ?? this.serverUrl;\n\n elizaLogger.info(`${this.character.name}(${this.agentId}) - Setting Model Provider:`, {\n characterModelProvider: this.character.modelProvider,\n optsModelProvider: opts.modelProvider,\n currentModelProvider: this.modelProvider,\n finalSelection:\n this.character.modelProvider ??\n opts.modelProvider ??\n this.modelProvider,\n });\n\n this.modelProvider =\n this.character.modelProvider ??\n opts.modelProvider ??\n this.modelProvider;\n\n this.imageModelProvider =\n this.character.imageModelProvider ?? this.modelProvider;\n \n this.imageVisionModelProvider =\n this.character.imageVisionModelProvider ?? this.modelProvider;\n \n elizaLogger.info(\n `${this.character.name}(${this.agentId}) - Selected model provider:`,\n this.modelProvider\n );\n\n elizaLogger.info(\n `${this.character.name}(${this.agentId}) - Selected image model provider:`,\n this.imageModelProvider\n );\n\n elizaLogger.info(\n `${this.character.name}(${this.agentId}) - Selected image vision model provider:`,\n this.imageVisionModelProvider\n );\n\n // Validate model provider\n if (!Object.values(ModelProviderName).includes(this.modelProvider)) {\n elizaLogger.error(\"Invalid model provider:\", this.modelProvider);\n elizaLogger.error(\n \"Available providers:\",\n Object.values(ModelProviderName),\n );\n throw new Error(`Invalid model provider: ${this.modelProvider}`);\n }\n\n if (!this.serverUrl) {\n elizaLogger.warn(\"No serverUrl provided, defaulting to localhost\");\n }\n\n this.token = opts.token;\n\n this.plugins = [\n ...(opts.character?.plugins ?? []),\n ...(opts.plugins ?? []),\n ];\n\n this.plugins.forEach((plugin) => {\n plugin.actions?.forEach((action) => {\n this.registerAction(action);\n });\n\n plugin.evaluators?.forEach((evaluator) => {\n this.registerEvaluator(evaluator);\n });\n\n plugin.services?.forEach((service) => {\n this.registerService(service);\n });\n\n plugin.providers?.forEach((provider) => {\n this.registerContextProvider(provider);\n });\n\n plugin.adapters?.forEach((adapter) => {\n this.registerAdapter(adapter);\n });\n });\n\n (opts.actions ?? []).forEach((action) => {\n this.registerAction(action);\n });\n\n (opts.providers ?? []).forEach((provider) => {\n this.registerContextProvider(provider);\n });\n\n (opts.evaluators ?? []).forEach((evaluator: Evaluator) => {\n this.registerEvaluator(evaluator);\n });\n\n // this.verifiableInferenceAdapter = opts.verifiableInferenceAdapter;\n }\n\n private async initializeDatabase() {\n // By convention, we create a user and room using the agent id.\n // Memories related to it are considered global context for the agent.\n this.ensureRoomExists(this.agentId);\n this.ensureUserExists(\n this.agentId,\n this.character.username || this.character.name,\n this.character.name,\n ).then(() => {\n // postgres needs the user to exist before you can add a participant\n this.ensureParticipantExists(this.agentId, this.agentId);\n });\n }\n\n async initialize() {\n this.initializeDatabase();\n\n for (const [serviceType, service] of this.services.entries()) {\n try {\n await service.initialize(this);\n this.services.set(serviceType, service);\n elizaLogger.success(\n `${this.character.name}(${this.agentId}) - Service ${serviceType} initialized successfully`\n );\n } catch (error) {\n elizaLogger.error(\n `${this.character.name}(${this.agentId}) - Failed to initialize service ${serviceType}:`,\n error\n );\n throw error;\n }\n }\n\n // should already be initiailized\n /*\n for (const plugin of this.plugins) {\n if (plugin.services)\n await Promise.all(\n plugin.services?.map((service) => service.initialize(this)),\n );\n }\n */\n\n if (\n this.character &&\n this.character.knowledge &&\n this.character.knowledge.length > 0\n ) {\n elizaLogger.info(\n `[RAG Check] RAG Knowledge enabled: ${this.character.settings.ragKnowledge ? true : false}`,\n );\n elizaLogger.info(\n `[RAG Check] Knowledge items:`,\n this.character.knowledge,\n );\n\n if (this.character.settings.ragKnowledge) {\n // Type guards with logging for each knowledge type\n const [directoryKnowledge, pathKnowledge, stringKnowledge] =\n this.character.knowledge.reduce(\n (acc, item) => {\n if (typeof item === \"object\") {\n if (isDirectoryItem(item)) {\n elizaLogger.debug(\n `[RAG Filter] Found directory item: ${JSON.stringify(item)}`,\n );\n acc[0].push(item);\n } else if (\"path\" in item) {\n elizaLogger.debug(\n `[RAG Filter] Found path item: ${JSON.stringify(item)}`,\n );\n acc[1].push(item);\n }\n } else if (typeof item === \"string\") {\n elizaLogger.debug(\n `[RAG Filter] Found string item: ${item.slice(0, 100)}...`,\n );\n acc[2].push(item);\n }\n return acc;\n },\n [[], [], []] as [\n Array<{ directory: string; shared?: boolean }>,\n Array<{ path: string; shared?: boolean }>,\n Array<string>,\n ],\n );\n\n elizaLogger.info(\n `[RAG Summary] Found ${directoryKnowledge.length} directories, ${pathKnowledge.length} paths, and ${stringKnowledge.length} strings`,\n );\n\n // Process each type of knowledge\n if (directoryKnowledge.length > 0) {\n elizaLogger.info(\n `[RAG Process] Processing directory knowledge sources:`,\n );\n for (const dir of directoryKnowledge) {\n elizaLogger.info(\n ` - Directory: ${dir.directory} (shared: ${!!dir.shared})`,\n );\n await this.processCharacterRAGDirectory(dir);\n }\n }\n\n if (pathKnowledge.length > 0) {\n elizaLogger.info(\n `[RAG Process] Processing individual file knowledge sources`,\n );\n await this.processCharacterRAGKnowledge(pathKnowledge);\n }\n\n if (stringKnowledge.length > 0) {\n elizaLogger.info(\n `[RAG Process] Processing direct string knowledge`,\n );\n await this.processCharacterRAGKnowledge(stringKnowledge);\n }\n } else {\n // Non-RAG mode: only process string knowledge\n const stringKnowledge = this.character.knowledge.filter(\n (item): item is string => typeof item === \"string\",\n );\n await this.processCharacterKnowledge(stringKnowledge);\n }\n\n // After all new knowledge is processed, clean up any deleted files\n elizaLogger.info(\n `[RAG Cleanup] Starting cleanup of deleted knowledge files`,\n );\n await this.ragKnowledgeManager.cleanupDeletedKnowledgeFiles();\n elizaLogger.info(`[RAG Cleanup] Cleanup complete`);\n }\n }\n\n async stop() {\n elizaLogger.debug(\"runtime::stop - character\", this.character.name);\n // stop services, they don't have a stop function\n // just initialize\n\n // plugins\n // have actions, providers, evaluators (no start/stop)\n // services (just initialized), clients\n\n // client have a start\n for (const c of this.clients) {\n elizaLogger.log(\n \"runtime::stop - requesting\",\n c,\n \"client stop for\",\n this.character.name,\n );\n c.stop(this);\n }\n // we don't need to unregister with directClient\n // don't need to worry about knowledge\n }\n\n /**\n * Processes character knowledge by creating document memories and fragment memories.\n * This function takes an array of knowledge items, creates a document memory for each item if it doesn't exist,\n * then chunks the content into fragments, embeds each fragment, and creates fragment memories.\n * @param knowledge An array of knowledge items containing id, path, and content.\n */\n private async processCharacterKnowledge(items: string[]) {\n for (const item of items) {\n const knowledgeId = stringToUuid(item);\n const existingDocument =\n await this.documentsManager.getMemoryById(knowledgeId);\n if (existingDocument) {\n continue;\n }\n\n elizaLogger.info(\n \"Processing knowledge for \",\n this.character.name,\n \" - \",\n item.slice(0, 100),\n );\n\n await knowledge.set(this, {\n id: knowledgeId,\n content: {\n text: item,\n },\n });\n }\n }\n\n /**\n * Processes character knowledge by creating document memories and fragment memories.\n * This function takes an array of knowledge items, creates a document knowledge for each item if it doesn't exist,\n * then chunks the content into fragments, embeds each fragment, and creates fragment knowledge.\n * An array of knowledge items or objects containing id, path, and content.\n */\n private async processCharacterRAGKnowledge(\n items: (string | { path: string; shared?: boolean })[],\n ) {\n let hasError = false;\n\n for (const item of items) {\n if (!item) continue;\n\n try {\n // Check if item is marked as shared\n let isShared = false;\n let contentItem = item;\n\n // Only treat as shared if explicitly marked\n if (typeof item === \"object\" && \"path\" in item) {\n isShared = item.shared === true;\n contentItem = item.path;\n } else {\n contentItem = item;\n }\n\n // const knowledgeId = stringToUuid(contentItem);\n const knowledgeId = this.ragKnowledgeManager.generateScopedId(\n contentItem,\n isShared,\n );\n const fileExtension = contentItem\n .split(\".\")\n .pop()\n ?.toLowerCase();\n\n // Check if it's a file or direct knowledge\n if (\n fileExtension &&\n [\"md\", \"txt\", \"pdf\"].includes(fileExtension)\n ) {\n try {\n const filePath = join(this.knowledgeRoot, contentItem);\n // Get existing knowledge first with more detailed logging\n elizaLogger.debug(\"[RAG Query]\", {\n knowledgeId,\n agentId: this.agentId,\n relativePath: contentItem,\n fullPath: filePath,\n isShared,\n knowledgeRoot: this.knowledgeRoot,\n });\n\n // Get existing knowledge first\n const existingKnowledge =\n await this.ragKnowledgeManager.getKnowledge({\n id: knowledgeId,\n agentId: this.agentId, // Keep agentId as it's used in OR query\n });\n\n elizaLogger.debug(\"[RAG Query Result]\", {\n relativePath: contentItem,\n fullPath: filePath,\n knowledgeId,\n isShared,\n exists: existingKnowledge.length > 0,\n knowledgeCount: existingKnowledge.length,\n firstResult: existingKnowledge[0]\n ? {\n id: existingKnowledge[0].id,\n agentId: existingKnowledge[0].agentId,\n contentLength:\n existingKnowledge[0].content.text\n .length,\n }\n : null,\n results: existingKnowledge.map((k) => ({\n id: k.id,\n agentId: k.agentId,\n isBaseKnowledge: !k.id.includes(\"chunk\"),\n })),\n });\n\n // Read file content\n const content: string = await readFile(\n filePath,\n \"utf8\",\n );\n if (!content) {\n hasError = true;\n continue;\n }\n\n if (existingKnowledge.length > 0) {\n const existingContent =\n existingKnowledge[0].content.text;\n\n elizaLogger.debug(\"[RAG Compare]\", {\n path: contentItem,\n knowledgeId,\n isShared,\n existingContentLength: existingContent.length,\n newContentLength: content.length,\n contentSample: content.slice(0, 100),\n existingContentSample: existingContent.slice(\n 0,\n 100,\n ),\n matches: existingContent === content,\n });\n\n if (existingContent === content) {\n elizaLogger.info(\n `${isShared ? \"Shared knowledge\" : \"Knowledge\"} ${contentItem} unchanged, skipping`,\n );\n continue;\n }\n\n // Content changed, remove old knowledge before adding new\n elizaLogger.info(\n `${isShared ? \"Shared knowledge\" : \"Knowledge\"} ${contentItem} changed, updating...`,\n );\n await this.ragKnowledgeManager.removeKnowledge(\n knowledgeId,\n );\n await this.ragKnowledgeManager.removeKnowledge(\n `${knowledgeId}-chunk-*` as UUID,\n );\n }\n\n elizaLogger.info(\n `Processing ${fileExtension.toUpperCase()} file content for`,\n this.character.name,\n \"-\",\n contentItem,\n );\n\n await this.ragKnowledgeManager.processFile({\n path: contentItem,\n content: content,\n type: fileExtension as \"pdf\" | \"md\" | \"txt\",\n isShared: isShared,\n });\n } catch (error: any) {\n hasError = true;\n elizaLogger.error(\n `Failed to read knowledge file ${contentItem}. Error details:`,\n error?.message || error || \"Unknown error\",\n );\n continue;\n }\n } else {\n // Handle direct knowledge string\n elizaLogger.info(\n \"Processing direct knowledge for\",\n this.character.name,\n \"-\",\n contentItem.slice(0, 100),\n );\n\n const existingKnowledge =\n await this.ragKnowledgeManager.getKnowledge({\n id: knowledgeId,\n agentId: this.agentId,\n });\n\n if (existingKnowledge.length > 0) {\n elizaLogger.info(\n `Direct knowledge ${knowledgeId} already exists, skipping`,\n );\n continue;\n }\n\n await this.ragKnowledgeManager.createKnowledge({\n id: knowledgeId,\n agentId: this.agentId,\n content: {\n text: contentItem,\n metadata: {\n type: \"direct\",\n },\n },\n });\n }\n } catch (error: any) {\n hasError = true;\n elizaLogger.error(\n `Error processing knowledge item ${item}:`,\n error?.message || error || \"Unknown error\",\n );\n continue;\n }\n }\n\n if (hasError) {\n elizaLogger.warn(\n \"Some knowledge items failed to process, but continuing with available knowledge\",\n );\n }\n }\n\n /**\n * Processes directory-based RAG knowledge by recursively loading and processing files.\n * @param dirConfig The directory configuration containing path and shared flag\n */\n private async processCharacterRAGDirectory(dirConfig: {\n directory: string;\n shared?: boolean;\n }) {\n if (!dirConfig.directory) {\n elizaLogger.error(\"[RAG Directory] No directory specified\");\n return;\n }\n\n // Sanitize directory path to prevent traversal attacks\n const sanitizedDir = dirConfig.directory.replace(/\\.\\./g, \"\");\n const dirPath = join(this.knowledgeRoot, sanitizedDir);\n\n try {\n // Check if directory exists\n const dirExists = existsSync(dirPath);\n if (!dirExists) {\n elizaLogger.error(\n `[RAG Directory] Directory does not exist: ${sanitizedDir}`,\n );\n return;\n }\n\n elizaLogger.debug(`[RAG Directory] Searching in: ${dirPath}`);\n // Use glob to find all matching files in directory\n const files = await glob(\"**/*.{md,txt,pdf}\", {\n cwd: dirPath,\n nodir: true,\n absolute: false,\n });\n\n if (files.length === 0) {\n elizaLogger.warn(\n `No matching files found in directory: ${dirConfig.directory}`,\n );\n return;\n }\n\n elizaLogger.info(\n `[RAG Directory] Found ${files.length} files in ${dirConfig.directory}`,\n );\n\n // Process files in batches to avoid memory issues\n const BATCH_SIZE = 5;\n for (let i = 0; i < files.length; i += BATCH_SIZE) {\n const batch = files.slice(i, i + BATCH_SIZE);\n\n await Promise.all(\n batch.map(async (file) => {\n try {\n const relativePath = join(sanitizedDir, file);\n\n elizaLogger.debug(\n `[RAG Directory] Processing file ${i + 1}/${files.length}:`,\n {\n file,\n relativePath,\n shared: dirConfig.shared,\n },\n );\n\n await this.processCharacterRAGKnowledge([\n {\n path: relativePath,\n shared: dirConfig.shared,\n },\n ]);\n } catch (error) {\n elizaLogger.error(\n `[RAG Directory] Failed to process file: ${file}`,\n error instanceof Error\n ? {\n name: error.name,\n message: error.message,\n stack: error.stack,\n }\n : error,\n );\n }\n }),\n );\n\n elizaLogger.debug(\n `[RAG Directory] Completed batch ${Math.min(i + BATCH_SIZE, files.length)}/${files.length} files`,\n );\n }\n\n elizaLogger.success(\n `[RAG Directory] Successfully processed directory: ${sanitizedDir}`,\n );\n } catch (error) {\n elizaLogger.error(\n `[RAG Directory] Failed to process directory: ${sanitizedDir}`,\n error instanceof Error\n ? {\n name: error.name,\n message: error.message,\n stack: error.stack,\n }\n : error,\n );\n throw error; // Re-throw to let caller handle it\n }\n }\n\n getSetting(key: string) {\n // check if the key is in the character.settings.secrets object\n if (this.character.settings?.secrets?.[key]) {\n return this.character.settings.secrets[key];\n }\n // if not, check if it's in the settings object\n if (this.character.settings?.[key]) {\n return this.character.settings[key];\n }\n\n // if not, check if it's in the settings object\n if (settings[key]) {\n return settings[key];\n }\n\n return null;\n }\n\n /**\n * Get the number of messages that are kept in the conversation buffer.\n * @returns The number of recent messages to be kept in memory.\n */\n getConversationLength() {\n return this.#conversationLength;\n }\n\n /**\n * Register an action for the agent to perform.\n * @param action The action to register.\n */\n registerAction(action: Action) {\n elizaLogger.success(`${this.character.name}(${this.agentId}) - Registering action: ${action.name}`);\n this.actions.push(action);\n }\n\n /**\n * Register an evaluator to assess and guide the agent's responses.\n * @param evaluator The evaluator to register.\n */\n registerEvaluator(evaluator: Evaluator) {\n this.evaluators.push(evaluator);\n }\n\n /**\n * Register a context provider to provide context for message generation.\n * @param provider The context provider to register.\n */\n registerContextProvider(provider: Provider) {\n this.providers.push(provider);\n }\n\n /**\n * Register an adapter for the agent to use.\n * @param adapter The adapter to register.\n */\n registerAdapter(adapter: Adapter) {\n this.adapters.push(adapter);\n }\n\n /**\n * Process the actions of a message.\n * @param message The message to process.\n * @param content The content of the message to process actions from.\n */\n async processActions(\n message: Memory,\n responses: Memory[],\n state?: State,\n callback?: HandlerCallback,\n ): Promise<void> {\n for (const response of responses) {\n if (!response.content?.action) {\n elizaLogger.warn(\"No action found in the response content.\");\n continue;\n }\n\n const normalizedAction = response.content.action\n .toLowerCase()\n .replace(\"_\", \"\");\n\n elizaLogger.success(`Normalized action: ${normalizedAction}`);\n\n let action = this.actions.find(\n (a: { name: string }) =>\n a.name\n .toLowerCase()\n .replace(\"_\", \"\")\n .includes(normalizedAction) ||\n normalizedAction.includes(\n a.name.toLowerCase().replace(\"_\", \"\"),\n ),\n );\n\n if (!action) {\n elizaLogger.info(\"Attempting to find action in similes.\");\n for (const _action of this.actions) {\n const simileAction = _action.similes.find(\n (simile) =>\n simile\n .toLowerCase()\n .replace(\"_\", \"\")\n .includes(normalizedAction) ||\n normalizedAction.includes(\n simile.toLowerCase().replace(\"_\", \"\"),\n ),\n );\n if (simileAction) {\n action = _action;\n elizaLogger.success(\n `Action found in similes: ${action.name}`,\n );\n break;\n }\n }\n }\n\n if (!action) {\n elizaLogger.error(\n \"No action found for\",\n response.content.action,\n );\n continue;\n }\n\n if (!action.handler) {\n elizaLogger.error(`Action ${action.name} has no handler.`);\n continue;\n }\n\n try {\n elizaLogger.info(\n `Executing handler for action: ${action.name}`,\n );\n await action.handler(this, message, state, {}, callback);\n } catch (error) {\n elizaLogger.error(error);\n }\n }\n }\n\n /**\n * Evaluate the message and state using the registered evaluators.\n * @param message The message to evaluate.\n * @param state The state of the agent.\n * @param didRespond Whether the agent responded to the message.~\n * @param callback The handler callback\n * @returns The results of the evaluation.\n */\n async evaluate(\n message: Memory,\n state: State,\n didRespond?: boolean,\n callback?: HandlerCallback,\n ) {\n const evaluatorPromises = this.evaluators.map(\n async (evaluator: Evaluator) => {\n elizaLogger.log(\"Evaluating\", evaluator.name);\n if (!evaluator.handler) {\n return null;\n }\n if (!didRespond && !evaluator.alwaysRun) {\n return null;\n }\n const result = await evaluator.validate(this, message, state);\n if (result) {\n return evaluator;\n }\n return null;\n },\n );\n\n const resolvedEvaluators = await Promise.all(evaluatorPromises);\n const evaluatorsData = resolvedEvaluators.filter(\n (evaluator): evaluator is Evaluator => evaluator !== null,\n );\n\n // if there are no evaluators this frame, return\n if (!evaluatorsData || evaluatorsData.length === 0) {\n return [];\n }\n\n const context = composeContext({\n state: {\n ...state,\n evaluators: formatEvaluators(evaluatorsData),\n evaluatorNames: formatEvaluatorNames(evaluatorsData),\n },\n template:\n this.character.templates?.evaluationTemplate ||\n evaluationTemplate,\n });\n\n const result = await generateText({\n runtime: this,\n context,\n modelClass: ModelClass.SMALL,\n // verifiableInferenceAdapter: this.verifiableInferenceAdapter,\n });\n\n const evaluators = parseJsonArrayFromText(\n result,\n ) as unknown as string[];\n\n for (const evaluator of this.evaluators) {\n if (!evaluators?.includes(evaluator.name)) continue;\n\n if (evaluator.handler)\n await evaluator.handler(this, message, state, {}, callback);\n }\n\n return evaluators;\n }\n\n /**\n * Ensure the existence of a participant in the room. If the participant does not exist, they are added to the room.\n * @param userId - The user ID to ensure the existence of.\n * @throws An error if the participant cannot be added.\n */\n async ensureParticipantExists(userId: UUID, roomId: UUID) {\n const participants =\n await this.databaseAdapter.getParticipantsForAccount(userId);\n\n if (participants?.length === 0) {\n await this.databaseAdapter.addParticipant(userId, roomId);\n }\n }\n\n /**\n * Ensure the existence of a user in the database. If the user does not exist, they are added to the database.\n * @param userId - The user ID to ensure the existence of.\n * @param userName - The user name to ensure the existence of.\n * @returns\n */\n\n async ensureUserExists(\n userId: UUID,\n userName: string | null,\n name: string | null,\n email?: string | null,\n source?: string | null,\n ) {\n const account = await this.databaseAdapter.getAccountById(userId);\n if (!account) {\n await this.databaseAdapter.createAccount({\n id: userId,\n name: name || this.character.name || \"Unknown User\",\n username: userName || this.character.username || \"Unknown\",\n // TODO: We might not need these account pieces\n email: email || this.character.email || userId,\n // When invoke ensureUserExists and saving account.details\n // Performing a complete JSON.stringify on character will cause a TypeError: Converting circular structure to JSON error in some more complex plugins.\n details: this.character ? Object.assign({}, this.character, {\n source,\n plugins: this.character?.plugins?.map((plugin) => plugin.name),\n }) : { summary: \"\" },\n });\n elizaLogger.success(`User ${userName} created successfully.`);\n }\n }\n\n async ensureParticipantInRoom(userId: UUID, roomId: UUID) {\n const participants =\n await this.databaseAdapter.getParticipantsForRoom(roomId);\n if (!participants.includes(userId)) {\n await this.databaseAdapter.addParticipant(userId, roomId);\n if (userId === this.agentId) {\n elizaLogger.log(\n `Agent ${this.character.name} linked to room ${roomId} successfully.`,\n );\n } else {\n elizaLogger.log(\n `User ${userId} linked to room ${roomId} successfully.`,\n );\n }\n }\n }\n\n async ensureConnection(\n userId: UUID,\n roomId: UUID,\n userName?: string,\n userScreenName?: string,\n source?: string,\n ) {\n await Promise.all([\n this.ensureUserExists(\n this.agentId,\n this.character.username ?? \"Agent\",\n this.character.name ?? \"Agent\",\n source,\n ),\n this.ensureUserExists(\n userId,\n userName ?? \"User\" + userId,\n userScreenName ?? \"User\" + userId,\n source,\n ),\n this.ensureRoomExists(roomId),\n ]);\n\n await Promise.all([\n this.ensureParticipantInRoom(userId, roomId),\n this.ensureParticipantInRoom(this.agentId, roomId),\n ]);\n }\n\n /**\n * Ensure the existence of a room between the agent and a user. If no room exists, a new room is created and the user\n * and agent are added as participants. The room ID is returned.\n * @param userId - The user ID to create a room with.\n * @returns The room ID of the room between the agent and the user.\n * @throws An error if the room cannot be created.\n */\n async ensureRoomExists(roomId: UUID) {\n const room = await this.databaseAdapter.getRoom(roomId);\n if (!room) {\n await this.databaseAdapter.createRoom(roomId);\n elizaLogger.log(`Room ${roomId} created successfully.`);\n }\n }\n\n /**\n * Compose the state of the agent into an object that can be passed or used for response generation.\n * @param message The message to compose the state from.\n * @returns The state of the agent.\n */\n async composeState(\n message: Memory,\n additionalKeys: { [key: string]: unknown } = {},\n ) {\n const { userId, roomId } = message;\n\n const conversationLength = this.getConversationLength();\n\n const [actorsData, recentMessagesData, goalsData]: [\n Actor[],\n Memory[],\n Goal[],\n ] = await Promise.all([\n getActorDetails({ runtime: this, roomId }),\n this.messageManager.getMemories({\n roomId,\n count: conversationLength,\n unique: false,\n }),\n getGoals({\n runtime: this,\n count: 10,\n onlyInProgress: false,\n roomId,\n }),\n ]);\n\n const goals = formatGoalsAsString({ goals: goalsData });\n\n const actors = formatActors({ actors: actorsData ?? [] });\n\n const recentMessages = formatMessages({\n messages: recentMessagesData,\n actors: actorsData,\n });\n\n const recentPosts = formatPosts({\n messages: recentMessagesData,\n actors: actorsData,\n conversationHeader: false,\n });\n\n // const lore = formatLore(loreData);\n\n const senderName = actorsData?.find(\n (actor: Actor) => actor.id === userId,\n )?.name;\n\n // TODO: We may wish to consolidate and just accept character.name here instead of the actor name\n const agentName =\n actorsData?.find((actor: Actor) => actor.id === this.agentId)\n ?.name || this.character.name;\n\n let allAttachments = message.content.attachments || [];\n\n if (recentMessagesData && Array.isArray(recentMessagesData)) {\n const lastMessageWithAttachment = recentMessagesData.find(\n (msg) =>\n msg.content.attachments &&\n msg.content.attachments.length > 0,\n );\n\n if (lastMessageWithAttachment) {\n const lastMessageTime =\n lastMessageWithAttachment?.createdAt ?? Date.now();\n const oneHourBeforeLastMessage =\n lastMessageTime - 60 * 60 * 1000; // 1 hour before last message\n\n allAttachments = recentMessagesData.reverse().flatMap((msg) => {\n const msgTime = msg.createdAt ?? Date.now();\n const isWithinTime = msgTime >= oneHourBeforeLastMessage;\n const attachments = msg.content.attachments || [];\n if (!isWithinTime) {\n attachments.forEach((attachment) => {\n attachment.text = \"[Hidden]\";\n });\n }\n return attachments;\n });\n }\n }\n\n const formattedAttachments = allAttachments\n .map(\n (attachment) =>\n `ID: ${attachment.id}\nName: ${attachment.title}\nURL: ${attachment.url}\nType: ${attachment.source}\nDescription: ${attachment.description}\nText: ${attachment.text}\n `,\n )\n .join(\"\\n\");\n\n // randomly get 3 bits of lore and join them into a paragraph, divided by \\n\n let lore = \"\";\n // Assuming this.lore is an array of lore bits\n if (this.character.lore && this.character.lore.length > 0) {\n const shuffledLore = [...this.character.lore].sort(\n () => Math.random() - 0.5,\n );\n const selectedLore = shuffledLore.slice(0, 10);\n lore = selectedLore.join(\"\\n\");\n }\n\n const formattedCharacterPostExamples = this.character.postExamples\n .sort(() => 0.5 - Math.random())\n .map((post) => {\n const messageString = `${post}`;\n return messageString;\n })\n .slice(0, 50)\n .join(\"\\n\");\n\n const formattedCharacterMessageExamples = this.character.messageExamples\n .sort(() => 0.5 - Math.random())\n .slice(0, 5)\n .map((example) => {\n const exampleNames = Array.from({ length: 5 }, () =>\n uniqueNamesGenerator({ dictionaries: [names] }),\n );\n\n return example\n .map((message) => {\n let messageString = `${message.user}: ${message.content.text}`;\n exampleNames.forEach((name, index) => {\n const placeholder = `{{user${index + 1}}}`;\n messageString = messageString.replaceAll(\n placeholder,\n name,\n );\n });\n return messageString;\n })\n .join(\"\\n\");\n })\n .join(\"\\n\\n\");\n\n const getRecentInteractions = async (\n userA: UUID,\n userB: UUID,\n ): Promise<Memory[]> => {\n // Find all rooms where userA and userB are participants\n const rooms = await this.databaseAdapter.getRoomsForParticipants([\n userA,\n userB,\n ]);\n\n // Check the existing memories in the database\n return this.messageManager.getMemoriesByRoomIds({\n // filter out the current room id from rooms\n roomIds: rooms.filter((room) => room !== roomId),\n limit: 20,\n });\n };\n\n const recentInteractions =\n userId !== this.agentId\n ? await getRecentInteractions(userId, this.agentId)\n : [];\n\n const getRecentMessageInteractions = async (\n recentInteractionsData: Memory[],\n ): Promise<string> => {\n // Format the recent messages\n const formattedInteractions = await Promise.all(\n recentInteractionsData.map(async (message) => {\n const isSelf = message.userId === this.agentId;\n let sender: string;\n if (isSelf) {\n sender = this.character.name;\n } else {\n const accountId =\n await this.databaseAdapter.getAccountById(\n message.userId,\n );\n sender = accountId?.username || \"unknown\";\n }\n return `${sender}: ${message.content.text}`;\n }),\n );\n\n return formattedInteractions.join(\"\\n\");\n };\n\n const formattedMessageInteractions =\n await getRecentMessageInteractions(recentInteractions);\n\n const getRecentPostInteractions = async (\n recentInteractionsData: Memory[],\n actors: Actor[],\n ): Promise<string> => {\n const formattedInteractions = formatPosts({\n messages: recentInteractionsData,\n actors,\n conversationHeader: true,\n });\n\n return formattedInteractions;\n };\n\n const formattedPostInteractions = await getRecentPostInteractions(\n recentInteractions,\n actorsData,\n );\n\n // if bio is a string, use it. if its an array, pick one at random\n let bio = this.character.bio || \"\";\n if (Array.isArray(bio)) {\n // get three random bio strings and join them with \" \"\n bio = bio\n .sort(() => 0.5 - Math.random())\n .slice(0, 3)\n .join(\" \");\n }\n\n let knowledgeData = [];\n let formattedKnowledge = \"\";\n\n if (this.character.settings?.ragKnowledge) {\n const recentContext = recentMessagesData\n .sort((a, b) => b.createdAt - a.createdAt) // Sort by timestamp descending (newest first)\n .slice(0, 3) // Get the 3 most recent messages\n .reverse() // Reverse to get chronological order\n .map((msg) => msg.content.text)\n .join(\" \");\n\n knowledgeData = await this.ragKnowledgeManager.getKnowledge({\n query: message.content.text,\n conversationContext: recentContext,\n limit: 8,\n });\n\n formattedKnowledge = formatKnowledge(knowledgeData);\n } else {\n knowledgeData = await knowledge.get(this, message);\n\n formattedKnowledge = formatKnowledge(knowledgeData);\n }\n\n const initialState = {\n agentId: this.agentId,\n agentName,\n bio,\n lore,\n adjective:\n this.character.adjectives &&\n this.character.adjectives.length > 0\n ? this.character.adjectives[\n Math.floor(\n Math.random() * this.character.adjectives.length,\n )\n ]\n : \"\",\n knowledge: formattedKnowledge,\n knowledgeData: knowledgeData,\n ragKnowledgeData: knowledgeData,\n // Recent interactions between the sender and receiver, formatted as messages\n recentMessageInteractions: formattedMessageInteractions,\n // Recent interactions between the sender and receiver, formatted as posts\n recentPostInteractions: formattedPostInteractions,\n // Raw memory[] array of interactions\n recentInteractionsData: recentInteractions,\n // randomly pick one topic\n topic:\n this.character.topics && this.character.topics.length > 0\n ? this.character.topics[\n Math.floor(\n Math.random() * this.character.topics.length,\n )\n ]\n : null,\n topics:\n this.character.topics && this.character.topics.length > 0\n ? `${this.character.name} is interested in ` +\n this.character.topics\n .sort(() => 0.5 - Math.random())\n .slice(0, 5)\n .map((topic, index, array) => {\n if (index === array.length - 2) {\n return topic + \" and \";\n }\n // if last topic, don't add a comma\n if (index === array.length - 1) {\n return topic;\n }\n return topic + \", \";\n })\n .join(\"\")\n : \"\",\n characterPostExamples:\n formattedCharacterPostExamples &&\n formattedCharacterPostExamples.replaceAll(\"\\n\", \"\").length > 0\n ? addHeader(\n `# Example Posts for ${this.character.name}`,\n formattedCharacterPostExamples,\n )\n : \"\",\n characterMessageExamples:\n formattedCharacterMessageExamples &&\n formattedCharacterMessageExamples.replaceAll(\"\\n\", \"\").length >\n 0\n ? addHeader(\n `# Example Conversations for ${this.character.name}`,\n formattedCharacterMessageExamples,\n )\n : \"\",\n messageDirections:\n this.character?.style?.all?.length > 0 ||\n this.character?.style?.chat.length > 0\n ? addHeader(\n \"# Message Directions for \" + this.character.name,\n (() => {\n const all = this.character?.style?.all || [];\n const chat = this.character?.style?.chat || [];\n return [...all, ...chat].join(\"\\n\");\n })(),\n )\n : \"\",\n\n postDirections:\n this.character?.style?.all?.length > 0 ||\n this.character?.style?.post.length > 0\n ? addHeader(\n \"# Post Directions for \" + this.character.name,\n (() => {\n const all = this.character?.style?.all || [];\n const post = this.character?.style?.post || [];\n return [...all, ...post].join(\"\\n\");\n })(),\n )\n : \"\",\n\n //old logic left in for reference\n //food for thought. how could we dynamically decide what parts of the character to add to the prompt other than random? rag? prompt the llm to decide?\n /*\n postDirections:\n this.character?.style?.all?.length > 0 ||\n this.character?.style?.post.length > 0\n ? addHeader(\n \"# Post Directions for \" + this.character.name,\n (() => {\n const all = this.character?.style?.all || [];\n const post = this.character?.style?.post || [];\n const shuffled = [...all, ...post].sort(\n () => 0.5 - Math.random()\n );\n return shuffled\n .slice(0, conversationLength / 2)\n .join(\"\\n\");\n })()\n )\n : \"\",*/\n // Agent runtime stuff\n senderName,\n actors:\n actors && actors.length > 0\n ? addHeader(\"# Actors\", actors)\n : \"\",\n actorsData,\n roomId,\n goals:\n goals && goals.length > 0\n ? addHeader(\n \"# Goals\\n{{agentName}} should prioritize accomplishing the objectives that are in progress.\",\n goals,\n )\n : \"\",\n goalsData,\n recentMessages:\n recentMessages && recentMessages.length > 0\n ? addHeader(\"# Conversation Messages\", recentMessages)\n : \"\",\n recentPosts:\n recentPosts && recentPosts.length > 0\n ? addHeader(\"# Posts in Thread\", recentPosts)\n : \"\",\n recentMessagesData,\n attachments:\n formattedAttachments && formattedAttachments.length > 0\n ? addHeader(\"# Attachments\", formattedAttachments)\n : \"\",\n ...additionalKeys,\n } as State;\n\n const actionPromises = this.actions.map(async (action: Action) => {\n const result = await action.validate(this, message, initialState);\n if (result) {\n return action;\n }\n return null;\n });\n\n const evaluatorPromises = this.evaluators.map(async (evaluator) => {\n const result = await evaluator.validate(\n this,\n message,\n initialState,\n );\n if (result) {\n return evaluator;\n }\n return null;\n });\n\n const [resolvedEvaluators, resolvedActions, providers] =\n await Promise.all([\n Promise.all(evaluatorPromises),\n Promise.all(actionPromises),\n getProviders(this, message, initialState),\n ]);\n\n const evaluatorsData = resolvedEvaluators.filter(\n Boolean,\n ) as Evaluator[];\n const actionsData = resolvedActions.filter(Boolean) as Action[];\n\n const actionState = {\n actionNames:\n \"Possible response actions: \" + formatActionNames(actionsData),\n actions:\n actionsData.length > 0\n ? addHeader(\n \"# Available Actions\",\n formatActions(actionsData),\n )\n : \"\",\n actionExamples:\n actionsData.length > 0\n ? addHeader(\n \"# Action Examples\",\n composeActionExamples(actionsData, 10),\n )\n : \"\",\n evaluatorsData,\n evaluators:\n evaluatorsData.length > 0\n ? formatEvaluators(evaluatorsData)\n : \"\",\n evaluatorNames:\n evaluatorsData.length > 0\n ? formatEvaluatorNames(evaluatorsData)\n : \"\",\n evaluatorExamples:\n evaluatorsData.length > 0\n ? formatEvaluatorExamples(evaluatorsData)\n : \"\",\n providers: addHeader(\n `# Additional Information About ${this.character.name} and The World`,\n providers,\n ),\n };\n\n return { ...initialState, ...actionState } as State;\n }\n\n async updateRecentMessageState(state: State): Promise<State> {\n const conversationLength = this.getConversationLength();\n const recentMessagesData = await this.messageManager.getMemories({\n roomId: state.roomId,\n count: conversationLength,\n unique: false,\n });\n\n const recentMessages = formatMessages({\n actors: state.actorsData ?? [],\n messages: recentMessagesData.map((memory: Memory) => {\n const newMemory = { ...memory };\n delete newMemory.embedding;\n return newMemory;\n }),\n });\n\n let allAttachments = [];\n\n if (recentMessagesData && Array.isArray(recentMessagesData)) {\n const lastMessageWithAttachment = recentMessagesData.find(\n (msg) =>\n msg.content.attachments &&\n msg.content.attachments.length > 0,\n );\n\n if (lastMessageWithAttachment) {\n const lastMessageTime =\n lastMessageWithAttachment?.createdAt ?? Date.now();\n const oneHourBeforeLastMessage =\n lastMessageTime - 60 * 60 * 1000; // 1 hour before last message\n\n allAttachments = recentMessagesData\n .filter((msg) => {\n const msgTime = msg.createdAt ?? Date.now();\n return msgTime >= oneHourBeforeLastMessage;\n })\n .flatMap((msg) => msg.content.attachments || []);\n }\n }\n\n const formattedAttachments = allAttachments\n .map(\n (attachment) =>\n `ID: ${attachment.id}\nName: ${attachment.title}\nURL: ${attachment.url}\nType: ${attachment.source}\nDescription: ${attachment.description}\nText: ${attachment.text}\n `,\n )\n .join(\"\\n\");\n\n return {\n ...state,\n recentMessages: addHeader(\n \"# Conversation Messages\",\n recentMessages,\n ),\n recentMessagesData,\n attachments: formattedAttachments,\n } as State;\n }\n}\n\nconst formatKnowledge = (knowledge: KnowledgeItem[]) => {\n // Group related content in a more natural way\n return knowledge.map(item => {\n // Get the main content text\n const text = item.content.text;\n \n // Clean up formatting but maintain natural text flow\n const cleanedText = text\n .trim()\n .replace(/\\n{3,}/g, '\\n\\n'); // Replace excessive newlines\n \n return cleanedText;\n }).join('\\n\\n'); // Separate distinct pieces with double newlines\n};\n","import { sha1 } from \"js-sha1\";\nimport type { UUID } from \"./types.ts\";\nimport { z } from \"zod\";\n\nexport const uuidSchema = z.string().uuid() as z.ZodType<UUID>;\n\nexport function validateUuid(value: unknown): UUID | null {\n const result = uuidSchema.safeParse(value);\n return result.success ? result.data : null;\n}\n\nexport function stringToUuid(target: string | number): UUID {\n if (typeof target === \"number\") {\n target = (target as number).toString();\n }\n\n if (typeof target !== \"string\") {\n throw TypeError(\"Value must be string\");\n }\n\n const _uint8ToHex = (ubyte: number): string => {\n const first = ubyte >> 4;\n const second = ubyte - (first << 4);\n const HEX_DIGITS = \"0123456789abcdef\".split(\"\");\n return HEX_DIGITS[first] + HEX_DIGITS[second];\n };\n\n const _uint8ArrayToHex = (buf: Uint8Array): string => {\n let out = \"\";\n for (let i = 0; i < buf.length; i++) {\n out += _uint8ToHex(buf[i]);\n }\n return out;\n };\n\n const escapedStr = encodeURIComponent(target);\n const buffer = new Uint8Array(escapedStr.length);\n for (let i = 0; i < escapedStr.length; i++) {\n buffer[i] = escapedStr[i].charCodeAt(0);\n }\n\n const hash = sha1(buffer);\n const hashBuffer = new Uint8Array(hash.length / 2);\n for (let i = 0; i < hash.length; i += 2) {\n hashBuffer[i / 2] = Number.parseInt(hash.slice(i, i + 2), 16);\n }\n\n return (_uint8ArrayToHex(hashBuffer.slice(0, 4)) +\n \"-\" +\n _uint8ArrayToHex(hashBuffer.slice(4, 6)) +\n \"-\" +\n _uint8ToHex(hashBuffer[6] & 0x0f) +\n _uint8ToHex(hashBuffer[7]) +\n \"-\" +\n _uint8ToHex((hashBuffer[8] & 0x3f) | 0x80) +\n _uint8ToHex(hashBuffer[9]) +\n \"-\" +\n _uint8ArrayToHex(hashBuffer.slice(10, 16))) as UUID;\n}\n","import type { AgentRuntime } from \"./runtime.ts\";\nimport { embed, getEmbeddingZeroVector } from \"./embedding.ts\";\nimport type { KnowledgeItem, UUID, Memory } from \"./types.ts\";\nimport { stringToUuid } from \"./uuid.ts\";\nimport { splitChunks } from \"./generation.ts\";\nimport elizaLogger from \"./logger.ts\";\n\nasync function get(\n runtime: AgentRuntime,\n message: Memory\n): Promise<KnowledgeItem[]> {\n // Add validation for message\n if (!message?.content?.text) {\n elizaLogger.warn(\"Invalid message for knowledge query:\", {\n message,\n content: message?.content,\n text: message?.content?.text,\n });\n return [];\n }\n\n const processed = preprocess(message.content.text);\n elizaLogger.debug(\"Knowledge query:\", {\n original: message.content.text,\n processed,\n length: processed?.length,\n });\n\n // Validate processed text\n if (!processed || processed.trim().length === 0) {\n elizaLogger.warn(\"Empty processed text for knowledge query\");\n return [];\n }\n\n const embedding = await embed(runtime, processed);\n const fragments = await runtime.knowledgeManager.searchMemoriesByEmbedding(\n embedding,\n {\n roomId: message.agentId,\n count: 5,\n match_threshold: 0.1,\n }\n );\n\n const uniqueSources = [\n ...new Set(\n fragments.map((memory) => {\n elizaLogger.log(\n `Matched fragment: ${memory.content.text} with similarity: ${memory.similarity}`\n );\n return memory.content.source;\n })\n ),\n ];\n\n const knowledgeDocuments = await Promise.all(\n uniqueSources.map((source) =>\n runtime.documentsManager.getMemoryById(source as UUID)\n )\n );\n\n return knowledgeDocuments\n .filter((memory) => memory !== null)\n .map((memory) => ({ id: memory.id, content: memory.content }));\n}\n\nasync function set(\n runtime: AgentRuntime,\n item: KnowledgeItem,\n chunkSize = 512,\n bleed = 20\n) {\n await runtime.documentsManager.createMemory({\n id: item.id,\n agentId: runtime.agentId,\n roomId: runtime.agentId,\n userId: runtime.agentId,\n createdAt: Date.now(),\n content: item.content,\n embedding: getEmbeddingZeroVector(),\n });\n\n const preprocessed = preprocess(item.content.text);\n \n // If text is shorter than chunk size, don't split it\n if (preprocessed.length <= chunkSize) {\n const embedding = await embed(runtime, preprocessed);\n await runtime.knowledgeManager.createMemory({\n id: stringToUuid(item.id + preprocessed),\n roomId: runtime.agentId,\n agentId: runtime.agentId,\n userId: runtime.agentId,\n createdAt: Date.now(),\n content: {\n source: item.id,\n text: preprocessed,\n },\n embedding,\n });\n return;\n }\n\n const fragments = await splitChunks(preprocessed, chunkSize, bleed);\n\n for (const fragment of fragments) {\n const embedding = await embed(runtime, fragment);\n await runtime.knowledgeManager.createMemory({\n // We namespace the knowledge base uuid to avoid id\n // collision with the document above.\n id: stringToUuid(item.id + fragment),\n roomId: runtime.agentId,\n agentId: runtime.agentId,\n userId: runtime.agentId,\n createdAt: Date.now(),\n content: {\n source: item.id,\n text: fragment,\n },\n embedding,\n });\n }\n}\n\nexport function preprocess(content: string): string {\n elizaLogger.debug(\"Preprocessing text:\", {\n input: content,\n length: content?.length,\n });\n\n if (!content || typeof content !== \"string\") {\n elizaLogger.warn(\"Invalid input for preprocessing\");\n return \"\";\n }\n\n return (\n content\n // Remove code blocks and their content\n .replace(/```[\\s\\S]*?```/g, \"\")\n // Remove inline code\n .replace(/`.*?`/g, \"\")\n // Convert headers to plain text with emphasis\n .replace(/#{1,6}\\s*(.*)/g, \"$1\")\n // Remove image links but keep alt text\n .replace(/!\\[(.*?)\\]\\(.*?\\)/g, \"$1\")\n // Remove links but keep text\n .replace(/\\[(.*?)\\]\\(.*?\\)/g, \"$1\")\n // Simplify URLs: remove protocol and simplify to domain+path\n .replace(/(https?:\\/\\/)?(www\\.)?([^\\s]+\\.[^\\s]+)/g, \"$3\")\n // Remove Discord mentions specifically\n .replace(/<@[!&]?\\d+>/g, \"\")\n // Remove HTML tags\n .replace(/<[^>]*>/g, \"\")\n // Remove horizontal rules\n .replace(/^\\s*[-*_]{3,}\\s*$/gm, \"\")\n // Remove comments\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\/\\/.*/g, \"\")\n // Normalize whitespace\n .replace(/\\s+/g, \" \")\n // Remove multiple newlines\n .replace(/\\n{3,}/g, \"\\n\\n\")\n // Remove special characters except those common in URLs\n .replace(/[^a-zA-Z0-9\\s\\-_./:?=&]/g, \"\")\n .trim()\n .toLowerCase()\n );\n}\n\nexport default {\n get,\n set,\n preprocess,\n};\n","import { embed } from \"./embedding.ts\";\nimport { splitChunks } from \"./generation.ts\";\nimport elizaLogger from \"./logger.ts\";\nimport {\n type IAgentRuntime,\n type IRAGKnowledgeManager,\n type RAGKnowledgeItem,\n type UUID,\n KnowledgeScope,\n} from \"./types.ts\";\nimport { stringToUuid } from \"./uuid.ts\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\n\n/**\n * Manage knowledge in the database.\n */\nexport class RAGKnowledgeManager implements IRAGKnowledgeManager {\n /**\n * The AgentRuntime instance associated with this manager.\n */\n runtime: IAgentRuntime;\n\n /**\n * The name of the database table this manager operates on.\n */\n tableName: string;\n\n /**\n * The root directory where RAG knowledge files are located (internal)\n */\n knowledgeRoot: string;\n\n /**\n * Constructs a new KnowledgeManager instance.\n * @param opts Options for the manager.\n * @param opts.tableName The name of the table this manager will operate on.\n * @param opts.runtime The AgentRuntime instance associated with this manager.\n */\n constructor(opts: {\n tableName: string;\n runtime: IAgentRuntime;\n knowledgeRoot: string;\n }) {\n this.runtime = opts.runtime;\n this.tableName = opts.tableName;\n this.knowledgeRoot = opts.knowledgeRoot;\n }\n\n private readonly defaultRAGMatchThreshold = 0.85;\n private readonly defaultRAGMatchCount = 8;\n\n /**\n * Common English stop words to filter out from query analysis\n */\n private readonly stopWords = new Set([\n \"a\",\n \"an\",\n \"and\",\n \"are\",\n \"as\",\n \"at\",\n \"be\",\n \"by\",\n \"does\",\n \"for\",\n \"from\",\n \"had\",\n \"has\",\n \"have\",\n \"he\",\n \"her\",\n \"his\",\n \"how\",\n \"hey\",\n \"i\",\n \"in\",\n \"is\",\n \"it\",\n \"its\",\n \"of\",\n \"on\",\n \"or\",\n \"that\",\n \"the\",\n \"this\",\n \"to\",\n \"was\",\n \"what\",\n \"when\",\n \"where\",\n \"which\",\n \"who\",\n \"will\",\n \"with\",\n \"would\",\n \"there\",\n \"their\",\n \"they\",\n \"your\",\n \"you\",\n ]);\n\n /**\n * Filters out stop words and returns meaningful terms\n */\n private getQueryTerms(query: string): string[] {\n return query\n .toLowerCase()\n .split(\" \")\n .filter((term) => term.length > 2) // Filter very short words\n .filter((term) => !this.stopWords.has(term)); // Filter stop words\n }\n\n /**\n * Preprocesses text content for better RAG performance.\n * @param content The text content to preprocess.\n * @returns The preprocessed text.\n */\n\n private preprocess(content: string): string {\n if (!content || typeof content !== \"string\") {\n elizaLogger.warn(\"Invalid input for preprocessing\");\n return \"\";\n }\n\n return (\n content\n .replace(/```[\\s\\S]*?```/g, \"\")\n .replace(/`.*?`/g, \"\")\n .replace(/#{1,6}\\s*(.*)/g, \"$1\")\n .replace(/!\\[(.*?)\\]\\(.*?\\)/g, \"$1\")\n .replace(/\\[(.*?)\\]\\(.*?\\)/g, \"$1\")\n .replace(/(https?:\\/\\/)?(www\\.)?([^\\s]+\\.[^\\s]+)/g, \"$3\")\n .replace(/<@[!&]?\\d+>/g, \"\")\n .replace(/<[^>]*>/g, \"\")\n .replace(/^\\s*[-*_]{3,}\\s*$/gm, \"\")\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\/\\/.*/g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n // .replace(/[^a-zA-Z0-9\\s\\-_./:?=&]/g, \"\") --this strips out CJK characters\n .trim()\n .toLowerCase()\n );\n }\n\n private hasProximityMatch(text: string, terms: string[]): boolean {\n if (!text || !terms.length) {\n return false;\n }\n \n const words = text.toLowerCase().split(\" \").filter(w => w.length > 0);\n \n // Find all positions for each term (not just first occurrence)\n const allPositions = terms.flatMap(term => \n words.reduce((positions, word, idx) => {\n if (word.includes(term)) positions.push(idx);\n return positions;\n }, [] as number[])\n ).sort((a, b) => a - b);\n \n if (allPositions.length < 2) return false;\n \n // Check proximity\n for (let i = 0; i < allPositions.length - 1; i++) {\n if (Math.abs(allPositions[i] - allPositions[i + 1]) <= 5) {\n elizaLogger.debug(\"[Proximity Match]\", {\n terms,\n positions: allPositions,\n matchFound: `${allPositions[i]} - ${allPositions[i + 1]}`\n });\n return true;\n }\n }\n \n return false;\n }\n\n async getKnowledge(params: {\n query?: string;\n id?: UUID;\n conversationContext?: string;\n limit?: number;\n agentId?: UUID;\n }): Promise<RAGKnowledgeItem[]> {\n const agentId = params.agentId || this.runtime.agentId;\n\n // If id is provided, do direct lookup first\n if (params.id) {\n const directResults =\n await this.runtime.databaseAdapter.getKnowledge({\n id: params.id,\n agentId: agentId,\n });\n\n if (directResults.length > 0) {\n return directResults;\n }\n }\n\n // If no id or no direct results, perform semantic search\n if (params.query) {\n try {\n const processedQuery = this.preprocess(params.query);\n\n // Build search text with optional context\n let searchText = processedQuery;\n if (params.conversationContext) {\n const relevantContext = this.preprocess(\n params.conversationContext\n );\n searchText = `${relevantContext} ${processedQuery}`;\n }\n\n const embeddingArray = await embed(this.runtime, searchText);\n\n const embedding = new Float32Array(embeddingArray);\n\n // Get results with single query\n const results =\n await this.runtime.databaseAdapter.searchKnowledge({\n agentId: this.runtime.agentId,\n embedding: embedding,\n match_threshold: this.defaultRAGMatchThreshold,\n match_count:\n (params.limit || this.defaultRAGMatchCount) * 2,\n searchText: processedQuery,\n });\n\n // Enhanced reranking with sophisticated scoring\n const rerankedResults = results\n .map((result) => {\n let score = result.similarity;\n\n // Check for direct query term matches\n const queryTerms = this.getQueryTerms(processedQuery);\n\n const matchingTerms = queryTerms.filter((term) =>\n result.content.text.toLowerCase().includes(term)\n );\n\n if (matchingTerms.length > 0) {\n // Much stronger boost for matches\n score *=\n 1 +\n (matchingTerms.length / queryTerms.length) * 2; // Double the boost\n\n if (\n this.hasProximityMatch(\n result.content.text,\n matchingTerms\n )\n ) {\n score *= 1.5; // Stronger proximity boost\n }\n } else {\n // More aggressive penalty\n if (!params.conversationContext) {\n score *= 0.3; // Stronger penalty\n }\n }\n\n return {\n ...result,\n score,\n matchedTerms: matchingTerms, // Add for debugging\n };\n })\n .sort((a, b) => b.score - a.score);\n\n // Filter and return results\n return rerankedResults\n .filter(\n (result) =>\n result.score >= this.defaultRAGMatchThreshold\n )\n .slice(0, params.limit || this.defaultRAGMatchCount);\n } catch (error) {\n console.log(`[RAG Search Error] ${error}`);\n return [];\n }\n }\n\n // If neither id nor query provided, return empty array\n return [];\n }\n\n async createKnowledge(item: RAGKnowledgeItem): Promise<void> {\n if (!item.content.text) {\n elizaLogger.warn(\"Empty content in knowledge item\");\n return;\n }\n\n try {\n // Process main document\n const processedContent = this.preprocess(item.content.text);\n const mainEmbeddingArray = await embed(\n this.runtime,\n processedContent\n );\n\n const mainEmbedding = new Float32Array(mainEmbeddingArray);\n\n // Create main document\n await this.runtime.databaseAdapter.createKnowledge({\n id: item.id,\n agentId: this.runtime.agentId,\n content: {\n text: item.content.text,\n metadata: {\n ...item.content.metadata,\n isMain: true,\n },\n },\n embedding: mainEmbedding,\n createdAt: Date.now(),\n });\n\n // Generate and store chunks\n const chunks = await splitChunks(processedContent, 512, 20);\n\n for (const [index, chunk] of chunks.entries()) {\n const chunkEmbeddingArray = await embed(this.runtime, chunk);\n const chunkEmbedding = new Float32Array(chunkEmbeddingArray);\n const chunkId = `${item.id}-chunk-${index}` as UUID;\n\n await this.runtime.databaseAdapter.createKnowledge({\n id: chunkId,\n agentId: this.runtime.agentId,\n content: {\n text: chunk,\n metadata: {\n ...item.content.metadata,\n isChunk: true,\n originalId: item.id,\n chunkIndex: index,\n },\n },\n embedding: chunkEmbedding,\n createdAt: Date.now(),\n });\n }\n } catch (error) {\n elizaLogger.error(`Error processing knowledge ${item.id}:`, error);\n throw error;\n }\n }\n\n async searchKnowledge(params: {\n agentId: UUID;\n embedding: Float32Array | number[];\n match_threshold?: number;\n match_count?: number;\n searchText?: string;\n }): Promise<RAGKnowledgeItem[]> {\n const {\n match_threshold = this.defaultRAGMatchThreshold,\n match_count = this.defaultRAGMatchCount,\n embedding,\n searchText,\n } = params;\n\n const float32Embedding = Array.isArray(embedding)\n ? new Float32Array(embedding)\n : embedding;\n\n return await this.runtime.databaseAdapter.searchKnowledge({\n agentId: params.agentId || this.runtime.agentId,\n embedding: float32Embedding,\n match_threshold,\n match_count,\n searchText,\n });\n }\n\n async removeKnowledge(id: UUID): Promise<void> {\n await this.runtime.databaseAdapter.removeKnowledge(id);\n }\n\n async clearKnowledge(shared?: boolean): Promise<void> {\n await this.runtime.databaseAdapter.clearKnowledge(\n this.runtime.agentId,\n shared ? shared : false\n );\n }\n\n /**\n * Lists all knowledge entries for an agent without semantic search or reranking.\n * Used primarily for administrative tasks like cleanup.\n *\n * @param agentId The agent ID to fetch knowledge entries for\n * @returns Array of RAGKnowledgeItem entries\n */\n async listAllKnowledge(agentId: UUID): Promise<RAGKnowledgeItem[]> {\n elizaLogger.debug(\n `[Knowledge List] Fetching all entries for agent: ${agentId}`\n );\n\n try {\n // Only pass the required agentId parameter\n const results = await this.runtime.databaseAdapter.getKnowledge({\n agentId: agentId,\n });\n\n elizaLogger.debug(\n `[Knowledge List] Found ${results.length} entries`\n );\n return results;\n } catch (error) {\n elizaLogger.error(\n \"[Knowledge List] Error fetching knowledge entries:\",\n error\n );\n throw error;\n }\n }\n\n async cleanupDeletedKnowledgeFiles() {\n try {\n elizaLogger.debug(\n \"[Cleanup] Starting knowledge cleanup process, agent: \",\n this.runtime.agentId\n );\n\n elizaLogger.debug(\n `[Cleanup] Knowledge root path: ${this.knowledgeRoot}`\n );\n\n const existingKnowledge = await this.listAllKnowledge(\n this.runtime.agentId\n );\n // Only process parent documents, ignore chunks\n const parentDocuments = existingKnowledge.filter(\n (item) =>\n !item.id.includes(\"chunk\") && item.content.metadata?.source // Must have a source path\n );\n\n elizaLogger.debug(\n `[Cleanup] Found ${parentDocuments.length} parent documents to check`\n );\n\n for (const item of parentDocuments) {\n const relativePath = item.content.metadata?.source;\n const filePath = join(this.knowledgeRoot, relativePath);\n\n elizaLogger.debug(\n `[Cleanup] Checking joined file path: ${filePath}`\n );\n\n if (!existsSync(filePath)) {\n elizaLogger.warn(\n `[Cleanup] File not found, starting removal process: ${filePath}`\n );\n\n const idToRemove = item.id;\n elizaLogger.debug(\n `[Cleanup] Using ID for removal: ${idToRemove}`\n );\n\n try {\n // Just remove the parent document - this will cascade to chunks\n await this.removeKnowledge(idToRemove);\n\n // // Clean up the cache\n // const baseCacheKeyWithWildcard = `${this.generateKnowledgeCacheKeyBase(\n // idToRemove,\n // item.content.metadata?.isShared || false\n // )}*`;\n // await this.cacheManager.deleteByPattern({\n // keyPattern: baseCacheKeyWithWildcard,\n // });\n\n elizaLogger.success(\n `[Cleanup] Successfully removed knowledge for file: ${filePath}`\n );\n } catch (deleteError) {\n elizaLogger.error(\n `[Cleanup] Error during deletion process for ${filePath}:`,\n deleteError instanceof Error\n ? {\n message: deleteError.message,\n stack: deleteError.stack,\n name: deleteError.name,\n }\n : deleteError\n );\n }\n }\n }\n\n elizaLogger.debug(\"[Cleanup] Finished knowledge cleanup process\");\n } catch (error) {\n elizaLogger.error(\n \"[Cleanup] Error cleaning up deleted knowledge files:\",\n error\n );\n }\n }\n\n public generateScopedId(path: string, isShared: boolean): UUID {\n // Prefix the path with scope before generating UUID to ensure different IDs for shared vs private\n const scope = isShared ? KnowledgeScope.SHARED : KnowledgeScope.PRIVATE;\n const scopedPath = `${scope}-${path}`;\n return stringToUuid(scopedPath);\n }\n\n async processFile(file: {\n path: string;\n content: string;\n type: \"pdf\" | \"md\" | \"txt\";\n isShared?: boolean;\n }): Promise<void> {\n const timeMarker = (label: string) => {\n const time = (Date.now() - startTime) / 1000;\n elizaLogger.info(`[Timing] ${label}: ${time.toFixed(2)}s`);\n };\n\n const startTime = Date.now();\n const content = file.content;\n\n try {\n const fileSizeKB = new TextEncoder().encode(content).length / 1024;\n elizaLogger.info(\n `[File Progress] Starting ${file.path} (${fileSizeKB.toFixed(2)} KB)`\n );\n\n // Generate scoped ID for the file\n const scopedId = this.generateScopedId(\n file.path,\n file.isShared || false\n );\n\n // Step 1: Preprocessing\n //const preprocessStart = Date.now();\n const processedContent = this.preprocess(content);\n timeMarker(\"Preprocessing\");\n\n // Step 2: Main document embedding\n const mainEmbeddingArray = await embed(\n this.runtime,\n processedContent\n );\n const mainEmbedding = new Float32Array(mainEmbeddingArray);\n timeMarker(\"Main embedding\");\n\n // Step 3: Create main document\n await this.runtime.databaseAdapter.createKnowledge({\n id: scopedId,\n agentId: this.runtime.agentId,\n content: {\n text: content,\n metadata: {\n source: file.path,\n type: file.type,\n isShared: file.isShared || false,\n },\n },\n embedding: mainEmbedding,\n createdAt: Date.now(),\n });\n timeMarker(\"Main document storage\");\n\n // Step 4: Generate chunks\n const chunks = await splitChunks(processedContent, 512, 20);\n const totalChunks = chunks.length;\n elizaLogger.info(`Generated ${totalChunks} chunks`);\n timeMarker(\"Chunk generation\");\n\n // Step 5: Process chunks with larger batches\n const BATCH_SIZE = 10; // Increased batch size\n let processedChunks = 0;\n\n for (let i = 0; i < chunks.length; i += BATCH_SIZE) {\n const batchStart = Date.now();\n const batch = chunks.slice(\n i,\n Math.min(i + BATCH_SIZE, chunks.length)\n );\n\n // Process embeddings in parallel\n const embeddings = await Promise.all(\n batch.map((chunk) => embed(this.runtime, chunk))\n );\n\n // Batch database operations\n await Promise.all(\n embeddings.map(async (embeddingArray, index) => {\n const chunkId =\n `${scopedId}-chunk-${i + index}` as UUID;\n const chunkEmbedding = new Float32Array(embeddingArray);\n\n await this.runtime.databaseAdapter.createKnowledge({\n id: chunkId,\n agentId: this.runtime.agentId,\n content: {\n text: batch[index],\n metadata: {\n source: file.path,\n type: file.type,\n isShared: file.isShared || false,\n isChunk: true,\n originalId: scopedId,\n chunkIndex: i + index,\n originalPath: file.path,\n },\n },\n embedding: chunkEmbedding,\n createdAt: Date.now(),\n });\n })\n );\n\n processedChunks += batch.length;\n const batchTime = (Date.now() - batchStart) / 1000;\n elizaLogger.info(\n `[Batch Progress] ${file.path}: Processed ${processedChunks}/${totalChunks} chunks (${batchTime.toFixed(2)}s for batch)`\n );\n }\n\n const totalTime = (Date.now() - startTime) / 1000;\n elizaLogger.info(\n `[Complete] Processed ${file.path} in ${totalTime.toFixed(2)}s`\n );\n } catch (error) {\n if (\n file.isShared &&\n error?.code === \"SQLITE_CONSTRAINT_PRIMARYKEY\"\n ) {\n elizaLogger.info(\n `Shared knowledge ${file.path} already exists in database, skipping creation`\n );\n return;\n }\n elizaLogger.error(`Error processing file ${file.path}:`, error);\n throw error;\n }\n }\n}\n","import { z } from \"zod\";\nimport { ModelProviderName } from \"./types\";\nimport elizaLogger from \"./logger\";\n\n// TODO: TO COMPLETE\nexport const envSchema = z.object({\n // API Keys with specific formats\n OPENAI_API_KEY: z\n .string()\n .startsWith(\"sk-\", \"OpenAI API key must start with 'sk-'\"),\n REDPILL_API_KEY: z.string().min(1, \"REDPILL API key is required\"),\n GROK_API_KEY: z.string().min(1, \"GROK API key is required\"),\n GROQ_API_KEY: z\n .string()\n .startsWith(\"gsk_\", \"GROQ API key must start with 'gsk_'\"),\n OPENROUTER_API_KEY: z.string().min(1, \"OpenRouter API key is required\"),\n GOOGLE_GENERATIVE_AI_API_KEY: z\n .string()\n .min(1, \"Gemini API key is required\"),\n ELEVENLABS_XI_API_KEY: z.string().min(1, \"ElevenLabs API key is required\"),\n});\n\n// Type inference\nexport type EnvConfig = z.infer<typeof envSchema>;\n\n// Validation function\nexport function validateEnv(): EnvConfig {\n try {\n return envSchema.parse(process.env);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const errorMessages = error.errors\n .map((err) => `${err.path}: ${err.message}`)\n .join(\"\\n\");\n throw new Error(`Environment validation failed:\\n${errorMessages}`);\n }\n throw error;\n }\n}\n\n// Helper schemas for nested types\nconst MessageExampleSchema = z.object({\n user: z.string(),\n content: z\n .object({\n text: z.string(),\n action: z.string().optional(),\n source: z.string().optional(),\n url: z.string().optional(),\n inReplyTo: z.string().uuid().optional(),\n attachments: z.array(z.any()).optional(),\n })\n .and(z.record(z.string(), z.unknown())), // For additional properties\n});\n\nconst PluginSchema = z.object({\n name: z.string(),\n description: z.string(),\n actions: z.array(z.any()).optional(),\n providers: z.array(z.any()).optional(),\n evaluators: z.array(z.any()).optional(),\n services: z.array(z.any()).optional(),\n clients: z.array(z.any()).optional(),\n});\n\n// Main Character schema\nexport const CharacterSchema = z.object({\n id: z.string().uuid().optional(),\n name: z.string(),\n system: z.string().optional(),\n modelProvider: z.nativeEnum(ModelProviderName),\n modelEndpointOverride: z.string().optional(),\n templates: z.record(z.string()).optional(),\n bio: z.union([z.string(), z.array(z.string())]),\n lore: z.array(z.string()),\n messageExamples: z.array(z.array(MessageExampleSchema)),\n postExamples: z.array(z.string()),\n topics: z.array(z.string()),\n adjectives: z.array(z.string()),\n knowledge: z\n .array(\n z.union([\n z.string(), // Direct knowledge strings\n z.object({\n // Individual file config\n path: z.string(),\n shared: z.boolean().optional(),\n }),\n z.object({\n // Directory config\n directory: z.string(),\n shared: z.boolean().optional(),\n }),\n ])\n )\n .optional(),\n plugins: z.union([z.array(z.string()), z.array(PluginSchema)]),\n settings: z\n .object({\n secrets: z.record(z.string()).optional(),\n voice: z\n .object({\n model: z.string().optional(),\n url: z.string().optional(),\n })\n .optional(),\n model: z.string().optional(),\n modelConfig: z.object({\n maxInputTokens: z.number().optional(),\n maxOutputTokens: z.number().optional(),\n temperature: z.number().optional(),\n frequency_penalty: z.number().optional(),\n presence_penalty:z.number().optional()\n })\n .optional(),\n embeddingModel: z.string().optional(),\n })\n .optional(),\n clientConfig: z\n .object({\n discord: z\n .object({\n shouldIgnoreBotMessages: z.boolean().optional(),\n shouldIgnoreDirectMessages: z.boolean().optional(),\n })\n .optional(),\n telegram: z\n .object({\n shouldIgnoreBotMessages: z.boolean().optional(),\n shouldIgnoreDirectMessages: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n style: z.object({\n all: z.array(z.string()),\n chat: z.array(z.string()),\n post: z.array(z.string()),\n }),\n twitterProfile: z\n .object({\n username: z.string(),\n screenName: z.string(),\n bio: z.string(),\n nicknames: z.array(z.string()).optional(),\n })\n .optional(),\n nft: z\n .object({\n prompt: z.string().optional(),\n })\n .optional(),\n extends: z.array(z.string()).optional(),\n});\n\n// Type inference\nexport type CharacterConfig = z.infer<typeof CharacterSchema>;\n\n// Validation function\nexport function validateCharacterConfig(json: unknown): CharacterConfig {\n try {\n return CharacterSchema.parse(json);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const groupedErrors = error.errors.reduce(\n (acc, err) => {\n const path = err.path.join(\".\");\n if (!acc[path]) {\n acc[path] = [];\n }\n acc[path].push(err.message);\n return acc;\n },\n {} as Record<string, string[]>\n );\n\n Object.entries(groupedErrors).forEach(([field, messages]) => {\n elizaLogger.error(\n `Validation errors in ${field}: ${messages.join(\" - \")}`\n );\n });\n\n throw new Error(\n \"Character configuration validation failed. Check logs for details.\"\n );\n }\n throw error;\n }\n}\n","import path from \"path\";\nimport fs from \"fs/promises\";\nimport type {\n CacheOptions,\n ICacheManager,\n IDatabaseCacheAdapter,\n UUID,\n} from \"./types\";\n\nexport interface ICacheAdapter {\n get(key: string): Promise<string | undefined>;\n set(key: string, value: string): Promise<void>;\n delete(key: string): Promise<void>;\n}\n\nexport class MemoryCacheAdapter implements ICacheAdapter {\n data: Map<string, string>;\n\n constructor(initalData?: Map<string, string>) {\n this.data = initalData ?? new Map<string, string>();\n }\n\n async get(key: string): Promise<string | undefined> {\n return this.data.get(key);\n }\n\n async set(key: string, value: string): Promise<void> {\n this.data.set(key, value);\n }\n\n async delete(key: string): Promise<void> {\n this.data.delete(key);\n }\n}\n\nexport class FsCacheAdapter implements ICacheAdapter {\n constructor(private dataDir: string) {}\n\n async get(key: string): Promise<string | undefined> {\n try {\n return await fs.readFile(path.join(this.dataDir, key), \"utf8\");\n } catch {\n // console.error(error);\n return undefined;\n }\n }\n\n async set(key: string, value: string): Promise<void> {\n try {\n const filePath = path.join(this.dataDir, key);\n // Ensure the directory exists\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, value, \"utf8\");\n } catch (error) {\n console.error(error);\n }\n }\n\n async delete(key: string): Promise<void> {\n try {\n const filePath = path.join(this.dataDir, key);\n await fs.unlink(filePath);\n } catch {\n // console.error(error);\n }\n }\n}\n\nexport class DbCacheAdapter implements ICacheAdapter {\n constructor(\n private db: IDatabaseCacheAdapter,\n private agentId: UUID\n ) {}\n\n async get(key: string): Promise<string | undefined> {\n return this.db.getCache({ agentId: this.agentId, key });\n }\n\n async set(key: string, value: string): Promise<void> {\n await this.db.setCache({ agentId: this.agentId, key, value });\n }\n\n async delete(key: string): Promise<void> {\n await this.db.deleteCache({ agentId: this.agentId, key });\n }\n}\n\nexport class CacheManager<CacheAdapter extends ICacheAdapter = ICacheAdapter>\n implements ICacheManager\n{\n adapter: CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async get<T = unknown>(key: string): Promise<T | undefined> {\n const data = await this.adapter.get(key);\n\n if (data) {\n const { value, expires } = JSON.parse(data) as {\n value: T;\n expires: number;\n };\n\n if (!expires || expires > Date.now()) {\n return value;\n }\n\n this.adapter.delete(key).catch(() => {});\n }\n\n return undefined;\n }\n\n async set<T>(key: string, value: T, opts?: CacheOptions): Promise<void> {\n return this.adapter.set(\n key,\n JSON.stringify({ value, expires: opts?.expires ?? 0 })\n );\n }\n\n async delete(key: string): Promise<void> {\n return this.adapter.delete(key);\n }\n}\n"],"mappings":"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","names":["names","uniqueNamesGenerator","config","path","path","settings","GoalStatus","ModelClass","ModelProviderName","CacheStore","IrysMessageType","IrysDataType","ServiceType","LoggingLevel","TokenizerType","TranscriptionProvider","ActionTimelineType","KnowledgeScope","CacheKeyPrefix","path","fileURLToPath","__filename","fileURLToPath","__dirname","path","fs","options","config","input","runtime","names","uniqueNamesGenerator","uniqueNamesGenerator","names","fs","path","baseURL","options","apiKey","config","settings","actor","join","names","uniqueNamesGenerator","path","existsSync","join","result","uniqueNamesGenerator","names","message","actors","z","z","path","path","fs"]}