@zoralabs/protocol-sdk 0.7.3-SPARKS.0 → 0.7.3
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/.turbo/turbo-build.log +16 -0
- package/CHANGELOG.md +9 -4
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mints/mints-relay-example.d.ts +4 -4
- package/dist/mints/mints-relay-example.d.ts.map +1 -1
- package/package.json +10 -6
- package/src/create/1155-create-helper.test.ts +325 -0
- package/src/mint/mint-client.test.ts +263 -0
- package/src/mints/mints-contracts.test.ts +529 -0
- package/src/mints/mints-eth-unwrapper-and-caller.test.ts +467 -0
- package/src/mints/mints-eth-unwrapper-and-caller.ts +2 -2
- package/src/mints/mints-queries.test.ts +105 -0
- package/src/mints/mints-relay-example.ts +22 -13
- package/src/premint/premint-client.test.ts +290 -0
- package/src/premint/preminter.test.ts +866 -0
- package/test-integration/setup-test-contracts.ts +96 -0
- package/tsconfig.build.json +10 -0
- package/tsup.config.ts +12 -0
- package/yarn-error.log +0 -8602
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/premint/premint-client.ts","../src/premint/preminter.ts","../src/apis/chain-constants.ts","../src/constants.ts","../src/premint/conversions.ts","../src/apis/http-api-base.ts","../src/mint/types.ts","../src/utils.ts","../src/mint/subgraph-queries.ts","../src/mint/subgraph-mint-getter.ts","../src/premint/contract-types.ts","../src/premint/premint-api-client.ts","../src/mint/mint-transactions.ts","../src/mint/utils.ts","../src/mint/mint-queries.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts","../src/create/contract-setup.ts","../src/create/token-setup.ts","../src/mints/mints-queries.ts","../src/mints/mints-contracts.ts","../src/mints/mints-eth-unwrapper-and-caller.ts","../src/sdk.ts","../src/ipfs/arweave.ts","../../../node_modules/multiformats/esm/vendor/varint.js","../../../node_modules/multiformats/esm/src/varint.js","../../../node_modules/multiformats/esm/src/bytes.js","../../../node_modules/multiformats/esm/src/hashes/digest.js","../../../node_modules/multiformats/esm/vendor/base-x.js","../../../node_modules/multiformats/esm/src/bases/base.js","../../../node_modules/multiformats/esm/src/bases/base58.js","../../../node_modules/multiformats/esm/src/bases/base32.js","../../../node_modules/multiformats/esm/src/cid.js","../src/ipfs/ipfs.ts","../src/ipfs/gateway.ts","../src/ipfs/mimeTypes.ts","../src/ipfs/token-metadata.ts","../src/ipfs/text-metadata.ts"],"sourcesContent":["import { decodeEventLog, zeroAddress } from \"viem\";\nimport type {\n Account,\n Address,\n Hex,\n SimulateContractParameters,\n TransactionReceipt,\n TypedDataDefinition,\n WalletClient,\n} from \"viem\";\nimport {\n PremintConfigAndVersion,\n TokenConfigWithVersion,\n encodePremintConfig,\n zoraCreator1155PremintExecutorImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n getPremintCollectionAddress,\n isAuthorizedToCreatePremint,\n getPremintExecutorAddress,\n applyUpdateToPremint,\n makeNewPremint,\n supportedPremintVersions,\n getPremintMintCosts,\n makeMintRewardsRecipient,\n getDefaultFixedPriceMinterAddress,\n emptyContractCreationConfig,\n defaultAdditionalAdmins,\n toContractCreationConfigOrAddress,\n getPremintMintFee,\n} from \"./preminter\";\nimport {\n PremintConfigVersion,\n ContractCreationConfig,\n TokenCreationConfigV1,\n TokenCreationConfigV2,\n TokenCreationConfig,\n PremintConfigWithVersion,\n PremintMintArguments,\n premintTypedDataDefinition,\n} from \"@zoralabs/protocol-deployments\";\nimport { IPremintAPI, IPremintGetter } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\nimport { getApiNetworkConfigForChain } from \"src/mint/subgraph-mint-getter\";\nimport {\n makeContractParameters,\n mintRecipientOrAccount,\n PublicClient,\n} from \"src/utils\";\nimport {\n ContractCreationConfigAndAddress,\n ContractCreationConfigOrAddress,\n} from \"./contract-types\";\nimport {\n MakeMintParametersArgumentsBase,\n MakePremintMintParametersArguments,\n MintCosts,\n} from \"src/mint/types\";\nimport { PremintFromApi } from \"./conversions\";\nimport { SimulateContractParametersWithAccount } from \"src/types\";\n\ntype PremintedV2LogType = DecodeEventLogReturnType<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"PremintedV2\"\n>[\"args\"];\n\nexport type URLSReturnType = {\n explorer: null | string;\n zoraCollect: null | string;\n zoraManage: null | string;\n};\n\nexport const defaultTokenConfigV1MintArguments = (): Omit<\n TokenCreationConfigV1,\n \"fixedPriceMinter\" | \"tokenURI\" | \"royaltyRecipient\"\n> => ({\n maxSupply: OPEN_EDITION_MINT_SIZE,\n maxTokensPerAddress: 0n,\n pricePerToken: 0n,\n mintDuration: 0n,\n mintStart: 0n,\n royaltyMintSchedule: 0,\n royaltyBPS: 1000, // 10%,\n});\n\nconst pickTokenConfigV1 = (tokenConfig: TokenConfigInput) => ({\n maxSupply: tokenConfig.maxSupply,\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress,\n pricePerToken: tokenConfig.pricePerToken,\n mintDuration: tokenConfig.mintDuration,\n mintStart: tokenConfig.mintStart,\n royaltyBPS: tokenConfig.royaltyBPS,\n tokenURI: tokenConfig.tokenURI,\n royaltyRecipient: tokenConfig.payoutRecipient,\n});\n\nconst pickTokenConfigV2 = (tokenConfig: TokenConfigInput) => ({\n maxSupply: tokenConfig.maxSupply,\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress,\n pricePerToken: tokenConfig.pricePerToken,\n mintDuration: tokenConfig.mintDuration,\n mintStart: tokenConfig.mintStart,\n royaltyBPS: tokenConfig.royaltyBPS,\n tokenURI: tokenConfig.tokenURI,\n payoutRecipient: tokenConfig.payoutRecipient,\n createReferral: tokenConfig.createReferral || zeroAddress,\n});\n\nconst tokenConfigV1WithDefault = (\n tokenConfig: TokenConfigInput,\n fixedPriceMinter: Address,\n): TokenCreationConfigV1 => ({\n ...pickTokenConfigV1(tokenConfig),\n ...defaultTokenConfigV1MintArguments(),\n fixedPriceMinter,\n});\n\nconst tokenConfigV2WithDefault = (\n tokenConfig: TokenConfigInput,\n fixedPriceMinter: Address,\n): TokenCreationConfigV2 => ({\n ...pickTokenConfigV2(tokenConfig),\n ...defaultTokenConfigV2MintArguments(),\n fixedPriceMinter,\n});\n\nexport const defaultTokenConfigV2MintArguments = (): Omit<\n TokenCreationConfigV2,\n \"fixedPriceMinter\" | \"tokenURI\" | \"payoutRecipient\" | \"createReferral\"\n> => ({\n maxSupply: OPEN_EDITION_MINT_SIZE,\n maxTokensPerAddress: 0n,\n pricePerToken: 0n,\n mintDuration: 0n,\n mintStart: 0n,\n royaltyBPS: 1000, // 10%,\n});\n\ntype TokenConfigInput = {\n /** Metadata URI of the token to create. */\n tokenURI: string;\n /** Account to receive creator rewards if it's a free mint, and token price value if its a paid mint. Defaults to the premint signing account. */\n payoutRecipient: Address;\n /** Optional: account to receive the create referral award. */\n createReferral?: Address;\n /** Optional: max supply of tokens that can be minted. Defaults to unlimited. */\n maxSupply?: bigint;\n /** Optional: max tokens that can be minted for an address, 0 if unlimited. Defaults to unlimited. */\n maxTokensPerAddress?: bigint;\n /** Optional: price per token, if this is a paid mint. 0 if a free mint. Defaults to 0, or a free mint. */\n pricePerToken?: bigint;\n /** Optional: duration of the mint, starting from the time the premint is brought onchain. 0 for infinite. Defaults to infinite. */\n mintDuration?: bigint;\n /** Optional: earliest time the premint can be brought onchain and minted. 0 for immediately. Defaults to immediately. */\n mintStart?: bigint;\n /** Optional: The royalty amount in basis points for secondary sales, in basis points. Defaults to 1000. */\n royaltyBPS?: number;\n};\n\nconst makeTokenConfigWithDefaults = ({\n chainId,\n tokenCreationConfig,\n supportedPremintVersions,\n}: {\n chainId: number;\n tokenCreationConfig: TokenConfigInput;\n supportedPremintVersions: PremintConfigVersion[];\n}): TokenConfigWithVersion<\n PremintConfigVersion.V1 | PremintConfigVersion.V2\n> => {\n const fixedPriceMinter = getDefaultFixedPriceMinterAddress(chainId);\n\n if (!supportedPremintVersions.includes(PremintConfigVersion.V2)) {\n // we need to return a token config v1\n if (tokenCreationConfig.createReferral) {\n throw new Error(\"Contract does not support create referral\");\n }\n\n return {\n premintConfigVersion: PremintConfigVersion.V1,\n tokenConfig: tokenConfigV1WithDefault(\n tokenCreationConfig,\n fixedPriceMinter,\n ),\n };\n }\n\n return {\n premintConfigVersion: PremintConfigVersion.V2,\n tokenConfig: tokenConfigV2WithDefault(\n tokenCreationConfig,\n fixedPriceMinter,\n ),\n };\n};\n\n/**\n * Gets the preminted log from receipt\n *\n * @param receipt Preminted log from receipt\n * @returns Premint event arguments\n */\nexport function getPremintedLogFromReceipt(\n receipt: TransactionReceipt,\n): PremintedV2LogType | undefined {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155PremintExecutorImplABI,\n eventName: \"PremintedV2\",\n ...data,\n });\n if (decodedLog.eventName === \"PremintedV2\") {\n return decodedLog.args;\n }\n } catch (err: any) {}\n }\n}\n/**\n * Preminter API to access ZORA Premint functionality.\n */\nexport class PremintClient {\n readonly apiClient: IPremintAPI;\n readonly publicClient: PublicClient;\n readonly chainId: number;\n\n constructor({\n chainId,\n publicClient,\n premintApi,\n }: {\n chainId: number;\n publicClient: PublicClient;\n premintApi: IPremintAPI;\n }) {\n this.chainId = chainId;\n this.apiClient = premintApi;\n this.publicClient = publicClient;\n }\n\n getDataFromPremintReceipt(\n receipt: TransactionReceipt,\n blockExplorerUrl?: string,\n ) {\n return getDataFromPremintReceipt(receipt, this.chainId, blockExplorerUrl);\n }\n\n /**\n * Prepares data for updating a premint\n *\n * @param parameters - Parameters for updating the premint {@link UpdatePremintParams}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async updatePremint(args: UpdatePremintParams): Promise<PremintReturn<any>> {\n return await updatePremint({\n ...args,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n chainId: this.chainId,\n });\n }\n\n /**\n * Prepares data for deleting a premint\n *\n * @param parameters - Parameters for deleting the premint {@link DeletePremintParams}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async deletePremint(\n params: DeletePremintParams,\n ): Promise<PremintReturn<any>> {\n return deletePremint({\n ...params,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n chainId: this.chainId,\n });\n }\n\n /**\n * Prepares data for creating a premint\n *\n * @param parameters - Parameters for creating the premint {@link CreatePremintParameters}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async createPremint(\n parameters: CreatePremintParameters,\n ): Promise<PremintReturn<any>> {\n return createPremint({\n ...parameters,\n publicClient: this.publicClient,\n apiClient: this.apiClient,\n chainId: this.chainId,\n });\n }\n\n /**\n * Fetches given premint data from the ZORA API.\n *\n * @param address Address for the premint contract\n * @param uid UID for the desired premint\n * @returns PremintSignatureGetResponse of premint data from the API\n */\n async getPremint({ address, uid }: { address: Address; uid: number }) {\n return await this.apiClient.get({\n collectionAddress: address,\n uid,\n });\n }\n\n /**\n * Gets the deterministic contract address for a premint collection\n * @param collection Collection to get the address for\n * @returns deterministic contract address\n */\n async getCollectionAddress(collection: ContractCreationConfig) {\n return await getPremintCollectionAddress({\n contract: collection,\n publicClient: this.publicClient,\n });\n }\n\n async getMintCosts({\n tokenContract,\n quantityToMint,\n pricePerToken,\n }: {\n quantityToMint: bigint;\n tokenContract: Address;\n pricePerToken: bigint;\n }): Promise<MintCosts> {\n return await getPremintMintCosts({\n publicClient: this.publicClient,\n quantityToMint,\n tokenContract,\n tokenPrice: pricePerToken,\n });\n }\n\n /**\n * Prepares the parameters to collect a premint; it brings the contract and token onchain, then collects\n * tokens on that contract for the mint recipient.\n *\n * @param parameters - Parameters for collecting the Premint {@link MakeMintParametersArguments}\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters({\n minterAccount,\n tokenContract,\n uid,\n mintArguments,\n firstMinter,\n }: MakeMintParametersArguments) {\n return await collectPremint({\n uid,\n tokenContract,\n minterAccount,\n quantityToMint: mintArguments?.quantityToMint || 1n,\n mintComment: mintArguments?.mintComment,\n mintReferral: mintArguments?.mintReferral,\n mintRecipient: mintArguments?.mintRecipient,\n firstMinter,\n premintGetter: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n}\n\nexport function getDataFromPremintReceipt(\n receipt: TransactionReceipt,\n chainId: number,\n blockExplorerUrl?: string,\n) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n tokenId: premintedLog?.tokenId,\n collectionAddres: premintedLog?.contractAddress,\n premintedLog,\n urls: makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n chainId,\n blockExplorerUrl,\n }),\n };\n}\n\ntype PremintContext = {\n publicClient: PublicClient;\n apiClient: IPremintAPI;\n chainId: number;\n};\n\n/** ======= ADMIN ======= */\n\nexport type SignAndSubmitParams = {\n /** The WalletClient used to sign the premint */\n walletClient: WalletClient;\n} & CheckSignatureParams;\n\nexport type SignAndSubmitReturn = {\n /** The signature of the Premint */\n signature: Hex;\n /** The account that signed the Premint */\n signerAccount: Account | Address;\n};\n\nexport type CheckSignatureParams =\n | {\n /** If the premint signature should be validated before submitting to the API */\n checkSignature: true;\n /** Account that signed the premint */\n account: Account | Address;\n }\n | {\n /** If the premint signature should be validated before submitting to the API */\n checkSignature?: false;\n account?: Account | Address;\n };\n\nexport type SubmitParams = {\n /** The signature of the Premint */\n signature: Hex;\n} & CheckSignatureParams;\n\ntype PremintReturn<T extends PremintConfigVersion> = {\n /** The typedDataDefinition of the Premint which is to be signed the creator. */\n typedDataDefinition: TypedDataDefinition;\n /** The deterministic collection address of the Premint */\n collectionAddress: Address;\n /** Signs the Premint, and submits it and the signature to the Zora Premint API */\n signAndSubmit: (params: SignAndSubmitParams) => Promise<SignAndSubmitReturn>;\n /** For the case where the premint is signed externally, takes the signature for the Premint, and submits it and the Premint to the Zora Premint API */\n submit: (params: SubmitParams) => Promise<void>;\n urls: URLSReturnType;\n} & PremintConfigWithVersion<T>;\n\nfunction makePremintReturn<T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n publicClient,\n apiClient,\n chainId,\n ...collectionAndAddress\n}: PremintConfigWithVersion<T> &\n ContractCreationConfigAndAddress &\n PremintContext): PremintReturn<T> {\n const { collection, collectionAddress } = collectionAndAddress;\n const typedDataDefinition = premintTypedDataDefinition({\n verifyingContract: collectionAddress,\n premintConfig,\n premintConfigVersion,\n chainId,\n });\n\n const signAndSubmit = async ({\n walletClient,\n account: account,\n checkSignature,\n }: SignAndSubmitParams): Promise<SignAndSubmitReturn> => {\n const { signature, signerAccount } = await signPremint({\n account,\n walletClient,\n typedDataDefinition,\n });\n\n await submit({\n signature,\n checkSignature,\n account: signerAccount,\n });\n\n return {\n signature,\n signerAccount,\n };\n };\n\n const submit = async ({\n signature,\n checkSignature,\n account,\n }: SubmitParams) => {\n if (checkSignature) {\n const isAuthorized = await isAuthorizedToCreatePremint({\n collectionAddress,\n additionalAdmins: collection?.additionalAdmins,\n contractAdmin: collection?.contractAdmin,\n publicClient,\n signer: account,\n });\n\n if (!isAuthorized) {\n throw new Error(\"Not authorized to create premint\");\n }\n }\n\n await apiClient.postSignature({\n ...toContractCreationConfigOrAddress(collectionAndAddress),\n signature: signature,\n premintConfig,\n premintConfigVersion,\n });\n };\n\n const urls = makeUrls({\n chainId,\n address: collectionAddress,\n uid: premintConfig.uid,\n });\n\n return {\n premintConfig,\n premintConfigVersion,\n typedDataDefinition,\n collectionAddress,\n signAndSubmit,\n submit,\n urls,\n };\n}\n\nasync function signPremint({\n account,\n walletClient,\n typedDataDefinition,\n}: {\n /** The account that is to sign the premint */\n account?: Address | Account;\n /** WalletClient used to sign the premint */\n walletClient: WalletClient;\n /** Data */\n typedDataDefinition: TypedDataDefinition;\n}) {\n if (!account) {\n account = walletClient.account;\n }\n if (!account) {\n throw new Error(\"No account provided\");\n }\n\n const signature = await walletClient.signTypedData({\n account,\n ...typedDataDefinition,\n });\n\n return {\n signature,\n signerAccount: account,\n };\n}\n\n/** CREATE */\n\ntype CreatePremintParameters = {\n /** tokenCreationConfig Token creation settings, optional settings are overridden with sensible defaults */\n token: TokenConfigInput;\n /** uid the UID to use – optional and retrieved as a fresh UID from ZORA by default. */\n uid?: number;\n} & ContractCreationConfigOrAddress;\n\nasync function createPremint({\n token: tokenCreationConfig,\n uid,\n publicClient,\n apiClient,\n chainId,\n ...collectionOrAddress\n}: CreatePremintParameters & PremintContext) {\n const {\n premintConfig,\n premintConfigVersion,\n collectionAddress: collectionAddressToUse,\n } = await prepareCreatePremintConfig({\n ...collectionOrAddress,\n tokenCreationConfig,\n uid,\n publicClient,\n apiClient,\n chainId,\n });\n\n return makePremintReturn({\n premintConfig,\n premintConfigVersion,\n collectionAddress: collectionAddressToUse,\n collection: collectionOrAddress.contract,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\ntype PreparePremintReturn = {\n collectionAddress: Address;\n} & PremintConfigAndVersion;\n\nasync function prepareCreatePremintConfig({\n tokenCreationConfig,\n uid,\n publicClient,\n apiClient,\n chainId,\n ...collectionOrAddress\n}: {\n tokenCreationConfig: TokenConfigInput;\n uid?: number;\n} & PremintContext &\n ContractCreationConfigOrAddress): Promise<PreparePremintReturn> {\n const newContractAddress = await getPremintCollectionAddress({\n publicClient,\n ...collectionOrAddress,\n });\n\n let uidToUse = uid;\n\n if (typeof uidToUse !== \"number\") {\n uidToUse = await apiClient.getNextUID(newContractAddress);\n }\n\n const supportedVersions = await supportedPremintVersions({\n tokenContract: newContractAddress,\n publicClient,\n });\n\n const tokenConfigAndVersion = makeTokenConfigWithDefaults({\n tokenCreationConfig,\n chainId,\n supportedPremintVersions: supportedVersions,\n });\n\n const premintConfig = makeNewPremint({\n ...tokenConfigAndVersion,\n uid: uidToUse,\n });\n\n const premintConfigAndVersion = {\n premintConfig,\n premintConfigVersion: tokenConfigAndVersion.premintConfigVersion,\n } as PremintConfigAndVersion;\n\n return {\n ...premintConfigAndVersion,\n collectionAddress: newContractAddress,\n };\n}\n\n/** UPDATE */\n\nexport type UpdatePremintParams = {\n /** uid of the Premint to update */\n uid: number;\n /** address of the Premint to update */\n collection: Address;\n /** update to apply to the Premint */\n tokenConfigUpdates: Partial<TokenCreationConfig>;\n};\n\nasync function updatePremint({\n uid,\n collection,\n tokenConfigUpdates,\n apiClient,\n publicClient,\n chainId,\n}: UpdatePremintParams & {\n apiClient: IPremintAPI;\n publicClient: PublicClient;\n chainId: number;\n}) {\n const {\n premint: { premintConfig, premintConfigVersion },\n collection: collectionCreationConfig,\n } = await apiClient.get({\n collectionAddress: collection,\n uid: uid,\n });\n\n const updatedPremint = applyUpdateToPremint({\n uid: premintConfig.uid,\n version: premintConfig.version,\n tokenConfig: premintConfig.tokenConfig,\n tokenConfigUpdates: tokenConfigUpdates,\n });\n\n return makePremintReturn({\n premintConfig: updatedPremint,\n premintConfigVersion,\n collectionAddress: collection,\n collection: collectionCreationConfig,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\n/** DELETE */\n\nexport type DeletePremintParams = {\n /** id of the premint to delete */\n uid: number;\n /** collection address of the Premint to delete */\n collection: Address;\n};\n\nasync function deletePremint({\n uid,\n collection,\n publicClient,\n apiClient,\n chainId,\n}: DeletePremintParams & {\n apiClient: IPremintAPI;\n publicClient: PublicClient;\n chainId: number;\n}) {\n const {\n premint: { premintConfig, premintConfigVersion },\n collection: collectionCreationConfig,\n collectionAddress,\n } = await apiClient.get({\n collectionAddress: collection,\n uid: uid,\n });\n\n const deletedPremint = {\n ...premintConfig,\n version: premintConfig.version + 1,\n deleted: true,\n };\n\n return makePremintReturn({\n premintConfig: deletedPremint,\n premintConfigVersion,\n collectionAddress,\n collection: collectionCreationConfig,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\nexport type MakeMintParametersArguments = {\n /** uid of the Premint to mint */\n uid: number;\n /** Premint contract address */\n tokenContract: Address;\n /** Account to execute the mint */\n minterAccount: Account | Address;\n /** Minting settings */\n mintArguments?: {\n /** Quantity of tokens to mint */\n quantityToMint: number;\n /** Comment to add to the mint */\n mintComment?: string;\n /** Address to receive the mint referral reward */\n mintReferral?: Address;\n /** Address to receive the minted tokens */\n mintRecipient?: Address;\n };\n /** Account to receive first minter reward, if this mint brings the premint onchain */\n firstMinter?: Address;\n};\n\n/** ======== MINTING ======== */\n\nexport async function collectPremint({\n uid,\n tokenContract,\n minterAccount,\n quantityToMint,\n mintComment = \"\",\n mintReferral,\n mintRecipient,\n firstMinter,\n premintGetter,\n publicClient,\n}: Omit<MakePremintMintParametersArguments, \"mintType\"> & {\n premintGetter: IPremintGetter;\n publicClient: PublicClient;\n}): Promise<\n SimulateContractParameters<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"premint\",\n any,\n any,\n any,\n Account | Address\n >\n> {\n if (typeof quantityToMint !== \"undefined\" && quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n const premint = await premintGetter.get({\n collectionAddress: tokenContract,\n uid,\n });\n\n const mintFee = await getPremintMintFee({\n tokenContract,\n publicClient,\n });\n\n return buildPremintMintCall({\n mintArguments: {\n minterAccount,\n quantityToMint,\n firstMinter,\n mintComment,\n mintRecipient,\n mintReferral,\n },\n mintFee,\n premint,\n });\n}\n\nexport const buildPremintMintCall = ({\n mintArguments: {\n minterAccount,\n mintComment = \"\",\n mintRecipient,\n mintReferral,\n firstMinter,\n quantityToMint,\n },\n premint: { collection, collectionAddress, premint, signature },\n mintFee,\n}: {\n mintArguments: Omit<MakeMintParametersArgumentsBase, \"tokenContract\"> & {\n firstMinter?: Address;\n };\n premint: Pick<\n PremintFromApi,\n \"collection\" | \"collectionAddress\" | \"premint\" | \"signature\"\n >;\n mintFee: bigint;\n}): SimulateContractParametersWithAccount => {\n const mintArgumentsContract: PremintMintArguments = {\n mintComment: mintComment,\n mintRecipient: mintRecipientOrAccount({\n mintRecipient,\n minterAccount,\n }),\n mintRewardsRecipients: makeMintRewardsRecipient({\n mintReferral,\n }),\n };\n\n const collectionOrEmpty: ContractCreationConfig = collection\n ? defaultAdditionalAdmins(collection)\n : emptyContractCreationConfig();\n const collectionAddressToSubmit = collection\n ? zeroAddress\n : collectionAddress;\n\n const firstMinterToSubmit: Address =\n firstMinter ||\n (typeof minterAccount === \"string\" ? minterAccount : minterAccount.address);\n\n if (premint.premintConfigVersion === PremintConfigVersion.V3) {\n throw new Error(\"PremintV3 not supported in premint SDK\");\n }\n\n const value =\n (mintFee + premint.premintConfig.tokenConfig.pricePerToken) *\n BigInt(quantityToMint);\n\n return makeContractParameters({\n account: minterAccount,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premint\",\n value,\n address: getPremintExecutorAddress(),\n args: [\n collectionOrEmpty,\n collectionAddressToSubmit,\n encodePremintConfig(premint),\n signature,\n BigInt(quantityToMint),\n mintArgumentsContract,\n firstMinterToSubmit,\n zeroAddress,\n ],\n });\n};\n\nexport function makeUrls({\n uid,\n address,\n tokenId,\n chainId,\n blockExplorerUrl,\n}: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\n chainId: number;\n blockExplorerUrl?: string;\n}): URLSReturnType {\n if ((!uid || !tokenId) && !address) {\n return { explorer: null, zoraCollect: null, zoraManage: null };\n }\n\n const zoraTokenPath = uid ? `premint-${uid}` : tokenId;\n\n const network = getApiNetworkConfigForChain(chainId);\n\n return {\n explorer: tokenId\n ? `https://${blockExplorerUrl}/token/${address}/instance/${tokenId}`\n : null,\n zoraCollect: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n zoraManage: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n };\n}\n","import { Address } from \"abitype\";\nimport {\n zoraCreator1155PremintExecutorImplABI as preminterAbi,\n zoraCreator1155ImplABI,\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n zoraCreatorFixedPriceSaleStrategyAddress,\n premintTypedDataDefinition,\n ContractCreationConfig,\n PremintConfigForVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n recoverTypedDataAddress,\n Hex,\n zeroAddress,\n hashDomain,\n keccak256,\n concat,\n recoverAddress,\n GetEventArgs,\n parseEther,\n Account,\n} from \"viem\";\nimport {\n PremintConfig,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n TokenCreationConfig,\n} from \"@zoralabs/protocol-deployments\";\nimport { PublicClient } from \"src/utils\";\nimport {\n ContractCreationConfigAndAddress,\n ContractCreationConfigOrAddress,\n ContractCreationConfigWithOptionalAdditionalAdmins,\n} from \"./contract-types\";\nimport { IPremintGetter } from \"./premint-api-client\";\nimport { isPremintConfigV1, isPremintConfigV2 } from \"./conversions\";\nimport { MintCosts } from \"src/mint/types\";\n\nexport const getPremintExecutorAddress = () =>\n zoraCreator1155PremintExecutorImplAddress[999] as Address;\n\nexport type IsValidSignatureReturn = {\n isAuthorized: boolean;\n recoveredAddress?: Address;\n};\n\nexport async function isAuthorizedToCreatePremint({\n contractAdmin = zeroAddress,\n additionalAdmins = [],\n collectionAddress,\n publicClient,\n signer,\n}: {\n contractAdmin?: Address;\n additionalAdmins?: Address[];\n collectionAddress: Address;\n publicClient: PublicClient;\n signer: Address | Account;\n}) {\n // otherwize, we must assume the newer version of premint executor is deployed, so we call that.\n return await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"isAuthorizedToCreatePremintWithAdditionalAdmins\",\n args: [\n typeof signer === \"string\" ? signer : signer.address,\n contractAdmin,\n collectionAddress,\n additionalAdmins,\n ],\n });\n}\n\nexport async function recoverPremintSigner<T extends PremintConfigVersion>({\n signature,\n ...rest\n}: {\n signature: Hex;\n chainId: number;\n verifyingContract: Address;\n} & PremintConfigWithVersion<T>): Promise<Address> {\n return await recoverTypedDataAddress({\n ...premintTypedDataDefinition(rest),\n signature,\n });\n}\n\nexport async function tryRecoverPremintSigner(\n params: Parameters<typeof recoverPremintSigner>[0],\n) {\n try {\n return await recoverPremintSigner(params);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n}\n\n/**\n * Recovers the address from a typed data signature and then checks if the recovered address is authorized to create a premint\n *\n * @param params validationProperties\n * @param params.typedData typed data definition for premint config\n * @param params.signature signature to validate\n * @param params.publicClient public rpc read-only client\n * @param params.premintConfigContractAdmin the original contractAdmin on the ContractCreationConfig for the premint; this is usually the original creator of the premint\n * @param params.tokenContract the address of the 1155 contract\n * @returns\n */\nexport async function isValidSignature<T extends PremintConfigVersion>({\n signature,\n publicClient,\n collection,\n collectionAddress,\n chainId,\n ...premintConfigAndVersion\n}: {\n signature: Hex;\n chainId: number;\n publicClient: PublicClient;\n} & PremintConfigWithVersion<T> &\n ContractCreationConfigAndAddress): Promise<IsValidSignatureReturn> {\n const recoveredAddress = await tryRecoverPremintSigner({\n ...premintConfigAndVersion,\n signature,\n verifyingContract: collectionAddress,\n chainId,\n });\n\n if (!recoverAddress) {\n return {\n isAuthorized: false,\n };\n }\n\n const isAuthorized = await isAuthorizedToCreatePremint({\n signer: recoveredAddress!,\n additionalAdmins: collection?.additionalAdmins,\n contractAdmin: collection?.contractAdmin,\n collectionAddress: collectionAddress,\n publicClient,\n });\n\n return {\n isAuthorized,\n recoveredAddress,\n };\n}\n\n/**\n * Converts a premint config from v1 to v2\n *\n * @param premintConfig premint config to convert\n * @param createReferral address that referred the creator, that will receive create referral rewards for the created token\n */\nexport function migratePremintConfigToV2({\n premintConfig,\n createReferral = zeroAddress,\n}: {\n premintConfig: PremintConfigV1;\n createReferral: Address;\n}): PremintConfigV2 {\n return {\n ...premintConfig,\n tokenConfig: {\n tokenURI: premintConfig.tokenConfig.tokenURI,\n maxSupply: premintConfig.tokenConfig.maxSupply,\n maxTokensPerAddress: premintConfig.tokenConfig.maxTokensPerAddress,\n pricePerToken: premintConfig.tokenConfig.pricePerToken,\n mintStart: premintConfig.tokenConfig.mintStart,\n mintDuration: premintConfig.tokenConfig.mintDuration,\n payoutRecipient: premintConfig.tokenConfig.royaltyRecipient,\n royaltyBPS: premintConfig.tokenConfig.royaltyBPS,\n fixedPriceMinter: premintConfig.tokenConfig.fixedPriceMinter,\n createReferral,\n },\n };\n}\n\nexport type CreatorAttributionEventParams = GetEventArgs<\n typeof zoraCreator1155ImplABI,\n \"CreatorAttribution\",\n { EnableUnion: false }\n>;\n\n/**\n * Recovers the address from a CreatorAttribution event emitted from a ZoraCreator1155 contract\n * Useful for verifying that the creator of a token is the one who signed a premint for its creation.\n * \n\n * @param creatorAttribution parameters from the CreatorAttribution event\n * @param chainId the chain id of the current chain\n * @param tokenContract the address of the 1155 contract\n * @returns the address of the signer\n */\nexport const recoverCreatorFromCreatorAttribution = async ({\n creatorAttribution: { version, domainName, structHash, signature },\n chainId,\n tokenContract,\n}: {\n creatorAttribution: CreatorAttributionEventParams;\n tokenContract: Address;\n chainId: number;\n}) => {\n // hash the eip712 domain based on the parameters emitted from the event:\n const hashedDomain = hashDomain({\n domain: {\n chainId,\n name: domainName,\n verifyingContract: tokenContract,\n version,\n },\n types: {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n },\n });\n\n // re-build the eip-712 typed data hash, consisting of the hashed domain and the structHash emitted from the event:\n const parts: Hex[] = [\"0x1901\", hashedDomain, structHash!];\n\n const hashedTypedData = keccak256(concat(parts));\n\n return await recoverAddress({\n hash: hashedTypedData,\n signature: signature!,\n });\n};\n\nexport const supportedPremintVersions = async ({\n tokenContract,\n publicClient,\n}: {\n tokenContract: Address;\n publicClient: PublicClient;\n}): Promise<PremintConfigVersion[]> => {\n return (await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"supportedPremintSignatureVersions\",\n args: [tokenContract],\n })) as PremintConfigVersion[];\n};\n/**\n * Checks if the 1155 contract at that address supports the given version of the premint config.\n */\nexport const supportsPremintVersion = async ({\n version,\n tokenContract,\n publicClient,\n}: {\n version: PremintConfigVersion;\n tokenContract: Address;\n publicClient: PublicClient;\n}): Promise<boolean> => {\n return (\n await supportedPremintVersions({ tokenContract, publicClient })\n ).includes(version);\n};\n\nexport async function getPremintCollectionAddress({\n publicClient,\n contract: collection,\n contractAddress: collectionAddress,\n}: {\n publicClient: PublicClient;\n} & ContractCreationConfigOrAddress): Promise<Address> {\n if (typeof collection !== \"undefined\") {\n return publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractWithAdditionalAdminsAddress\",\n args: [\n {\n ...collection,\n additionalAdmins: collection.additionalAdmins || [],\n },\n ],\n });\n }\n\n return collectionAddress;\n}\n\nexport function applyUpdateToPremint({\n uid,\n version,\n tokenConfig,\n tokenConfigUpdates,\n}: {\n tokenConfig: TokenCreationConfig;\n tokenConfigUpdates: Partial<TokenCreationConfig>;\n} & Pick<PremintConfig, \"uid\" | \"version\">): PremintConfig {\n const updatedTokenConfig: TokenCreationConfig = {\n ...tokenConfig,\n ...tokenConfigUpdates,\n } as const;\n\n const result = {\n deleted: false,\n uid,\n version: version + 1,\n tokenConfig: updatedTokenConfig,\n } as PremintConfig;\n\n return result;\n}\n\nexport function makeNewPremint<T extends PremintConfigVersion>({\n tokenConfig,\n uid,\n}: {\n tokenConfig: PremintConfigForVersion<T>[\"tokenConfig\"];\n uid: number;\n}): PremintConfigForVersion<T> {\n return {\n deleted: false,\n uid,\n version: 0,\n tokenConfig,\n } as PremintConfigForVersion<T>;\n}\n\nexport async function getPremintMintFee({\n tokenContract,\n publicClient,\n}: {\n tokenContract: Address;\n publicClient: PublicClient;\n}) {\n // try reading mint fee function from premint executor. this will revert\n // if the abi is not up to date yet\n try {\n return await publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"mintFee\",\n args: [tokenContract],\n });\n } catch (e) {\n console.error(e);\n\n return parseEther(\"0.000777\");\n }\n}\n\ntype GetMintCostsParams = {\n tokenContract: Address;\n tokenPrice: bigint;\n quantityToMint: bigint | number;\n publicClient: PublicClient;\n};\n\nexport async function getPremintMintCosts({\n publicClient,\n tokenContract,\n tokenPrice,\n quantityToMint,\n}: GetMintCostsParams): Promise<MintCosts> {\n const mintFee = await getPremintMintFee({ tokenContract, publicClient });\n\n const quantityToMintBigInt = BigInt(quantityToMint);\n\n return {\n mintFee: mintFee * quantityToMintBigInt,\n totalPurchaseCost: tokenPrice * quantityToMintBigInt,\n totalCostEth: (mintFee + tokenPrice) * quantityToMintBigInt,\n };\n}\nexport async function getPremintPricePerToken({\n collection,\n uid,\n premintGetter,\n}: {\n collection: Address;\n uid: number;\n premintGetter: IPremintGetter;\n}) {\n const { premint: premintConfigWithVersion } = await premintGetter.get({\n collectionAddress: collection,\n uid,\n });\n\n if (\n isPremintConfigV1(premintConfigWithVersion) ||\n isPremintConfigV2(premintConfigWithVersion)\n ) {\n return premintConfigWithVersion.premintConfig.tokenConfig.pricePerToken;\n }\n\n throw new Error(\"Premint version not supported to get price\");\n}\n\nexport async function getPremintMintCostsWithUnknownTokenPrice({\n premintGetter,\n uid,\n ...rest\n}: Omit<GetMintCostsParams, \"tokenPrice\"> & {\n premintGetter: IPremintGetter;\n uid: number;\n}) {\n const pricePerToken = await getPremintPricePerToken({\n uid,\n premintGetter,\n collection: rest.tokenContract,\n });\n\n return await getPremintMintCosts({\n ...rest,\n tokenPrice: pricePerToken,\n });\n}\n\nexport function makeMintRewardsRecipient({\n mintReferral = zeroAddress,\n platformReferral = zeroAddress,\n}: {\n mintReferral?: Address;\n platformReferral?: Address;\n}): Address[] {\n return [mintReferral, platformReferral];\n}\n\nexport function getDefaultFixedPriceMinterAddress(chainId: number): Address {\n return zoraCreatorFixedPriceSaleStrategyAddress[\n chainId as keyof typeof zoraCreatorFixedPriceSaleStrategyAddress\n ]!;\n}\n\nexport const emptyContractCreationConfig = (): ContractCreationConfig => ({\n contractAdmin: zeroAddress,\n contractURI: \"\",\n contractName: \"\",\n additionalAdmins: [],\n});\n\nexport function defaultAdditionalAdmins(\n collection: ContractCreationConfigWithOptionalAdditionalAdmins,\n): ContractCreationConfig {\n return {\n ...collection,\n additionalAdmins: collection.additionalAdmins || [],\n };\n}\n\nexport const toContractCreationConfigOrAddress = ({\n collection,\n collectionAddress,\n}: {\n collection?: ContractCreationConfigWithOptionalAdditionalAdmins;\n collectionAddress?: Address;\n}) => {\n if (typeof collection !== \"undefined\") {\n return {\n contract: collection,\n };\n }\n\n if (typeof collectionAddress !== \"undefined\") {\n return {\n contractAddress: collectionAddress,\n };\n }\n\n throw new Error(\"Must provide either a collection or a collection address\");\n};\n","import {\n arbitrum,\n base,\n baseSepolia,\n foundry,\n mainnet,\n optimism,\n sepolia,\n zora,\n zoraSepolia,\n} from \"viem/chains\";\nimport type { components } from \"./generated/premint-api-types\";\nimport { parseEther } from \"viem\";\nimport { getSubgraph } from \"../constants\";\n\ntype BackendChainName = components[\"schemas\"][\"ChainName\"];\n\nexport type NetworkConfig = {\n chainId: number;\n zoraCollectPathChainName: string;\n zoraBackendChainName: BackendChainName;\n isTestnet: boolean;\n subgraphUrl: string;\n};\n\nexport const REWARD_PER_TOKEN = parseEther(\"0.000777\");\n\nexport const networkConfigByChain: Record<number, NetworkConfig> = {\n [mainnet.id]: {\n chainId: mainnet.id,\n isTestnet: false,\n zoraCollectPathChainName: \"eth\",\n zoraBackendChainName: \"ETHEREUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-mainnet\", \"stable\"),\n },\n [sepolia.id]: {\n chainId: sepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"sep\",\n zoraBackendChainName: \"ETHEREUM-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-sepolia\", \"stable\"),\n },\n [zora.id]: {\n chainId: zora.id,\n isTestnet: false,\n zoraCollectPathChainName: \"zora\",\n zoraBackendChainName: \"ZORA-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-zora-mainnet\", \"stable\"),\n },\n [zoraSepolia.id]: {\n chainId: zoraSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zsep\",\n zoraBackendChainName: \"ZORA-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-zora-sepolia\", \"stable\"),\n },\n [optimism.id]: {\n chainId: optimism.id,\n isTestnet: false,\n zoraCollectPathChainName: \"oeth\",\n zoraBackendChainName: \"OPTIMISM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-optimism\", \"stable\"),\n },\n [arbitrum.id]: {\n chainId: arbitrum.id,\n isTestnet: true,\n zoraCollectPathChainName: \"arb\",\n zoraBackendChainName: \"ARBITRUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-arbitrum-one\", \"stable\"),\n },\n [base.id]: {\n chainId: base.id,\n isTestnet: false,\n zoraCollectPathChainName: \"base\",\n zoraBackendChainName: \"BASE-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-base-mainnet\", \"stable\"),\n },\n [baseSepolia.id]: {\n chainId: baseSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"bsep\",\n zoraBackendChainName: \"BASE-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-base-sepolia\", \"stable\"),\n },\n [foundry.id]: {\n chainId: foundry.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zgor\",\n zoraBackendChainName: \"ZORA-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n};\n\nexport const getSubgraphUrl = (chainId: number): string => {\n const networkConfig = networkConfigByChain[chainId];\n\n if (!networkConfig) {\n throw new Error(`Network not configured for chain id ${chainId}`);\n }\n\n return networkConfig.subgraphUrl;\n};\n","import { parseAbi } from \"viem\";\n\nexport const ZORA_API_BASE = \"https://api.zora.co/\";\nexport const OPEN_EDITION_MINT_SIZE = BigInt(\"18446744073709551615\");\n\n// Subgraph base settings\nconst SUBGRAPH_CONFIG_BASE =\n \"https://api.goldsky.com/api/public/project_clhk16b61ay9t49vm6ntn4mkz/subgraphs\";\n\nexport function getSubgraph(name: string, version: string): string {\n return `${SUBGRAPH_CONFIG_BASE}/${name}/${version}/gn`;\n}\n\nexport const zora721Abi = parseAbi([\n \"function mintWithRewards(address recipient, uint256 quantity, string calldata comment, address mintReferral) external payable\",\n \"function zoraFeeForAmount(uint256 amount) public view returns (address, uint256)\",\n] as const);\n\nexport const zora1155LegacyAbi = [\n {\n type: \"function\",\n name: \"mintWithRewards\",\n inputs: [\n {\n name: \"minter\",\n type: \"address\",\n internalType: \"contract IMinter1155\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"quantity\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"minterArguments\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n {\n name: \"mintReferral\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"payable\",\n },\n] as const;\n","import { networkConfigByChain } from \"src/apis/chain-constants\";\nimport { components, paths } from \"src/apis/generated/premint-api-types\";\nimport { Address, Hex } from \"viem\";\nimport {\n ContractCreationConfig,\n PremintConfigAndVersion,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n PremintSignatureGetOfCollectionResponse,\n PremintSignatureGetResponse,\n} from \"./premint-api-client\";\nimport { ContractCreationConfigOrAddress } from \"./contract-types\";\n\nexport const convertCollectionFromApi = (\n collection: PremintSignatureGetResponse[\"collection\"],\n): ContractCreationConfig | undefined => {\n if (!collection) return undefined;\n\n return {\n additionalAdmins:\n (collection.additionalAdmins as Address[] | undefined) || [],\n contractAdmin: collection.contractAdmin as Address,\n contractName: collection.contractName,\n contractURI: collection.contractURI,\n };\n};\n\n/**\n * Convert server to on-chain types for a premint\n *\n * @param premint Premint object from the server to convert to one that's compatible with viem\n * @returns Viem type-compatible premint object\n */\nexport const convertPremintFromApi = (\n premint: PremintSignatureGetResponse[\"premint\"],\n): PremintConfigAndVersion => {\n if (\n premint.config_version === PremintConfigVersion.V1 ||\n !premint.config_version\n ) {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV1\"];\n return {\n premintConfigVersion: PremintConfigVersion.V1,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n royaltyRecipient: tokenConfig.royaltyRecipient as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n } else {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV2\"];\n return {\n premintConfigVersion: PremintConfigVersion.V2,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n payoutRecipient: tokenConfig.payoutRecipient as Address,\n createReferral: tokenConfig.createReferral as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n }\n};\n\nexport type PremintFromApi = ReturnType<typeof convertGetPremintApiResponse>;\n\nexport const convertGetPremintApiResponse = (\n response: PremintSignatureGetResponse,\n) => ({\n collection: convertCollectionFromApi(response.collection),\n collectionAddress: response.collection_address as Address,\n signature: response.signature as Hex,\n signer: response.signer as Address,\n premint: convertPremintFromApi(response.premint),\n});\n\nexport type PremintCollectionFromApi = ReturnType<\n typeof convertGetPremintOfCollectionApiResponse\n>;\n\nexport const convertGetPremintOfCollectionApiResponse = (\n response: PremintSignatureGetOfCollectionResponse,\n) => ({\n collection: convertCollectionFromApi({\n contractAdmin: response.contract_admin,\n contractName: response.contract_name,\n contractURI: response.contract_uri,\n }),\n premints: response.premints.map((premint) => ({\n premint: convertPremintFromApi(premint),\n signature: premint.signature as Hex,\n })),\n});\n\nconst encodePremintV1ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV1): PremintSignatureGetResponse[\"premint\"] => ({\n ...premint,\n config_version: \"1\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nconst encodePremintV2ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV2): PremintSignatureRequestBody[\"premint\"] => ({\n ...premint,\n config_version: \"2\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nexport const encodePremintForAPI = <T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n}: PremintConfigWithVersion<T>): PremintSignatureRequestBody[\"premint\"] => {\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return encodePremintV1ForAPI(premintConfig as PremintConfigV1);\n }\n if (premintConfigVersion === PremintConfigVersion.V2) {\n return encodePremintV2ForAPI(premintConfig as PremintConfigV2);\n }\n throw new Error(`Invalid premint config version ${premintConfigVersion}`);\n};\n\nexport type SignaturePostType = paths[\"/signature\"][\"post\"];\nexport type PremintSignatureRequestBody =\n SignaturePostType[\"requestBody\"][\"content\"][\"application/json\"];\nexport type PremintSignatureResponse =\n SignaturePostType[\"responses\"][200][\"content\"][\"application/json\"];\n\n/**\n * Encode input for posting a premint signature to the premint api\n * @param param0\n * @returns\n */\nexport const encodePostSignatureInput = <T extends PremintConfigVersion>({\n contract: collection,\n contractAddress: collectionAddress,\n premintConfigVersion,\n premintConfig,\n signature,\n chainId,\n}: {\n signature: Hex;\n chainId: number;\n} & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress): PremintSignatureRequestBody => ({\n premint: encodePremintForAPI({\n premintConfig,\n premintConfigVersion,\n }),\n signature,\n collection: collection as\n | PremintSignatureRequestBody[\"collection\"]\n | undefined,\n collection_address: collectionAddress,\n chain_name: networkConfigByChain[chainId]!.zoraBackendChainName,\n});\n\nexport const isPremintConfigV1 = (\n premintConfigAndVersion: PremintConfigAndVersion,\n): premintConfigAndVersion is PremintConfigWithVersion<PremintConfigVersion.V1> =>\n premintConfigAndVersion.premintConfigVersion === PremintConfigVersion.V1;\n\nexport const isPremintConfigV2 = (\n premintConfigAndVersion: PremintConfigAndVersion,\n): premintConfigAndVersion is PremintConfigWithVersion<PremintConfigVersion.V2> =>\n premintConfigAndVersion.premintConfigVersion === PremintConfigVersion.V2;\n","export class BadResponseError<T = any> extends Error {\n status: number;\n json: T;\n constructor(message: string, status: number, json: any) {\n super(message);\n this.name = \"BadResponseError\";\n this.status = status;\n this.json = json;\n }\n}\n\nasync function wait(delayMs: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, delayMs);\n });\n}\n\n/**\n * A simple fetch() wrapper for HTTP gets.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON get against\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const get = async <T>(url: string) => {\n const response = await fetch(url, { method: \"GET\" });\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Invalid response, status ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\n/**\n * A simple fetch() wrapper for HTTP post.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON POST against\n * @param data Data to POST to the server, converted to JSON\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const post = async <T>(url: string, data: any) => {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n },\n body: JSON.stringify(data),\n });\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Bad response: ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\nexport const retries = async <T>(\n tryFn: () => T,\n maxTries: number = 3,\n atTry: number = 1,\n linearBackoffMS: number = 200,\n): Promise<T> => {\n try {\n return await tryFn();\n } catch (err: any) {\n if (err instanceof BadResponseError) {\n if (err.status >= 500) {\n if (atTry <= maxTries) {\n await wait(atTry * linearBackoffMS);\n return await retries(tryFn, maxTries, atTry + 1);\n }\n }\n }\n throw err;\n }\n};\n\nexport interface IHttpClient {\n get: typeof get;\n post: typeof post;\n retries: typeof retries;\n}\n\nexport const httpClient: IHttpClient = {\n get,\n post,\n retries,\n};\n","import { Account, Address } from \"viem\";\nimport {\n GenericTokenIdTypes,\n SimulateContractParametersWithAccount,\n} from \"src/types\";\n\nexport type MintParameters<MintType> = {\n /** Type of the collection to be minted. */\n mintType: MintType;\n};\n\nexport type Erc1155MintParameters = MintParameters<\"1155\"> & {\n /** Token id to mint */\n tokenId: GenericTokenIdTypes;\n};\n\nexport type Erc721MintParameters = MintParameters<\"721\">;\n\nexport type OnChainMintParameters =\n | Erc1155MintParameters\n | Erc721MintParameters;\n\nexport type PremintMintParameters = MintParameters<\"premint\"> & {\n /** uid of the Premint to mint */\n uid: number;\n};\n\nexport type MintType = \"1155\" | \"721\" | \"premint\";\n\nexport type MintTypes =\n | Erc1155MintParameters\n | Erc721MintParameters\n | PremintMintParameters;\n\nexport type GetMintParameters = MintTypes & {\n /** Address of the contract that the item belongs to */\n tokenContract: Address;\n preferredSaleType?: SaleType;\n};\n\nexport type GetMintsOfContractParameters = {\n /** Address of the contract to get the tokens of */\n tokenContract: Address;\n preferredSaleType?: SaleType;\n};\n\nexport const isOnChainMint = (mint: MintTypes): mint is OnChainMintParameters =>\n mint.mintType !== \"premint\";\n\nexport const is1155Mint = (mint: MintTypes): mint is Erc1155MintParameters =>\n mint.mintType === \"1155\";\n\nexport type MintParametersBase = {\n /** Account to execute the mint */\n minterAccount: Account | Address;\n /** Quantity of tokens to mint. Defaults to 1 */\n quantityToMint: number | bigint;\n /** Comment to add to the mint */\n mintComment?: string;\n /** Address to receive the mint referral reward */\n mintReferral?: Address;\n /** Address to receive the minted tokens. Defaults to the minting account */\n mintRecipient?: Address;\n /** If this is a premint, the address to get the first minter reward */\n firstMinter?: Address;\n};\n\nexport type MakeMintParametersArgumentsBase = MintParametersBase & {\n /** Premint contract address */\n tokenContract: Address;\n};\n\nexport type Make1155MintArguments = MakeMintParametersArgumentsBase &\n Erc1155MintParameters & {\n preferredSaleType?: SaleType;\n };\n\nexport type Make721MintArguments = MakeMintParametersArgumentsBase &\n Erc721MintParameters & {\n preferredSaleType?: SaleType;\n };\n\nexport type MakePremintMintParametersArguments =\n MakeMintParametersArgumentsBase &\n PremintMintParameters & {\n /** Account to receive first minter reward, if this mint brings the premint onchain */\n firstMinter?: Address;\n };\n\nexport type MakeMintParametersArguments =\n | Make1155MintArguments\n | Make721MintArguments\n | MakePremintMintParametersArguments;\n\nexport type GetMintCostsParameters = {\n /** Address of token contract/collection to get the mint costs for */\n collection: Address;\n /** Quantity of tokens that will be minted */\n quantityMinted: number | bigint;\n} & MintTypes;\n\nexport type SaleType = \"fixedPrice\" | \"erc20\" | \"premint\";\n\ntype SaleStrategy<T extends SaleType> = {\n saleType: T;\n pricePerToken: bigint;\n maxTokensPerAddress: bigint;\n};\n\ntype FixedPriceSaleStrategy = SaleStrategy<\"fixedPrice\"> & {\n address: Address;\n saleStart: string;\n saleEnd: string;\n};\n\ntype ERC20SaleStrategy = SaleStrategy<\"erc20\"> & {\n address: Address;\n saleStart: string;\n saleEnd: string;\n currency: Address;\n};\n\ntype PremintSaleStrategy = SaleStrategy<\"premint\"> & {\n duration: bigint;\n};\n\nexport type SaleStrategies =\n | FixedPriceSaleStrategy\n | ERC20SaleStrategy\n | PremintSaleStrategy;\n\nexport type OnchainSalesStrategies = FixedPriceSaleStrategy | ERC20SaleStrategy;\n\nexport function isErc20SaleStrategy(\n salesConfig: FixedPriceSaleStrategy | ERC20SaleStrategy | PremintSaleStrategy,\n): salesConfig is ERC20SaleStrategy {\n return salesConfig.saleType === \"erc20\";\n}\n\nexport type ContractInfo = {\n /** Address of the contract */\n address: Address;\n /** Contract metadata uri */\n URI: string;\n /** Contract name */\n name: string;\n};\n\nexport type MintableBase = {\n /** The contract the mintable belongs to */\n contract: ContractInfo;\n /** Token metadata URI */\n tokenURI: string;\n /** Price in eth to mint 1 item */\n mintFeePerQuantity: bigint;\n /** Creator of the mintable item */\n creator: Address;\n /** Maximum total number of items that can be minted */\n maxSupply: bigint;\n /** Total number of items minted so far */\n totalMinted: bigint;\n};\n\nexport type OnchainMintable = MintableBase & {\n mintType: \"721\" | \"1155\";\n tokenId?: bigint;\n contractVersion: string;\n};\n\nexport type PremintMintable = MintableBase & {\n mintType: \"premint\";\n uid: number;\n};\n\nexport type OnchainSalesConfigAndTokenInfo = {\n salesConfig: FixedPriceSaleStrategy | ERC20SaleStrategy;\n} & OnchainMintable;\n\nexport type PremintSalesConfigAndTokenInfo = {\n salesConfig: PremintSaleStrategy;\n} & PremintMintable;\n\nexport type SalesConfigAndTokenInfo =\n | OnchainSalesConfigAndTokenInfo\n | PremintMintable;\n\nexport interface IOnchainMintGetter {\n getMintable(params: {\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n }): Promise<OnchainSalesConfigAndTokenInfo>;\n\n getContractMintable(params: {\n tokenAddress: Address;\n }): Promise<OnchainSalesConfigAndTokenInfo[]>;\n\n getContractPremintTokenIds(params: {\n tokenAddress: Address;\n }): Promise<{ tokenId: BigInt; uid: number }[]>;\n}\n\nexport type MintCosts = {\n /** The total of the mint fee, in eth */\n mintFee: bigint;\n /** If it is a paid or erc20 mint, the total price of the paid or erc20 mint in eth or erc20 value correspondingly. */\n totalPurchaseCost: bigint;\n /** If it is an erc20 mint, the erc20 address */\n totalPurchaseCostCurrency?: Address;\n /** The total cost in eth (mint fee + purchase cost) to mint */\n totalCostEth: bigint;\n};\n\nexport type Erc20Approval = {\n /** ERC20 token address that must be approved */\n erc20: Address;\n /** Quantity of ERC20 that must be approved */\n quantity: bigint;\n /** Address that must be approved to transfer to */\n approveTo: Address;\n};\n\nexport type PrepareMintReturn = {\n /** Prepared parameters to execute the mint transaction */\n parameters: SimulateContractParametersWithAccount;\n /** If an erc20 approval is necessary, information for the erc20 approval */\n erc20Approval?: Erc20Approval;\n /** Cost breakdown to mint the quantity of tokens */\n costs: MintCosts;\n};\n\nexport type PrepareMint = (params: MintParametersBase) => PrepareMintReturn;\n\nexport type MintableReturn = {\n /** Token information */\n token: SalesConfigAndTokenInfo;\n /** Function that takes a quantity of items to mint and returns a prepared transaction and the costs to mint that quantity */\n prepareMint: PrepareMint;\n};\n","import { Account, Address, PublicClient as BasePublicClient } from \"viem\";\nimport { IHttpClient } from \"./apis/http-api-base\";\nimport { SimulateContractParametersWithAccount } from \"./types\";\n\nexport const makeContractParameters = (\n args: SimulateContractParametersWithAccount,\n) => args;\n\nexport type PublicClient = Pick<BasePublicClient, \"readContract\">;\n\nexport type ClientConfig = {\n /** The chain that the client is to run on. */\n chainId: number;\n /** Optional public client for the chain. If not provide, it is created. */\n publicClient: PublicClient;\n};\n\nexport function setupClient({ chainId, publicClient }: ClientConfig) {\n return {\n chainId,\n publicClient,\n };\n}\n\nexport function mintRecipientOrAccount({\n mintRecipient,\n minterAccount,\n}: {\n mintRecipient?: Address;\n minterAccount: Address | Account;\n}): Address {\n return (\n mintRecipient ||\n (typeof minterAccount === \"string\" ? minterAccount : minterAccount.address)\n );\n}\n\nexport type Concrete<Type> = {\n [Property in keyof Type]-?: Type[Property];\n};\n\nexport async function querySubgraphWithRetries({\n httpClient,\n subgraphUrl,\n query,\n variables,\n}: {\n httpClient: IHttpClient;\n subgraphUrl: string;\n query: string;\n variables: any;\n}) {\n const { retries, post } = httpClient;\n\n const result = await retries(async () => {\n return await post<any>(subgraphUrl, {\n query,\n variables,\n });\n });\n\n return result?.data;\n}\n","import { GenericTokenIdTypes } from \"src/types\";\nimport { Address } from \"viem\";\n\nexport type FixedPriceSaleStrategyResult = {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n};\n\nexport type ERC20SaleStrategyResult = FixedPriceSaleStrategyResult & {\n currency: Address;\n};\n\nexport type SalesStrategyResult =\n | {\n type: \"FIXED_PRICE\";\n fixedPrice: FixedPriceSaleStrategyResult;\n }\n | {\n type: \"ERC_20_MINTER\";\n erc20Minter: ERC20SaleStrategyResult;\n };\n\nexport type TokenQueryResult = {\n tokenId?: string;\n creator: Address;\n uri: string;\n totalMinted: string;\n maxSupply: string;\n salesStrategies?: SalesStrategyResult[];\n tokenStandard: \"ERC1155\" | \"ERC721\";\n contract: {\n mintFeePerQuantity: \"string\";\n salesStrategies: SalesStrategyResult[];\n address: Address;\n contractVersion: string;\n contractURI: string;\n name: string;\n };\n};\n\nconst NFT_SALE_STRATEGY_FRAGMENT = `\nfragment SaleStrategy on SalesStrategyConfig {\n type\n fixedPrice {\n address\n pricePerToken\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n erc20Minter {\n address\n pricePerToken\n currency\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n}`;\n\nconst TOKEN_FRAGMENT = `\nfragment Token on ZoraCreateToken {\n creator\n tokenId\n uri\n totalMinted\n maxSupply\n tokenStandard\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\"]}) {\n ...SaleStrategy\n }\n contract {\n address\n mintFeePerQuantity\n contractVersion\n contractURI\n name\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\"]}) {\n ...SaleStrategy\n }\n }\n}`;\n\nconst FRAGMENTS = `\n${NFT_SALE_STRATEGY_FRAGMENT}\n${TOKEN_FRAGMENT}\n`;\n\nexport function buildNftTokenSalesQuery({\n tokenId,\n tokenAddress,\n}: {\n tokenId?: GenericTokenIdTypes;\n tokenAddress: Address;\n}): ISubgraphQuery<TokenQueryResult> {\n return {\n query: `\n${FRAGMENTS}\nquery ($id: ID!) {\n zoraCreateToken(id: $id) {\n ...Token \n }\n}\n`,\n variables: {\n id:\n tokenId !== undefined\n ? // Generic Token ID types all stringify down to the base numeric equivalent.\n `${tokenAddress.toLowerCase()}-${tokenId}`\n : `${tokenAddress.toLowerCase()}-0`,\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.zoraCreateToken,\n };\n}\n\nexport function buildGetDefaultMintPriceQuery({}): ISubgraphQuery<\n bigint | undefined\n> {\n return {\n query: `\n{\n defaultMintPrice(id: \"0x0000000000000000000000000000000000000000\") {\n pricePerToken\n }\n}\n`,\n variables: {},\n parseResponseData: (responseData: any | undefined) =>\n responseData?.defaultMintPrice?.pricePerToken\n ? BigInt(responseData?.defaultMintPrice?.pricePerToken)\n : undefined,\n };\n}\n\nexport function buildContractTokensQuery({\n tokenAddress,\n}: {\n tokenAddress: Address;\n}): ISubgraphQuery<TokenQueryResult[]> {\n return {\n query: `\n${FRAGMENTS}\nquery ($contract: Bytes!) {\n zoraCreateTokens(\n where: {address: $contract}\n ) {\n ...Token\n }\n}\n`,\n variables: {\n contract: tokenAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.zoraCreateTokens,\n };\n}\n\nexport type ISubgraphQuery<T> = {\n query: string;\n variables: Record<string, any>;\n parseResponseData: (data: any | undefined) => T | undefined;\n};\n\nexport function buildPremintsOfContractQuery({\n tokenAddress,\n}: {\n tokenAddress: Address;\n}): ISubgraphQuery<{ uid: string; tokenId: string }[]> {\n return {\n query: `\n query ($contractAddress: Bytes!) {\n premints(where:{contractAddress:$contractAddress}) {\n uid\n tokenId\n }\n }\n `,\n variables: {\n contractAddress: tokenAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.premints,\n };\n}\n","import { Address } from \"viem\";\nimport {\n httpClient as defaultHttpClient,\n IHttpClient,\n} from \"../apis/http-api-base\";\nimport { NetworkConfig, networkConfigByChain } from \"src/apis/chain-constants\";\nimport { GenericTokenIdTypes } from \"src/types\";\nimport {\n IOnchainMintGetter,\n SaleType,\n OnchainMintable,\n OnchainSalesConfigAndTokenInfo,\n OnchainSalesStrategies,\n isErc20SaleStrategy,\n} from \"./types\";\nimport { querySubgraphWithRetries } from \"src/utils\";\nimport {\n buildContractTokensQuery,\n buildGetDefaultMintPriceQuery,\n buildNftTokenSalesQuery,\n buildPremintsOfContractQuery,\n ISubgraphQuery,\n SalesStrategyResult,\n TokenQueryResult,\n} from \"./subgraph-queries\";\nimport * as semver from \"semver\";\n\nexport const getApiNetworkConfigForChain = (chainId: number): NetworkConfig => {\n if (!networkConfigByChain[chainId]) {\n throw new Error(`chain id ${chainId} network not configured `);\n }\n return networkConfigByChain[chainId]!;\n};\n\nfunction parseSalesConfig(\n targetStrategy: SalesStrategyResult,\n): OnchainSalesStrategies {\n if (targetStrategy.type === \"FIXED_PRICE\")\n return {\n saleType: \"fixedPrice\",\n ...targetStrategy.fixedPrice,\n maxTokensPerAddress: BigInt(\n targetStrategy.fixedPrice.maxTokensPerAddress,\n ),\n pricePerToken: BigInt(targetStrategy.fixedPrice.pricePerToken),\n };\n\n if (targetStrategy.type === \"ERC_20_MINTER\") {\n return {\n saleType: \"erc20\",\n ...targetStrategy.erc20Minter,\n maxTokensPerAddress: BigInt(\n targetStrategy.erc20Minter.maxTokensPerAddress,\n ),\n pricePerToken: BigInt(targetStrategy.erc20Minter.pricePerToken),\n };\n }\n\n throw new Error(\"Unknown saleType\");\n}\n\nfunction getSaleEnd(a: SalesStrategyResult) {\n return BigInt(\n a.type === \"ERC_20_MINTER\" ? a.erc20Minter.saleEnd : a.fixedPrice.saleEnd,\n );\n}\n\nfunction getTargetStrategy({\n tokenId,\n preferredSaleType,\n token,\n}: {\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n token: TokenQueryResult;\n}) {\n const allStrategies =\n (typeof tokenId !== \"undefined\"\n ? token.salesStrategies\n : token.contract.salesStrategies) || [];\n\n const saleStrategies = allStrategies.sort((a, b) =>\n getSaleEnd(a) > getSaleEnd(b) ? 1 : -1,\n );\n\n let targetStrategy: SalesStrategyResult | undefined;\n\n if (!preferredSaleType) {\n targetStrategy = saleStrategies[0];\n if (!targetStrategy) {\n throw new Error(\"Cannot find sale strategy\");\n }\n } else {\n const mappedSaleType =\n preferredSaleType === \"erc20\" ? \"ERC_20_MINTER\" : \"FIXED_PRICE\";\n targetStrategy = saleStrategies.find(\n (strategy: SalesStrategyResult) => strategy.type === mappedSaleType,\n );\n if (!targetStrategy) {\n const targetStrategy = saleStrategies.find(\n (strategy: SalesStrategyResult) =>\n strategy.type === \"FIXED_PRICE\" || strategy.type === \"ERC_20_MINTER\",\n );\n if (!targetStrategy) throw new Error(\"Cannot find valid sale strategy\");\n return targetStrategy;\n }\n }\n\n return targetStrategy;\n}\n\nexport class SubgraphMintGetter implements IOnchainMintGetter {\n httpClient: IHttpClient;\n networkConfig: NetworkConfig;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.httpClient = httpClient || defaultHttpClient;\n this.networkConfig = getApiNetworkConfigForChain(chainId);\n }\n\n async getContractMintFee(contract: TokenQueryResult[\"contract\"]) {\n const storedMintFee = BigInt(contract.mintFeePerQuantity);\n if (!contractUsesMintCardsForMintFee(contract.contractVersion)) {\n return storedMintFee;\n }\n const defaultMintFee = await this.querySubgraphWithRetries(\n buildGetDefaultMintPriceQuery({}),\n );\n\n return defaultMintFee || storedMintFee;\n }\n\n async querySubgraphWithRetries<T>({\n query,\n variables,\n parseResponseData,\n }: ISubgraphQuery<T>) {\n const responseData = await querySubgraphWithRetries({\n httpClient: this.httpClient,\n subgraphUrl: this.networkConfig.subgraphUrl,\n query,\n variables,\n });\n\n return parseResponseData(responseData);\n }\n\n getMintable: IOnchainMintGetter[\"getMintable\"] = async ({\n tokenAddress,\n tokenId,\n preferredSaleType: saleType,\n }) => {\n const token = await this.querySubgraphWithRetries(\n buildNftTokenSalesQuery({\n tokenId,\n tokenAddress,\n }),\n );\n\n if (!token) {\n throw new Error(\"Cannot find token\");\n }\n\n const defaultMintFee = await this.getContractMintFee(token.contract);\n\n return parseTokenQueryResult({\n token: token,\n defaultMintFee,\n tokenId,\n preferredSaleType: saleType,\n });\n };\n\n async getContractMintable({\n tokenAddress,\n preferredSaleType,\n }: {\n tokenAddress: Address;\n preferredSaleType?: SaleType;\n }) {\n const tokens = await this.querySubgraphWithRetries(\n buildContractTokensQuery({\n tokenAddress,\n }),\n );\n\n if (!tokens || tokens.length === 0) return [];\n\n const defaultMintFee = await this.getContractMintFee(tokens[0]!.contract);\n\n return tokens\n .filter((x) => x.tokenId !== \"0\")\n .map((token) =>\n parseTokenQueryResult({\n token,\n tokenId: token.tokenId,\n preferredSaleType,\n defaultMintFee,\n }),\n );\n }\n\n async getContractPremintTokenIds({\n tokenAddress,\n }: {\n tokenAddress: Address;\n }) {\n const premints = await this.querySubgraphWithRetries(\n buildPremintsOfContractQuery({\n tokenAddress,\n }),\n );\n\n return (\n premints?.map((premint) => ({\n tokenId: BigInt(premint.tokenId),\n uid: +premint.uid,\n })) || []\n );\n }\n}\n\nfunction parseTokenQueryResult({\n token,\n tokenId,\n preferredSaleType,\n defaultMintFee,\n}: {\n token: TokenQueryResult;\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n defaultMintFee: bigint;\n}): OnchainSalesConfigAndTokenInfo {\n const targetStrategy = getTargetStrategy({\n tokenId,\n preferredSaleType: preferredSaleType,\n token,\n });\n\n const tokenInfo = parseTokenInfo(token, defaultMintFee);\n\n const salesConfig = parseSalesConfig(targetStrategy);\n\n if (isErc20SaleStrategy(salesConfig)) {\n tokenInfo.mintFeePerQuantity = 0n;\n }\n\n return {\n ...tokenInfo,\n salesConfig,\n };\n}\n\nconst contractUsesMintCardsForMintFee = (contractVersion: string) => {\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n return semver.gte(semVerContractVersion, \"2.9.0\");\n};\n\nfunction parseTokenInfo(\n token: TokenQueryResult,\n defaultMintFee: bigint,\n): OnchainMintable {\n return {\n contract: {\n address: token.contract.address,\n name: token.contract.name,\n URI: token.contract.contractURI,\n },\n tokenURI: token.uri,\n tokenId: token.tokenId ? BigInt(token.tokenId) : undefined,\n mintType: token.tokenStandard === \"ERC721\" ? \"721\" : \"1155\",\n creator: token.creator,\n totalMinted: BigInt(token.totalMinted),\n maxSupply: BigInt(token.maxSupply),\n mintFeePerQuantity: defaultMintFee,\n contractVersion: token.contract.contractVersion,\n };\n}\n","import {\n ContractCreationConfig,\n PremintConfigVersion as PremintConfigVersionOrig,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address } from \"viem\";\n\nexport enum PremintConfigVersion {\n V1 = PremintConfigVersionOrig.V1,\n V2 = PremintConfigVersionOrig.V2,\n V3 = PremintConfigVersionOrig.V3,\n}\n\nexport type ContractCreationConfigWithOptionalAdditionalAdmins = Omit<\n ContractCreationConfig,\n \"additionalAdmins\"\n> & {\n /** Optional: if there are additional admins accounts that should be added as contract wide admins upon contract creation. */\n additionalAdmins?: Address[];\n};\n\nexport type ContractCreationConfigAndAddress = {\n /** Parameters for creating the contract for new premints. */\n collection?: ContractCreationConfigWithOptionalAdditionalAdmins;\n /** Premint collection address */\n collectionAddress: Address;\n};\n\nexport type ContractCreationConfigOrAddress =\n | {\n /** Parameters for creating the contract for new premints. */\n contract: ContractCreationConfigWithOptionalAdditionalAdmins;\n contractAddress?: undefined;\n }\n | {\n contract?: undefined;\n /** Premint collection address */\n contractAddress: Address;\n };\n","import {\n IHttpClient,\n httpClient as defaultHttpClient,\n} from \"../apis/http-api-base\";\nimport { components, paths } from \"../apis/generated/premint-api-types\";\nimport { ZORA_API_BASE } from \"../constants\";\nimport { getApiNetworkConfigForChain } from \"src/mint/subgraph-mint-getter\";\nimport {\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address, Hex } from \"viem\";\nimport {\n PremintCollectionFromApi,\n PremintFromApi,\n PremintSignatureRequestBody,\n PremintSignatureResponse,\n convertGetPremintApiResponse,\n convertGetPremintOfCollectionApiResponse,\n encodePostSignatureInput,\n} from \"./conversions\";\nimport { ContractCreationConfigOrAddress } from \"./contract-types\";\n\ntype PremintNextUIDGetType =\n paths[\"/signature/{chain_name}/{collection_address}/next_uid\"][\"get\"];\ntype PremintNextUIDGetPathParameters =\n PremintNextUIDGetType[\"parameters\"][\"path\"];\nexport type PremintNextUIDGetResponse =\n PremintNextUIDGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetType =\n paths[\"/signature/{chain_name}/{collection_address}/{uid}\"][\"get\"];\nexport type PremintSignatureGetResponse =\n SignaturePremintGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetOfCollectionType =\n paths[\"/signature/{chain_name}/{collection_address}\"][\"get\"];\nexport type PremintSignatureGetOfCollectionResponse =\n SignaturePremintGetOfCollectionType[\"responses\"][200][\"content\"][\"application/json\"];\n\nexport type PremintCollection = PremintSignatureGetResponse[\"collection\"];\n\nexport type BackendChainNames = components[\"schemas\"][\"ChainName\"];\n\nconst postSignature = async ({\n httpClient: { post, retries } = defaultHttpClient,\n ...data\n}: PremintSignatureRequestBody & {\n httpClient?: Pick<IHttpClient, \"retries\" | \"post\">;\n}): Promise<PremintSignatureResponse> =>\n retries(() =>\n post<PremintSignatureResponse>(`${ZORA_API_BASE}premint/signature`, data),\n );\n\nconst getNextUID = async ({\n chainId,\n collection_address,\n httpClient: { retries, get } = defaultHttpClient,\n}: Omit<PremintNextUIDGetPathParameters, \"chain_name\"> & {\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<PremintNextUIDGetResponse> =>\n retries(() =>\n get<PremintNextUIDGetResponse>(\n `${ZORA_API_BASE}premint/signature/${\n getApiNetworkConfigForChain(chainId).zoraBackendChainName\n }/${collection_address}/next_uid`,\n ),\n );\n\nexport const getSignature = async ({\n collectionAddress,\n uid,\n chainId,\n httpClient: { retries, get } = defaultHttpClient,\n}: {\n collectionAddress: Address;\n uid: number;\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<PremintFromApi> => {\n const chainName = getApiNetworkConfigForChain(chainId).zoraBackendChainName;\n const result = await retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chainName}/${collectionAddress.toLowerCase()}/${uid}`,\n ),\n );\n\n return convertGetPremintApiResponse(result);\n};\n\nconst getOfCollection = async ({\n collectionAddress,\n chainId,\n httpClient: { retries, get } = defaultHttpClient,\n}: {\n collectionAddress: Address;\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}) => {\n const chainName = getApiNetworkConfigForChain(chainId).zoraBackendChainName;\n const result = await retries(() =>\n get<PremintSignatureGetOfCollectionResponse>(\n `${ZORA_API_BASE}premint/signature/${chainName}/${collectionAddress.toLowerCase()}`,\n ),\n );\n\n return convertGetPremintOfCollectionApiResponse(result);\n};\n\nexport interface IPremintGetter {\n get(params: {\n collectionAddress: Address;\n uid: number;\n }): Promise<PremintFromApi>;\n\n getOfCollection(params: {\n collectionAddress: Address;\n }): Promise<PremintCollectionFromApi>;\n}\n\nexport interface IPremintAPI {\n get: IPremintGetter[\"get\"];\n\n getOfCollection: IPremintGetter[\"getOfCollection\"];\n\n getNextUID(collectionAddress: Address): Promise<number>;\n\n postSignature<T extends PremintConfigVersion>(\n params: {\n signature: Hex;\n } & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress,\n ): Promise<PremintSignatureResponse>;\n}\n\nclass PremintAPIClient implements IPremintAPI {\n chainId: number;\n httpClient: IHttpClient;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.chainId = chainId;\n this.httpClient = httpClient || defaultHttpClient;\n }\n postSignature: IPremintAPI[\"postSignature\"] = ({\n signature,\n ...rest\n }): Promise<PremintSignatureResponse> => {\n const data = encodePostSignatureInput({\n ...rest,\n chainId: this.chainId,\n signature,\n });\n return postSignature({\n ...data,\n httpClient: this.httpClient,\n });\n };\n\n getNextUID: IPremintAPI[\"getNextUID\"] = async (collectionAddress) =>\n (\n await getNextUID({\n collection_address: collectionAddress.toLowerCase(),\n chainId: this.chainId,\n httpClient: this.httpClient,\n })\n ).next_uid;\n\n get: IPremintAPI[\"get\"] = async ({ collectionAddress, uid }) => {\n return getSignature({\n collectionAddress,\n uid,\n chainId: this.chainId,\n httpClient: this.httpClient,\n });\n };\n\n getOfCollection: IPremintAPI[\"getOfCollection\"] = async ({\n collectionAddress,\n }) => {\n return getOfCollection({\n collectionAddress,\n chainId: this.chainId,\n httpClient: this.httpClient,\n });\n };\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import {\n Address,\n encodeAbiParameters,\n parseAbiParameters,\n zeroAddress,\n Account,\n SimulateContractParameters,\n} from \"viem\";\nimport {\n erc20MinterABI,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport { zora721Abi, zora1155LegacyAbi } from \"src/constants\";\nimport {\n GenericTokenIdTypes,\n SimulateContractParametersWithAccount,\n} from \"src/types\";\nimport { makeContractParameters, mintRecipientOrAccount } from \"src/utils\";\nimport { MintCosts, SaleStrategies, isErc20SaleStrategy } from \"./types\";\nimport { MakeMintParametersArgumentsBase } from \"./types\";\n\nimport { contractSupportsNewMintFunction } from \"./utils\";\nimport { OnchainSalesConfigAndTokenInfo } from \"./types\";\n\nexport function makeOnchainMintCall({\n token,\n mintParams,\n}: {\n token: OnchainSalesConfigAndTokenInfo;\n mintParams: Omit<MakeMintParametersArgumentsBase, \"tokenContract\">;\n}): SimulateContractParametersWithAccount {\n if (token.mintType === \"721\") {\n return makePrepareMint721TokenParams({\n salesConfigAndTokenInfo: token,\n tokenContract: token.contract.address,\n ...mintParams,\n });\n }\n\n return makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo: token,\n tokenContract: token.contract.address,\n tokenId: token.tokenId!,\n ...mintParams,\n });\n}\n\nexport type MintableParameters = Pick<\n OnchainSalesConfigAndTokenInfo,\n \"contractVersion\" | \"mintFeePerQuantity\" | \"salesConfig\"\n>;\n\nexport function makePrepareMint1155TokenParams({\n tokenContract: tokenContract,\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n mintComment,\n mintReferral,\n mintRecipient,\n quantityToMint,\n}: {\n salesConfigAndTokenInfo: MintableParameters;\n tokenId: GenericTokenIdTypes;\n} & Pick<\n MakeMintParametersArgumentsBase,\n | \"minterAccount\"\n | \"tokenContract\"\n | \"mintComment\"\n | \"mintReferral\"\n | \"quantityToMint\"\n | \"mintRecipient\"\n>): SimulateContractParameters<any, any, any, any, any, Address | Account> {\n const mintQuantity = BigInt(quantityToMint || 1);\n\n const mintTo = mintRecipientOrAccount({ mintRecipient, minterAccount });\n\n const saleType = salesConfigAndTokenInfo.salesConfig.saleType;\n\n if (saleType === \"fixedPrice\") {\n return makeEthMintCall({\n mintComment,\n minterAccount,\n mintQuantity,\n mintReferral,\n mintTo,\n salesConfigAndTokenInfo,\n tokenContract,\n tokenId,\n });\n }\n\n if (saleType === \"erc20\") {\n return makeContractParameters({\n abi: erc20MinterABI,\n functionName: \"mint\",\n account: minterAccount,\n address: salesConfigAndTokenInfo.salesConfig.address,\n /* args: mintTo, quantity, tokenAddress, tokenId, totalValue, currency, mintReferral, comment */\n args: [\n mintTo,\n mintQuantity,\n tokenContract,\n BigInt(tokenId),\n salesConfigAndTokenInfo.salesConfig.pricePerToken * mintQuantity,\n salesConfigAndTokenInfo.salesConfig.currency,\n mintReferral || zeroAddress,\n mintComment || \"\",\n ],\n });\n }\n\n throw new Error(\"Unsupported sale type\");\n}\n\nfunction makePrepareMint721TokenParams({\n salesConfigAndTokenInfo,\n minterAccount,\n tokenContract,\n mintComment,\n mintReferral,\n mintRecipient,\n quantityToMint,\n}: {\n salesConfigAndTokenInfo: MintableParameters;\n} & Pick<\n MakeMintParametersArgumentsBase,\n | \"minterAccount\"\n | \"tokenContract\"\n | \"mintComment\"\n | \"mintReferral\"\n | \"quantityToMint\"\n | \"mintRecipient\"\n>): SimulateContractParametersWithAccount {\n const actualQuantityToMint = BigInt(quantityToMint || 1);\n const mintValue = parseMintCosts({\n mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: actualQuantityToMint,\n }).totalCostEth;\n\n return makeContractParameters({\n abi: zora721Abi,\n address: tokenContract,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintRecipientOrAccount({ mintRecipient, minterAccount }),\n actualQuantityToMint,\n mintComment || \"\",\n mintReferral || zeroAddress,\n ],\n });\n}\n\nfunction makeEthMintCall({\n tokenContract,\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n mintComment,\n mintReferral,\n mintQuantity,\n mintTo,\n}: {\n minterAccount: Account | Address;\n tokenContract: Address;\n mintTo: Address;\n salesConfigAndTokenInfo: MintableParameters;\n tokenId: GenericTokenIdTypes;\n mintQuantity: bigint;\n mintComment?: string;\n mintReferral?: Address;\n}): SimulateContractParametersWithAccount {\n const mintValue = parseMintCosts({\n mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: mintQuantity,\n }).totalCostEth;\n\n const minterArguments = encodeAbiParameters(\n parseAbiParameters(\"address, string\"),\n [mintTo, mintComment || \"\"],\n );\n\n // if based on contract version it has the new mint function,\n // call the new mint function.\n if (\n contractSupportsNewMintFunction(salesConfigAndTokenInfo.contractVersion)\n ) {\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"mint\",\n account: minterAccount,\n value: mintValue,\n address: tokenContract,\n args: [\n salesConfigAndTokenInfo.salesConfig.address,\n BigInt(tokenId),\n mintQuantity,\n mintReferral ? [mintReferral] : [],\n minterArguments,\n ],\n });\n }\n\n // otherwise call the deprecated mint function\n return makeContractParameters({\n abi: zora1155LegacyAbi,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address: tokenContract,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n salesConfigAndTokenInfo.salesConfig.address,\n BigInt(tokenId),\n mintQuantity,\n minterArguments,\n mintReferral || zeroAddress,\n ],\n });\n}\n\nexport function parseMintCosts({\n salesConfig,\n mintFeePerQuantity,\n quantityToMint,\n}: {\n salesConfig: SaleStrategies;\n mintFeePerQuantity: bigint;\n quantityToMint: bigint;\n}): MintCosts {\n const mintFeeForTokens = mintFeePerQuantity * quantityToMint;\n\n const tokenPurchaseCost = BigInt(salesConfig.pricePerToken) * quantityToMint;\n\n const totalPurchaseCostCurrency = isErc20SaleStrategy(salesConfig)\n ? salesConfig.currency\n : undefined;\n\n const totalPurchaseCostEth = totalPurchaseCostCurrency\n ? 0n\n : tokenPurchaseCost;\n\n return {\n mintFee: mintFeeForTokens,\n totalPurchaseCost: tokenPurchaseCost,\n totalPurchaseCostCurrency,\n totalCostEth: mintFeeForTokens + totalPurchaseCostEth,\n };\n}\n","import * as semver from \"semver\";\nexport const contractSupportsNewMintFunction = (\n contractVersion?: string | null,\n) => {\n if (!contractVersion) {\n return false;\n }\n\n // Try force-convert version format to semver format\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n return semver.gte(semVerContractVersion, \"2.9.0\");\n};\n","import { IPremintGetter } from \"src/premint/premint-api-client\";\nimport {\n ContractInfo,\n Erc20Approval,\n GetMintCostsParameters,\n GetMintParameters,\n GetMintsOfContractParameters,\n IOnchainMintGetter,\n MintParametersBase,\n MintableReturn,\n OnchainSalesConfigAndTokenInfo,\n PremintSalesConfigAndTokenInfo,\n PrepareMint,\n is1155Mint,\n isOnChainMint,\n} from \"./types\";\nimport { Address, zeroAddress } from \"viem\";\nimport {\n getPremintMintCostsWithUnknownTokenPrice,\n getPremintMintFee,\n} from \"src/premint/preminter\";\nimport {\n PremintFromApi,\n isPremintConfigV1,\n isPremintConfigV2,\n} from \"src/premint/conversions\";\nimport { makeOnchainMintCall, parseMintCosts } from \"./mint-transactions\";\nimport { buildPremintMintCall } from \"src/premint/premint-client\";\nimport { IPublicClient } from \"src/types\";\n\nexport async function getMint({\n params,\n mintGetter,\n premintGetter,\n publicClient,\n}: {\n params: GetMintParameters;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n}): Promise<MintableReturn> {\n const { tokenContract } = params;\n if (isOnChainMint(params)) {\n const tokenId = is1155Mint(params) ? params.tokenId : undefined;\n const result = await mintGetter.getMintable({\n tokenId,\n tokenAddress: tokenContract,\n preferredSaleType: params.preferredSaleType,\n });\n\n return toMintableReturn(result);\n }\n\n const premint = await premintGetter.get({\n collectionAddress: tokenContract,\n uid: params.uid,\n });\n\n const mintFee = await getPremintMintFee({\n publicClient,\n tokenContract: tokenContract,\n });\n\n return toPremintMintReturn({ premint, mintFee });\n}\nexport async function getPremintsOfCollectionWithTokenIds({\n premintGetter,\n mintGetter,\n tokenContract,\n}: {\n premintGetter: IPremintGetter;\n mintGetter: IOnchainMintGetter;\n tokenContract: Address;\n}) {\n const { collection, premints } = await premintGetter.getOfCollection({\n collectionAddress: tokenContract,\n });\n\n const premintUidsAndTokenIds = await mintGetter.getContractPremintTokenIds({\n tokenAddress: tokenContract,\n });\n\n const premintsWithTokenId = premints.map((premint) => ({\n ...premint,\n tokenId: premintUidsAndTokenIds.find(\n ({ uid }) => uid === premint.premint.premintConfig.uid,\n )?.tokenId,\n }));\n\n return {\n collection: collection,\n premints: premintsWithTokenId,\n };\n}\n\nexport async function getMintsOfContract({\n params,\n mintGetter,\n premintGetter,\n publicClient,\n}: {\n params: GetMintsOfContractParameters;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n}): Promise<{ contract?: ContractInfo; tokens: MintableReturn[] }> {\n const onchainMints = (\n await mintGetter.getContractMintable({\n tokenAddress: params.tokenContract,\n })\n ).map(toMintableReturn);\n\n const offchainMints = await getPremintsOfContractMintable({\n mintGetter,\n premintGetter,\n publicClient,\n params: {\n tokenContract: params.tokenContract,\n },\n });\n\n const tokens = [...onchainMints, ...offchainMints];\n\n return {\n tokens: tokens,\n contract: tokens[0]?.token.contract,\n };\n}\n\nexport async function getMintCosts({\n params,\n mintGetter,\n premintGetter,\n publicClient,\n}: {\n params: GetMintCostsParameters;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n}) {\n const { quantityMinted: quantityToMint, collection } = params;\n if (isOnChainMint(params)) {\n const tokenId = is1155Mint(params) ? params.tokenId : undefined;\n const salesConfigAndTokenInfo = await mintGetter.getMintable({\n tokenId,\n tokenAddress: collection,\n });\n\n return parseMintCosts({\n mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n\n return getPremintMintCostsWithUnknownTokenPrice({\n premintGetter,\n publicClient: publicClient,\n quantityToMint: BigInt(quantityToMint),\n uid: params.uid,\n tokenContract: collection,\n });\n}\n\nasync function getPremintsOfContractMintable({\n mintGetter,\n premintGetter,\n publicClient,\n params,\n}: {\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n params: { tokenContract: Address };\n}): Promise<MintableReturn[]> {\n const { premints, collection } = await getPremintsOfCollectionWithTokenIds({\n mintGetter,\n premintGetter,\n tokenContract: params.tokenContract,\n });\n\n const offChainPremints = premints.filter(\n (premint) =>\n // if premint's uid is not in the list of uids from the subgraph, it is offchain\n typeof premint.tokenId === \"undefined\",\n );\n\n if (offChainPremints.length === 0) return [];\n\n const mintFee = await getPremintMintFee({\n publicClient,\n tokenContract: params.tokenContract,\n });\n\n return offChainPremints.map((premint) => {\n return toPremintMintReturn({\n premint: {\n premint: premint.premint,\n // todo: fix when api returns signer\n signer: zeroAddress,\n collection,\n collectionAddress: params.tokenContract,\n signature: premint.signature,\n },\n mintFee,\n });\n });\n}\n\n/** Parsing */\n\nfunction parsePremint({\n premint,\n mintFee,\n}: {\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\"\n >;\n mintFee: bigint;\n}): PremintSalesConfigAndTokenInfo {\n if (\n isPremintConfigV1(premint.premint) ||\n isPremintConfigV2(premint.premint)\n ) {\n return {\n creator: premint.signer,\n maxSupply: premint.premint.premintConfig.tokenConfig.maxSupply,\n mintFeePerQuantity: mintFee,\n mintType: \"premint\",\n uid: premint.premint.premintConfig.uid,\n contract: {\n address: premint.collectionAddress,\n name: premint.collection!.contractName,\n URI: premint.collection!.contractURI,\n },\n tokenURI: premint.premint.premintConfig.tokenConfig.tokenURI,\n totalMinted: 0n,\n salesConfig: {\n duration: premint.premint.premintConfig.tokenConfig.mintDuration,\n maxTokensPerAddress:\n premint.premint.premintConfig.tokenConfig.maxTokensPerAddress,\n pricePerToken: premint.premint.premintConfig.tokenConfig.pricePerToken,\n saleType: \"premint\",\n },\n };\n }\n\n throw new Error(\"Invalid premint config version\");\n}\n\nconst makeOnchainPrepareMint =\n (result: OnchainSalesConfigAndTokenInfo): PrepareMint =>\n (params: MintParametersBase) => ({\n parameters: makeOnchainMintCall({ token: result, mintParams: params }),\n erc20Approval: getRequiredErc20Approvals(params, result),\n costs: parseMintCosts({\n salesConfig: result.salesConfig,\n quantityToMint: BigInt(params.quantityToMint),\n mintFeePerQuantity: result.mintFeePerQuantity,\n }),\n });\n\nfunction toMintableReturn(\n result: OnchainSalesConfigAndTokenInfo,\n): MintableReturn {\n return { token: result, prepareMint: makeOnchainPrepareMint(result) };\n}\n\nconst makePremintPrepareMint =\n (\n mintable: PremintSalesConfigAndTokenInfo,\n mintFee: bigint,\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\" | \"signature\"\n >,\n ): PrepareMint =>\n (params: MintParametersBase) => ({\n parameters: buildPremintMintCall({\n mintArguments: params,\n mintFee,\n premint,\n }),\n costs: parseMintCosts({\n mintFeePerQuantity: mintFee,\n quantityToMint: BigInt(params.quantityToMint),\n salesConfig: mintable.salesConfig,\n }),\n });\n\nfunction toPremintMintReturn({\n premint,\n mintFee,\n}: {\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\" | \"signature\"\n >;\n mintFee: bigint;\n}): MintableReturn {\n const mintable = parsePremint({ premint, mintFee });\n\n return {\n token: mintable,\n prepareMint: makePremintPrepareMint(mintable, mintFee, premint),\n };\n}\nfunction getRequiredErc20Approvals(\n params: MintParametersBase,\n result: OnchainSalesConfigAndTokenInfo,\n): Erc20Approval | undefined {\n if (result.salesConfig.saleType !== \"erc20\") return undefined;\n\n return {\n quantity: result.salesConfig.pricePerToken * BigInt(params.quantityToMint),\n approveTo: result.salesConfig.address,\n erc20: result.salesConfig.currency,\n };\n}\n","import { Address, Account, SimulateContractParameters } from \"viem\";\nimport { IPublicClient } from \"src/types\";\nimport {\n GetMintParameters,\n IOnchainMintGetter,\n MintCosts,\n PrepareMintReturn,\n SaleType,\n} from \"./types\";\nimport {\n MakeMintParametersArguments,\n Make1155MintArguments,\n Make721MintArguments,\n GetMintCostsParameters,\n is1155Mint,\n} from \"./types\";\nimport { IPremintGetter } from \"src/premint/premint-api-client\";\n\nimport { makeOnchainMintCall } from \"./mint-transactions\";\nimport { getMint, getMintCosts, getMintsOfContract } from \"./mint-queries\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\nexport class MintClient {\n private readonly publicClient: IPublicClient;\n private readonly mintGetter: IOnchainMintGetter;\n private readonly premintGetter: IPremintGetter;\n\n constructor({\n publicClient,\n premintGetter,\n mintGetter,\n }: {\n publicClient: IPublicClient;\n premintGetter: IPremintGetter;\n mintGetter: IOnchainMintGetter;\n }) {\n this.publicClient = publicClient;\n this.mintGetter = mintGetter;\n this.premintGetter = premintGetter;\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * Works with premint, onchain 1155, and onchain 721.\n *\n * @param parameters - Parameters for collecting the token {@link MakeMintParametersArguments}\n * @returns Parameters for simulating/executing the mint transaction, any necessary erc20 approval, and costs to mint\n */\n async mint(\n parameters: MakeMintParametersArguments,\n ): Promise<PrepareMintReturn> {\n return mint({\n parameters,\n publicClient: this.publicClient,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n });\n }\n\n /**\n * Gets an 1155, 721, or premint, and returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Token to get {@link GetMintParameters}\n * @Returns Information about the mint and a function to build a mint transaction {@link MintableReturn}\n */\n async get(parameters: GetMintParameters) {\n return getMint({\n params: parameters,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Gets onchain and premint tokens of an 1155 contract. For each token returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Contract address to get tokens for {@link GetMintsOfContractParameters}\n * @Returns Array of tokens, each containing information about the token and a function to build a mint transaction.\n */\n async getOfContract(params: {\n tokenContract: Address;\n preferredSaleType?: SaleType;\n }) {\n return getMintsOfContract({\n params,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Gets the costs to mint the quantity of tokens specified for a mint.\n * @param parameters - Parameters for the mint {@link GetMintCostsParameters}\n * @returns Costs to mint the quantity of tokens specified\n */\n async getMintCosts(parameters: GetMintCostsParameters): Promise<MintCosts> {\n return getMintCosts({\n params: parameters,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n}\n\nasync function mint({\n parameters,\n publicClient,\n mintGetter,\n premintGetter,\n}: {\n parameters: MakeMintParametersArguments;\n publicClient: IPublicClient;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n}): Promise<PrepareMintReturn> {\n const { prepareMint } = await getMint({\n params: parameters,\n mintGetter,\n premintGetter,\n publicClient,\n });\n\n return prepareMint({\n minterAccount: parameters.minterAccount,\n quantityToMint: parameters.quantityToMint,\n firstMinter: parameters.firstMinter,\n mintComment: parameters.mintComment,\n mintRecipient: parameters.mintRecipient,\n mintReferral: parameters.mintReferral,\n });\n}\n\nexport async function collectOnchain({\n chainId,\n mintGetter,\n ...parameters\n}: (Make1155MintArguments | Make721MintArguments) & {\n mintGetter: IOnchainMintGetter;\n chainId: number;\n}): Promise<\n SimulateContractParameters<any, any, any, any, any, Account | Address>\n> {\n const { tokenContract: tokenContract, preferredSaleType: saleType } =\n parameters;\n const tokenId = is1155Mint(parameters) ? parameters.tokenId : undefined;\n const salesConfigAndTokenInfo = await mintGetter.getMintable({\n tokenId,\n tokenAddress: tokenContract,\n preferredSaleType: saleType,\n });\n\n return makeOnchainMintCall({\n mintParams: parameters,\n token: salesConfigAndTokenInfo,\n });\n}\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Account,\n Address,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog } from \"viem\";\nimport { makeContractParameters } from \"src/utils\";\nimport { getContractInfo } from \"./contract-setup\";\nimport { ContractType, CreateNew1155Params, New1155Token } from \"./types\";\nimport { constructCreate1155TokenCalls } from \"./token-setup\";\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\n\nexport const getTokenIdFromCreateReceipt = (\n receipt: TransactionReceipt,\n): bigint | undefined => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155ImplABI,\n eventName: \"SetupNewToken\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewToken\") {\n return decodedLog.args.tokenId;\n }\n } catch (err: any) {}\n }\n};\n\ntype CreateNew1155TokenReturn = {\n parameters: SimulateContractParameters<\n any,\n any,\n any,\n any,\n any,\n Account | Address\n >;\n tokenSetupActions: Hex[];\n collectionAddress: Address;\n newTokenId: bigint;\n newToken: New1155Token;\n minter: Address;\n contractExists: boolean;\n};\n\nfunction makeCreateContractAndTokenCall({\n contractExists,\n contractAddress,\n contract,\n account,\n royaltyBPS,\n tokenSetupActions,\n fundsRecipient,\n}: {\n contractExists: boolean;\n contractAddress: Address;\n contract: ContractType;\n account: Address | Account;\n royaltyBPS?: number;\n fundsRecipient?: Address;\n tokenSetupActions: Hex[];\n}) {\n if (!contractAddress && typeof contract === \"string\") {\n throw new Error(\"Invariant: contract cannot be missing and an address\");\n }\n\n if (!contractExists) {\n if (typeof contract === \"string\") {\n throw new Error(\"Invariant: expected contract object\");\n }\n\n const accountAddress =\n typeof account === \"string\" ? account : account.address;\n return makeContractParameters({\n abi: zoraCreator1155FactoryImplABI,\n functionName: \"createContractDeterministic\",\n account,\n address: zoraCreator1155FactoryImplAddress[999],\n args: [\n contract.uri,\n contract.name,\n {\n // deprecated\n royaltyMintSchedule: 0,\n royaltyBPS: royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: fundsRecipient || accountAddress,\n },\n contract.defaultAdmin || accountAddress,\n tokenSetupActions,\n ],\n });\n }\n\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n });\n}\n\nexport class Create1155Client {\n private readonly chainId: number;\n private readonly publicClient: Pick<PublicClient, \"readContract\">;\n\n constructor({\n chainId,\n publicClient,\n }: {\n chainId: number;\n publicClient: Pick<PublicClient, \"readContract\">;\n }) {\n this.chainId = chainId;\n this.publicClient = publicClient;\n }\n\n async createNew1155Token(props: CreateNew1155Params) {\n return createNew1155Token({\n ...props,\n publicClient: this.publicClient,\n chainId: this.chainId,\n });\n }\n}\n\nasync function createNew1155Token({\n contract,\n account,\n getAdditionalSetupActions,\n token: tokenConfig,\n publicClient,\n chainId,\n}: CreateNew1155Params & {\n publicClient: Pick<PublicClient, \"readContract\">;\n chainId: number;\n}): Promise<CreateNew1155TokenReturn> {\n const { contractExists, contractAddress, nextTokenId, contractVersion } =\n await getContractInfo({\n publicClient,\n chainId: chainId,\n contract,\n account,\n });\n\n const {\n minter,\n newToken,\n setupActions: tokenSetupActions,\n } = constructCreate1155TokenCalls({\n chainId: chainId,\n ownerAddress: account,\n contractVersion,\n nextTokenId,\n ...tokenConfig,\n });\n\n const setupActions = getAdditionalSetupActions\n ? [\n ...getAdditionalSetupActions({\n tokenId: nextTokenId,\n contractAddress,\n }),\n ...tokenSetupActions,\n ]\n : tokenSetupActions;\n\n const request = makeCreateContractAndTokenCall({\n contractExists,\n contractAddress,\n contract,\n account,\n tokenSetupActions: setupActions,\n royaltyBPS: tokenConfig.royaltyBPS,\n fundsRecipient: tokenConfig.payoutRecipient,\n });\n\n return {\n parameters: request,\n tokenSetupActions,\n collectionAddress: contractAddress,\n contractExists,\n newTokenId: nextTokenId,\n newToken,\n minter,\n };\n}\n","import { Address, PublicClient } from \"viem\";\nimport { ContractType } from \"./types\";\nimport {\n contracts1155,\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\n\ntype contracts1155Address = keyof typeof contracts1155.addresses;\nfunction new1155ContractVersion(chainId: number): string {\n const address = contracts1155.addresses[chainId as contracts1155Address];\n if (!address) {\n throw new Error(`No contract address for chainId ${chainId}`);\n }\n\n return address.CONTRACT_1155_IMPL_VERSION;\n}\n\nexport async function getContractInfo({\n publicClient,\n chainId,\n contract,\n account,\n}: {\n publicClient: Pick<PublicClient, \"readContract\">;\n chainId: number;\n contract: ContractType;\n // Account that is the creator of the contract\n account: Address;\n}): Promise<{\n contractExists: boolean;\n contractAddress: Address;\n contractVersion: string;\n nextTokenId: bigint;\n}> {\n // Check if contract exists either from metadata or the static address passed in.\n // If a static address is passed in, this fails if that contract does not exist.\n const contractAddress =\n typeof contract === \"string\"\n ? contract\n : await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n // Since this address is deterministic we can hardcode a chain id safely here.\n address:\n zoraCreator1155FactoryImplAddress[\n chainId as keyof typeof zoraCreator1155FactoryImplAddress\n ],\n functionName: \"deterministicContractAddress\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n ],\n });\n\n let contractVersion: string;\n let contractExists: boolean;\n try {\n contractVersion = await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: contractAddress,\n functionName: \"contractVersion\",\n });\n contractExists = true;\n } catch (e: any) {\n // This logic branch is hit if the contract doesn't exist\n // falling back to contractExists to false.\n contractVersion = new1155ContractVersion(chainId);\n contractExists = false;\n }\n\n const nextTokenId = contractExists\n ? await publicClient.readContract({\n address: contractAddress,\n abi: zoraCreator1155ImplABI,\n functionName: \"nextTokenId\",\n })\n : 1n;\n\n return {\n contractExists,\n contractAddress,\n contractVersion,\n nextTokenId,\n };\n}\n","import {\n erc20MinterABI,\n erc20MinterAddress as erc20MinterAddresses,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address, encodeFunctionData, zeroAddress, Hex } from \"viem\";\nimport * as semver from \"semver\";\nimport {\n ContractProps,\n CreateNew1155TokenProps,\n New1155Token,\n SalesConfigParamsType,\n} from \"./types\";\nimport { OPEN_EDITION_MINT_SIZE } from \"src/constants\";\nimport { Concrete } from \"src/utils\";\n\nexport const PERMISSION_BITS = {\n MINTER: 2n ** 2n,\n};\n\ntype SetupMintersProps = {\n tokenId: bigint;\n chainId: number;\n fundsRecipient: Address;\n salesConfig: Concrete<SalesConfigParamsType>;\n};\n\n// Sales end forever amount (uint64 max)\n\nconst saleSettingsOrDefault = (\n saleSettings?: SalesConfigParamsType,\n): Concrete<SalesConfigParamsType> => {\n const SALE_END_FOREVER = 18446744073709551615n;\n\n const DEFAULT_SALE_SETTINGS: Concrete<SalesConfigParamsType> = {\n currency: zeroAddress,\n // Free Mint\n pricePerToken: 0n,\n // Sale start time – defaults to beginning of unix time\n saleStart: 0n,\n // This is the end of uint64, plenty of time\n saleEnd: SALE_END_FOREVER,\n // 0 Here means no limit\n maxTokensPerAddress: 0n,\n };\n return {\n ...DEFAULT_SALE_SETTINGS,\n ...saleSettings,\n };\n};\n\nfunction applyNew1155Defaults(\n props: CreateNew1155TokenProps,\n ownerAddress: Address,\n): New1155Token {\n const { payoutRecipient: fundsRecipient } = props;\n const fundsRecipientOrOwner =\n fundsRecipient && fundsRecipient !== zeroAddress\n ? fundsRecipient\n : ownerAddress;\n return {\n payoutRecipient: fundsRecipientOrOwner,\n createReferral: props.createReferral || zeroAddress,\n maxSupply:\n typeof props.maxSupply === \"undefined\"\n ? OPEN_EDITION_MINT_SIZE\n : BigInt(props.maxSupply),\n royaltyBPS: props.royaltyBPS || 1000,\n salesConfig: saleSettingsOrDefault(props.salesConfig),\n tokenMetadataURI: props.tokenMetadataURI,\n };\n}\n\ntype SetupErc20MinterProps = {\n chainId: number;\n tokenId: bigint;\n fundsRecipient: Address;\n} & Concrete<SalesConfigParamsType>;\n\nfunction setupErc20Minter({\n pricePerToken,\n chainId,\n tokenId: nextTokenId,\n currency,\n saleStart,\n saleEnd,\n maxTokensPerAddress: mintLimit,\n fundsRecipient,\n}: SetupErc20MinterProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n const erc20MinterAddress =\n erc20MinterAddresses[chainId as keyof typeof erc20MinterAddresses];\n if (!erc20MinterAddress)\n throw new Error(`ERC20Minter not deployed on chainId ${chainId}`);\n\n const erc20MinterApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [BigInt(nextTokenId), erc20MinterAddress, PERMISSION_BITS.MINTER],\n });\n\n const saleData = encodeFunctionData({\n abi: erc20MinterABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n saleStart: saleStart || BigInt(0),\n saleEnd: saleEnd || BigInt(0),\n maxTokensPerAddress: BigInt(mintLimit || 0),\n pricePerToken: pricePerToken,\n fundsRecipient,\n currency: currency,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), erc20MinterAddress, saleData],\n });\n\n return {\n minter: erc20MinterAddress,\n setupActions: [erc20MinterApproval, callSale],\n };\n}\n\ntype SetupFixedPriceMinterProps = {\n fundsRecipient: Address;\n tokenId: bigint;\n chainId: number;\n} & Concrete<Omit<SalesConfigParamsType, \"currency\">>;\n\nfunction setupFixedPriceMinter({\n pricePerToken: price,\n tokenId: nextTokenId,\n chainId,\n saleStart,\n saleEnd,\n maxTokensPerAddress: mintLimit,\n fundsRecipient,\n}: SetupFixedPriceMinterProps): { minter: Address; setupActions: Hex[] } {\n const fixedPriceStrategyAddress =\n zoraCreatorFixedPriceSaleStrategyAddress[\n chainId as keyof typeof zoraCreatorFixedPriceSaleStrategyAddress\n ];\n const fixedPriceApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [\n BigInt(nextTokenId),\n fixedPriceStrategyAddress,\n PERMISSION_BITS.MINTER,\n ],\n });\n\n const saleData = encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n pricePerToken: price,\n saleStart: saleStart || BigInt(0),\n saleEnd: saleEnd || BigInt(0),\n maxTokensPerAddress: BigInt(mintLimit || 0),\n fundsRecipient,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), fixedPriceStrategyAddress, saleData],\n });\n\n return {\n minter: fixedPriceStrategyAddress,\n setupActions: [fixedPriceApproval, callSale],\n };\n}\n\nexport function setupMinters({ salesConfig, ...rest }: SetupMintersProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n if (!salesConfig) throw new Error(\"No sales config for token\");\n const { currency: currencyAddress } = salesConfig;\n\n if (currencyAddress === zeroAddress) {\n return setupFixedPriceMinter({\n ...salesConfig,\n ...rest,\n });\n } else {\n return setupErc20Minter({\n ...salesConfig,\n ...rest,\n });\n }\n}\n\nfunction buildSetupNewToken({\n tokenURI,\n maxSupply = OPEN_EDITION_MINT_SIZE,\n createReferral = zeroAddress,\n contractVersion,\n}: {\n tokenURI: string;\n maxSupply: bigint;\n createReferral: Address;\n contractVersion?: string;\n}): Hex {\n // If we're adding a new token to an existing contract which doesn't support\n // creator rewards, we won't have the 'setupNewTokenWithCreateReferral' method\n // available, so we need to check for that and use the fallback method instead.\n if (contractSupportsMintRewards(contractVersion, \"ERC1155\")) {\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenURI, BigInt(maxSupply), createReferral],\n });\n }\n\n if (createReferral !== zeroAddress) {\n throw new Error(\n \"Contract does not support create referral, but one was provided\",\n );\n }\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenURI, BigInt(maxSupply)],\n });\n}\n\nfunction setupRoyaltyConfig({\n royaltyBPS,\n royaltyRecipient,\n nextTokenId,\n}: {\n royaltyBPS: number;\n royaltyRecipient: Address;\n nextTokenId: bigint;\n}) {\n if (royaltyBPS > 0 && royaltyRecipient != zeroAddress) {\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyBPS,\n royaltyRecipient,\n royaltyMintSchedule: 0,\n },\n ],\n });\n }\n\n return null;\n}\n\nfunction makeAdminMintCall({\n ownerAddress,\n mintQuantity,\n nextTokenId,\n}: {\n ownerAddress: Address;\n mintQuantity?: number;\n nextTokenId: bigint;\n}) {\n if (!mintQuantity || mintQuantity <= 0 || !ownerAddress) {\n return null;\n }\n\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [ownerAddress, nextTokenId, BigInt(mintQuantity), zeroAddress],\n });\n}\n\nexport function constructCreate1155TokenCalls(\n props: CreateNew1155TokenProps &\n ContractProps & {\n ownerAddress: Address;\n chainId: number;\n },\n): {\n setupActions: `0x${string}`[];\n newToken: New1155Token;\n minter: Address;\n} {\n const {\n chainId,\n nextTokenId,\n mintToCreatorCount,\n ownerAddress,\n contractVersion,\n } = props;\n\n const new1155TokenPropsWithDefaults = applyNew1155Defaults(\n props,\n ownerAddress,\n );\n\n const verifyTokenIdExpected = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n });\n\n const setupNewToken = buildSetupNewToken({\n tokenURI: new1155TokenPropsWithDefaults.tokenMetadataURI,\n maxSupply: new1155TokenPropsWithDefaults.maxSupply,\n createReferral: new1155TokenPropsWithDefaults.createReferral,\n contractVersion,\n });\n\n const royaltyConfig = setupRoyaltyConfig({\n royaltyBPS: new1155TokenPropsWithDefaults.royaltyBPS,\n royaltyRecipient: new1155TokenPropsWithDefaults.payoutRecipient,\n nextTokenId,\n });\n\n const { minter, setupActions: mintersSetup } = setupMinters({\n tokenId: nextTokenId,\n chainId,\n fundsRecipient: new1155TokenPropsWithDefaults.payoutRecipient,\n salesConfig: new1155TokenPropsWithDefaults.salesConfig,\n });\n\n const adminMintCall = makeAdminMintCall({\n ownerAddress,\n mintQuantity: mintToCreatorCount,\n nextTokenId,\n });\n\n const setupActions = [\n verifyTokenIdExpected,\n setupNewToken,\n ...mintersSetup,\n royaltyConfig,\n adminMintCall,\n ].filter((item) => item !== null) as `0x${string}`[];\n\n return {\n setupActions,\n minter,\n newToken: new1155TokenPropsWithDefaults,\n };\n}\n\nexport const contractSupportsMintRewards = (\n contractVersion?: string | null,\n contractStandard?: \"ERC721\" | \"ERC1155\",\n) => {\n if (!contractStandard || !contractVersion) {\n return false;\n }\n\n // Try force-convert version format to semver format\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n if (contractStandard === \"ERC1155\") {\n return semver.gte(semVerContractVersion, \"1.3.5\");\n } else {\n return semver.gte(semVerContractVersion, \"14.0.0\");\n }\n};\n","import { Address } from \"viem\";\n\nexport const getMintsAccountBalanceWithPriceQuery = (account: Address) => {\n const query = `\n query GetMintAccountBalances($account: String!) {\n mintAccountBalances(where: { account: $account }) {\n balance\n mintToken {\n id\n pricePerToken\n }\n }\n }\n `;\n\n return {\n query,\n variables: { account },\n };\n};\n\nexport type MintAccountBalance = {\n balance: string;\n mintToken: {\n id: string;\n pricePerToken: string;\n };\n};\n\nexport type MintAccountBalancesQueryResult = {\n mintTokenBalances: MintAccountBalance[];\n};\n\n/**\n * Given the result of a mint token balances query, selects the best MINTs to use to collect with that will satisfy the quantity,\n * by selecting the lowest priced MINTs first. Throws an error if not enough mints to collect with.\n */\nexport const selectMintsToCollectWithFromQueryResult = (\n mintAccountBalances: MintAccountBalance[],\n quantityToCollect: bigint,\n) => {\n const parsed = mintAccountBalances.map((r) => {\n return {\n tokenId: BigInt(r.mintToken.id),\n quantity: BigInt(r.balance),\n pricePerToken: BigInt(r.mintToken.pricePerToken),\n };\n });\n\n // now we want to find the best tokens to collect with, sorted by lowest price ascending\n // given its a bigint, lets not do a straight subtraction but sort based on result of comparison gt/lt:\n const sorted = parsed.sort((a, b) => {\n if (a.pricePerToken < b.pricePerToken) {\n return -1;\n }\n return 1;\n });\n\n // we need to get array of tokenIds and quantities to collect with:\n let remainingQuantity = quantityToCollect;\n const tokenIds: bigint[] = [];\n const quantities: bigint[] = [];\n\n while (remainingQuantity > 0) {\n const next = sorted.shift();\n if (!next) {\n throw new Error(\"Not enough MINTs to collect with\");\n }\n\n const quantityToUse =\n remainingQuantity > next.quantity ? next.quantity : remainingQuantity;\n tokenIds.push(next.tokenId);\n quantities.push(quantityToUse);\n remainingQuantity -= quantityToUse;\n }\n\n return {\n tokenIds,\n quantities,\n };\n};\n\n/**\n * Given an array of mint account balances, sums the balances.\n * @param mintAccountBalances\n * @returns Total balance\n */\nexport const sumBalances = (\n mintAccountBalances: Pick<MintAccountBalance, \"balance\">[],\n) => {\n return mintAccountBalances.reduce((acc, curr) => {\n return acc + BigInt(curr.balance);\n }, BigInt(0));\n};\n","import {\n mintsSafeTransferBatchTypedDataDefinition,\n mintsSafeTransferTypedDataDefinition,\n zoraMints1155Config,\n zoraMintsManagerImplABI,\n zoraMintsManagerImplAddress,\n zoraMintsManagerImplConfig,\n} from \"@zoralabs/protocol-deployments\";\nimport { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from \"abitype\";\nimport {\n PremintMintArguments,\n PremintConfigV2,\n} from \"@zoralabs/protocol-deployments\";\nimport { ContractCreationConfig } from \"src/preminter\";\nimport { makeContractParameters } from \"src/utils\";\nimport {\n Account,\n Address,\n ContractFunctionRevertedError,\n Hex,\n PublicClient,\n ReadContractParameters,\n SignTypedDataParameters,\n decodeErrorResult,\n encodeFunctionData,\n zeroAddress,\n} from \"viem\";\n\nconst addressOrAccountAddress = (address: Address | Account) =>\n typeof address === \"string\" ? address : address.address;\n\n/**\n * Constructs the parameters to mint a MINT with ETH on the ZoraMintsManager based on the price of the currently mintable ETH token.\n *\n * @param quantity - The number of mints to be created.\n * @param recipient - The address that will receive the mints.\n * @param chainId - The ID of the blockchain network where the contract is deployed.\n * @param pricePerMint - The price for each mint in ETH. Must match the price of the defualt mintable ETH token.\n * @param account - The address or account that is creating the mints.\n *\n * @returns The parameters for the `mintWithEth` function call, including the ABI, contract address, function name, arguments, value, and account.\n */\nexport const mintWithEthParams = ({\n quantity,\n recipient,\n chainId,\n pricePerMint,\n account,\n}: {\n quantity: bigint;\n recipient?: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n pricePerMint: bigint;\n account: Address | Account;\n}) =>\n makeContractParameters({\n abi: zoraMintsManagerImplConfig.abi,\n address: zoraMintsManagerImplConfig.address[chainId],\n functionName: \"mintWithEth\",\n args: [quantity, recipient || addressOrAccountAddress(account)],\n value: pricePerMint * quantity,\n account,\n });\n\nconst getPaidMintValue = (quantities: bigint[], pricePerMint?: bigint) => {\n if (!pricePerMint || pricePerMint === 0n) return;\n\n return quantities.reduce((a, b) => a + b, 0n) * pricePerMint;\n};\n\n/**\n * Constructs the parameters to get the total mints balance of an account on the ZoraMints1155 contract.\n * @param account - The address of the account to check the balance of.\n * @returns The parameters for the `balanceOfAccount` function call, including the ABI, contract address, function name, and arguments.\n */\nexport const mintsBalanceOfAccountParams = ({\n account,\n chainId,\n}: {\n account: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n}): ReadContractParameters<\n typeof zoraMints1155Config.abi,\n \"balanceOfAccount\"\n> => ({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"balanceOfAccount\",\n args: [account],\n});\n\ntype CollectOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n zoraCreator1155Contract: Address;\n zoraCreator1155TokenId: bigint;\n minter: Address;\n mintArguments: CollectMintArguments;\n};\n\nexport const encodeCollectOnManager = ({\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n}: CollectOnManagerParams) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collect\",\n args: [\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n ],\n });\n\n/**\n * Constructs parameters to collect a Zora Creator 1155 token using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the Zora Creator 1155 token with.\n * @param quantities - The quantities of each MINT token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n * @param account - The account that will be executing the transaction, and whos MINTs will be used\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param minter - The IMinter1155 used by the Zora Creator 1155 contract to mint the tokens\n * @param zoraCreator1155Contract - The Zora Creator 1155 contract address to mint tokens on\n * @param zoraCreator1155TokenId - The token id on the Zora Creator contract to mint\n */\nexport function collectWithMintsParams({\n tokenIds,\n quantities,\n chainId,\n paidMintPricePerToken,\n account,\n mintArguments,\n minter,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n}: {\n paidMintValue?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n paidMintPricePerToken?: bigint;\n account: Address | Account;\n} & CollectOnManagerParams) {\n const call = encodeCollectOnManager({\n tokenIds,\n quantities,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n minter,\n mintArguments,\n });\n\n return makeContractParameters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n // if it is a paid mint, the aadditional value will be sent to the manager contract and forwarded to the creator 1155 contract\n // for the paid mint cost.\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\ntype PermitTransferBatchParameters = {\n tokenIds: bigint[];\n quantities: bigint[];\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n};\n\n/**\n * Get the current price to mint a MINT with ETH\n * @param publicClient - The public client to use to read the contract\n */\nexport function getMintsEthPrice({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n const chainId = publicClient.chain?.id as\n | keyof typeof zoraMintsManagerImplAddress\n | undefined;\n // if chain id is not in the zoraMintsManagerImplAddress, throw an error:\n if (!chainId || !zoraMintsManagerImplAddress[chainId]) {\n throw new Error(`Chain id ${chainId} not supported`);\n }\n\n return publicClient.readContract({\n abi: zoraMintsManagerImplABI,\n address: zoraMintsManagerImplAddress[chainId],\n functionName: \"getEthPrice\",\n });\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a batch transfer of MINTs.\n * @param tokenIds - The token ids to transfer.\n * @param quantities - The quantities of each token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns permit and corresponding typed data to sign.\n */\nexport function makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: PermitTransferBatchParameters) {\n const permit: PermitSafeTransferBatch = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenIds,\n quantities,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferBatchTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a transfer of a MINTs for a single MINTs token id\n * @param tokenId - The token id to transfer.\n * @param quantity - The quantity of the token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns\n */\nexport function makePermitTransferTypeData({\n tokenId,\n quantity,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: {\n tokenId: bigint;\n quantity: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n}) {\n const permit: PermitSafeTransfer = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenId,\n quantity,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\ntype PremintOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n contractCreationConfig: ContractCreationConfig;\n premintConfig: PremintConfigV2;\n premintSignature: Hex;\n mintArguments: PremintMintArguments;\n signerContract?: Address;\n};\n\nconst encodePremintOnManager = ({\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract = zeroAddress,\n}: Omit<PremintOnManagerParams, \"tokenIds\" | \"quantities\">) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collectPremintV2\",\n args: [\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract,\n ],\n });\n\n/**\n * Builds a permit, and corresponding typed data to sign\n * to collect a premint or non-premint Using the mints an account owns.\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param deadline - The deadline of the permit.\n * @param nonce - Random nonce of the permit.\n * @param tokenIds - The mint token ids to to use\n * @param quantities - The quantities of each token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param premint - If this is for a premint, the configuration of the premint to collect\n * @param collect - If this is for a non-premint, the configuration of the non-premint to collect\n * @returns\n */\nexport const makePermitToCollectPremintOrNonPremint = ({\n mintsOwner,\n chainId,\n deadline,\n tokenIds,\n // this quantity of MINTs will be used to collect premint\n // and will be burned. This same quantity is the quantity of\n // premint to collect.\n quantities,\n nonce,\n premint,\n collect,\n}: Omit<PermitTransferBatchParameters, \"to\" | \"safeTransferData\"> &\n (\n | {\n premint: Parameters<typeof encodePremintOnManager>[0];\n collect?: undefined;\n }\n | {\n premint?: undefined;\n collect: Parameters<typeof encodeCollectOnManager>[0];\n }\n )) => {\n let safeTransferData: Hex;\n\n if (premint) {\n safeTransferData = encodePremintOnManager(premint);\n } else if (collect) {\n safeTransferData = encodeCollectOnManager(collect);\n } else {\n throw new Error(\"Invalid operation\");\n }\n\n return makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n nonce,\n deadline,\n safeTransferData,\n to: zoraMintsManagerImplConfig.address[chainId],\n });\n};\n\n/**\n * Constructs the parameters to collect a premint using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the premint with.\n * @param quantities - The quantities of each MINT token to use to collect the premint with. The sum of these quantities will be the total quantity of the premint collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param account - The account which's MINTs will be used to collect the premint.\n * @param contractCreationConfig - The premint contract creation config\n * @param premintConfig - The premint config\n * @param premintSignature - The signature for the premint\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param signerContract - The contract that signed the premint, if this is a smart wallet based premint\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n */\nexport function collectPremintV2WithMintsParams({\n tokenIds,\n quantities,\n paidMintPricePerToken,\n account,\n chainId,\n ...rest\n}: {\n paidMintPricePerToken?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n account: Address | Account;\n} & PremintOnManagerParams) {\n const call = encodePremintOnManager({\n ...rest,\n });\n\n return makeContractParameters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\nexport type PermitSafeTransferBatch = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransferBatch\"\n >[\"inputs\"]\n>[0];\n\nexport type PermitSafeTransfer = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransfer\"\n >[\"inputs\"]\n>[0];\n\nexport type CollectMintArguments = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<typeof zoraMintsManagerImplConfig.abi, \"collect\">[\"inputs\"]\n>[3];\n\n/**\n * Can be used to decode an a CallFailed error from the ZoraMints1155 contract when it has called a function on the ZoraMintsManager.\n * @param error\n * @returns\n */\nexport function decodeCallFailedError(error: ContractFunctionRevertedError) {\n if (error.data?.errorName !== \"CallFailed\")\n throw new Error(\"Not a CallFailed error\");\n\n const internalErrorData = error.data?.args?.[0] as Hex;\n\n return decodeErrorResult({\n abi: zoraMintsManagerImplABI,\n data: internalErrorData,\n });\n}\n","import {\n iUnwrapAndForwardActionABI,\n sparksEthUnwrapperAndCallerAddress,\n zoraMints1155Config,\n} from \"@zoralabs/protocol-deployments\";\nimport { Account, Address, Hex, encodeFunctionData } from \"viem\";\nimport { makePermitTransferBatchAndTypeData } from \"./mints-contracts\";\n\ntype CallWithEthParams = {\n address: Address;\n call: Hex;\n value: bigint;\n};\n\n/**\n * Build safeTransferData for the eth unwrapper and caller to call another\n * contract with eth unwrapped from MINTs.\n * @param addressToCall - the address of the contract to call\n * @param functionToCall - the function to call on the contract\n * @param valueToSend - the value to send to the contract\n */\nexport const makeCallWithEthSafeTransferData = ({\n address: addressToCall,\n call: functionToCall,\n value: valueToSend,\n}: CallWithEthParams) =>\n encodeFunctionData({\n abi: iUnwrapAndForwardActionABI,\n functionName: \"callWithEth\",\n args: [addressToCall, functionToCall, valueToSend],\n });\n\n/**\n * Makes a permit and corresponding typed data definition for unwrapping the eth value\n * of mints and forwarding it to another contract with a call. Any eth that is not forwarded\n * is refunded to the owner of the MINTs.\n * @param chainId - the id of the chain that the mints are on.\n * @param tokenIds - the token ids of the MINTs to unwrap\n * @param quantities - the quantities of each token id of the MINTs to unwrap\n * @param from - the address that owns the MINTs - this must be the address to sign the permit.\n * @param addressToCall - the address of the contract to call with the unwrapped eth.\n * @param callWithEth - the target contract, function, and value to call with the unwrapped eth. Any eth not forwarded is refunded to the owner of the MINTs.\n * @param safeTransferData - the safeTransferData to use for the call. If not provided, it will be generated from callWithEth.\n * @returns a permit and corresponding typed data definition to sign.\n */\nexport const unwrapAndForwardEthPermitAndTypedDataDefinition = ({\n chainId,\n tokenIds,\n quantities,\n from,\n callWithEth,\n safeTransferData,\n deadline,\n nonce,\n}: {\n tokenIds: bigint[];\n quantities: bigint[];\n chainId: keyof typeof zoraMints1155Config.address;\n // mints will be transferred from this address; must match the callers address\n from: Address | Account;\n deadline: bigint;\n nonce: bigint;\n} & (\n | {\n callWithEth: CallWithEthParams;\n safeTransferData?: undefined;\n }\n | {\n callWithEth?: undefined;\n safeTransferData: Hex;\n }\n)) =>\n makePermitTransferBatchAndTypeData({\n mintsOwner: from,\n chainId,\n deadline,\n tokenIds,\n quantities,\n safeTransferData:\n safeTransferData || makeCallWithEthSafeTransferData(callWithEth),\n to: sparksEthUnwrapperAndCallerAddress[chainId],\n nonce,\n });\n","import {\n PremintClient,\n getDataFromPremintReceipt,\n} from \"./premint/premint-client\";\nimport { Create1155Client } from \"./create/1155-create-helper\";\nimport { MintClient } from \"./mint/mint-client\";\nimport { ClientConfig } from \"./utils\";\nimport { IPremintAPI, PremintAPIClient } from \"./premint/premint-api-client\";\nimport { SubgraphMintGetter } from \"./mint/subgraph-mint-getter\";\nimport { IOnchainMintGetter } from \"./mint/types\";\n\nexport type CreatorClient = {\n createPremint: PremintClient[\"createPremint\"];\n updatePremint: PremintClient[\"updatePremint\"];\n deletePremint: PremintClient[\"deletePremint\"];\n create1155: Create1155Client[\"createNew1155Token\"];\n};\n\nexport type CollectorClient = {\n getPremint: PremintClient[\"getPremint\"];\n getCollectDataFromPremintReceipt: PremintClient[\"getDataFromPremintReceipt\"];\n mint: MintClient[\"mint\"];\n getMintCosts: MintClient[\"getMintCosts\"];\n getToken: MintClient[\"get\"];\n getTokensOfContract: MintClient[\"getOfContract\"];\n};\n\nexport type CreatorClientConfig = ClientConfig & {\n /** API for submitting and getting premints. Defaults to the Zora Premint API */\n premintApi?: IPremintAPI;\n};\n\n/**\n * Builds the sdk for creating/managing 1155 contracts and tokens\n *\n * @param clientConfig - Configuration for the client {@link CreatorClientConfig}\n * @returns CreatorClient {@link CreatorClient}\n * */\nexport function createCreatorClient(\n clientConfig: CreatorClientConfig,\n): CreatorClient {\n const premintClient = new PremintClient({\n chainId: clientConfig.chainId,\n publicClient: clientConfig.publicClient,\n premintApi:\n clientConfig.premintApi || new PremintAPIClient(clientConfig.chainId),\n });\n\n const create1155CreatorClient = new Create1155Client({\n chainId: clientConfig.chainId,\n publicClient: clientConfig.publicClient,\n });\n\n return {\n createPremint: (p) => premintClient.createPremint(p),\n updatePremint: (p) => premintClient.updatePremint(p),\n deletePremint: (p) => premintClient.deletePremint(p),\n create1155: (p) => create1155CreatorClient.createNew1155Token(p),\n };\n}\n\nexport type CollectorClientConfig = ClientConfig & {\n /** API for getting premints. Defaults to the Zora Premint API */\n premintGetter?: IPremintAPI;\n /** API for getting onchain mints. Defaults to the Zora Creator Subgraph */\n mintGetter?: IOnchainMintGetter;\n};\n\n/**\n * Builds the sdk for collecting Premints, 1155, and 721 tokens.\n *\n * @param clientConfig - Configuration for the client {@link CollectorClientConfig}\n * @returns CollectorClient {@link CollectorClient}\n */\nexport function createCollectorClient(\n params: CollectorClientConfig,\n): CollectorClient {\n const premintGetterToUse =\n params.premintGetter || new PremintAPIClient(params.chainId);\n const mintGetterToUse =\n params.mintGetter || new SubgraphMintGetter(params.chainId);\n const mintClient = new MintClient({\n publicClient: params.publicClient,\n premintGetter: premintGetterToUse,\n mintGetter: mintGetterToUse,\n });\n\n return {\n getPremint: (p) =>\n premintGetterToUse.get({\n collectionAddress: p.address,\n uid: p.uid,\n }),\n getCollectDataFromPremintReceipt: (p) =>\n getDataFromPremintReceipt(p, params.chainId),\n getToken: (p) => mintClient.get(p),\n getTokensOfContract: (p) => mintClient.getOfContract(p),\n mint: (p) => mintClient.mint(p),\n getMintCosts: (p) => mintClient.getMintCosts(p),\n };\n}\n","export type ArweaveURL = `ar://${string}`;\n\nexport function isArweaveURL(url: string | null | undefined): boolean {\n return url && typeof url === \"string\" ? url.startsWith(\"ar://\") : false;\n}\n","var encode_1 = encode;\nvar MSB = 128, REST = 127, MSBALL = ~REST, INT = Math.pow(2, 31);\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n while (num >= INT) {\n out[offset++] = num & 255 | MSB;\n num /= 128;\n }\n while (num & MSBALL) {\n out[offset++] = num & 255 | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n encode.bytes = offset - oldOffset + 1;\n return out;\n}\nvar decode = read;\nvar MSB$1 = 128, REST$1 = 127;\nfunction read(buf, offset) {\n var res = 0, offset = offset || 0, shift = 0, counter = offset, b, l = buf.length;\n do {\n if (counter >= l) {\n read.bytes = 0;\n throw new RangeError('Could not decode varint');\n }\n b = buf[counter++];\n res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1);\n read.bytes = counter - offset;\n return res;\n}\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\nvar length = function (value) {\n return value < N1 ? 1 : value < N2 ? 2 : value < N3 ? 3 : value < N4 ? 4 : value < N5 ? 5 : value < N6 ? 6 : value < N7 ? 7 : value < N8 ? 8 : value < N9 ? 9 : 10;\n};\nvar varint = {\n encode: encode_1,\n decode: decode,\n encodingLength: length\n};\nvar _brrp_varint = varint;\nexport default _brrp_varint;","import varint from '../vendor/varint.js';\nexport const decode = (data, offset = 0) => {\n const code = varint.decode(data, offset);\n return [\n code,\n varint.decode.bytes\n ];\n};\nexport const encodeTo = (int, target, offset = 0) => {\n varint.encode(int, target, offset);\n return target;\n};\nexport const encodingLength = int => {\n return varint.encodingLength(int);\n};","const empty = new Uint8Array(0);\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '');\nconst fromHex = hex => {\n const hexes = hex.match(/../g);\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty;\n};\nconst equals = (aa, bb) => {\n if (aa === bb)\n return true;\n if (aa.byteLength !== bb.byteLength) {\n return false;\n }\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false;\n }\n }\n return true;\n};\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array')\n return o;\n if (o instanceof ArrayBuffer)\n return new Uint8Array(o);\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);\n }\n throw new Error('Unknown type, must be binary type');\n};\nconst isBinary = o => o instanceof ArrayBuffer || ArrayBuffer.isView(o);\nconst fromString = str => new TextEncoder().encode(str);\nconst toString = b => new TextDecoder().decode(b);\nexport {\n equals,\n coerce,\n isBinary,\n fromHex,\n toHex,\n fromString,\n toString,\n empty\n};","import {\n coerce,\n equals as equalBytes\n} from '../bytes.js';\nimport * as varint from '../varint.js';\nexport const create = (code, digest) => {\n const size = digest.byteLength;\n const sizeOffset = varint.encodingLength(code);\n const digestOffset = sizeOffset + varint.encodingLength(size);\n const bytes = new Uint8Array(digestOffset + size);\n varint.encodeTo(code, bytes, 0);\n varint.encodeTo(size, bytes, sizeOffset);\n bytes.set(digest, digestOffset);\n return new Digest(code, size, digest, bytes);\n};\nexport const decode = multihash => {\n const bytes = coerce(multihash);\n const [code, sizeOffset] = varint.decode(bytes);\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset));\n const digest = bytes.subarray(sizeOffset + digestOffset);\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length');\n }\n return new Digest(code, size, digest, bytes);\n};\nexport const equals = (a, b) => {\n if (a === b) {\n return true;\n } else {\n return a.code === b.code && a.size === b.size && equalBytes(a.bytes, b.bytes);\n }\n};\nexport class Digest {\n constructor(code, size, digest, bytes) {\n this.code = code;\n this.size = size;\n this.digest = digest;\n this.bytes = bytes;\n }\n}","function base(ALPHABET, name) {\n if (ALPHABET.length >= 255) {\n throw new TypeError('Alphabet too long');\n }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) {\n throw new TypeError(x + ' is ambiguous');\n }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256);\n var iFACTOR = Math.log(256) / Math.log(BASE);\n function encode(source) {\n if (source instanceof Uint8Array);\n else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) {\n throw new TypeError('Expected Uint8Array');\n }\n if (source.length === 0) {\n return '';\n }\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n var size = (pend - pbegin) * iFACTOR + 1 >>> 0;\n var b58 = new Uint8Array(size);\n while (pbegin !== pend) {\n var carry = source[pbegin];\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n carry += 256 * b58[it1] >>> 0;\n b58[it1] = carry % BASE >>> 0;\n carry = carry / BASE >>> 0;\n }\n if (carry !== 0) {\n throw new Error('Non-zero carry');\n }\n length = i;\n pbegin++;\n }\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) {\n str += ALPHABET.charAt(b58[it2]);\n }\n return str;\n }\n function decodeUnsafe(source) {\n if (typeof source !== 'string') {\n throw new TypeError('Expected String');\n }\n if (source.length === 0) {\n return new Uint8Array();\n }\n var psz = 0;\n if (source[psz] === ' ') {\n return;\n }\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n var size = (source.length - psz) * FACTOR + 1 >>> 0;\n var b256 = new Uint8Array(size);\n while (source[psz]) {\n var carry = BASE_MAP[source.charCodeAt(psz)];\n if (carry === 255) {\n return;\n }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n carry += BASE * b256[it3] >>> 0;\n b256[it3] = carry % 256 >>> 0;\n carry = carry / 256 >>> 0;\n }\n if (carry !== 0) {\n throw new Error('Non-zero carry');\n }\n length = i;\n psz++;\n }\n if (source[psz] === ' ') {\n return;\n }\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch;\n }\n function decode(string) {\n var buffer = decodeUnsafe(string);\n if (buffer) {\n return buffer;\n }\n throw new Error(`Non-${ name } character`);\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n };\n}\nvar src = base;\nvar _brrp__multiformats_scope_baseX = src;\nexport default _brrp__multiformats_scope_baseX;","import basex from '../../vendor/base-x.js';\nimport { coerce } from '../bytes.js';\nclass Encoder {\n constructor(name, prefix, baseEncode) {\n this.name = name;\n this.prefix = prefix;\n this.baseEncode = baseEncode;\n }\n encode(bytes) {\n if (bytes instanceof Uint8Array) {\n return `${ this.prefix }${ this.baseEncode(bytes) }`;\n } else {\n throw Error('Unknown type, must be binary type');\n }\n }\n}\nclass Decoder {\n constructor(name, prefix, baseDecode) {\n this.name = name;\n this.prefix = prefix;\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character');\n }\n this.prefixCodePoint = prefix.codePointAt(0);\n this.baseDecode = baseDecode;\n }\n decode(text) {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${ JSON.stringify(text) }, ${ this.name } decoder only supports inputs prefixed with ${ this.prefix }`);\n }\n return this.baseDecode(text.slice(this.prefix.length));\n } else {\n throw Error('Can only multibase decode strings');\n }\n }\n or(decoder) {\n return or(this, decoder);\n }\n}\nclass ComposedDecoder {\n constructor(decoders) {\n this.decoders = decoders;\n }\n or(decoder) {\n return or(this, decoder);\n }\n decode(input) {\n const prefix = input[0];\n const decoder = this.decoders[prefix];\n if (decoder) {\n return decoder.decode(input);\n } else {\n throw RangeError(`Unable to decode multibase string ${ JSON.stringify(input) }, only inputs prefixed with ${ Object.keys(this.decoders) } are supported`);\n }\n }\n}\nexport const or = (left, right) => new ComposedDecoder({\n ...left.decoders || { [left.prefix]: left },\n ...right.decoders || { [right.prefix]: right }\n});\nexport class Codec {\n constructor(name, prefix, baseEncode, baseDecode) {\n this.name = name;\n this.prefix = prefix;\n this.baseEncode = baseEncode;\n this.baseDecode = baseDecode;\n this.encoder = new Encoder(name, prefix, baseEncode);\n this.decoder = new Decoder(name, prefix, baseDecode);\n }\n encode(input) {\n return this.encoder.encode(input);\n }\n decode(input) {\n return this.decoder.decode(input);\n }\n}\nexport const from = ({name, prefix, encode, decode}) => new Codec(name, prefix, encode, decode);\nexport const baseX = ({prefix, name, alphabet}) => {\n const {encode, decode} = basex(alphabet, name);\n return from({\n prefix,\n name,\n encode,\n decode: text => coerce(decode(text))\n });\n};\nconst decode = (string, alphabet, bitsPerChar, name) => {\n const codes = {};\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i;\n }\n let end = string.length;\n while (string[end - 1] === '=') {\n --end;\n }\n const out = new Uint8Array(end * bitsPerChar / 8 | 0);\n let bits = 0;\n let buffer = 0;\n let written = 0;\n for (let i = 0; i < end; ++i) {\n const value = codes[string[i]];\n if (value === undefined) {\n throw new SyntaxError(`Non-${ name } character`);\n }\n buffer = buffer << bitsPerChar | value;\n bits += bitsPerChar;\n if (bits >= 8) {\n bits -= 8;\n out[written++] = 255 & buffer >> bits;\n }\n }\n if (bits >= bitsPerChar || 255 & buffer << 8 - bits) {\n throw new SyntaxError('Unexpected end of data');\n }\n return out;\n};\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '=';\n const mask = (1 << bitsPerChar) - 1;\n let out = '';\n let bits = 0;\n let buffer = 0;\n for (let i = 0; i < data.length; ++i) {\n buffer = buffer << 8 | data[i];\n bits += 8;\n while (bits > bitsPerChar) {\n bits -= bitsPerChar;\n out += alphabet[mask & buffer >> bits];\n }\n }\n if (bits) {\n out += alphabet[mask & buffer << bitsPerChar - bits];\n }\n if (pad) {\n while (out.length * bitsPerChar & 7) {\n out += '=';\n }\n }\n return out;\n};\nexport const rfc4648 = ({name, prefix, bitsPerChar, alphabet}) => {\n return from({\n prefix,\n name,\n encode(input) {\n return encode(input, alphabet, bitsPerChar);\n },\n decode(input) {\n return decode(input, alphabet, bitsPerChar, name);\n }\n });\n};","import { baseX } from './base.js';\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n});\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n});","import { rfc4648 } from './base.js';\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n});\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n});\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n});\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n});\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n});\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n});\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n});\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n});\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n});","import * as varint from './varint.js';\nimport * as Digest from './hashes/digest.js';\nimport { base58btc } from './bases/base58.js';\nimport { base32 } from './bases/base32.js';\nimport { coerce } from './bytes.js';\nexport class CID {\n constructor(version, code, multihash, bytes) {\n this.code = code;\n this.version = version;\n this.multihash = multihash;\n this.bytes = bytes;\n this.byteOffset = bytes.byteOffset;\n this.byteLength = bytes.byteLength;\n this.asCID = this;\n this._baseCache = new Map();\n Object.defineProperties(this, {\n byteOffset: hidden,\n byteLength: hidden,\n code: readonly,\n version: readonly,\n multihash: readonly,\n bytes: readonly,\n _baseCache: hidden,\n asCID: hidden\n });\n }\n toV0() {\n switch (this.version) {\n case 0: {\n return this;\n }\n default: {\n const {code, multihash} = this;\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0');\n }\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0');\n }\n return CID.createV0(multihash);\n }\n }\n }\n toV1() {\n switch (this.version) {\n case 0: {\n const {code, digest} = this.multihash;\n const multihash = Digest.create(code, digest);\n return CID.createV1(this.code, multihash);\n }\n case 1: {\n return this;\n }\n default: {\n throw Error(`Can not convert CID version ${ this.version } to version 0. This is a bug please report`);\n }\n }\n }\n equals(other) {\n return other && this.code === other.code && this.version === other.version && Digest.equals(this.multihash, other.multihash);\n }\n toString(base) {\n const {bytes, version, _baseCache} = this;\n switch (version) {\n case 0:\n return toStringV0(bytes, _baseCache, base || base58btc.encoder);\n default:\n return toStringV1(bytes, _baseCache, base || base32.encoder);\n }\n }\n toJSON() {\n return {\n code: this.code,\n version: this.version,\n hash: this.multihash.bytes\n };\n }\n get [Symbol.toStringTag]() {\n return 'CID';\n }\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return 'CID(' + this.toString() + ')';\n }\n static isCID(value) {\n deprecate(/^0\\.0/, IS_CID_DEPRECATION);\n return !!(value && (value[cidSymbol] || value.asCID === value));\n }\n get toBaseEncodedString() {\n throw new Error('Deprecated, use .toString()');\n }\n get codec() {\n throw new Error('\"codec\" property is deprecated, use integer \"code\" property instead');\n }\n get buffer() {\n throw new Error('Deprecated .buffer property, use .bytes to get Uint8Array instead');\n }\n get multibaseName() {\n throw new Error('\"multibaseName\" property is deprecated');\n }\n get prefix() {\n throw new Error('\"prefix\" property is deprecated');\n }\n static asCID(value) {\n if (value instanceof CID) {\n return value;\n } else if (value != null && value.asCID === value) {\n const {version, code, multihash, bytes} = value;\n return new CID(version, code, multihash, bytes || encodeCID(version, code, multihash.bytes));\n } else if (value != null && value[cidSymbol] === true) {\n const {version, multihash, code} = value;\n const digest = Digest.decode(multihash);\n return CID.create(version, code, digest);\n } else {\n return null;\n }\n }\n static create(version, code, digest) {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported');\n }\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(`Version 0 CID must use dag-pb (code: ${ DAG_PB_CODE }) block encoding`);\n } else {\n return new CID(version, code, digest, digest.bytes);\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes);\n return new CID(version, code, digest, bytes);\n }\n default: {\n throw new Error('Invalid version');\n }\n }\n }\n static createV0(digest) {\n return CID.create(0, DAG_PB_CODE, digest);\n }\n static createV1(code, digest) {\n return CID.create(1, code, digest);\n }\n static decode(bytes) {\n const [cid, remainder] = CID.decodeFirst(bytes);\n if (remainder.length) {\n throw new Error('Incorrect length');\n }\n return cid;\n }\n static decodeFirst(bytes) {\n const specs = CID.inspectBytes(bytes);\n const prefixSize = specs.size - specs.multihashSize;\n const multihashBytes = coerce(bytes.subarray(prefixSize, prefixSize + specs.multihashSize));\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length');\n }\n const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);\n const digest = new Digest.Digest(specs.multihashCode, specs.digestSize, digestBytes, multihashBytes);\n const cid = specs.version === 0 ? CID.createV0(digest) : CID.createV1(specs.codec, digest);\n return [\n cid,\n bytes.subarray(specs.size)\n ];\n }\n static inspectBytes(initialBytes) {\n let offset = 0;\n const next = () => {\n const [i, length] = varint.decode(initialBytes.subarray(offset));\n offset += length;\n return i;\n };\n let version = next();\n let codec = DAG_PB_CODE;\n if (version === 18) {\n version = 0;\n offset = 0;\n } else if (version === 1) {\n codec = next();\n }\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${ version }`);\n }\n const prefixSize = offset;\n const multihashCode = next();\n const digestSize = next();\n const size = offset + digestSize;\n const multihashSize = size - prefixSize;\n return {\n version,\n codec,\n multihashCode,\n digestSize,\n multihashSize,\n size\n };\n }\n static parse(source, base) {\n const [prefix, bytes] = parseCIDtoBytes(source, base);\n const cid = CID.decode(bytes);\n cid._baseCache.set(prefix, source);\n return cid;\n }\n}\nconst parseCIDtoBytes = (source, base) => {\n switch (source[0]) {\n case 'Q': {\n const decoder = base || base58btc;\n return [\n base58btc.prefix,\n decoder.decode(`${ base58btc.prefix }${ source }`)\n ];\n }\n case base58btc.prefix: {\n const decoder = base || base58btc;\n return [\n base58btc.prefix,\n decoder.decode(source)\n ];\n }\n case base32.prefix: {\n const decoder = base || base32;\n return [\n base32.prefix,\n decoder.decode(source)\n ];\n }\n default: {\n if (base == null) {\n throw Error('To parse non base32 or base58btc encoded CID multibase decoder must be provided');\n }\n return [\n source[0],\n base.decode(source)\n ];\n }\n }\n};\nconst toStringV0 = (bytes, cache, base) => {\n const {prefix} = base;\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${ base.name } encoding`);\n }\n const cid = cache.get(prefix);\n if (cid == null) {\n const cid = base.encode(bytes).slice(1);\n cache.set(prefix, cid);\n return cid;\n } else {\n return cid;\n }\n};\nconst toStringV1 = (bytes, cache, base) => {\n const {prefix} = base;\n const cid = cache.get(prefix);\n if (cid == null) {\n const cid = base.encode(bytes);\n cache.set(prefix, cid);\n return cid;\n } else {\n return cid;\n }\n};\nconst DAG_PB_CODE = 112;\nconst SHA_256_CODE = 18;\nconst encodeCID = (version, code, multihash) => {\n const codeOffset = varint.encodingLength(version);\n const hashOffset = codeOffset + varint.encodingLength(code);\n const bytes = new Uint8Array(hashOffset + multihash.byteLength);\n varint.encodeTo(version, bytes, 0);\n varint.encodeTo(code, bytes, codeOffset);\n bytes.set(multihash, hashOffset);\n return bytes;\n};\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID');\nconst readonly = {\n writable: false,\n configurable: false,\n enumerable: true\n};\nconst hidden = {\n writable: false,\n enumerable: false,\n configurable: false\n};\nconst version = '0.0.0-dev';\nconst deprecate = (range, message) => {\n if (range.test(version)) {\n console.warn(message);\n } else {\n throw new Error(message);\n }\n};\nconst IS_CID_DEPRECATION = `CID.isCID(v) is deprecated and will be removed in the next major release.\nFollowing code pattern:\n\nif (CID.isCID(value)) {\n doSomethingWithCID(value)\n}\n\nIs replaced with:\n\nconst cid = CID.asCID(value)\nif (cid) {\n // Make sure to use cid instead of value\n doSomethingWithCID(cid)\n}\n`;","import { CID } from \"multiformats/cid\";\n\nexport type IPFSUrl = `ipfs://${string}`;\n\nexport function isCID(str: string | null | undefined): boolean {\n if (!str) return false;\n\n try {\n CID.parse(str);\n return true;\n } catch (e) {\n if (/^(bafy|Qm)/.test(str)) return true;\n return false;\n }\n}\n\nexport function normalizeIPFSUrl(\n url: string | null | undefined,\n): IPFSUrl | null {\n if (!url || typeof url !== \"string\") return null;\n\n // Handle urls wrapped in quotes\n url = url.replace(/\"/g, \"\");\n\n // Check if already a normalized IPFS url\n if (isNormalizedIPFSURL(url)) return url as IPFSUrl;\n\n // Check if url is a CID string\n if (isCID(url)) return `ipfs://${url}`;\n\n // If url is not either an ipfs gateway or protocol url\n if (!isIPFSUrl(url)) return null;\n\n // If url is already a gateway url, parse and normalize\n if (isGatewayIPFSUrl(url)) {\n // Replace leading double-slashes and parse URL\n const parsed = new URL(url.replace(/^\\/\\//, \"http://\"));\n // Remove IPFS from the URL\n // http://gateway/ipfs/<CID>?x=y#z -> http://gateway/<CID>?x=y#z\n parsed.pathname = parsed.pathname.replace(/^\\/ipfs\\//, \"\");\n // Remove the protocol and host from the URL\n // http://gateway/<CID>?x=y#z -> <CID>?x=y#z\n const cid = parsed\n .toString()\n .replace(`${parsed.protocol}//${parsed.host}/`, \"\");\n // Prepend ipfs protocol\n return `ipfs://${cid}`;\n }\n\n return null;\n}\n\nfunction isNormalizedIPFSURL(url: string | null | undefined): boolean {\n return url && typeof url === \"string\" ? url.startsWith(\"ipfs://\") : false;\n}\n\nfunction isGatewayIPFSUrl(url: string | null | undefined): boolean {\n if (url && typeof url === \"string\") {\n try {\n const parsed = new URL(url.replace(/^\"|'(.*)\"|'$/, \"$1\"));\n return (\n !isNormalizedIPFSURL(url) &&\n parsed &&\n parsed.pathname.startsWith(\"/ipfs/\")\n );\n } catch {\n return false;\n }\n }\n\n return false;\n}\n\nfunction isIPFSUrl(url: string | null | undefined): boolean {\n return url ? isNormalizedIPFSURL(url) || isGatewayIPFSUrl(url) : false;\n}\n\nexport function isNormalizeableIPFSUrl(\n url: string | null | undefined,\n): boolean {\n return url ? isIPFSUrl(url) || isCID(url) : false;\n}\n","import { isArweaveURL } from \"./arweave\";\nimport { isNormalizeableIPFSUrl, normalizeIPFSUrl } from \"./ipfs\";\n\nconst IPFS_GATEWAY = \"https://magic.decentralized-content.com\";\n\nconst ARWEAVE_GATEWAY = \"https://arweave.net\";\n\nexport function arweaveGatewayUrl(normalizedArweaveUrl: string | null) {\n if (!normalizedArweaveUrl || typeof normalizedArweaveUrl !== \"string\")\n return null;\n return normalizedArweaveUrl.replace(\"ar://\", `${ARWEAVE_GATEWAY}/`);\n}\n\nexport function ipfsGatewayUrl(url: string | null) {\n if (!url || typeof url !== \"string\") return null;\n const normalizedIPFSUrl = normalizeIPFSUrl(url);\n if (normalizedIPFSUrl) {\n return normalizedIPFSUrl.replace(\"ipfs://\", `${IPFS_GATEWAY}/ipfs/`);\n }\n return null;\n}\n\nexport function getFetchableUrl(uri: string | null | undefined): string | null {\n if (!uri || typeof uri !== \"string\") return null;\n\n // Prevent fetching from insecure URLs\n if (uri.startsWith(\"http://\")) return null;\n\n // If it is an IPFS HTTP or ipfs:// url\n if (isNormalizeableIPFSUrl(uri)) {\n // Return a fetchable gateway url\n return ipfsGatewayUrl(uri);\n }\n\n // If it is a ar:// url\n if (isArweaveURL(uri)) {\n // Return a fetchable gateway url\n return arweaveGatewayUrl(uri);\n }\n\n // If it is already a url (or blob or data-uri)\n if (/^(https|data|blob):/.test(uri)) {\n // Return the URI\n return uri;\n }\n\n return null;\n}\n","// text\nconst HTML = \"text/html\";\nconst MARKDOWN = \"text/markdown\";\nconst MARKDOWN_UTF8 = \"text/markdown; charset=utf-8\";\nconst TEXT_PLAIN_UTF8 = \"text/plain; charset=utf-8\";\nexport const TEXT_PLAIN = \"text/plain\";\nconst CSV = \"text/csv\";\nconst NUMBERS = \".numbers\";\nconst EXCEL = \".xlsx\";\nconst PDF = \"application/pdf\";\n\n// image\nconst JPG = \"image/jpg\";\nconst JPEG = \"image/jpeg\";\nconst PNG = \"image/png\";\nconst WEBP = \"image/webp\";\nconst SVG = \"image/svg+xml\";\nconst TIFF = \"image/tiff\";\nconst GIF = \"image/gif\";\n\nexport const isImage = (mimeType: string | null | undefined) => {\n if (!mimeType) return false;\n return [JPG, JPEG, PNG, WEBP, SVG, TIFF, GIF].includes(mimeType);\n};\n\nexport enum MediaType {\n CSV = \"CSV\",\n NUMBERS = \"NUMBERS\",\n EXCEL = \"EXCEL\",\n IMAGE = \"IMAGE\",\n VIDEO = \"VIDEO\",\n AUDIO = \"AUDIO\",\n TIFF = \"TIFF\",\n TEXT = \"TEXT\",\n PDF = \"PDF\",\n MODEL = \"MODEL\",\n HTML = \"HTML\",\n ZIP = \"ZIP\",\n UNKNOWN = \"UNKNOWN\",\n}\n\nexport const DEFAULT_THUMBNAIL_CID_HASHES: { [key: string]: string } = {\n [MediaType.AUDIO]:\n \"bafkreidir5laqi26ta6ivnpe2zpekgrfcyi4tb5x6vhwmwnledmzxshfb4\",\n [MediaType.VIDEO]:\n \"bafkreifm4edadl3j5luoyvw4p6elxeqd77la7bulee6vhq5gq4chfk32mu\",\n [MediaType.HTML]:\n \"bafkreifgvi6xfwqy2l6g45csyokejpaib52ee7zrw6etrxl2tas4xkkclq\",\n [MediaType.ZIP]:\n \"bafkreihe5rr5jbkwzegisjlhxbb7jw22xw5oilfmgd2re6tz6buo4pasdq\", // assuming all zip files are html directories\n [MediaType.TEXT]:\n \"bafkreiaez25nfgggzrnza2loxf6xueb2esm44pnyjyulwoslnipowrf56q\",\n default: \"bafkreihcoahllisbpb4eeypdwtm7go5uh275wxd7wf2tantpxlpjhviok4\",\n};\n\n// video\nconst MP4 = \"video/mp4\";\nconst QUICKTIME = \"video/quicktime\";\nconst M4V = \"video/x-m4v\";\nconst WEBM = \"video/webm\";\n\n// audio\nconst M4A = \"audio/x-m4a\";\nconst MPEG = \"audio/mpeg\";\nconst MP3 = \"audio/mp3\";\nconst WAV = \"audio/wav\";\nconst VND_WAV = \"audio/vnd.wav\";\nconst VND_WAVE = \"audio/vnd.wave\";\nconst WAVE = \"audio/wave\";\nconst X_WAV = \"audio/x-wav\";\nconst AIFF = \"audio/aiff\";\n\n// 3D\nconst GLTF = \"model/gltf+json\";\nconst GLB = \"model/gltf-binary\";\n// File extensions, as some files return '' as the mimetype\nconst GLTF_EXT = \".gltf\";\nconst GLB_EXT = \".glb\";\n\n// application\nexport const JSON_MIME_TYPE = \"application/json\";\nconst ZIP = \"application/zip\";\n\nconst mimeToMediaType = {\n [HTML]: MediaType.HTML,\n [JPG]: MediaType.IMAGE,\n [JPEG]: MediaType.IMAGE,\n [PNG]: MediaType.IMAGE,\n [WEBP]: MediaType.IMAGE,\n [SVG]: MediaType.IMAGE,\n [TIFF]: MediaType.TIFF,\n [GIF]: MediaType.IMAGE,\n [MP4]: MediaType.VIDEO,\n [WEBM]: MediaType.VIDEO,\n [QUICKTIME]: MediaType.VIDEO,\n [M4V]: MediaType.VIDEO,\n [MPEG]: MediaType.AUDIO,\n [MP3]: MediaType.AUDIO,\n [M4A]: MediaType.AUDIO,\n [VND_WAV]: MediaType.AUDIO,\n [VND_WAVE]: MediaType.AUDIO,\n [WAV]: MediaType.AUDIO,\n [WAVE]: MediaType.AUDIO,\n [X_WAV]: MediaType.AUDIO,\n [AIFF]: MediaType.AUDIO,\n [TEXT_PLAIN]: MediaType.TEXT,\n [TEXT_PLAIN_UTF8]: MediaType.TEXT,\n [MARKDOWN]: MediaType.TEXT,\n [MARKDOWN_UTF8]: MediaType.TEXT,\n [CSV]: MediaType.CSV,\n [NUMBERS]: MediaType.NUMBERS,\n [EXCEL]: MediaType.EXCEL,\n [PDF]: MediaType.PDF,\n [ZIP]: MediaType.ZIP,\n [GLTF]: MediaType.MODEL,\n [GLTF_EXT]: MediaType.MODEL,\n [GLB]: MediaType.MODEL,\n // GLTF returns 'application/json' as the mimetype,\n // and as the only JSON-encoded media we currently support,\n // we assume that if the mimetype is JSON, it's a GLTF\n [JSON_MIME_TYPE]: MediaType.MODEL,\n [GLB_EXT]: MediaType.MODEL,\n} as const;\n\n/** Return a MediaType for the given mime type. If mime type is unknown you can provide a filename as a fallback, where the type will be guessed based on extension. */\nexport function mimeTypeToMedia(mimeType?: string | null) {\n if (!mimeType) return MediaType.UNKNOWN;\n\n return (\n mimeToMediaType[mimeType as keyof typeof mimeToMediaType] ||\n MediaType.UNKNOWN\n );\n}\n\nexport async function getMimeType(uri?: string) {\n if (!uri) return uri;\n\n const res = await fetch(uri, { method: \"HEAD\" });\n let mimeType = res.headers.get(\"content-type\");\n return mimeType;\n}\n","import { getFetchableUrl } from \"./gateway\";\nimport {\n DEFAULT_THUMBNAIL_CID_HASHES,\n TEXT_PLAIN,\n getMimeType,\n isImage,\n mimeTypeToMedia,\n} from \"./mimeTypes\";\nimport {\n MakeMediaMetadataParams,\n MakeTextMetadataParams,\n TokenMetadataJson,\n} from \"./types\";\n\n/**\n * Takes properties for a text based nft and formats it as proper json metadata\n * for the token, which should be uploaded to IPFS.\n * @param parameters - The parameters to format into metadata {@link MakeTextMetadataParams}\n */\nexport const makeTextTokenMetadata = (\n parameters: MakeTextMetadataParams,\n): TokenMetadataJson => {\n const { name, textFileUrl, thumbnailUrl, attributes = [] } = parameters;\n\n const content = textFileUrl\n ? {\n mime: TEXT_PLAIN,\n uri: textFileUrl,\n }\n : null;\n\n const image = thumbnailUrl;\n const animation_url = textFileUrl;\n\n return {\n name,\n image,\n animation_url,\n content,\n attributes,\n };\n};\n\n/**\n * Takes properties for a media based nft (video, image, etc) and formats it as proper json metadata\n * for the token, which should be uploaded to IPFS.\n * @param parameters - The parameters to format into metadata {@link MakeMediaMetadataParams}\n */\nexport const makeMediaTokenMetadata = async ({\n name,\n description,\n attributes = [],\n mediaUrl,\n thumbnailUrl,\n}: MakeMediaMetadataParams): Promise<TokenMetadataJson> => {\n const contentUrl = mediaUrl;\n const fetchableContentUrl = getFetchableUrl(contentUrl);\n\n if (!fetchableContentUrl)\n throw new Error(`Content url (${contentUrl}) is not fetchable`);\n\n const mimeType = await getMimeType(fetchableContentUrl);\n const mediaType = mimeTypeToMedia(mimeType);\n\n let image: string | undefined = undefined;\n let animation_url: string | null = null;\n\n // If the media is an image, just set the image field\n // Otherwise we require a thumbnail, set image and animation_url\n if (isImage(mimeType)) {\n image = contentUrl;\n } else {\n image = thumbnailUrl;\n animation_url = mediaUrl;\n }\n\n // If no image determined, use a fallback placeholder\n if (!image)\n image = `ipfs://${\n DEFAULT_THUMBNAIL_CID_HASHES[mediaType] ||\n DEFAULT_THUMBNAIL_CID_HASHES.default\n }`;\n\n const content = contentUrl\n ? {\n mime: mimeType || \"application/octet-stream\",\n uri: contentUrl,\n }\n : null;\n\n return {\n name,\n description,\n image,\n animation_url,\n content,\n attributes,\n };\n};\n","import { TextMetadataFiles } from \"./types\";\n\nconst CHAR_LIMIT = 1111;\n\nconst wrapText = ({\n ctx,\n text,\n x,\n y,\n maxWidth,\n lineHeight,\n}: {\n ctx: CanvasRenderingContext2D;\n text: string;\n x: number;\n y: number;\n maxWidth: number;\n lineHeight: number;\n}) => {\n // Split text into words\n let words = text.replaceAll(\"\\n\", \" \\n \").split(/ +/);\n let line = \"\"; // This will store the text of the current line\n let testLine = \"\"; // This will store the text when we add a word, to test if it's too long\n let lineArray = []; // This is an array of lines, which the function will return\n\n for (var n = 0; n < words.length; n++) {\n // Measure text sizing\n testLine += `${words[n]} `;\n let metrics = ctx.measureText(testLine);\n let testWidth = metrics.width;\n // If the width of this test line is more than the max width\n if (words[n]?.includes(\"\\n\") || (testWidth > maxWidth && n > 0)) {\n // Then the line is finished, push the current line into \"lineArray\"\n lineArray.push({ text: line, x, y });\n // Start a new line\n y += lineHeight;\n // Update line and test line to use this word as the first word on the next line\n // If it's a newline, then don't add a space\n if (words[n]?.includes(\"\\n\")) {\n line = ``;\n testLine = ``;\n } else {\n line = `${words[n]} `;\n testLine = `${words[n]} `;\n }\n } else {\n // Test line is less than the max width, add the word to the current line\n line += `${words[n]} `;\n }\n // Handle a single line...\n if (n === words.length - 1) {\n lineArray.push({ text: line, x, y });\n }\n }\n return lineArray;\n};\n\nasync function generateTextPreview(text: string): Promise<File> {\n // Trim the text to a reasonable max length. Prevent crashes if the user pastes a gigantic string\n const trimmedText = text.trim().slice(0, CHAR_LIMIT);\n\n const [width, height] = [500, 500];\n const padding = 20;\n const dpr = 2;\n\n const fontFamily = \"Inter\";\n const [fontSize, lineHeight] = [16, 24];\n const [textColor, backgroundColor] = [\"black\", \"white\"];\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return reject(new Error(\"Could not create canvas context\"));\n }\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width * dpr, width * dpr);\n ctx.fillStyle = textColor;\n ctx.font = `${fontSize * dpr}px ${fontFamily}`;\n const wrapped = wrapText({\n ctx,\n text: trimmedText,\n x: padding * dpr,\n y: fontSize * dpr + padding * dpr,\n maxWidth: width * dpr - padding * 2 * dpr,\n lineHeight: lineHeight * dpr,\n });\n wrapped.forEach((line) => ctx.fillText(line.text, line.x, line.y));\n canvas.toBlob((blob) => {\n if (!blob) {\n return reject(new Error(\"Could not create blob\"));\n }\n resolve(new File([blob], \"thumbnail.png\", { type: \"image/png\" }));\n });\n });\n}\n\nfunction generateTextTitle(text: string) {\n const firstLine = text.split(\"\\n\")[0]!;\n const firstSentence = firstLine?.split(\". \")[0]!;\n\n if (firstSentence.length > 50) {\n return firstSentence.slice(0, 50) + \"...\";\n }\n\n return firstSentence;\n}\n\nconst toTextFile = (text: string) =>\n new File([text], \"Untitled.txt\", { type: \"text/plain\" });\n\n/** For text nfts, this will generate files that are needed for the metadata json, including the txt.file containing the text, and a thumbnail image containing a preview of the text\n */\nexport async function generateTextNftMetadataFiles(\n text: string,\n): Promise<TextMetadataFiles> {\n const name = generateTextTitle(text);\n const textFile = toTextFile(text);\n const thumbnailFile = await generateTextPreview(text);\n\n return {\n name,\n mediaUrlFile: textFile,\n thumbnailFile,\n };\n}\n"],"mappings":";AAAA,SAAS,gBAAgB,eAAAA,oBAAmB;AAU5C;AAAA,EAGE;AAAA,EACA,yCAAAC;AAAA,OACK;;;ACdP;AAAA,EACE,yCAAyC;AAAA,EAEzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,cAAAC;AAAA,OAEK;;;ACtBP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,kBAAkB;;;ACZ3B,SAAS,gBAAgB;AAElB,IAAM,gBAAgB;AACtB,IAAM,yBAAyB,OAAO,sBAAsB;AAGnE,IAAM,uBACJ;AAEK,SAAS,YAAY,MAAcC,UAAyB;AACjE,SAAO,GAAG,oBAAoB,IAAI,IAAI,IAAIA,QAAO;AACnD;AAEO,IAAM,aAAa,SAAS;AAAA,EACjC;AAAA,EACA;AACF,CAAU;AAEH,IAAM,oBAAoB;AAAA,EAC/B;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,EACnB;AACF;;;AD3BO,IAAM,mBAAmB,WAAW,UAAU;AAE9C,IAAM,uBAAsD;AAAA,EACjE,CAAC,QAAQ,EAAE,GAAG;AAAA,IACZ,SAAS,QAAQ;AAAA,IACjB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,uBAAuB,QAAQ;AAAA,EAC1D;AAAA,EACA,CAAC,QAAQ,EAAE,GAAG;AAAA,IACZ,SAAS,QAAQ;AAAA,IACjB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,uBAAuB,QAAQ;AAAA,EAC1D;AAAA,EACA,CAAC,KAAK,EAAE,GAAG;AAAA,IACT,SAAS,KAAK;AAAA,IACd,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,YAAY,EAAE,GAAG;AAAA,IAChB,SAAS,YAAY;AAAA,IACrB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,SAAS,EAAE,GAAG;AAAA,IACb,SAAS,SAAS;AAAA,IAClB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,wBAAwB,QAAQ;AAAA,EAC3D;AAAA,EACA,CAAC,SAAS,EAAE,GAAG;AAAA,IACb,SAAS,SAAS;AAAA,IAClB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,KAAK,EAAE,GAAG;AAAA,IACT,SAAS,KAAK;AAAA,IACd,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,YAAY,EAAE,GAAG;AAAA,IAChB,SAAS,YAAY;AAAA,IACrB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,QAAQ,EAAE,GAAG;AAAA,IACZ,SAAS,QAAQ;AAAA,IACjB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AACF;;;AExFA;AAAA,EAKE;AAAA,OAEK;AAOA,IAAM,2BAA2B,CACtC,eACuC;AACvC,MAAI,CAAC;AAAY,WAAO;AAExB,SAAO;AAAA,IACL,kBACG,WAAW,oBAA8C,CAAC;AAAA,IAC7D,eAAe,WAAW;AAAA,IAC1B,cAAc,WAAW;AAAA,IACzB,aAAa,WAAW;AAAA,EAC1B;AACF;AAQO,IAAM,wBAAwB,CACnC,YAC4B;AAC5B,MACE,QAAQ,mBAAmB,qBAAqB,MAChD,CAAC,QAAQ,gBACT;AACA,UAAM,cACJ,QAAQ;AACV,WAAO;AAAA,MACL,sBAAsB,qBAAqB;AAAA,MAC3C,eAAe;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,KAAK,QAAQ;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,aAAa;AAAA,UACX,GAAG;AAAA,UACH,kBAAkB,YAAY;AAAA,UAC9B,kBAAkB,YAAY;AAAA,UAC9B,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,eAAe,OAAO,YAAY,aAAa;AAAA,UAC/C,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,cAAc,OAAO,YAAY,YAAY;AAAA,UAC7C,qBAAqB,OAAO,YAAY,mBAAmB;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL,UAAM,cACJ,QAAQ;AACV,WAAO;AAAA,MACL,sBAAsB,qBAAqB;AAAA,MAC3C,eAAe;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,KAAK,QAAQ;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,aAAa;AAAA,UACX,GAAG;AAAA,UACH,kBAAkB,YAAY;AAAA,UAC9B,iBAAiB,YAAY;AAAA,UAC7B,gBAAgB,YAAY;AAAA,UAC5B,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,eAAe,OAAO,YAAY,aAAa;AAAA,UAC/C,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,cAAc,OAAO,YAAY,YAAY;AAAA,UAC7C,qBAAqB,OAAO,YAAY,mBAAmB;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAIO,IAAM,+BAA+B,CAC1C,cACI;AAAA,EACJ,YAAY,yBAAyB,SAAS,UAAU;AAAA,EACxD,mBAAmB,SAAS;AAAA,EAC5B,WAAW,SAAS;AAAA,EACpB,QAAQ,SAAS;AAAA,EACjB,SAAS,sBAAsB,SAAS,OAAO;AACjD;AAMO,IAAM,2CAA2C,CACtD,cACI;AAAA,EACJ,YAAY,yBAAyB;AAAA,IACnC,eAAe,SAAS;AAAA,IACxB,cAAc,SAAS;AAAA,IACvB,aAAa,SAAS;AAAA,EACxB,CAAC;AAAA,EACD,UAAU,SAAS,SAAS,IAAI,CAAC,aAAa;AAAA,IAC5C,SAAS,sBAAsB,OAAO;AAAA,IACtC,WAAW,QAAQ;AAAA,EACrB,EAAE;AACJ;AAEA,IAAM,wBAAwB,CAAC;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,OAAgE;AAAA,EAC9D,GAAG;AAAA,EACH,gBAAgB;AAAA,EAChB,aAAa;AAAA,IACX,GAAG;AAAA,IACH,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,eAAe,YAAY,cAAc,SAAS;AAAA,IAClD,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,cAAc,YAAY,aAAa,SAAS;AAAA,IAChD,qBAAqB,YAAY,oBAAoB,SAAS;AAAA,EAChE;AACF;AAEA,IAAM,wBAAwB,CAAC;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,OAAgE;AAAA,EAC9D,GAAG;AAAA,EACH,gBAAgB;AAAA,EAChB,aAAa;AAAA,IACX,GAAG;AAAA,IACH,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,eAAe,YAAY,cAAc,SAAS;AAAA,IAClD,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,cAAc,YAAY,aAAa,SAAS;AAAA,IAChD,qBAAqB,YAAY,oBAAoB,SAAS;AAAA,EAChE;AACF;AAEO,IAAM,sBAAsB,CAAiC;AAAA,EAClE;AAAA,EACA;AACF,MAA2E;AACzE,MAAI,yBAAyB,qBAAqB,IAAI;AACpD,WAAO,sBAAsB,aAAgC;AAAA,EAC/D;AACA,MAAI,yBAAyB,qBAAqB,IAAI;AACpD,WAAO,sBAAsB,aAAgC;AAAA,EAC/D;AACA,QAAM,IAAI,MAAM,kCAAkC,oBAAoB,EAAE;AAC1E;AAaO,IAAM,2BAA2B,CAAiC;AAAA,EACvE,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,OAIoE;AAAA,EAClE,SAAS,oBAAoB;AAAA,IAC3B;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD;AAAA,EACA;AAAA,EAGA,oBAAoB;AAAA,EACpB,YAAY,qBAAqB,OAAO,EAAG;AAC7C;AAEO,IAAM,oBAAoB,CAC/B,4BAEA,wBAAwB,yBAAyB,qBAAqB;AAEjE,IAAM,oBAAoB,CAC/B,4BAEA,wBAAwB,yBAAyB,qBAAqB;;;AHtKjE,IAAM,4BAA4B,MACvC,0CAA0C,GAAG;AAO/C,eAAsB,4BAA4B;AAAA,EAChD,gBAAgB;AAAA,EAChB,mBAAmB,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AACF,GAMG;AAED,SAAO,MAAM,aAAa,aAAa;AAAA,IACrC,KAAK;AAAA,IACL,SAAS,0BAA0B;AAAA,IACnC,cAAc;AAAA,IACd,MAAM;AAAA,MACJ,OAAO,WAAW,WAAW,SAAS,OAAO;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,qBAAqD;AAAA,EACzE;AAAA,EACA,GAAG;AACL,GAImD;AACjD,SAAO,MAAM,wBAAwB;AAAA,IACnC,GAAG,2BAA2B,IAAI;AAAA,IAClC;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,wBACpB,QACA;AACA,MAAI;AACF,WAAO,MAAM,qBAAqB,MAAM;AAAA,EAC1C,SAAS,OAAO;AACd,YAAQ,MAAM,KAAK;AACnB,WAAO;AAAA,EACT;AACF;AAaA,eAAsB,iBAAiD;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAKqE;AACnE,QAAM,mBAAmB,MAAM,wBAAwB;AAAA,IACrD,GAAG;AAAA,IACH;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,MAAI,CAAC,gBAAgB;AACnB,WAAO;AAAA,MACL,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,eAAe,MAAM,4BAA4B;AAAA,IACrD,QAAQ;AAAA,IACR,kBAAkB,YAAY;AAAA,IAC9B,eAAe,YAAY;AAAA,IAC3B;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAQO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA,iBAAiB;AACnB,GAGoB;AAClB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa;AAAA,MACX,UAAU,cAAc,YAAY;AAAA,MACpC,WAAW,cAAc,YAAY;AAAA,MACrC,qBAAqB,cAAc,YAAY;AAAA,MAC/C,eAAe,cAAc,YAAY;AAAA,MACzC,WAAW,cAAc,YAAY;AAAA,MACrC,cAAc,cAAc,YAAY;AAAA,MACxC,iBAAiB,cAAc,YAAY;AAAA,MAC3C,YAAY,cAAc,YAAY;AAAA,MACtC,kBAAkB,cAAc,YAAY;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AACF;AAkBO,IAAM,uCAAuC,OAAO;AAAA,EACzD,oBAAoB,EAAE,SAAAC,UAAS,YAAY,YAAY,UAAU;AAAA,EACjE;AAAA,EACA;AACF,MAIM;AAEJ,QAAM,eAAe,WAAW;AAAA,IAC9B,QAAQ;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,SAAAA;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,EAAE,MAAM,QAAQ,MAAM,SAAS;AAAA,QAC/B,EAAE,MAAM,WAAW,MAAM,SAAS;AAAA,QAClC;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,QAAe,CAAC,UAAU,cAAc,UAAW;AAEzD,QAAM,kBAAkB,UAAU,OAAO,KAAK,CAAC;AAE/C,SAAO,MAAM,eAAe;AAAA,IAC1B,MAAM;AAAA,IACN;AAAA,EACF,CAAC;AACH;AAEO,IAAM,2BAA2B,OAAO;AAAA,EAC7C;AAAA,EACA;AACF,MAGuC;AACrC,SAAQ,MAAM,aAAa,aAAa;AAAA,IACtC,KAAK;AAAA,IACL,SAAS,0BAA0B;AAAA,IACnC,cAAc;AAAA,IACd,MAAM,CAAC,aAAa;AAAA,EACtB,CAAC;AACH;AAIO,IAAM,yBAAyB,OAAO;AAAA,EAC3C,SAAAA;AAAA,EACA;AAAA,EACA;AACF,MAIwB;AACtB,UACE,MAAM,yBAAyB,EAAE,eAAe,aAAa,CAAC,GAC9D,SAASA,QAAO;AACpB;AAEA,eAAsB,4BAA4B;AAAA,EAChD;AAAA,EACA,UAAU;AAAA,EACV,iBAAiB;AACnB,GAEuD;AACrD,MAAI,OAAO,eAAe,aAAa;AACrC,WAAO,aAAa,aAAa;AAAA,MAC/B,SAAS,0BAA0B;AAAA,MACnC,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM;AAAA,QACJ;AAAA,UACE,GAAG;AAAA,UACH,kBAAkB,WAAW,oBAAoB,CAAC;AAAA,QACpD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA,SAAAA;AAAA,EACA;AAAA,EACA;AACF,GAG2D;AACzD,QAAM,qBAA0C;AAAA,IAC9C,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,QAAM,SAAS;AAAA,IACb,SAAS;AAAA,IACT;AAAA,IACA,SAASA,WAAU;AAAA,IACnB,aAAa;AAAA,EACf;AAEA,SAAO;AACT;AAEO,SAAS,eAA+C;AAAA,EAC7D;AAAA,EACA;AACF,GAG+B;AAC7B,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,eAAsB,kBAAkB;AAAA,EACtC;AAAA,EACA;AACF,GAGG;AAGD,MAAI;AACF,WAAO,MAAM,aAAa,aAAa;AAAA,MACrC,SAAS,0BAA0B;AAAA,MACnC,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,aAAa;AAAA,IACtB,CAAC;AAAA,EACH,SAAS,GAAG;AACV,YAAQ,MAAM,CAAC;AAEf,WAAOC,YAAW,UAAU;AAAA,EAC9B;AACF;AASA,eAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2C;AACzC,QAAM,UAAU,MAAM,kBAAkB,EAAE,eAAe,aAAa,CAAC;AAEvE,QAAM,uBAAuB,OAAO,cAAc;AAElD,SAAO;AAAA,IACL,SAAS,UAAU;AAAA,IACnB,mBAAmB,aAAa;AAAA,IAChC,eAAe,UAAU,cAAc;AAAA,EACzC;AACF;AACA,eAAsB,wBAAwB;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,SAAS,yBAAyB,IAAI,MAAM,cAAc,IAAI;AAAA,IACpE,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,MACE,kBAAkB,wBAAwB,KAC1C,kBAAkB,wBAAwB,GAC1C;AACA,WAAO,yBAAyB,cAAc,YAAY;AAAA,EAC5D;AAEA,QAAM,IAAI,MAAM,4CAA4C;AAC9D;AAEA,eAAsB,yCAAyC;AAAA,EAC7D;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAGG;AACD,QAAM,gBAAgB,MAAM,wBAAwB;AAAA,IAClD;AAAA,IACA;AAAA,IACA,YAAY,KAAK;AAAA,EACnB,CAAC;AAED,SAAO,MAAM,oBAAoB;AAAA,IAC/B,GAAG;AAAA,IACH,YAAY;AAAA,EACd,CAAC;AACH;AAEO,SAAS,yBAAyB;AAAA,EACvC,eAAe;AAAA,EACf,mBAAmB;AACrB,GAGc;AACZ,SAAO,CAAC,cAAc,gBAAgB;AACxC;AAEO,SAAS,kCAAkC,SAA0B;AAC1E,SAAO,yCACL,OACF;AACF;AAEO,IAAM,8BAA8B,OAA+B;AAAA,EACxE,eAAe;AAAA,EACf,aAAa;AAAA,EACb,cAAc;AAAA,EACd,kBAAkB,CAAC;AACrB;AAEO,SAAS,wBACd,YACwB;AACxB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,kBAAkB,WAAW,oBAAoB,CAAC;AAAA,EACpD;AACF;AAEO,IAAM,oCAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AACF,MAGM;AACJ,MAAI,OAAO,eAAe,aAAa;AACrC,WAAO;AAAA,MACL,UAAU;AAAA,IACZ;AAAA,EACF;AAEA,MAAI,OAAO,sBAAsB,aAAa;AAC5C,WAAO;AAAA,MACL,iBAAiB;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,0DAA0D;AAC5E;;;AD/bA;AAAA,EACE,wBAAAC;AAAA,EAOA,8BAAAC;AAAA,OACK;;;AKxCA,IAAM,mBAAN,cAAwC,MAAM;AAAA,EAGnD,YAAY,SAAiB,QAAgB,MAAW;AACtD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AACF;AAEA,eAAe,KAAK,SAAiB;AACnC,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,SAAS,OAAO;AAAA,EAC7B,CAAC;AACH;AAUO,IAAM,MAAM,OAAU,QAAgB;AAC3C,QAAM,WAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,MAAM,CAAC;AACnD,MAAI,SAAS,WAAW,KAAK;AAC3B,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,SAAS,GAAQ;AAAA,IAAC;AAClB,UAAM,IAAI;AAAA,MACR,4BAA4B,SAAS,MAAM;AAAA,MAC3C,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAQ,MAAM,SAAS,KAAK;AAC9B;AAWO,IAAM,OAAO,OAAU,KAAa,SAAc;AACvD,QAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AACD,MAAI,SAAS,WAAW,KAAK;AAC3B,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,SAAS,GAAQ;AAAA,IAAC;AAClB,UAAM,IAAI;AAAA,MACR,iBAAiB,SAAS,MAAM;AAAA,MAChC,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAQ,MAAM,SAAS,KAAK;AAC9B;AAEO,IAAM,UAAU,OACrB,OACA,WAAmB,GACnB,QAAgB,GAChB,kBAA0B,QACX;AACf,MAAI;AACF,WAAO,MAAM,MAAM;AAAA,EACrB,SAAS,KAAU;AACjB,QAAI,eAAe,kBAAkB;AACnC,UAAI,IAAI,UAAU,KAAK;AACrB,YAAI,SAAS,UAAU;AACrB,gBAAM,KAAK,QAAQ,eAAe;AAClC,iBAAO,MAAM,QAAQ,OAAO,UAAU,QAAQ,CAAC;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACF;AAQO,IAAM,aAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF;;;AC1DO,IAAM,gBAAgB,CAACC,UAC5BA,MAAK,aAAa;AAEb,IAAM,aAAa,CAACA,UACzBA,MAAK,aAAa;AAmFb,SAAS,oBACd,aACkC;AAClC,SAAO,YAAY,aAAa;AAClC;;;ACrIO,IAAM,yBAAyB,CACpC,SACG;AAkBE,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AACF,GAGY;AACV,SACE,kBACC,OAAO,kBAAkB,WAAW,gBAAgB,cAAc;AAEvE;AAMA,eAAsB,yBAAyB;AAAA,EAC7C,YAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,EAAE,SAAAC,UAAS,MAAAC,MAAK,IAAIF;AAE1B,QAAM,SAAS,MAAMC,SAAQ,YAAY;AACvC,WAAO,MAAMC,MAAU,aAAa;AAAA,MAClC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO,QAAQ;AACjB;;;ACnBA,IAAM,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBnC,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBvB,IAAM,YAAY;AAAA,EAChB,0BAA0B;AAAA,EAC1B,cAAc;AAAA;AAGT,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AACF,GAGqC;AACnC,SAAO;AAAA,IACL,OAAO;AAAA,EACT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP,WAAW;AAAA,MACT,IACE,YAAY;AAAA;AAAA,QAER,GAAG,aAAa,YAAY,CAAC,IAAI,OAAO;AAAA,UACxC,GAAG,aAAa,YAAY,CAAC;AAAA,IACrC;AAAA,IACA,mBAAmB,CAAC,iBAClB,cAAc;AAAA,EAClB;AACF;AAEO,SAAS,8BAA8B,CAAC,GAE7C;AACA,SAAO;AAAA,IACL,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP,WAAW,CAAC;AAAA,IACZ,mBAAmB,CAAC,iBAClB,cAAc,kBAAkB,gBAC5B,OAAO,cAAc,kBAAkB,aAAa,IACpD;AAAA,EACR;AACF;AAEO,SAAS,yBAAyB;AAAA,EACvC;AACF,GAEuC;AACrC,SAAO;AAAA,IACL,OAAO;AAAA,EACT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASP,WAAW;AAAA,MACT,UAAU,aAAa,YAAY;AAAA,IACrC;AAAA,IACA,mBAAmB,CAAC,iBAClB,cAAc;AAAA,EAClB;AACF;AAQO,SAAS,6BAA6B;AAAA,EAC3C;AACF,GAEuD;AACrD,SAAO;AAAA,IACL,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP,WAAW;AAAA,MACT,iBAAiB,aAAa,YAAY;AAAA,IAC5C;AAAA,IACA,mBAAmB,CAAC,iBAClB,cAAc;AAAA,EAClB;AACF;;;ACnKA,YAAY,YAAY;AAEjB,IAAM,8BAA8B,CAAC,YAAmC;AAC7E,MAAI,CAAC,qBAAqB,OAAO,GAAG;AAClC,UAAM,IAAI,MAAM,YAAY,OAAO,0BAA0B;AAAA,EAC/D;AACA,SAAO,qBAAqB,OAAO;AACrC;AAEA,SAAS,iBACP,gBACwB;AACxB,MAAI,eAAe,SAAS;AAC1B,WAAO;AAAA,MACL,UAAU;AAAA,MACV,GAAG,eAAe;AAAA,MAClB,qBAAqB;AAAA,QACnB,eAAe,WAAW;AAAA,MAC5B;AAAA,MACA,eAAe,OAAO,eAAe,WAAW,aAAa;AAAA,IAC/D;AAEF,MAAI,eAAe,SAAS,iBAAiB;AAC3C,WAAO;AAAA,MACL,UAAU;AAAA,MACV,GAAG,eAAe;AAAA,MAClB,qBAAqB;AAAA,QACnB,eAAe,YAAY;AAAA,MAC7B;AAAA,MACA,eAAe,OAAO,eAAe,YAAY,aAAa;AAAA,IAChE;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,kBAAkB;AACpC;AAEA,SAAS,WAAW,GAAwB;AAC1C,SAAO;AAAA,IACL,EAAE,SAAS,kBAAkB,EAAE,YAAY,UAAU,EAAE,WAAW;AAAA,EACpE;AACF;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,iBACH,OAAO,YAAY,cAChB,MAAM,kBACN,MAAM,SAAS,oBAAoB,CAAC;AAE1C,QAAM,iBAAiB,cAAc;AAAA,IAAK,CAAC,GAAG,MAC5C,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,IAAI;AAAA,EACtC;AAEA,MAAI;AAEJ,MAAI,CAAC,mBAAmB;AACtB,qBAAiB,eAAe,CAAC;AACjC,QAAI,CAAC,gBAAgB;AACnB,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AAAA,EACF,OAAO;AACL,UAAM,iBACJ,sBAAsB,UAAU,kBAAkB;AACpD,qBAAiB,eAAe;AAAA,MAC9B,CAAC,aAAkC,SAAS,SAAS;AAAA,IACvD;AACA,QAAI,CAAC,gBAAgB;AACnB,YAAMC,kBAAiB,eAAe;AAAA,QACpC,CAAC,aACC,SAAS,SAAS,iBAAiB,SAAS,SAAS;AAAA,MACzD;AACA,UAAI,CAACA;AAAgB,cAAM,IAAI,MAAM,iCAAiC;AACtE,aAAOA;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,qBAAN,MAAuD;AAAA,EAI5D,YAAY,SAAiBC,aAA0B;AAgCvD,uBAAiD,OAAO;AAAA,MACtD;AAAA,MACA;AAAA,MACA,mBAAmB;AAAA,IACrB,MAAM;AACJ,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB,wBAAwB;AAAA,UACtB;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,CAAC,OAAO;AACV,cAAM,IAAI,MAAM,mBAAmB;AAAA,MACrC;AAEA,YAAM,iBAAiB,MAAM,KAAK,mBAAmB,MAAM,QAAQ;AAEnE,aAAO,sBAAsB;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA,mBAAmB;AAAA,MACrB,CAAC;AAAA,IACH;AAvDE,SAAK,aAAaA,eAAc;AAChC,SAAK,gBAAgB,4BAA4B,OAAO;AAAA,EAC1D;AAAA,EAEA,MAAM,mBAAmB,UAAwC;AAC/D,UAAM,gBAAgB,OAAO,SAAS,kBAAkB;AACxD,QAAI,CAAC,gCAAgC,SAAS,eAAe,GAAG;AAC9D,aAAO;AAAA,IACT;AACA,UAAM,iBAAiB,MAAM,KAAK;AAAA,MAChC,8BAA8B,CAAC,CAAC;AAAA,IAClC;AAEA,WAAO,kBAAkB;AAAA,EAC3B;AAAA,EAEA,MAAM,yBAA4B;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAsB;AACpB,UAAM,eAAe,MAAM,yBAAyB;AAAA,MAClD,YAAY,KAAK;AAAA,MACjB,aAAa,KAAK,cAAc;AAAA,MAChC;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,kBAAkB,YAAY;AAAA,EACvC;AAAA,EA4BA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,EACF,GAGG;AACD,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB,yBAAyB;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,UAAU,OAAO,WAAW;AAAG,aAAO,CAAC;AAE5C,UAAM,iBAAiB,MAAM,KAAK,mBAAmB,OAAO,CAAC,EAAG,QAAQ;AAExE,WAAO,OACJ,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,EAC/B;AAAA,MAAI,CAAC,UACJ,sBAAsB;AAAA,QACpB;AAAA,QACA,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACJ;AAAA,EAEA,MAAM,2BAA2B;AAAA,IAC/B;AAAA,EACF,GAEG;AACD,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,6BAA6B;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WACE,UAAU,IAAI,CAAC,aAAa;AAAA,MAC1B,SAAS,OAAO,QAAQ,OAAO;AAAA,MAC/B,KAAK,CAAC,QAAQ;AAAA,IAChB,EAAE,KAAK,CAAC;AAAA,EAEZ;AACF;AAEA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKmC;AACjC,QAAM,iBAAiB,kBAAkB;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,YAAY,eAAe,OAAO,cAAc;AAEtD,QAAM,cAAc,iBAAiB,cAAc;AAEnD,MAAI,oBAAoB,WAAW,GAAG;AACpC,cAAU,qBAAqB;AAAA,EACjC;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EACF;AACF;AAEA,IAAM,kCAAkC,CAAC,oBAA4B;AACnE,QAAM,wBAA+B,cAAO,eAAe,GAAG;AAC9D,MAAI,CAAC;AAAuB,WAAO;AAEnC,SAAc,WAAI,uBAAuB,OAAO;AAClD;AAEA,SAAS,eACP,OACA,gBACiB;AACjB,SAAO;AAAA,IACL,UAAU;AAAA,MACR,SAAS,MAAM,SAAS;AAAA,MACxB,MAAM,MAAM,SAAS;AAAA,MACrB,KAAK,MAAM,SAAS;AAAA,IACtB;AAAA,IACA,UAAU,MAAM;AAAA,IAChB,SAAS,MAAM,UAAU,OAAO,MAAM,OAAO,IAAI;AAAA,IACjD,UAAU,MAAM,kBAAkB,WAAW,QAAQ;AAAA,IACrD,SAAS,MAAM;AAAA,IACf,aAAa,OAAO,MAAM,WAAW;AAAA,IACrC,WAAW,OAAO,MAAM,SAAS;AAAA,IACjC,oBAAoB;AAAA,IACpB,iBAAiB,MAAM,SAAS;AAAA,EAClC;AACF;;;AT9MO,IAAM,oCAAoC,OAG3C;AAAA,EACJ,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,YAAY;AAAA;AACd;AAEA,IAAM,oBAAoB,CAAC,iBAAmC;AAAA,EAC5D,WAAW,YAAY;AAAA,EACvB,qBAAqB,YAAY;AAAA,EACjC,eAAe,YAAY;AAAA,EAC3B,cAAc,YAAY;AAAA,EAC1B,WAAW,YAAY;AAAA,EACvB,YAAY,YAAY;AAAA,EACxB,UAAU,YAAY;AAAA,EACtB,kBAAkB,YAAY;AAChC;AAEA,IAAM,oBAAoB,CAAC,iBAAmC;AAAA,EAC5D,WAAW,YAAY;AAAA,EACvB,qBAAqB,YAAY;AAAA,EACjC,eAAe,YAAY;AAAA,EAC3B,cAAc,YAAY;AAAA,EAC1B,WAAW,YAAY;AAAA,EACvB,YAAY,YAAY;AAAA,EACxB,UAAU,YAAY;AAAA,EACtB,iBAAiB,YAAY;AAAA,EAC7B,gBAAgB,YAAY,kBAAkBC;AAChD;AAEA,IAAM,2BAA2B,CAC/B,aACA,sBAC2B;AAAA,EAC3B,GAAG,kBAAkB,WAAW;AAAA,EAChC,GAAG,kCAAkC;AAAA,EACrC;AACF;AAEA,IAAM,2BAA2B,CAC/B,aACA,sBAC2B;AAAA,EAC3B,GAAG,kBAAkB,WAAW;AAAA,EAChC,GAAG,kCAAkC;AAAA,EACrC;AACF;AAEO,IAAM,oCAAoC,OAG3C;AAAA,EACJ,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA;AACd;AAuBA,IAAM,8BAA8B,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA,0BAAAC;AACF,MAMK;AACH,QAAM,mBAAmB,kCAAkC,OAAO;AAElE,MAAI,CAACA,0BAAyB,SAASC,sBAAqB,EAAE,GAAG;AAE/D,QAAI,oBAAoB,gBAAgB;AACtC,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AAEA,WAAO;AAAA,MACL,sBAAsBA,sBAAqB;AAAA,MAC3C,aAAa;AAAA,QACX;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,sBAAsBA,sBAAqB;AAAA,IAC3C,aAAa;AAAA,MACX;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAQO,SAAS,2BACd,SACgC;AAChC,aAAW,QAAQ,QAAQ,MAAM;AAC/B,QAAI;AACF,YAAM,aAAa,eAAe;AAAA,QAChC,KAAKC;AAAA,QACL,WAAW;AAAA,QACX,GAAG;AAAA,MACL,CAAC;AACD,UAAI,WAAW,cAAc,eAAe;AAC1C,eAAO,WAAW;AAAA,MACpB;AAAA,IACF,SAAS,KAAU;AAAA,IAAC;AAAA,EACtB;AACF;AAIO,IAAM,gBAAN,MAAoB;AAAA,EAKzB,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,0BACE,SACA,kBACA;AACA,WAAO,0BAA0B,SAAS,KAAK,SAAS,gBAAgB;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAc,MAAwD;AAC1E,WAAO,MAAM,cAAc;AAAA,MACzB,GAAG;AAAA,MACH,WAAW,KAAK;AAAA,MAChB,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cACJ,QAC6B;AAC7B,WAAO,cAAc;AAAA,MACnB,GAAG;AAAA,MACH,WAAW,KAAK;AAAA,MAChB,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cACJ,YAC6B;AAC7B,WAAO,cAAc;AAAA,MACnB,GAAG;AAAA,MACH,cAAc,KAAK;AAAA,MACnB,WAAW,KAAK;AAAA,MAChB,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,WAAW,EAAE,SAAS,IAAI,GAAsC;AACpE,WAAO,MAAM,KAAK,UAAU,IAAI;AAAA,MAC9B,mBAAmB;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,qBAAqB,YAAoC;AAC7D,WAAO,MAAM,4BAA4B;AAAA,MACvC,UAAU;AAAA,MACV,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIuB;AACrB,WAAO,MAAM,oBAAoB;AAAA,MAC/B,cAAc,KAAK;AAAA,MACnB;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAgC;AAC9B,WAAO,MAAM,eAAe;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,eAAe,kBAAkB;AAAA,MACjD,aAAa,eAAe;AAAA,MAC5B,cAAc,eAAe;AAAA,MAC7B,eAAe,eAAe;AAAA,MAC9B;AAAA,MACA,eAAe,KAAK;AAAA,MACpB,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AACF;AAEO,SAAS,0BACd,SACA,SACA,kBACA;AACA,QAAM,eAAe,2BAA2B,OAAO;AACvD,SAAO;AAAA,IACL,SAAS,cAAc;AAAA,IACvB,kBAAkB,cAAc;AAAA,IAChC;AAAA,IACA,MAAM,SAAS;AAAA,MACb,SAAS,cAAc;AAAA,MACvB,SAAS,cAAc;AAAA,MACvB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAoDA,SAAS,kBAAkD;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEoC;AAClC,QAAM,EAAE,YAAY,kBAAkB,IAAI;AAC1C,QAAM,sBAAsBC,4BAA2B;AAAA,IACrD,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,OAAO;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAyD;AACvD,UAAM,EAAE,WAAW,cAAc,IAAI,MAAM,YAAY;AAAA,MACrD;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,OAAO;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAoB;AAClB,QAAI,gBAAgB;AAClB,YAAM,eAAe,MAAM,4BAA4B;AAAA,QACrD;AAAA,QACA,kBAAkB,YAAY;AAAA,QAC9B,eAAe,YAAY;AAAA,QAC3B;AAAA,QACA,QAAQ;AAAA,MACV,CAAC;AAED,UAAI,CAAC,cAAc;AACjB,cAAM,IAAI,MAAM,kCAAkC;AAAA,MACpD;AAAA,IACF;AAEA,UAAM,UAAU,cAAc;AAAA,MAC5B,GAAG,kCAAkC,oBAAoB;AAAA,MACzD;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,OAAO,SAAS;AAAA,IACpB;AAAA,IACA,SAAS;AAAA,IACT,KAAK,cAAc;AAAA,EACrB,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAe,YAAY;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAOG;AACD,MAAI,CAAC,SAAS;AACZ,cAAU,aAAa;AAAA,EACzB;AACA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAEA,QAAM,YAAY,MAAM,aAAa,cAAc;AAAA,IACjD;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,eAAe;AAAA,EACjB;AACF;AAWA,eAAe,cAAc;AAAA,EAC3B,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA6C;AAC3C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,EACrB,IAAI,MAAM,2BAA2B;AAAA,IACnC,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB,YAAY,oBAAoB;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAMA,eAAe,2BAA2B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAIkE;AAChE,QAAM,qBAAqB,MAAM,4BAA4B;AAAA,IAC3D;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AAED,MAAI,WAAW;AAEf,MAAI,OAAO,aAAa,UAAU;AAChC,eAAW,MAAM,UAAU,WAAW,kBAAkB;AAAA,EAC1D;AAEA,QAAM,oBAAoB,MAAM,yBAAyB;AAAA,IACvD,eAAe;AAAA,IACf;AAAA,EACF,CAAC;AAED,QAAM,wBAAwB,4BAA4B;AAAA,IACxD;AAAA,IACA;AAAA,IACA,0BAA0B;AAAA,EAC5B,CAAC;AAED,QAAM,gBAAgB,eAAe;AAAA,IACnC,GAAG;AAAA,IACH,KAAK;AAAA,EACP,CAAC;AAED,QAAM,0BAA0B;AAAA,IAC9B;AAAA,IACA,sBAAsB,sBAAsB;AAAA,EAC9C;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,EACrB;AACF;AAaA,eAAe,cAAc;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM;AAAA,IACJ,SAAS,EAAE,eAAe,qBAAqB;AAAA,IAC/C,YAAY;AAAA,EACd,IAAI,MAAM,UAAU,IAAI;AAAA,IACtB,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,qBAAqB;AAAA,IAC1C,KAAK,cAAc;AAAA,IACnB,SAAS,cAAc;AAAA,IACvB,aAAa,cAAc;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,kBAAkB;AAAA,IACvB,eAAe;AAAA,IACf;AAAA,IACA,mBAAmB;AAAA,IACnB,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAWA,eAAe,cAAc;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM;AAAA,IACJ,SAAS,EAAE,eAAe,qBAAqB;AAAA,IAC/C,YAAY;AAAA,IACZ;AAAA,EACF,IAAI,MAAM,UAAU,IAAI;AAAA,IACtB,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB;AAAA,IACrB,GAAG;AAAA,IACH,SAAS,cAAc,UAAU;AAAA,IACjC,SAAS;AAAA,EACX;AAEA,SAAO,kBAAkB;AAAA,IACvB,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AA0BA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAYE;AACA,MAAI,OAAO,mBAAmB,eAAe,iBAAiB,GAAG;AAC/D,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAEA,QAAM,UAAU,MAAM,cAAc,IAAI;AAAA,IACtC,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,QAAM,UAAU,MAAM,kBAAkB;AAAA,IACtC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,qBAAqB;AAAA,IAC1B,eAAe;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEO,IAAM,uBAAuB,CAAC;AAAA,EACnC,eAAe;AAAA,IACb;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS,EAAE,YAAY,mBAAmB,SAAS,UAAU;AAAA,EAC7D;AACF,MAS6C;AAC3C,QAAM,wBAA8C;AAAA,IAClD;AAAA,IACA,eAAe,uBAAuB;AAAA,MACpC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,uBAAuB,yBAAyB;AAAA,MAC9C;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,oBAA4C,aAC9C,wBAAwB,UAAU,IAClC,4BAA4B;AAChC,QAAM,4BAA4B,aAC9BJ,eACA;AAEJ,QAAM,sBACJ,gBACC,OAAO,kBAAkB,WAAW,gBAAgB,cAAc;AAErE,MAAI,QAAQ,yBAAyBE,sBAAqB,IAAI;AAC5D,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,QAAM,SACH,UAAU,QAAQ,cAAc,YAAY,iBAC7C,OAAO,cAAc;AAEvB,SAAO,uBAAuB;AAAA,IAC5B,SAAS;AAAA,IACT,KAAKC;AAAA,IACL,cAAc;AAAA,IACd;AAAA,IACA,SAAS,0BAA0B;AAAA,IACnC,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,oBAAoB,OAAO;AAAA,MAC3B;AAAA,MACA,OAAO,cAAc;AAAA,MACrB;AAAA,MACA;AAAA,MACAH;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMmB;AACjB,OAAK,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS;AAClC,WAAO,EAAE,UAAU,MAAM,aAAa,MAAM,YAAY,KAAK;AAAA,EAC/D;AAEA,QAAM,gBAAgB,MAAM,WAAW,GAAG,KAAK;AAE/C,QAAM,UAAU,4BAA4B,OAAO;AAEnD,SAAO;AAAA,IACL,UAAU,UACN,WAAW,gBAAgB,UAAU,OAAO,aAAa,OAAO,KAChE;AAAA,IACJ,aAAa,WACX,QAAQ,YAAY,aAAa,EACnC,mBACE,QAAQ,wBACV,IAAI,OAAO,IAAI,aAAa;AAAA,IAC5B,YAAY,WACV,QAAQ,YAAY,aAAa,EACnC,mBACE,QAAQ,wBACV,IAAI,OAAO,IAAI,aAAa;AAAA,EAC9B;AACF;;;AU75BA;AAAA,EAEE,wBAAwB;AAAA,OACnB;AAGA,IAAKK,yBAAL,CAAKA,0BAAL;AACL,EAAAA,4CAAA,QAAK,yBAAyB,MAA9B;AACA,EAAAA,4CAAA,QAAK,yBAAyB,MAA9B;AACA,EAAAA,4CAAA,QAAK,yBAAyB,MAA9B;AAHU,SAAAA;AAAA,4BAAA;;;ACsCZ,IAAM,gBAAgB,OAAO;AAAA,EAC3B,YAAY,EAAE,MAAAC,OAAM,SAAAC,SAAQ,IAAI;AAAA,EAChC,GAAG;AACL,MAGEA;AAAA,EAAQ,MACND,MAA+B,GAAG,aAAa,qBAAqB,IAAI;AAC1E;AAEF,IAAM,aAAa,OAAO;AAAA,EACxB;AAAA,EACA;AAAA,EACA,YAAY,EAAE,SAAAC,UAAS,KAAAC,KAAI,IAAI;AACjC,MAIED;AAAA,EAAQ,MACNC;AAAA,IACE,GAAG,aAAa,qBACd,4BAA4B,OAAO,EAAE,oBACvC,IAAI,kBAAkB;AAAA,EACxB;AACF;AAEK,IAAM,eAAe,OAAO;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,EAAE,SAAAD,UAAS,KAAAC,KAAI,IAAI;AACjC,MAK+B;AAC7B,QAAM,YAAY,4BAA4B,OAAO,EAAE;AACvD,QAAM,SAAS,MAAMD;AAAA,IAAQ,MAC3BC;AAAA,MACE,GAAG,aAAa,qBAAqB,SAAS,IAAI,kBAAkB,YAAY,CAAC,IAAI,GAAG;AAAA,IAC1F;AAAA,EACF;AAEA,SAAO,6BAA6B,MAAM;AAC5C;AAEA,IAAM,kBAAkB,OAAO;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,YAAY,EAAE,SAAAD,UAAS,KAAAC,KAAI,IAAI;AACjC,MAIM;AACJ,QAAM,YAAY,4BAA4B,OAAO,EAAE;AACvD,QAAM,SAAS,MAAMD;AAAA,IAAQ,MAC3BC;AAAA,MACE,GAAG,aAAa,qBAAqB,SAAS,IAAI,kBAAkB,YAAY,CAAC;AAAA,IACnF;AAAA,EACF;AAEA,SAAO,yCAAyC,MAAM;AACxD;AA4BA,IAAM,mBAAN,MAA8C;AAAA,EAI5C,YAAY,SAAiBC,aAA0B;AAIvD,yBAA8C,CAAC;AAAA,MAC7C;AAAA,MACA,GAAG;AAAA,IACL,MAAyC;AACvC,YAAM,OAAO,yBAAyB;AAAA,QACpC,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,QACd;AAAA,MACF,CAAC;AACD,aAAO,cAAc;AAAA,QACnB,GAAG;AAAA,QACH,YAAY,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,sBAAwC,OAAO,uBAE3C,MAAM,WAAW;AAAA,MACf,oBAAoB,kBAAkB,YAAY;AAAA,MAClD,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,IACnB,CAAC,GACD;AAEJ,eAA0B,OAAO,EAAE,mBAAmB,IAAI,MAAM;AAC9D,aAAO,aAAa;AAAA,QAClB;AAAA,QACA;AAAA,QACA,SAAS,KAAK;AAAA,QACd,YAAY,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,2BAAkD,OAAO;AAAA,MACvD;AAAA,IACF,MAAM;AACJ,aAAO,gBAAgB;AAAA,QACrB;AAAA,QACA,SAAS,KAAK;AAAA,QACd,YAAY,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AA5CE,SAAK,UAAU;AACf,SAAK,aAAaA,eAAc;AAAA,EAClC;AA2CF;;;AC1LA;AAAA,EAEE;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA,0BAAAC;AAAA,OACK;;;ACXP,YAAYC,aAAY;AACjB,IAAM,kCAAkC,CAC7C,oBACG;AACH,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,EACT;AAGA,QAAM,wBAA+B,eAAO,eAAe,GAAG;AAC9D,MAAI,CAAC;AAAuB,WAAO;AAEnC,SAAc,YAAI,uBAAuB,OAAO;AAClD;;;ADWO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AACF,GAG0C;AACxC,MAAI,MAAM,aAAa,OAAO;AAC5B,WAAO,8BAA8B;AAAA,MACnC,yBAAyB;AAAA,MACzB,eAAe,MAAM,SAAS;AAAA,MAC9B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAEA,SAAO,+BAA+B;AAAA,IACpC,yBAAyB;AAAA,IACzB,eAAe,MAAM,SAAS;AAAA,IAC9B,SAAS,MAAM;AAAA,IACf,GAAG;AAAA,EACL,CAAC;AACH;AAOO,SAAS,+BAA+B;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAW2E;AACzE,QAAM,eAAe,OAAO,kBAAkB,CAAC;AAE/C,QAAM,SAAS,uBAAuB,EAAE,eAAe,cAAc,CAAC;AAEtE,QAAM,WAAW,wBAAwB,YAAY;AAErD,MAAI,aAAa,cAAc;AAC7B,WAAO,gBAAgB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,aAAa,SAAS;AACxB,WAAO,uBAAuB;AAAA,MAC5B,KAAK;AAAA,MACL,cAAc;AAAA,MACd,SAAS;AAAA,MACT,SAAS,wBAAwB,YAAY;AAAA;AAAA,MAE7C,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,OAAO;AAAA,QACd,wBAAwB,YAAY,gBAAgB;AAAA,QACpD,wBAAwB,YAAY;AAAA,QACpC,gBAAgBC;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,IAAI,MAAM,uBAAuB;AACzC;AAEA,SAAS,8BAA8B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAU0C;AACxC,QAAM,uBAAuB,OAAO,kBAAkB,CAAC;AACvD,QAAM,YAAY,eAAe;AAAA,IAC/B,oBAAoB,wBAAwB;AAAA,IAC5C,aAAa,wBAAwB;AAAA,IACrC,gBAAgB;AAAA,EAClB,CAAC,EAAE;AAEH,SAAO,uBAAuB;AAAA,IAC5B,KAAK;AAAA,IACL,SAAS;AAAA,IACT,SAAS;AAAA,IACT,cAAc;AAAA,IACd,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,uBAAuB,EAAE,eAAe,cAAc,CAAC;AAAA,MACvD;AAAA,MACA,eAAe;AAAA,MACf,gBAAgBA;AAAA,IAClB;AAAA,EACF,CAAC;AACH;AAEA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAS0C;AACxC,QAAM,YAAY,eAAe;AAAA,IAC/B,oBAAoB,wBAAwB;AAAA,IAC5C,aAAa,wBAAwB;AAAA,IACrC,gBAAgB;AAAA,EAClB,CAAC,EAAE;AAEH,QAAM,kBAAkB;AAAA,IACtB,mBAAmB,iBAAiB;AAAA,IACpC,CAAC,QAAQ,eAAe,EAAE;AAAA,EAC5B;AAIA,MACE,gCAAgC,wBAAwB,eAAe,GACvE;AACA,WAAO,uBAAuB;AAAA,MAC5B,KAAKC;AAAA,MACL,cAAc;AAAA,MACd,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,wBAAwB,YAAY;AAAA,QACpC,OAAO,OAAO;AAAA,QACd;AAAA,QACA,eAAe,CAAC,YAAY,IAAI,CAAC;AAAA,QACjC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAGA,SAAO,uBAAuB;AAAA,IAC5B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,IAET,MAAM;AAAA,MACJ,wBAAwB,YAAY;AAAA,MACpC,OAAO,OAAO;AAAA,MACd;AAAA,MACA;AAAA,MACA,gBAAgBD;AAAA,IAClB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAIc;AACZ,QAAM,mBAAmB,qBAAqB;AAE9C,QAAM,oBAAoB,OAAO,YAAY,aAAa,IAAI;AAE9D,QAAM,4BAA4B,oBAAoB,WAAW,IAC7D,YAAY,WACZ;AAEJ,QAAM,uBAAuB,4BACzB,KACA;AAEJ,SAAO;AAAA,IACL,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB;AAAA,IACA,cAAc,mBAAmB;AAAA,EACnC;AACF;;;AE5OA,SAAkB,eAAAE,oBAAmB;AAcrC,eAAsB,QAAQ;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK4B;AAC1B,QAAM,EAAE,cAAc,IAAI;AAC1B,MAAI,cAAc,MAAM,GAAG;AACzB,UAAM,UAAU,WAAW,MAAM,IAAI,OAAO,UAAU;AACtD,UAAM,SAAS,MAAM,WAAW,YAAY;AAAA,MAC1C;AAAA,MACA,cAAc;AAAA,MACd,mBAAmB,OAAO;AAAA,IAC5B,CAAC;AAED,WAAO,iBAAiB,MAAM;AAAA,EAChC;AAEA,QAAM,UAAU,MAAM,cAAc,IAAI;AAAA,IACtC,mBAAmB;AAAA,IACnB,KAAK,OAAO;AAAA,EACd,CAAC;AAED,QAAM,UAAU,MAAM,kBAAkB;AAAA,IACtC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,oBAAoB,EAAE,SAAS,QAAQ,CAAC;AACjD;AACA,eAAsB,oCAAoC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,YAAY,SAAS,IAAI,MAAM,cAAc,gBAAgB;AAAA,IACnE,mBAAmB;AAAA,EACrB,CAAC;AAED,QAAM,yBAAyB,MAAM,WAAW,2BAA2B;AAAA,IACzE,cAAc;AAAA,EAChB,CAAC;AAED,QAAM,sBAAsB,SAAS,IAAI,CAAC,aAAa;AAAA,IACrD,GAAG;AAAA,IACH,SAAS,uBAAuB;AAAA,MAC9B,CAAC,EAAE,IAAI,MAAM,QAAQ,QAAQ,QAAQ,cAAc;AAAA,IACrD,GAAG;AAAA,EACL,EAAE;AAEF,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,EACZ;AACF;AAEA,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKmE;AACjE,QAAM,gBACJ,MAAM,WAAW,oBAAoB;AAAA,IACnC,cAAc,OAAO;AAAA,EACvB,CAAC,GACD,IAAI,gBAAgB;AAEtB,QAAM,gBAAgB,MAAM,8BAA8B;AAAA,IACxD;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,MACN,eAAe,OAAO;AAAA,IACxB;AAAA,EACF,CAAC;AAED,QAAM,SAAS,CAAC,GAAG,cAAc,GAAG,aAAa;AAEjD,SAAO;AAAA,IACL;AAAA,IACA,UAAU,OAAO,CAAC,GAAG,MAAM;AAAA,EAC7B;AACF;AAEA,eAAsB,aAAa;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,EAAE,gBAAgB,gBAAgB,WAAW,IAAI;AACvD,MAAI,cAAc,MAAM,GAAG;AACzB,UAAM,UAAU,WAAW,MAAM,IAAI,OAAO,UAAU;AACtD,UAAM,0BAA0B,MAAM,WAAW,YAAY;AAAA,MAC3D;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAED,WAAO,eAAe;AAAA,MACpB,oBAAoB,wBAAwB;AAAA,MAC5C,aAAa,wBAAwB;AAAA,MACrC,gBAAgB,OAAO,cAAc;AAAA,IACvC,CAAC;AAAA,EACH;AAEA,SAAO,yCAAyC;AAAA,IAC9C;AAAA,IACA;AAAA,IACA,gBAAgB,OAAO,cAAc;AAAA,IACrC,KAAK,OAAO;AAAA,IACZ,eAAe;AAAA,EACjB,CAAC;AACH;AAEA,eAAe,8BAA8B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK8B;AAC5B,QAAM,EAAE,UAAU,WAAW,IAAI,MAAM,oCAAoC;AAAA,IACzE;AAAA,IACA;AAAA,IACA,eAAe,OAAO;AAAA,EACxB,CAAC;AAED,QAAM,mBAAmB,SAAS;AAAA,IAChC,CAAC;AAAA;AAAA,MAEC,OAAO,QAAQ,YAAY;AAAA;AAAA,EAC/B;AAEA,MAAI,iBAAiB,WAAW;AAAG,WAAO,CAAC;AAE3C,QAAM,UAAU,MAAM,kBAAkB;AAAA,IACtC;AAAA,IACA,eAAe,OAAO;AAAA,EACxB,CAAC;AAED,SAAO,iBAAiB,IAAI,CAAC,YAAY;AACvC,WAAO,oBAAoB;AAAA,MACzB,SAAS;AAAA,QACP,SAAS,QAAQ;AAAA;AAAA,QAEjB,QAAQC;AAAA,QACR;AAAA,QACA,mBAAmB,OAAO;AAAA,QAC1B,WAAW,QAAQ;AAAA,MACrB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAIA,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AACF,GAMmC;AACjC,MACE,kBAAkB,QAAQ,OAAO,KACjC,kBAAkB,QAAQ,OAAO,GACjC;AACA,WAAO;AAAA,MACL,SAAS,QAAQ;AAAA,MACjB,WAAW,QAAQ,QAAQ,cAAc,YAAY;AAAA,MACrD,oBAAoB;AAAA,MACpB,UAAU;AAAA,MACV,KAAK,QAAQ,QAAQ,cAAc;AAAA,MACnC,UAAU;AAAA,QACR,SAAS,QAAQ;AAAA,QACjB,MAAM,QAAQ,WAAY;AAAA,QAC1B,KAAK,QAAQ,WAAY;AAAA,MAC3B;AAAA,MACA,UAAU,QAAQ,QAAQ,cAAc,YAAY;AAAA,MACpD,aAAa;AAAA,MACb,aAAa;AAAA,QACX,UAAU,QAAQ,QAAQ,cAAc,YAAY;AAAA,QACpD,qBACE,QAAQ,QAAQ,cAAc,YAAY;AAAA,QAC5C,eAAe,QAAQ,QAAQ,cAAc,YAAY;AAAA,QACzD,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,gCAAgC;AAClD;AAEA,IAAM,yBACJ,CAAC,WACD,CAAC,YAAgC;AAAA,EAC/B,YAAY,oBAAoB,EAAE,OAAO,QAAQ,YAAY,OAAO,CAAC;AAAA,EACrE,eAAe,0BAA0B,QAAQ,MAAM;AAAA,EACvD,OAAO,eAAe;AAAA,IACpB,aAAa,OAAO;AAAA,IACpB,gBAAgB,OAAO,OAAO,cAAc;AAAA,IAC5C,oBAAoB,OAAO;AAAA,EAC7B,CAAC;AACH;AAEF,SAAS,iBACP,QACgB;AAChB,SAAO,EAAE,OAAO,QAAQ,aAAa,uBAAuB,MAAM,EAAE;AACtE;AAEA,IAAM,yBACJ,CACE,UACA,SACA,YAKF,CAAC,YAAgC;AAAA,EAC/B,YAAY,qBAAqB;AAAA,IAC/B,eAAe;AAAA,IACf;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,OAAO,eAAe;AAAA,IACpB,oBAAoB;AAAA,IACpB,gBAAgB,OAAO,OAAO,cAAc;AAAA,IAC5C,aAAa,SAAS;AAAA,EACxB,CAAC;AACH;AAEF,SAAS,oBAAoB;AAAA,EAC3B;AAAA,EACA;AACF,GAMmB;AACjB,QAAM,WAAW,aAAa,EAAE,SAAS,QAAQ,CAAC;AAElD,SAAO;AAAA,IACL,OAAO;AAAA,IACP,aAAa,uBAAuB,UAAU,SAAS,OAAO;AAAA,EAChE;AACF;AACA,SAAS,0BACP,QACA,QAC2B;AAC3B,MAAI,OAAO,YAAY,aAAa;AAAS,WAAO;AAEpD,SAAO;AAAA,IACL,UAAU,OAAO,YAAY,gBAAgB,OAAO,OAAO,cAAc;AAAA,IACzE,WAAW,OAAO,YAAY;AAAA,IAC9B,OAAO,OAAO,YAAY;AAAA,EAC5B;AACF;;;AC1SA,IAAM,YAAN,cAAwB,MAAM;AAAC;AAC/B,IAAM,oBAAN,cAAgC,MAAM;AAAC;AAEhC,IAAM,SAAS;AAAA,EACpB;AAAA,EACA;AACF;AAEO,IAAM,aAAN,MAAiB;AAAA,EAKtB,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,KACJ,YAC4B;AAC5B,WAAO,KAAK;AAAA,MACV;AAAA,MACA,cAAc,KAAK;AAAA,MACnB,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,IACtB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,IAAI,YAA+B;AACvC,WAAO,QAAQ;AAAA,MACb,QAAQ;AAAA,MACR,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,MACpB,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAc,QAGjB;AACD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,MACpB,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,YAAwD;AACzE,WAAO,aAAa;AAAA,MAClB,QAAQ;AAAA,MACR,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,MACpB,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AACF;AAEA,eAAe,KAAK;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK+B;AAC7B,QAAM,EAAE,YAAY,IAAI,MAAM,QAAQ;AAAA,IACpC,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,YAAY;AAAA,IACjB,eAAe,WAAW;AAAA,IAC1B,gBAAgB,WAAW;AAAA,IAC3B,aAAa,WAAW;AAAA,IACxB,aAAa,WAAW;AAAA,IACxB,eAAe,WAAW;AAAA,IAC1B,cAAc,WAAW;AAAA,EAC3B,CAAC;AACH;AAEA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAKE;AACA,QAAM,EAAE,eAA8B,mBAAmB,SAAS,IAChE;AACF,QAAM,UAAU,WAAW,UAAU,IAAI,WAAW,UAAU;AAC9D,QAAM,0BAA0B,MAAM,WAAW,YAAY;AAAA,IAC3D;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,EACrB,CAAC;AAED,SAAO,oBAAoB;AAAA,IACzB,YAAY;AAAA,IACZ,OAAO;AAAA,EACT,CAAC;AACH;;;ACrKA;AAAA,EACE,iCAAAC;AAAA,EACA,qCAAAC;AAAA,EACA,0BAAAC;AAAA,OACK;AASP,SAAS,kBAAAC,uBAAsB;;;ACX/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,0BAAAC;AAAA,OACK;AAGP,SAAS,uBAAuB,SAAyB;AACvD,QAAM,UAAU,cAAc,UAAU,OAA+B;AACvE,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,mCAAmC,OAAO,EAAE;AAAA,EAC9D;AAEA,SAAO,QAAQ;AACjB;AAEA,eAAsB,gBAAgB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWG;AAGD,QAAM,kBACJ,OAAO,aAAa,WAChB,WACA,MAAM,aAAa,aAAa;AAAA,IAC9B,KAAK;AAAA;AAAA,IAEL,SACE,kCACE,OACF;AAAA,IACF,cAAc;AAAA,IACd,MAAM;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS,gBAAgB;AAAA,IAC3B;AAAA,EACF,CAAC;AAEP,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,sBAAkB,MAAM,aAAa,aAAa;AAAA,MAChD,KAAKA;AAAA,MACL,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,CAAC;AACD,qBAAiB;AAAA,EACnB,SAAS,GAAQ;AAGf,sBAAkB,uBAAuB,OAAO;AAChD,qBAAiB;AAAA,EACnB;AAEA,QAAM,cAAc,iBAChB,MAAM,aAAa,aAAa;AAAA,IAC9B,SAAS;AAAA,IACT,KAAKA;AAAA,IACL,cAAc;AAAA,EAChB,CAAC,IACD;AAEJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACvFA;AAAA,EACE,kBAAAC;AAAA,EACA,sBAAsB;AAAA,EACtB,0BAAAC;AAAA,EACA;AAAA,EACA,4CAAAC;AAAA,OACK;AACP,SAAkB,oBAAoB,eAAAC,oBAAwB;AAC9D,YAAYC,aAAY;AAUjB,IAAM,kBAAkB;AAAA,EAC7B,QAAQ,MAAM;AAChB;AAWA,IAAM,wBAAwB,CAC5B,iBACoC;AACpC,QAAM,mBAAmB;AAEzB,QAAM,wBAAyD;AAAA,IAC7D,UAAUC;AAAA;AAAA,IAEV,eAAe;AAAA;AAAA,IAEf,WAAW;AAAA;AAAA,IAEX,SAAS;AAAA;AAAA,IAET,qBAAqB;AAAA,EACvB;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;AAEA,SAAS,qBACP,OACA,cACc;AACd,QAAM,EAAE,iBAAiB,eAAe,IAAI;AAC5C,QAAM,wBACJ,kBAAkB,mBAAmBA,eACjC,iBACA;AACN,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,gBAAgB,MAAM,kBAAkBA;AAAA,IACxC,WACE,OAAO,MAAM,cAAc,cACvB,yBACA,OAAO,MAAM,SAAS;AAAA,IAC5B,YAAY,MAAM,cAAc;AAAA,IAChC,aAAa,sBAAsB,MAAM,WAAW;AAAA,IACpD,kBAAkB,MAAM;AAAA,EAC1B;AACF;AAQA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB;AACF,GAGE;AACA,QAAM,qBACJ,qBAAqB,OAA4C;AACnE,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,uCAAuC,OAAO,EAAE;AAElE,QAAM,sBAAsB,mBAAmB;AAAA,IAC7C,KAAKC;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,OAAO,WAAW,GAAG,oBAAoB,gBAAgB,MAAM;AAAA,EACxE,CAAC;AAED,QAAM,WAAW,mBAAmB;AAAA,IAClC,KAAKC;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA,MACJ,OAAO,WAAW;AAAA,MAClB;AAAA,QACE,WAAW,aAAa,OAAO,CAAC;AAAA,QAChC,SAAS,WAAW,OAAO,CAAC;AAAA,QAC5B,qBAAqB,OAAO,aAAa,CAAC;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,WAAW,mBAAmB;AAAA,IAClC,KAAKD;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,OAAO,WAAW,GAAG,oBAAoB,QAAQ;AAAA,EAC1D,CAAC;AAED,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,cAAc,CAAC,qBAAqB,QAAQ;AAAA,EAC9C;AACF;AAQA,SAAS,sBAAsB;AAAA,EAC7B,eAAe;AAAA,EACf,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB;AACF,GAAyE;AACvE,QAAM,4BACJE,0CACE,OACF;AACF,QAAM,qBAAqB,mBAAmB;AAAA,IAC5C,KAAKF;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA,MACJ,OAAO,WAAW;AAAA,MAClB;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,EACF,CAAC;AAED,QAAM,WAAW,mBAAmB;AAAA,IAClC,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA,MACJ,OAAO,WAAW;AAAA,MAClB;AAAA,QACE,eAAe;AAAA,QACf,WAAW,aAAa,OAAO,CAAC;AAAA,QAChC,SAAS,WAAW,OAAO,CAAC;AAAA,QAC5B,qBAAqB,OAAO,aAAa,CAAC;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,WAAW,mBAAmB;AAAA,IAClC,KAAKA;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,OAAO,WAAW,GAAG,2BAA2B,QAAQ;AAAA,EACjE,CAAC;AAED,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,cAAc,CAAC,oBAAoB,QAAQ;AAAA,EAC7C;AACF;AAEO,SAAS,aAAa,EAAE,aAAa,GAAG,KAAK,GAGlD;AACA,MAAI,CAAC;AAAa,UAAM,IAAI,MAAM,2BAA2B;AAC7D,QAAM,EAAE,UAAU,gBAAgB,IAAI;AAEtC,MAAI,oBAAoBD,cAAa;AACnC,WAAO,sBAAsB;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,EACH,OAAO;AACL,WAAO,iBAAiB;AAAA,MACtB,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA,YAAY;AAAA,EACZ,iBAAiBA;AAAA,EACjB;AACF,GAKQ;AAIN,MAAI,4BAA4B,iBAAiB,SAAS,GAAG;AAC3D,WAAO,mBAAmB;AAAA,MACxB,KAAKC;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,UAAU,OAAO,SAAS,GAAG,cAAc;AAAA,IACpD,CAAC;AAAA,EACH;AAEA,MAAI,mBAAmBD,cAAa;AAClC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO,mBAAmB;AAAA,IACxB,KAAKC;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,UAAU,OAAO,SAAS,CAAC;AAAA,EACpC,CAAC;AACH;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,MAAI,aAAa,KAAK,oBAAoBD,cAAa;AACrD,WAAO,mBAAmB;AAAA,MACxB,KAAKC;AAAA,MACL,cAAc;AAAA,MACd,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA,qBAAqB;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,MAAI,CAAC,gBAAgB,gBAAgB,KAAK,CAAC,cAAc;AACvD,WAAO;AAAA,EACT;AAEA,SAAO,mBAAmB;AAAA,IACxB,KAAKA;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,cAAc,aAAa,OAAO,YAAY,GAAGD,YAAW;AAAA,EACrE,CAAC;AACH;AAEO,SAAS,8BACd,OASA;AACA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,gCAAgC;AAAA,IACpC;AAAA,IACA;AAAA,EACF;AAEA,QAAM,wBAAwB,mBAAmB;AAAA,IAC/C,KAAKC;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,cAAc,EAAE;AAAA,EACzB,CAAC;AAED,QAAM,gBAAgB,mBAAmB;AAAA,IACvC,UAAU,8BAA8B;AAAA,IACxC,WAAW,8BAA8B;AAAA,IACzC,gBAAgB,8BAA8B;AAAA,IAC9C;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,mBAAmB;AAAA,IACvC,YAAY,8BAA8B;AAAA,IAC1C,kBAAkB,8BAA8B;AAAA,IAChD;AAAA,EACF,CAAC;AAED,QAAM,EAAE,QAAQ,cAAc,aAAa,IAAI,aAAa;AAAA,IAC1D,SAAS;AAAA,IACT;AAAA,IACA,gBAAgB,8BAA8B;AAAA,IAC9C,aAAa,8BAA8B;AAAA,EAC7C,CAAC;AAED,QAAM,gBAAgB,kBAAkB;AAAA,IACtC;AAAA,IACA,cAAc;AAAA,IACd;AAAA,EACF,CAAC;AAED,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,EAAE,OAAO,CAAC,SAAS,SAAS,IAAI;AAEhC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,8BAA8B,CACzC,iBACA,qBACG;AACH,MAAI,CAAC,oBAAoB,CAAC,iBAAiB;AACzC,WAAO;AAAA,EACT;AAGA,QAAM,wBAA+B,eAAO,eAAe,GAAG;AAC9D,MAAI,CAAC;AAAuB,WAAO;AAEnC,MAAI,qBAAqB,WAAW;AAClC,WAAc,YAAI,uBAAuB,OAAO;AAAA,EAClD,OAAO;AACL,WAAc,YAAI,uBAAuB,QAAQ;AAAA,EACnD;AACF;;;AFtWA,IAAM,sBAAsB;AAErB,IAAM,8BAA8B,CACzC,YACuB;AACvB,aAAW,QAAQ,QAAQ,MAAM;AAC/B,QAAI;AACF,YAAM,aAAaG,gBAAe;AAAA,QAChC,KAAKC;AAAA,QACL,WAAW;AAAA,QACX,GAAG;AAAA,MACL,CAAC;AACD,UAAI,cAAc,WAAW,cAAc,iBAAiB;AAC1D,eAAO,WAAW,KAAK;AAAA,MACzB;AAAA,IACF,SAAS,KAAU;AAAA,IAAC;AAAA,EACtB;AACF;AAmBA,SAAS,+BAA+B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQG;AACD,MAAI,CAAC,mBAAmB,OAAO,aAAa,UAAU;AACpD,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AAEA,MAAI,CAAC,gBAAgB;AACnB,QAAI,OAAO,aAAa,UAAU;AAChC,YAAM,IAAI,MAAM,qCAAqC;AAAA,IACvD;AAEA,UAAM,iBACJ,OAAO,YAAY,WAAW,UAAU,QAAQ;AAClD,WAAO,uBAAuB;AAAA,MAC5B,KAAKC;AAAA,MACL,cAAc;AAAA,MACd;AAAA,MACA,SAASC,mCAAkC,GAAG;AAAA,MAC9C,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,SAAS;AAAA,QACT;AAAA;AAAA,UAEE,qBAAqB;AAAA,UACrB,YAAY,cAAc;AAAA,UAC1B,kBAAkB,kBAAkB;AAAA,QACtC;AAAA,QACA,SAAS,gBAAgB;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,uBAAuB;AAAA,IAC5B,KAAKF;AAAA,IACL,cAAc;AAAA,IACd;AAAA,IACA,SAAS;AAAA,IACT,MAAM,CAAC,iBAAiB;AAAA,EAC1B,CAAC;AACH;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAI5B,YAAY;AAAA,IACV;AAAA,IACA;AAAA,EACF,GAGG;AACD,SAAK,UAAU;AACf,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,mBAAmB,OAA4B;AACnD,WAAO,mBAAmB;AAAA,MACxB,GAAG;AAAA,MACH,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AACF;AAEA,eAAe,mBAAmB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAGsC;AACpC,QAAM,EAAE,gBAAgB,iBAAiB,aAAa,gBAAgB,IACpE,MAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAEH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,cAAc;AAAA,EAChB,IAAI,8BAA8B;AAAA,IAChC;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AAED,QAAM,eAAe,4BACjB;AAAA,IACE,GAAG,0BAA0B;AAAA,MAC3B,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAAA,IACD,GAAG;AAAA,EACL,IACA;AAEJ,QAAM,UAAU,+BAA+B;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB,YAAY,YAAY;AAAA,IACxB,gBAAgB,YAAY;AAAA,EAC9B,CAAC;AAED,SAAO;AAAA,IACL,YAAY;AAAA,IACZ;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACF;AACF;;;AGnMO,IAAM,uCAAuC,CAAC,YAAqB;AACxE,QAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYd,SAAO;AAAA,IACL;AAAA,IACA,WAAW,EAAE,QAAQ;AAAA,EACvB;AACF;AAkBO,IAAM,0CAA0C,CACrD,qBACA,sBACG;AACH,QAAM,SAAS,oBAAoB,IAAI,CAAC,MAAM;AAC5C,WAAO;AAAA,MACL,SAAS,OAAO,EAAE,UAAU,EAAE;AAAA,MAC9B,UAAU,OAAO,EAAE,OAAO;AAAA,MAC1B,eAAe,OAAO,EAAE,UAAU,aAAa;AAAA,IACjD;AAAA,EACF,CAAC;AAID,QAAM,SAAS,OAAO,KAAK,CAAC,GAAG,MAAM;AACnC,QAAI,EAAE,gBAAgB,EAAE,eAAe;AACrC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AAGD,MAAI,oBAAoB;AACxB,QAAM,WAAqB,CAAC;AAC5B,QAAM,aAAuB,CAAC;AAE9B,SAAO,oBAAoB,GAAG;AAC5B,UAAM,OAAO,OAAO,MAAM;AAC1B,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAEA,UAAM,gBACJ,oBAAoB,KAAK,WAAW,KAAK,WAAW;AACtD,aAAS,KAAK,KAAK,OAAO;AAC1B,eAAW,KAAK,aAAa;AAC7B,yBAAqB;AAAA,EACvB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAOO,IAAM,cAAc,CACzB,wBACG;AACH,SAAO,oBAAoB,OAAO,CAAC,KAAK,SAAS;AAC/C,WAAO,MAAM,OAAO,KAAK,OAAO;AAAA,EAClC,GAAG,OAAO,CAAC,CAAC;AACd;;;AC7FA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQP;AAAA,EAQE;AAAA,EACA,sBAAAG;AAAA,EACA,eAAAC;AAAA,OACK;AAEP,IAAM,0BAA0B,CAAC,YAC/B,OAAO,YAAY,WAAW,UAAU,QAAQ;AAa3C,IAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAOE,uBAAuB;AAAA,EACrB,KAAK,2BAA2B;AAAA,EAChC,SAAS,2BAA2B,QAAQ,OAAO;AAAA,EACnD,cAAc;AAAA,EACd,MAAM,CAAC,UAAU,aAAa,wBAAwB,OAAO,CAAC;AAAA,EAC9D,OAAO,eAAe;AAAA,EACtB;AACF,CAAC;AAEH,IAAM,mBAAmB,CAAC,YAAsB,iBAA0B;AACxE,MAAI,CAAC,gBAAgB,iBAAiB;AAAI;AAE1C,SAAO,WAAW,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,IAAI;AAClD;AAOO,IAAM,8BAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AACF,OAMM;AAAA,EACJ,KAAK,oBAAoB;AAAA,EACzB,SAAS,oBAAoB,QAAQ,OAAO;AAAA,EAC5C,cAAc;AAAA,EACd,MAAM,CAAC,OAAO;AAChB;AAWO,IAAM,yBAAyB,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MACED,oBAAmB;AAAA,EACjB,KAAK,2BAA2B;AAAA,EAChC,cAAc;AAAA,EACd,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF,CAAC;AAcI,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK4B;AAC1B,QAAM,OAAO,uBAAuB;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,uBAAuB;AAAA,IAC5B,KAAK,oBAAoB;AAAA,IACzB,SAAS,oBAAoB,QAAQ,OAAO;AAAA,IAC5C,cAAc;AAAA,IACd,MAAM,CAAC,UAAU,YAAY,IAAI;AAAA;AAAA;AAAA,IAGjC,OAAO,iBAAiB,YAAY,qBAAqB;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAiBO,SAAS,iBAAiB;AAAA,EAC/B;AACF,GAEG;AACD,QAAM,UAAU,aAAa,OAAO;AAIpC,MAAI,CAAC,WAAW,CAAC,4BAA4B,OAAO,GAAG;AACrD,UAAM,IAAI,MAAM,YAAY,OAAO,gBAAgB;AAAA,EACrD;AAEA,SAAO,aAAa,aAAa;AAAA,IAC/B,KAAK;AAAA,IACL,SAAS,4BAA4B,OAAO;AAAA,IAC5C,cAAc;AAAA,EAChB,CAAC;AACH;AAcO,SAAS,mCAAmC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkC;AAChC,QAAM,SAAkC;AAAA,IACtC,OAAO,OAAO,eAAe,WAAW,aAAa,WAAW;AAAA,IAChE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,YAAqC;AAAA,IACzC,GAAG,0CAA0C;AAAA,MAC3C;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAAA,IACD,SAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAcO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASG;AACD,QAAM,SAA6B;AAAA,IACjC,OAAO,OAAO,eAAe,WAAW,aAAa,WAAW;AAAA,IAChE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,YAAqC;AAAA,IACzC,GAAG,qCAAqC;AAAA,MACtC;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAAA,IACD,SAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAYA,IAAM,yBAAyB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiBC;AACnB,MACED,oBAAmB;AAAA,EACjB,KAAK,2BAA2B;AAAA,EAChC,cAAc;AAAA,EACd,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF,CAAC;AAeI,IAAM,yCAAyC,CAAC;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAUQ;AACN,MAAI;AAEJ,MAAI,SAAS;AACX,uBAAmB,uBAAuB,OAAO;AAAA,EACnD,WAAW,SAAS;AAClB,uBAAmB,uBAAuB,OAAO;AAAA,EACnD,OAAO;AACL,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AAEA,SAAO,mCAAmC;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,2BAA2B,QAAQ,OAAO;AAAA,EAChD,CAAC;AACH;AAeO,SAAS,gCAAgC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAI4B;AAC1B,QAAM,OAAO,uBAAuB;AAAA,IAClC,GAAG;AAAA,EACL,CAAC;AAED,SAAO,uBAAuB;AAAA,IAC5B,KAAK,oBAAoB;AAAA,IACzB,SAAS,oBAAoB,QAAQ,OAAO;AAAA,IAC5C,cAAc;AAAA,IACd,MAAM,CAAC,UAAU,YAAY,IAAI;AAAA,IACjC,OAAO,iBAAiB,YAAY,qBAAqB;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAyBO,SAAS,sBAAsB,OAAsC;AAC1E,MAAI,MAAM,MAAM,cAAc;AAC5B,UAAM,IAAI,MAAM,wBAAwB;AAE1C,QAAM,oBAAoB,MAAM,MAAM,OAAO,CAAC;AAE9C,SAAO,kBAAkB;AAAA,IACvB,KAAK;AAAA,IACL,MAAM;AAAA,EACR,CAAC;AACH;;;AC7cA;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAgC,sBAAAE,2BAA0B;AAgBnD,IAAM,kCAAkC,CAAC;AAAA,EAC9C,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AACT,MACEC,oBAAmB;AAAA,EACjB,KAAK;AAAA,EACL,cAAc;AAAA,EACd,MAAM,CAAC,eAAe,gBAAgB,WAAW;AACnD,CAAC;AAeI,IAAM,kDAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAkBE,mCAAmC;AAAA,EACjC,YAAYA;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBACE,oBAAoB,gCAAgC,WAAW;AAAA,EACjE,IAAI,mCAAmC,OAAO;AAAA,EAC9C;AACF,CAAC;;;AC5CI,SAAS,oBACd,cACe;AACf,QAAM,gBAAgB,IAAI,cAAc;AAAA,IACtC,SAAS,aAAa;AAAA,IACtB,cAAc,aAAa;AAAA,IAC3B,YACE,aAAa,cAAc,IAAI,iBAAiB,aAAa,OAAO;AAAA,EACxE,CAAC;AAED,QAAM,0BAA0B,IAAI,iBAAiB;AAAA,IACnD,SAAS,aAAa;AAAA,IACtB,cAAc,aAAa;AAAA,EAC7B,CAAC;AAED,SAAO;AAAA,IACL,eAAe,CAAC,MAAM,cAAc,cAAc,CAAC;AAAA,IACnD,eAAe,CAAC,MAAM,cAAc,cAAc,CAAC;AAAA,IACnD,eAAe,CAAC,MAAM,cAAc,cAAc,CAAC;AAAA,IACnD,YAAY,CAAC,MAAM,wBAAwB,mBAAmB,CAAC;AAAA,EACjE;AACF;AAeO,SAAS,sBACd,QACiB;AACjB,QAAM,qBACJ,OAAO,iBAAiB,IAAI,iBAAiB,OAAO,OAAO;AAC7D,QAAM,kBACJ,OAAO,cAAc,IAAI,mBAAmB,OAAO,OAAO;AAC5D,QAAM,aAAa,IAAI,WAAW;AAAA,IAChC,cAAc,OAAO;AAAA,IACrB,eAAe;AAAA,IACf,YAAY;AAAA,EACd,CAAC;AAED,SAAO;AAAA,IACL,YAAY,CAAC,MACX,mBAAmB,IAAI;AAAA,MACrB,mBAAmB,EAAE;AAAA,MACrB,KAAK,EAAE;AAAA,IACT,CAAC;AAAA,IACH,kCAAkC,CAAC,MACjC,0BAA0B,GAAG,OAAO,OAAO;AAAA,IAC7C,UAAU,CAAC,MAAM,WAAW,IAAI,CAAC;AAAA,IACjC,qBAAqB,CAAC,MAAM,WAAW,cAAc,CAAC;AAAA,IACtD,MAAM,CAAC,MAAM,WAAW,KAAK,CAAC;AAAA,IAC9B,cAAc,CAAC,MAAM,WAAW,aAAa,CAAC;AAAA,EAChD;AACF;;;AClGO,SAAS,aAAa,KAAyC;AACpE,SAAO,OAAO,OAAO,QAAQ,WAAW,IAAI,WAAW,OAAO,IAAI;AACpE;;;ACJA,IAAI,WAAW;AACf,IAAI,MAAM;AAAV,IAAe,OAAO;AAAtB,IAA2B,SAAS,CAAC;AAArC,IAA2C,MAAM,KAAK,IAAI,GAAG,EAAE;AAC/D,SAAS,OAAO,KAAK,KAAK,QAAQ;AAChC,QAAM,OAAO,CAAC;AACd,WAAS,UAAU;AACnB,MAAI,YAAY;AAChB,SAAO,OAAO,KAAK;AACjB,QAAI,QAAQ,IAAI,MAAM,MAAM;AAC5B,WAAO;AAAA,EACT;AACA,SAAO,MAAM,QAAQ;AACnB,QAAI,QAAQ,IAAI,MAAM,MAAM;AAC5B,aAAS;AAAA,EACX;AACA,MAAI,MAAM,IAAI,MAAM;AACpB,SAAO,QAAQ,SAAS,YAAY;AACpC,SAAO;AACT;AACA,IAAI,SAAS;AACb,IAAI,QAAQ;AAAZ,IAAiB,SAAS;AAC1B,SAAS,KAAK,KAAK,QAAQ;AACzB,MAAI,MAAM,GAAG,SAAS,UAAU,GAAG,QAAQ,GAAG,UAAU,QAAQ,GAAG,IAAI,IAAI;AAC3E,KAAG;AACD,QAAI,WAAW,GAAG;AAChB,WAAK,QAAQ;AACb,YAAM,IAAI,WAAW,yBAAyB;AAAA,IAChD;AACA,QAAI,IAAI,SAAS;AACjB,WAAO,QAAQ,MAAM,IAAI,WAAW,SAAS,IAAI,UAAU,KAAK,IAAI,GAAG,KAAK;AAC5E,aAAS;AAAA,EACX,SAAS,KAAK;AACd,OAAK,QAAQ,UAAU;AACvB,SAAO;AACT;AACA,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC;AACtB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,SAAS,SAAU,OAAO;AAC5B,SAAO,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI;AAClK;AACA,IAAI,SAAS;AAAA,EACX,QAAQ;AAAA,EACR;AAAA,EACA,gBAAgB;AAClB;AACA,IAAI,eAAe;AACnB,IAAO,iBAAQ;;;ACnDR,IAAMC,UAAS,CAAC,MAAM,SAAS,MAAM;AAC1C,QAAM,OAAO,eAAO,OAAO,MAAM,MAAM;AACvC,SAAO;AAAA,IACL;AAAA,IACA,eAAO,OAAO;AAAA,EAChB;AACF;AACO,IAAM,WAAW,CAAC,KAAK,QAAQ,SAAS,MAAM;AACnD,iBAAO,OAAO,KAAK,QAAQ,MAAM;AACjC,SAAO;AACT;AACO,IAAM,iBAAiB,SAAO;AACnC,SAAO,eAAO,eAAe,GAAG;AAClC;;;ACdA,IAAM,QAAQ,IAAI,WAAW,CAAC;AAM9B,IAAM,SAAS,CAAC,IAAI,OAAO;AACzB,MAAI,OAAO;AACT,WAAO;AACT,MAAI,GAAG,eAAe,GAAG,YAAY;AACnC,WAAO;AAAA,EACT;AACA,WAAS,KAAK,GAAG,KAAK,GAAG,YAAY,MAAM;AACzC,QAAI,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG;AACrB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AACA,IAAMC,UAAS,OAAK;AAClB,MAAI,aAAa,cAAc,EAAE,YAAY,SAAS;AACpD,WAAO;AACT,MAAI,aAAa;AACf,WAAO,IAAI,WAAW,CAAC;AACzB,MAAI,YAAY,OAAO,CAAC,GAAG;AACzB,WAAO,IAAI,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU;AAAA,EAC5D;AACA,QAAM,IAAI,MAAM,mCAAmC;AACrD;;;ACvBO,IAAM,SAAS,CAAC,MAAM,WAAW;AACtC,QAAM,OAAO,OAAO;AACpB,QAAM,aAAoB,eAAe,IAAI;AAC7C,QAAM,eAAe,aAAoB,eAAe,IAAI;AAC5D,QAAM,QAAQ,IAAI,WAAW,eAAe,IAAI;AAChD,EAAO,SAAS,MAAM,OAAO,CAAC;AAC9B,EAAO,SAAS,MAAM,OAAO,UAAU;AACvC,QAAM,IAAI,QAAQ,YAAY;AAC9B,SAAO,IAAI,OAAO,MAAM,MAAM,QAAQ,KAAK;AAC7C;AACO,IAAMC,UAAS,eAAa;AACjC,QAAM,QAAQC,QAAO,SAAS;AAC9B,QAAM,CAAC,MAAM,UAAU,IAAWD,QAAO,KAAK;AAC9C,QAAM,CAAC,MAAM,YAAY,IAAWA,QAAO,MAAM,SAAS,UAAU,CAAC;AACrE,QAAM,SAAS,MAAM,SAAS,aAAa,YAAY;AACvD,MAAI,OAAO,eAAe,MAAM;AAC9B,UAAM,IAAI,MAAM,kBAAkB;AAAA,EACpC;AACA,SAAO,IAAI,OAAO,MAAM,MAAM,QAAQ,KAAK;AAC7C;AACO,IAAME,UAAS,CAAC,GAAG,MAAM;AAC9B,MAAI,MAAM,GAAG;AACX,WAAO;AAAA,EACT,OAAO;AACL,WAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,OAAW,EAAE,OAAO,EAAE,KAAK;AAAA,EAC9E;AACF;AACO,IAAM,SAAN,MAAa;AAAA,EAClB,YAAY,MAAM,MAAM,QAAQ,OAAO;AACrC,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,QAAQ;AAAA,EACf;AACF;;;ACvCA,SAASC,MAAK,UAAU,MAAM;AAC5B,MAAI,SAAS,UAAU,KAAK;AAC1B,UAAM,IAAI,UAAU,mBAAmB;AAAA,EACzC;AACA,MAAI,WAAW,IAAI,WAAW,GAAG;AACjC,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,aAAS,CAAC,IAAI;AAAA,EAChB;AACA,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,IAAI,SAAS,OAAO,CAAC;AACzB,QAAI,KAAK,EAAE,WAAW,CAAC;AACvB,QAAI,SAAS,EAAE,MAAM,KAAK;AACxB,YAAM,IAAI,UAAU,IAAI,eAAe;AAAA,IACzC;AACA,aAAS,EAAE,IAAI;AAAA,EACjB;AACA,MAAI,OAAO,SAAS;AACpB,MAAI,SAAS,SAAS,OAAO,CAAC;AAC9B,MAAI,SAAS,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG;AAC1C,MAAI,UAAU,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI;AAC3C,WAASC,QAAO,QAAQ;AACtB,QAAI,kBAAkB;AAAW;AAAA,aACxB,YAAY,OAAO,MAAM,GAAG;AACnC,eAAS,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,OAAO,UAAU;AAAA,IAC7E,WAAW,MAAM,QAAQ,MAAM,GAAG;AAChC,eAAS,WAAW,KAAK,MAAM;AAAA,IACjC;AACA,QAAI,EAAE,kBAAkB,aAAa;AACnC,YAAM,IAAI,UAAU,qBAAqB;AAAA,IAC3C;AACA,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO;AAAA,IACT;AACA,QAAI,SAAS;AACb,QAAIC,UAAS;AACb,QAAI,SAAS;AACb,QAAI,OAAO,OAAO;AAClB,WAAO,WAAW,QAAQ,OAAO,MAAM,MAAM,GAAG;AAC9C;AACA;AAAA,IACF;AACA,QAAI,QAAQ,OAAO,UAAU,UAAU,MAAM;AAC7C,QAAI,MAAM,IAAI,WAAW,IAAI;AAC7B,WAAO,WAAW,MAAM;AACtB,UAAI,QAAQ,OAAO,MAAM;AACzB,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAID,YAAW,QAAQ,IAAI,OAAOC,MAAK;AAC9E,iBAAS,MAAM,IAAI,GAAG,MAAM;AAC5B,YAAI,GAAG,IAAI,QAAQ,SAAS;AAC5B,gBAAQ,QAAQ,SAAS;AAAA,MAC3B;AACA,UAAI,UAAU,GAAG;AACf,cAAM,IAAI,MAAM,gBAAgB;AAAA,MAClC;AACA,MAAAD,UAASC;AACT;AAAA,IACF;AACA,QAAI,MAAM,OAAOD;AACjB,WAAO,QAAQ,QAAQ,IAAI,GAAG,MAAM,GAAG;AACrC;AAAA,IACF;AACA,QAAI,MAAM,OAAO,OAAO,MAAM;AAC9B,WAAO,MAAM,MAAM,EAAE,KAAK;AACxB,aAAO,SAAS,OAAO,IAAI,GAAG,CAAC;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AACA,WAAS,aAAa,QAAQ;AAC5B,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,IAAI,UAAU,iBAAiB;AAAA,IACvC;AACA,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO,IAAI,WAAW;AAAA,IACxB;AACA,QAAI,MAAM;AACV,QAAI,OAAO,GAAG,MAAM,KAAK;AACvB;AAAA,IACF;AACA,QAAI,SAAS;AACb,QAAIA,UAAS;AACb,WAAO,OAAO,GAAG,MAAM,QAAQ;AAC7B;AACA;AAAA,IACF;AACA,QAAI,QAAQ,OAAO,SAAS,OAAO,SAAS,MAAM;AAClD,QAAI,OAAO,IAAI,WAAW,IAAI;AAC9B,WAAO,OAAO,GAAG,GAAG;AAClB,UAAI,QAAQ,SAAS,OAAO,WAAW,GAAG,CAAC;AAC3C,UAAI,UAAU,KAAK;AACjB;AAAA,MACF;AACA,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAID,YAAW,QAAQ,IAAI,OAAOC,MAAK;AAC9E,iBAAS,OAAO,KAAK,GAAG,MAAM;AAC9B,aAAK,GAAG,IAAI,QAAQ,QAAQ;AAC5B,gBAAQ,QAAQ,QAAQ;AAAA,MAC1B;AACA,UAAI,UAAU,GAAG;AACf,cAAM,IAAI,MAAM,gBAAgB;AAAA,MAClC;AACA,MAAAD,UAASC;AACT;AAAA,IACF;AACA,QAAI,OAAO,GAAG,MAAM,KAAK;AACvB;AAAA,IACF;AACA,QAAI,MAAM,OAAOD;AACjB,WAAO,QAAQ,QAAQ,KAAK,GAAG,MAAM,GAAG;AACtC;AAAA,IACF;AACA,QAAI,MAAM,IAAI,WAAW,UAAU,OAAO,IAAI;AAC9C,QAAIE,KAAI;AACR,WAAO,QAAQ,MAAM;AACnB,UAAIA,IAAG,IAAI,KAAK,KAAK;AAAA,IACvB;AACA,WAAO;AAAA,EACT;AACA,WAASC,QAAO,QAAQ;AACtB,QAAI,SAAS,aAAa,MAAM;AAChC,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AACA,UAAM,IAAI,MAAM,OAAQ,IAAK,YAAY;AAAA,EAC3C;AACA,SAAO;AAAA,IACL,QAAQJ;AAAA,IACR;AAAA,IACA,QAAQI;AAAA,EACV;AACF;AACA,IAAI,MAAML;AACV,IAAI,kCAAkC;AACtC,IAAO,iBAAQ;;;AClIf,IAAM,UAAN,MAAc;AAAA,EACZ,YAAY,MAAM,QAAQ,YAAY;AACpC,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AACZ,QAAI,iBAAiB,YAAY;AAC/B,aAAO,GAAI,KAAK,MAAO,GAAI,KAAK,WAAW,KAAK,CAAE;AAAA,IACpD,OAAO;AACL,YAAM,MAAM,mCAAmC;AAAA,IACjD;AAAA,EACF;AACF;AACA,IAAM,UAAN,MAAc;AAAA,EACZ,YAAY,MAAM,QAAQ,YAAY;AACpC,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,QAAI,OAAO,YAAY,CAAC,MAAM,QAAW;AACvC,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AACA,SAAK,kBAAkB,OAAO,YAAY,CAAC;AAC3C,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,OAAO,MAAM;AACX,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,KAAK,YAAY,CAAC,MAAM,KAAK,iBAAiB;AAChD,cAAM,MAAM,qCAAsC,KAAK,UAAU,IAAI,CAAE,KAAM,KAAK,IAAK,+CAAgD,KAAK,MAAO,EAAE;AAAA,MACvJ;AACA,aAAO,KAAK,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM,CAAC;AAAA,IACvD,OAAO;AACL,YAAM,MAAM,mCAAmC;AAAA,IACjD;AAAA,EACF;AAAA,EACA,GAAG,SAAS;AACV,WAAO,GAAG,MAAM,OAAO;AAAA,EACzB;AACF;AACA,IAAM,kBAAN,MAAsB;AAAA,EACpB,YAAY,UAAU;AACpB,SAAK,WAAW;AAAA,EAClB;AAAA,EACA,GAAG,SAAS;AACV,WAAO,GAAG,MAAM,OAAO;AAAA,EACzB;AAAA,EACA,OAAO,OAAO;AACZ,UAAM,SAAS,MAAM,CAAC;AACtB,UAAM,UAAU,KAAK,SAAS,MAAM;AACpC,QAAI,SAAS;AACX,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B,OAAO;AACL,YAAM,WAAW,qCAAsC,KAAK,UAAU,KAAK,CAAE,+BAAgC,OAAO,KAAK,KAAK,QAAQ,CAAE,gBAAgB;AAAA,IAC1J;AAAA,EACF;AACF;AACO,IAAM,KAAK,CAAC,MAAM,UAAU,IAAI,gBAAgB;AAAA,EACrD,GAAG,KAAK,YAAY,EAAE,CAAC,KAAK,MAAM,GAAG,KAAK;AAAA,EAC1C,GAAG,MAAM,YAAY,EAAE,CAAC,MAAM,MAAM,GAAG,MAAM;AAC/C,CAAC;AACM,IAAM,QAAN,MAAY;AAAA,EACjB,YAAY,MAAM,QAAQ,YAAY,YAAY;AAChD,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,UAAU,IAAI,QAAQ,MAAM,QAAQ,UAAU;AACnD,SAAK,UAAU,IAAI,QAAQ,MAAM,QAAQ,UAAU;AAAA,EACrD;AAAA,EACA,OAAO,OAAO;AACZ,WAAO,KAAK,QAAQ,OAAO,KAAK;AAAA,EAClC;AAAA,EACA,OAAO,OAAO;AACZ,WAAO,KAAK,QAAQ,OAAO,KAAK;AAAA,EAClC;AACF;AACO,IAAM,OAAO,CAAC,EAAC,MAAM,QAAQ,QAAAM,SAAQ,QAAAC,QAAM,MAAM,IAAI,MAAM,MAAM,QAAQD,SAAQC,OAAM;AACvF,IAAM,QAAQ,CAAC,EAAC,QAAQ,MAAM,SAAQ,MAAM;AACjD,QAAM,EAAC,QAAAD,SAAQ,QAAAC,QAAM,IAAI,eAAM,UAAU,IAAI;AAC7C,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA,QAAAD;AAAA,IACA,QAAQ,UAAQE,QAAOD,QAAO,IAAI,CAAC;AAAA,EACrC,CAAC;AACH;AACA,IAAMA,UAAS,CAAC,QAAQ,UAAU,aAAa,SAAS;AACtD,QAAM,QAAQ,CAAC;AACf,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,UAAM,SAAS,CAAC,CAAC,IAAI;AAAA,EACvB;AACA,MAAI,MAAM,OAAO;AACjB,SAAO,OAAO,MAAM,CAAC,MAAM,KAAK;AAC9B,MAAE;AAAA,EACJ;AACA,QAAM,MAAM,IAAI,WAAW,MAAM,cAAc,IAAI,CAAC;AACpD,MAAI,OAAO;AACX,MAAI,SAAS;AACb,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAC5B,UAAM,QAAQ,MAAM,OAAO,CAAC,CAAC;AAC7B,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI,YAAY,OAAQ,IAAK,YAAY;AAAA,IACjD;AACA,aAAS,UAAU,cAAc;AACjC,YAAQ;AACR,QAAI,QAAQ,GAAG;AACb,cAAQ;AACR,UAAI,SAAS,IAAI,MAAM,UAAU;AAAA,IACnC;AAAA,EACF;AACA,MAAI,QAAQ,eAAe,MAAM,UAAU,IAAI,MAAM;AACnD,UAAM,IAAI,YAAY,wBAAwB;AAAA,EAChD;AACA,SAAO;AACT;AACA,IAAMD,UAAS,CAAC,MAAM,UAAU,gBAAgB;AAC9C,QAAM,MAAM,SAAS,SAAS,SAAS,CAAC,MAAM;AAC9C,QAAM,QAAQ,KAAK,eAAe;AAClC,MAAI,MAAM;AACV,MAAI,OAAO;AACX,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,aAAS,UAAU,IAAI,KAAK,CAAC;AAC7B,YAAQ;AACR,WAAO,OAAO,aAAa;AACzB,cAAQ;AACR,aAAO,SAAS,OAAO,UAAU,IAAI;AAAA,IACvC;AAAA,EACF;AACA,MAAI,MAAM;AACR,WAAO,SAAS,OAAO,UAAU,cAAc,IAAI;AAAA,EACrD;AACA,MAAI,KAAK;AACP,WAAO,IAAI,SAAS,cAAc,GAAG;AACnC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AACO,IAAM,UAAU,CAAC,EAAC,MAAM,QAAQ,aAAa,SAAQ,MAAM;AAChE,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA,OAAO,OAAO;AACZ,aAAOA,QAAO,OAAO,UAAU,WAAW;AAAA,IAC5C;AAAA,IACA,OAAO,OAAO;AACZ,aAAOC,QAAO,OAAO,UAAU,aAAa,IAAI;AAAA,IAClD;AAAA,EACF,CAAC;AACH;;;ACvJO,IAAM,YAAY,MAAM;AAAA,EAC7B,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AACZ,CAAC;AACM,IAAM,eAAe,MAAM;AAAA,EAChC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AACZ,CAAC;;;ACTM,IAAM,SAAS,QAAQ;AAAA,EAC5B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,cAAc,QAAQ;AAAA,EACjC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,YAAY,QAAQ;AAAA,EAC/B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,iBAAiB,QAAQ;AAAA,EACpC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,YAAY,QAAQ;AAAA,EAC/B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,iBAAiB,QAAQ;AAAA,EACpC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,eAAe,QAAQ;AAAA,EAClC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,oBAAoB,QAAQ;AAAA,EACvC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,UAAU,QAAQ;AAAA,EAC7B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;;;ACjDM,IAAM,MAAN,MAAM,KAAI;AAAA,EACf,YAAYE,UAAS,MAAM,WAAW,OAAO;AAC3C,SAAK,OAAO;AACZ,SAAK,UAAUA;AACf,SAAK,YAAY;AACjB,SAAK,QAAQ;AACb,SAAK,aAAa,MAAM;AACxB,SAAK,aAAa,MAAM;AACxB,SAAK,QAAQ;AACb,SAAK,aAAa,oBAAI,IAAI;AAC1B,WAAO,iBAAiB,MAAM;AAAA,MAC5B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AACL,YAAQ,KAAK,SAAS;AAAA,MACtB,KAAK,GAAG;AACJ,eAAO;AAAA,MACT;AAAA,MACF,SAAS;AACL,cAAM,EAAC,MAAM,UAAS,IAAI;AAC1B,YAAI,SAAS,aAAa;AACxB,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AACA,YAAI,UAAU,SAAS,cAAc;AACnC,gBAAM,IAAI,MAAM,oDAAoD;AAAA,QACtE;AACA,eAAO,KAAI,SAAS,SAAS;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AACL,YAAQ,KAAK,SAAS;AAAA,MACtB,KAAK,GAAG;AACJ,cAAM,EAAC,MAAM,OAAM,IAAI,KAAK;AAC5B,cAAM,YAAmB,OAAO,MAAM,MAAM;AAC5C,eAAO,KAAI,SAAS,KAAK,MAAM,SAAS;AAAA,MAC1C;AAAA,MACF,KAAK,GAAG;AACJ,eAAO;AAAA,MACT;AAAA,MACF,SAAS;AACL,cAAM,MAAM,+BAAgC,KAAK,OAAQ,4CAA4C;AAAA,MACvG;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,OAAO;AACZ,WAAO,SAAS,KAAK,SAAS,MAAM,QAAQ,KAAK,YAAY,MAAM,WAAkBC,QAAO,KAAK,WAAW,MAAM,SAAS;AAAA,EAC7H;AAAA,EACA,SAASC,OAAM;AACb,UAAM,EAAC,OAAO,SAAAF,UAAS,WAAU,IAAI;AACrC,YAAQA,UAAS;AAAA,MACjB,KAAK;AACH,eAAO,WAAW,OAAO,YAAYE,SAAQ,UAAU,OAAO;AAAA,MAChE;AACE,eAAO,WAAW,OAAO,YAAYA,SAAQ,OAAO,OAAO;AAAA,IAC7D;AAAA,EACF;AAAA,EACA,SAAS;AACP,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,MAAM,KAAK,UAAU;AAAA,IACvB;AAAA,EACF;AAAA,EACA,KAAK,OAAO,WAAW,IAAI;AACzB,WAAO;AAAA,EACT;AAAA,EACA,CAAC,OAAO,IAAI,4BAA4B,CAAC,IAAI;AAC3C,WAAO,SAAS,KAAK,SAAS,IAAI;AAAA,EACpC;AAAA,EACA,OAAO,MAAM,OAAO;AAClB,cAAU,SAAS,kBAAkB;AACrC,WAAO,CAAC,EAAE,UAAU,MAAM,SAAS,KAAK,MAAM,UAAU;AAAA,EAC1D;AAAA,EACA,IAAI,sBAAsB;AACxB,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AAAA,EACA,IAAI,QAAQ;AACV,UAAM,IAAI,MAAM,qEAAqE;AAAA,EACvF;AAAA,EACA,IAAI,SAAS;AACX,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AAAA,EACA,IAAI,gBAAgB;AAClB,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAAA,EACA,IAAI,SAAS;AACX,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AAAA,EACA,OAAO,MAAM,OAAO;AAClB,QAAI,iBAAiB,MAAK;AACxB,aAAO;AAAA,IACT,WAAW,SAAS,QAAQ,MAAM,UAAU,OAAO;AACjD,YAAM,EAAC,SAAAF,UAAS,MAAM,WAAW,MAAK,IAAI;AAC1C,aAAO,IAAI,KAAIA,UAAS,MAAM,WAAW,SAAS,UAAUA,UAAS,MAAM,UAAU,KAAK,CAAC;AAAA,IAC7F,WAAW,SAAS,QAAQ,MAAM,SAAS,MAAM,MAAM;AACrD,YAAM,EAAC,SAAAA,UAAS,WAAW,KAAI,IAAI;AACnC,YAAM,SAAgBG,QAAO,SAAS;AACtC,aAAO,KAAI,OAAOH,UAAS,MAAM,MAAM;AAAA,IACzC,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAO,OAAOA,UAAS,MAAM,QAAQ;AACnC,QAAI,OAAO,SAAS,UAAU;AAC5B,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AACA,YAAQA,UAAS;AAAA,MACjB,KAAK,GAAG;AACJ,YAAI,SAAS,aAAa;AACxB,gBAAM,IAAI,MAAM,wCAAyC,WAAY,kBAAkB;AAAA,QACzF,OAAO;AACL,iBAAO,IAAI,KAAIA,UAAS,MAAM,QAAQ,OAAO,KAAK;AAAA,QACpD;AAAA,MACF;AAAA,MACF,KAAK,GAAG;AACJ,cAAM,QAAQ,UAAUA,UAAS,MAAM,OAAO,KAAK;AACnD,eAAO,IAAI,KAAIA,UAAS,MAAM,QAAQ,KAAK;AAAA,MAC7C;AAAA,MACF,SAAS;AACL,cAAM,IAAI,MAAM,iBAAiB;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,SAAS,QAAQ;AACtB,WAAO,KAAI,OAAO,GAAG,aAAa,MAAM;AAAA,EAC1C;AAAA,EACA,OAAO,SAAS,MAAM,QAAQ;AAC5B,WAAO,KAAI,OAAO,GAAG,MAAM,MAAM;AAAA,EACnC;AAAA,EACA,OAAO,OAAO,OAAO;AACnB,UAAM,CAAC,KAAK,SAAS,IAAI,KAAI,YAAY,KAAK;AAC9C,QAAI,UAAU,QAAQ;AACpB,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA,EACA,OAAO,YAAY,OAAO;AACxB,UAAM,QAAQ,KAAI,aAAa,KAAK;AACpC,UAAM,aAAa,MAAM,OAAO,MAAM;AACtC,UAAM,iBAAiBI,QAAO,MAAM,SAAS,YAAY,aAAa,MAAM,aAAa,CAAC;AAC1F,QAAI,eAAe,eAAe,MAAM,eAAe;AACrD,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,UAAM,cAAc,eAAe,SAAS,MAAM,gBAAgB,MAAM,UAAU;AAClF,UAAM,SAAS,IAAW,OAAO,MAAM,eAAe,MAAM,YAAY,aAAa,cAAc;AACnG,UAAM,MAAM,MAAM,YAAY,IAAI,KAAI,SAAS,MAAM,IAAI,KAAI,SAAS,MAAM,OAAO,MAAM;AACzF,WAAO;AAAA,MACL;AAAA,MACA,MAAM,SAAS,MAAM,IAAI;AAAA,IAC3B;AAAA,EACF;AAAA,EACA,OAAO,aAAa,cAAc;AAChC,QAAI,SAAS;AACb,UAAM,OAAO,MAAM;AACjB,YAAM,CAAC,GAAGC,OAAM,IAAWF,QAAO,aAAa,SAAS,MAAM,CAAC;AAC/D,gBAAUE;AACV,aAAO;AAAA,IACT;AACA,QAAIL,WAAU,KAAK;AACnB,QAAI,QAAQ;AACZ,QAAIA,aAAY,IAAI;AAClB,MAAAA,WAAU;AACV,eAAS;AAAA,IACX,WAAWA,aAAY,GAAG;AACxB,cAAQ,KAAK;AAAA,IACf;AACA,QAAIA,aAAY,KAAKA,aAAY,GAAG;AAClC,YAAM,IAAI,WAAW,uBAAwBA,QAAQ,EAAE;AAAA,IACzD;AACA,UAAM,aAAa;AACnB,UAAM,gBAAgB,KAAK;AAC3B,UAAM,aAAa,KAAK;AACxB,UAAM,OAAO,SAAS;AACtB,UAAM,gBAAgB,OAAO;AAC7B,WAAO;AAAA,MACL,SAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,MAAM,QAAQE,OAAM;AACzB,UAAM,CAAC,QAAQ,KAAK,IAAI,gBAAgB,QAAQA,KAAI;AACpD,UAAM,MAAM,KAAI,OAAO,KAAK;AAC5B,QAAI,WAAW,IAAI,QAAQ,MAAM;AACjC,WAAO;AAAA,EACT;AACF;AACA,IAAM,kBAAkB,CAAC,QAAQA,UAAS;AACxC,UAAQ,OAAO,CAAC,GAAG;AAAA,IACnB,KAAK,KAAK;AACN,YAAM,UAAUA,SAAQ;AACxB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ,OAAO,GAAI,UAAU,MAAO,GAAI,MAAO,EAAE;AAAA,MACnD;AAAA,IACF;AAAA,IACF,KAAK,UAAU,QAAQ;AACnB,YAAM,UAAUA,SAAQ;AACxB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ,OAAO,MAAM;AAAA,MACvB;AAAA,IACF;AAAA,IACF,KAAK,OAAO,QAAQ;AAChB,YAAM,UAAUA,SAAQ;AACxB,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,OAAO,MAAM;AAAA,MACvB;AAAA,IACF;AAAA,IACF,SAAS;AACL,UAAIA,SAAQ,MAAM;AAChB,cAAM,MAAM,iFAAiF;AAAA,MAC/F;AACA,aAAO;AAAA,QACL,OAAO,CAAC;AAAA,QACRA,MAAK,OAAO,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;AACA,IAAM,aAAa,CAAC,OAAO,OAAOA,UAAS;AACzC,QAAM,EAAC,OAAM,IAAIA;AACjB,MAAI,WAAW,UAAU,QAAQ;AAC/B,UAAM,MAAM,8BAA+BA,MAAK,IAAK,WAAW;AAAA,EAClE;AACA,QAAM,MAAM,MAAM,IAAI,MAAM;AAC5B,MAAI,OAAO,MAAM;AACf,UAAMI,OAAMJ,MAAK,OAAO,KAAK,EAAE,MAAM,CAAC;AACtC,UAAM,IAAI,QAAQI,IAAG;AACrB,WAAOA;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AACA,IAAM,aAAa,CAAC,OAAO,OAAOJ,UAAS;AACzC,QAAM,EAAC,OAAM,IAAIA;AACjB,QAAM,MAAM,MAAM,IAAI,MAAM;AAC5B,MAAI,OAAO,MAAM;AACf,UAAMI,OAAMJ,MAAK,OAAO,KAAK;AAC7B,UAAM,IAAI,QAAQI,IAAG;AACrB,WAAOA;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AACA,IAAM,cAAc;AACpB,IAAM,eAAe;AACrB,IAAM,YAAY,CAACN,UAAS,MAAM,cAAc;AAC9C,QAAM,aAAoB,eAAeA,QAAO;AAChD,QAAM,aAAa,aAAoB,eAAe,IAAI;AAC1D,QAAM,QAAQ,IAAI,WAAW,aAAa,UAAU,UAAU;AAC9D,EAAO,SAASA,UAAS,OAAO,CAAC;AACjC,EAAO,SAAS,MAAM,OAAO,UAAU;AACvC,QAAM,IAAI,WAAW,UAAU;AAC/B,SAAO;AACT;AACA,IAAM,YAAY,OAAO,IAAI,kBAAkB;AAC/C,IAAM,WAAW;AAAA,EACf,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AACd;AACA,IAAM,SAAS;AAAA,EACb,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,cAAc;AAChB;AACA,IAAM,UAAU;AAChB,IAAM,YAAY,CAAC,OAAO,YAAY;AACpC,MAAI,MAAM,KAAK,OAAO,GAAG;AACvB,YAAQ,KAAK,OAAO;AAAA,EACtB,OAAO;AACL,UAAM,IAAI,MAAM,OAAO;AAAA,EACzB;AACF;AACA,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACjSpB,SAAS,MAAM,KAAyC;AAC7D,MAAI,CAAC;AAAK,WAAO;AAEjB,MAAI;AACF,QAAI,MAAM,GAAG;AACb,WAAO;AAAA,EACT,SAAS,GAAG;AACV,QAAI,aAAa,KAAK,GAAG;AAAG,aAAO;AACnC,WAAO;AAAA,EACT;AACF;AAEO,SAAS,iBACd,KACgB;AAChB,MAAI,CAAC,OAAO,OAAO,QAAQ;AAAU,WAAO;AAG5C,QAAM,IAAI,QAAQ,MAAM,EAAE;AAG1B,MAAI,oBAAoB,GAAG;AAAG,WAAO;AAGrC,MAAI,MAAM,GAAG;AAAG,WAAO,UAAU,GAAG;AAGpC,MAAI,CAAC,UAAU,GAAG;AAAG,WAAO;AAG5B,MAAI,iBAAiB,GAAG,GAAG;AAEzB,UAAM,SAAS,IAAI,IAAI,IAAI,QAAQ,SAAS,SAAS,CAAC;AAGtD,WAAO,WAAW,OAAO,SAAS,QAAQ,aAAa,EAAE;AAGzD,UAAM,MAAM,OACT,SAAS,EACT,QAAQ,GAAG,OAAO,QAAQ,KAAK,OAAO,IAAI,KAAK,EAAE;AAEpD,WAAO,UAAU,GAAG;AAAA,EACtB;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,KAAyC;AACpE,SAAO,OAAO,OAAO,QAAQ,WAAW,IAAI,WAAW,SAAS,IAAI;AACtE;AAEA,SAAS,iBAAiB,KAAyC;AACjE,MAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,QAAI;AACF,YAAM,SAAS,IAAI,IAAI,IAAI,QAAQ,gBAAgB,IAAI,CAAC;AACxD,aACE,CAAC,oBAAoB,GAAG,KACxB,UACA,OAAO,SAAS,WAAW,QAAQ;AAAA,IAEvC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,UAAU,KAAyC;AAC1D,SAAO,MAAM,oBAAoB,GAAG,KAAK,iBAAiB,GAAG,IAAI;AACnE;AAEO,SAAS,uBACd,KACS;AACT,SAAO,MAAM,UAAU,GAAG,KAAK,MAAM,GAAG,IAAI;AAC9C;;;AC9EA,IAAM,eAAe;AAErB,IAAM,kBAAkB;AAEjB,SAAS,kBAAkB,sBAAqC;AACrE,MAAI,CAAC,wBAAwB,OAAO,yBAAyB;AAC3D,WAAO;AACT,SAAO,qBAAqB,QAAQ,SAAS,GAAG,eAAe,GAAG;AACpE;AAEO,SAAS,eAAe,KAAoB;AACjD,MAAI,CAAC,OAAO,OAAO,QAAQ;AAAU,WAAO;AAC5C,QAAM,oBAAoB,iBAAiB,GAAG;AAC9C,MAAI,mBAAmB;AACrB,WAAO,kBAAkB,QAAQ,WAAW,GAAG,YAAY,QAAQ;AAAA,EACrE;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,KAA+C;AAC7E,MAAI,CAAC,OAAO,OAAO,QAAQ;AAAU,WAAO;AAG5C,MAAI,IAAI,WAAW,SAAS;AAAG,WAAO;AAGtC,MAAI,uBAAuB,GAAG,GAAG;AAE/B,WAAO,eAAe,GAAG;AAAA,EAC3B;AAGA,MAAI,aAAa,GAAG,GAAG;AAErB,WAAO,kBAAkB,GAAG;AAAA,EAC9B;AAGA,MAAI,sBAAsB,KAAK,GAAG,GAAG;AAEnC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;AC9CA,IAAM,OAAO;AACb,IAAM,WAAW;AACjB,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AACjB,IAAM,aAAa;AAC1B,IAAM,MAAM;AACZ,IAAM,UAAU;AAChB,IAAM,QAAQ;AACd,IAAM,MAAM;AAGZ,IAAM,MAAM;AACZ,IAAM,OAAO;AACb,IAAM,MAAM;AACZ,IAAM,OAAO;AACb,IAAM,MAAM;AACZ,IAAM,OAAO;AACb,IAAM,MAAM;AAEL,IAAM,UAAU,CAAC,aAAwC;AAC9D,MAAI,CAAC;AAAU,WAAO;AACtB,SAAO,CAAC,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,GAAG,EAAE,SAAS,QAAQ;AACjE;AAkBO,IAAM,+BAA0D;AAAA,EACrE,CAAC,mBAAe,GACd;AAAA,EACF,CAAC,mBAAe,GACd;AAAA,EACF,CAAC,iBAAc,GACb;AAAA,EACF,CAAC,eAAa,GACZ;AAAA;AAAA,EACF,CAAC,iBAAc,GACb;AAAA,EACF,SAAS;AACX;AAGA,IAAM,MAAM;AACZ,IAAM,YAAY;AAClB,IAAM,MAAM;AACZ,IAAM,OAAO;AAGb,IAAM,MAAM;AACZ,IAAM,OAAO;AACb,IAAM,MAAM;AACZ,IAAM,MAAM;AACZ,IAAM,UAAU;AAChB,IAAM,WAAW;AACjB,IAAM,OAAO;AACb,IAAM,QAAQ;AACd,IAAM,OAAO;AAGb,IAAM,OAAO;AACb,IAAM,MAAM;AAEZ,IAAM,WAAW;AACjB,IAAM,UAAU;AAGT,IAAM,iBAAiB;AAC9B,IAAM,MAAM;AAEZ,IAAM,kBAAkB;AAAA,EACtB,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,SAAS,GAAG;AAAA,EACb,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,OAAO,GAAG;AAAA,EACX,CAAC,QAAQ,GAAG;AAAA,EACZ,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,UAAU,GAAG;AAAA,EACd,CAAC,eAAe,GAAG;AAAA,EACnB,CAAC,QAAQ,GAAG;AAAA,EACZ,CAAC,aAAa,GAAG;AAAA,EACjB,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,OAAO,GAAG;AAAA,EACX,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,QAAQ,GAAG;AAAA,EACZ,CAAC,GAAG,GAAG;AAAA;AAAA;AAAA;AAAA,EAIP,CAAC,cAAc,GAAG;AAAA,EAClB,CAAC,OAAO,GAAG;AACb;AAGO,SAAS,gBAAgB,UAA0B;AACxD,MAAI,CAAC;AAAU,WAAO;AAEtB,SACE,gBAAgB,QAAwC,KACxD;AAEJ;AAEA,eAAsB,YAAY,KAAc;AAC9C,MAAI,CAAC;AAAK,WAAO;AAEjB,QAAM,MAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,OAAO,CAAC;AAC/C,MAAI,WAAW,IAAI,QAAQ,IAAI,cAAc;AAC7C,SAAO;AACT;;;ACzHO,IAAM,wBAAwB,CACnC,eACsB;AACtB,QAAM,EAAE,MAAM,aAAa,cAAc,aAAa,CAAC,EAAE,IAAI;AAE7D,QAAM,UAAU,cACZ;AAAA,IACE,MAAM;AAAA,IACN,KAAK;AAAA,EACP,IACA;AAEJ,QAAM,QAAQ;AACd,QAAM,gBAAgB;AAEtB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAOO,IAAM,yBAAyB,OAAO;AAAA,EAC3C;AAAA,EACA;AAAA,EACA,aAAa,CAAC;AAAA,EACd;AAAA,EACA;AACF,MAA2D;AACzD,QAAM,aAAa;AACnB,QAAM,sBAAsB,gBAAgB,UAAU;AAEtD,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,gBAAgB,UAAU,oBAAoB;AAEhE,QAAM,WAAW,MAAM,YAAY,mBAAmB;AACtD,QAAM,YAAY,gBAAgB,QAAQ;AAE1C,MAAI,QAA4B;AAChC,MAAI,gBAA+B;AAInC,MAAI,QAAQ,QAAQ,GAAG;AACrB,YAAQ;AAAA,EACV,OAAO;AACL,YAAQ;AACR,oBAAgB;AAAA,EAClB;AAGA,MAAI,CAAC;AACH,YAAQ,UACN,6BAA6B,SAAS,KACtC,6BAA6B,OAC/B;AAEF,QAAM,UAAU,aACZ;AAAA,IACE,MAAM,YAAY;AAAA,IAClB,KAAK;AAAA,EACP,IACA;AAEJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AChGA,IAAM,aAAa;AAEnB,IAAM,WAAW,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAOM;AAEJ,MAAI,QAAQ,KAAK,WAAW,MAAM,MAAM,EAAE,MAAM,IAAI;AACpD,MAAI,OAAO;AACX,MAAI,WAAW;AACf,MAAI,YAAY,CAAC;AAEjB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAErC,gBAAY,GAAG,MAAM,CAAC,CAAC;AACvB,QAAI,UAAU,IAAI,YAAY,QAAQ;AACtC,QAAI,YAAY,QAAQ;AAExB,QAAI,MAAM,CAAC,GAAG,SAAS,IAAI,KAAM,YAAY,YAAY,IAAI,GAAI;AAE/D,gBAAU,KAAK,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AAEnC,WAAK;AAGL,UAAI,MAAM,CAAC,GAAG,SAAS,IAAI,GAAG;AAC5B,eAAO;AACP,mBAAW;AAAA,MACb,OAAO;AACL,eAAO,GAAG,MAAM,CAAC,CAAC;AAClB,mBAAW,GAAG,MAAM,CAAC,CAAC;AAAA,MACxB;AAAA,IACF,OAAO;AAEL,cAAQ,GAAG,MAAM,CAAC,CAAC;AAAA,IACrB;AAEA,QAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,gBAAU,KAAK,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,oBAAoB,MAA6B;AAE9D,QAAM,cAAc,KAAK,KAAK,EAAE,MAAM,GAAG,UAAU;AAEnD,QAAM,CAAC,OAAO,MAAM,IAAI,CAAC,KAAK,GAAG;AACjC,QAAM,UAAU;AAChB,QAAM,MAAM;AAEZ,QAAM,aAAa;AACnB,QAAM,CAAC,UAAU,UAAU,IAAI,CAAC,IAAI,EAAE;AACtC,QAAM,CAAC,WAAW,eAAe,IAAI,CAAC,SAAS,OAAO;AAEtD,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,QAAQ,QAAQ;AACvB,WAAO,SAAS,SAAS;AACzB,UAAM,MAAM,OAAO,WAAW,IAAI;AAClC,QAAI,CAAC,KAAK;AACR,aAAO,OAAO,IAAI,MAAM,iCAAiC,CAAC;AAAA,IAC5D;AACA,QAAI,YAAY;AAChB,QAAI,SAAS,GAAG,GAAG,QAAQ,KAAK,QAAQ,GAAG;AAC3C,QAAI,YAAY;AAChB,QAAI,OAAO,GAAG,WAAW,GAAG,MAAM,UAAU;AAC5C,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,MACA,MAAM;AAAA,MACN,GAAG,UAAU;AAAA,MACb,GAAG,WAAW,MAAM,UAAU;AAAA,MAC9B,UAAU,QAAQ,MAAM,UAAU,IAAI;AAAA,MACtC,YAAY,aAAa;AAAA,IAC3B,CAAC;AACD,YAAQ,QAAQ,CAAC,SAAS,IAAI,SAAS,KAAK,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC;AACjE,WAAO,OAAO,CAAC,SAAS;AACtB,UAAI,CAAC,MAAM;AACT,eAAO,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAAA,MAClD;AACA,cAAQ,IAAI,KAAK,CAAC,IAAI,GAAG,iBAAiB,EAAE,MAAM,YAAY,CAAC,CAAC;AAAA,IAClE,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,kBAAkB,MAAc;AACvC,QAAM,YAAY,KAAK,MAAM,IAAI,EAAE,CAAC;AACpC,QAAM,gBAAgB,WAAW,MAAM,IAAI,EAAE,CAAC;AAE9C,MAAI,cAAc,SAAS,IAAI;AAC7B,WAAO,cAAc,MAAM,GAAG,EAAE,IAAI;AAAA,EACtC;AAEA,SAAO;AACT;AAEA,IAAM,aAAa,CAAC,SAClB,IAAI,KAAK,CAAC,IAAI,GAAG,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIzD,eAAsB,6BACpB,MAC4B;AAC5B,QAAM,OAAO,kBAAkB,IAAI;AACnC,QAAM,WAAW,WAAW,IAAI;AAChC,QAAM,gBAAgB,MAAM,oBAAoB,IAAI;AAEpD,SAAO;AAAA,IACL;AAAA,IACA,cAAc;AAAA,IACd;AAAA,EACF;AACF;","names":["zeroAddress","zoraCreator1155PremintExecutorImplABI","parseEther","version","version","parseEther","PremintConfigVersion","premintTypedDataDefinition","mint","httpClient","retries","post","targetStrategy","httpClient","zeroAddress","supportedPremintVersions","PremintConfigVersion","zoraCreator1155PremintExecutorImplABI","premintTypedDataDefinition","PremintConfigVersion","post","retries","get","httpClient","zeroAddress","zoraCreator1155ImplABI","semver","zeroAddress","zoraCreator1155ImplABI","zeroAddress","zeroAddress","zoraCreator1155FactoryImplABI","zoraCreator1155FactoryImplAddress","zoraCreator1155ImplABI","decodeEventLog","zoraCreator1155ImplABI","erc20MinterABI","zoraCreator1155ImplABI","zoraCreatorFixedPriceSaleStrategyAddress","zeroAddress","semver","zeroAddress","zoraCreator1155ImplABI","erc20MinterABI","zoraCreatorFixedPriceSaleStrategyAddress","decodeEventLog","zoraCreator1155ImplABI","zoraCreator1155FactoryImplABI","zoraCreator1155FactoryImplAddress","encodeFunctionData","zeroAddress","encodeFunctionData","encodeFunctionData","from","decode","coerce","decode","coerce","equals","base","encode","length","i","j","decode","encode","decode","coerce","version","equals","base","decode","coerce","length","cid"]}
|
|
1
|
+
{"version":3,"sources":["../src/premint/premint-client.ts","../src/premint/preminter.ts","../src/apis/chain-constants.ts","../src/constants.ts","../src/premint/conversions.ts","../src/apis/http-api-base.ts","../src/mint/types.ts","../src/utils.ts","../src/mint/subgraph-queries.ts","../src/mint/subgraph-mint-getter.ts","../src/premint/contract-types.ts","../src/premint/premint-api-client.ts","../src/mint/mint-transactions.ts","../src/mint/utils.ts","../src/mint/mint-queries.ts","../src/mint/mint-client.ts","../src/create/1155-create-helper.ts","../src/create/contract-setup.ts","../src/create/token-setup.ts","../src/mints/mints-queries.ts","../src/mints/mints-contracts.ts","../src/mints/mints-eth-unwrapper-and-caller.ts","../src/sdk.ts","../src/ipfs/arweave.ts","../../../node_modules/multiformats/esm/vendor/varint.js","../../../node_modules/multiformats/esm/src/varint.js","../../../node_modules/multiformats/esm/src/bytes.js","../../../node_modules/multiformats/esm/src/hashes/digest.js","../../../node_modules/multiformats/esm/vendor/base-x.js","../../../node_modules/multiformats/esm/src/bases/base.js","../../../node_modules/multiformats/esm/src/bases/base58.js","../../../node_modules/multiformats/esm/src/bases/base32.js","../../../node_modules/multiformats/esm/src/cid.js","../src/ipfs/ipfs.ts","../src/ipfs/gateway.ts","../src/ipfs/mimeTypes.ts","../src/ipfs/token-metadata.ts","../src/ipfs/text-metadata.ts"],"sourcesContent":["import { decodeEventLog, zeroAddress } from \"viem\";\nimport type {\n Account,\n Address,\n Hex,\n SimulateContractParameters,\n TransactionReceipt,\n TypedDataDefinition,\n WalletClient,\n} from \"viem\";\nimport {\n PremintConfigAndVersion,\n TokenConfigWithVersion,\n encodePremintConfig,\n zoraCreator1155PremintExecutorImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n getPremintCollectionAddress,\n isAuthorizedToCreatePremint,\n getPremintExecutorAddress,\n applyUpdateToPremint,\n makeNewPremint,\n supportedPremintVersions,\n getPremintMintCosts,\n makeMintRewardsRecipient,\n getDefaultFixedPriceMinterAddress,\n emptyContractCreationConfig,\n defaultAdditionalAdmins,\n toContractCreationConfigOrAddress,\n getPremintMintFee,\n} from \"./preminter\";\nimport {\n PremintConfigVersion,\n ContractCreationConfig,\n TokenCreationConfigV1,\n TokenCreationConfigV2,\n TokenCreationConfig,\n PremintConfigWithVersion,\n PremintMintArguments,\n premintTypedDataDefinition,\n} from \"@zoralabs/protocol-deployments\";\nimport { IPremintAPI, IPremintGetter } from \"./premint-api-client\";\nimport type { DecodeEventLogReturnType } from \"viem\";\nimport { OPEN_EDITION_MINT_SIZE } from \"../constants\";\nimport { getApiNetworkConfigForChain } from \"src/mint/subgraph-mint-getter\";\nimport {\n makeContractParameters,\n mintRecipientOrAccount,\n PublicClient,\n} from \"src/utils\";\nimport {\n ContractCreationConfigAndAddress,\n ContractCreationConfigOrAddress,\n} from \"./contract-types\";\nimport {\n MakeMintParametersArgumentsBase,\n MakePremintMintParametersArguments,\n MintCosts,\n} from \"src/mint/types\";\nimport { PremintFromApi } from \"./conversions\";\nimport { SimulateContractParametersWithAccount } from \"src/types\";\n\ntype PremintedV2LogType = DecodeEventLogReturnType<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"PremintedV2\"\n>[\"args\"];\n\nexport type URLSReturnType = {\n explorer: null | string;\n zoraCollect: null | string;\n zoraManage: null | string;\n};\n\nexport const defaultTokenConfigV1MintArguments = (): Omit<\n TokenCreationConfigV1,\n \"fixedPriceMinter\" | \"tokenURI\" | \"royaltyRecipient\"\n> => ({\n maxSupply: OPEN_EDITION_MINT_SIZE,\n maxTokensPerAddress: 0n,\n pricePerToken: 0n,\n mintDuration: 0n,\n mintStart: 0n,\n royaltyMintSchedule: 0,\n royaltyBPS: 1000, // 10%,\n});\n\nconst pickTokenConfigV1 = (tokenConfig: TokenConfigInput) => ({\n maxSupply: tokenConfig.maxSupply,\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress,\n pricePerToken: tokenConfig.pricePerToken,\n mintDuration: tokenConfig.mintDuration,\n mintStart: tokenConfig.mintStart,\n royaltyBPS: tokenConfig.royaltyBPS,\n tokenURI: tokenConfig.tokenURI,\n royaltyRecipient: tokenConfig.payoutRecipient,\n});\n\nconst pickTokenConfigV2 = (tokenConfig: TokenConfigInput) => ({\n maxSupply: tokenConfig.maxSupply,\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress,\n pricePerToken: tokenConfig.pricePerToken,\n mintDuration: tokenConfig.mintDuration,\n mintStart: tokenConfig.mintStart,\n royaltyBPS: tokenConfig.royaltyBPS,\n tokenURI: tokenConfig.tokenURI,\n payoutRecipient: tokenConfig.payoutRecipient,\n createReferral: tokenConfig.createReferral || zeroAddress,\n});\n\nconst tokenConfigV1WithDefault = (\n tokenConfig: TokenConfigInput,\n fixedPriceMinter: Address,\n): TokenCreationConfigV1 => ({\n ...pickTokenConfigV1(tokenConfig),\n ...defaultTokenConfigV1MintArguments(),\n fixedPriceMinter,\n});\n\nconst tokenConfigV2WithDefault = (\n tokenConfig: TokenConfigInput,\n fixedPriceMinter: Address,\n): TokenCreationConfigV2 => ({\n ...pickTokenConfigV2(tokenConfig),\n ...defaultTokenConfigV2MintArguments(),\n fixedPriceMinter,\n});\n\nexport const defaultTokenConfigV2MintArguments = (): Omit<\n TokenCreationConfigV2,\n \"fixedPriceMinter\" | \"tokenURI\" | \"payoutRecipient\" | \"createReferral\"\n> => ({\n maxSupply: OPEN_EDITION_MINT_SIZE,\n maxTokensPerAddress: 0n,\n pricePerToken: 0n,\n mintDuration: 0n,\n mintStart: 0n,\n royaltyBPS: 1000, // 10%,\n});\n\ntype TokenConfigInput = {\n /** Metadata URI of the token to create. */\n tokenURI: string;\n /** Account to receive creator rewards if it's a free mint, and token price value if its a paid mint. Defaults to the premint signing account. */\n payoutRecipient: Address;\n /** Optional: account to receive the create referral award. */\n createReferral?: Address;\n /** Optional: max supply of tokens that can be minted. Defaults to unlimited. */\n maxSupply?: bigint;\n /** Optional: max tokens that can be minted for an address, 0 if unlimited. Defaults to unlimited. */\n maxTokensPerAddress?: bigint;\n /** Optional: price per token, if this is a paid mint. 0 if a free mint. Defaults to 0, or a free mint. */\n pricePerToken?: bigint;\n /** Optional: duration of the mint, starting from the time the premint is brought onchain. 0 for infinite. Defaults to infinite. */\n mintDuration?: bigint;\n /** Optional: earliest time the premint can be brought onchain and minted. 0 for immediately. Defaults to immediately. */\n mintStart?: bigint;\n /** Optional: The royalty amount in basis points for secondary sales, in basis points. Defaults to 1000. */\n royaltyBPS?: number;\n};\n\nconst makeTokenConfigWithDefaults = ({\n chainId,\n tokenCreationConfig,\n supportedPremintVersions,\n}: {\n chainId: number;\n tokenCreationConfig: TokenConfigInput;\n supportedPremintVersions: PremintConfigVersion[];\n}): TokenConfigWithVersion<\n PremintConfigVersion.V1 | PremintConfigVersion.V2\n> => {\n const fixedPriceMinter = getDefaultFixedPriceMinterAddress(chainId);\n\n if (!supportedPremintVersions.includes(PremintConfigVersion.V2)) {\n // we need to return a token config v1\n if (tokenCreationConfig.createReferral) {\n throw new Error(\"Contract does not support create referral\");\n }\n\n return {\n premintConfigVersion: PremintConfigVersion.V1,\n tokenConfig: tokenConfigV1WithDefault(\n tokenCreationConfig,\n fixedPriceMinter,\n ),\n };\n }\n\n return {\n premintConfigVersion: PremintConfigVersion.V2,\n tokenConfig: tokenConfigV2WithDefault(\n tokenCreationConfig,\n fixedPriceMinter,\n ),\n };\n};\n\n/**\n * Gets the preminted log from receipt\n *\n * @param receipt Preminted log from receipt\n * @returns Premint event arguments\n */\nexport function getPremintedLogFromReceipt(\n receipt: TransactionReceipt,\n): PremintedV2LogType | undefined {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155PremintExecutorImplABI,\n eventName: \"PremintedV2\",\n ...data,\n });\n if (decodedLog.eventName === \"PremintedV2\") {\n return decodedLog.args;\n }\n } catch (err: any) {}\n }\n}\n/**\n * Preminter API to access ZORA Premint functionality.\n */\nexport class PremintClient {\n readonly apiClient: IPremintAPI;\n readonly publicClient: PublicClient;\n readonly chainId: number;\n\n constructor({\n chainId,\n publicClient,\n premintApi,\n }: {\n chainId: number;\n publicClient: PublicClient;\n premintApi: IPremintAPI;\n }) {\n this.chainId = chainId;\n this.apiClient = premintApi;\n this.publicClient = publicClient;\n }\n\n getDataFromPremintReceipt(\n receipt: TransactionReceipt,\n blockExplorerUrl?: string,\n ) {\n return getDataFromPremintReceipt(receipt, this.chainId, blockExplorerUrl);\n }\n\n /**\n * Prepares data for updating a premint\n *\n * @param parameters - Parameters for updating the premint {@link UpdatePremintParams}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async updatePremint(args: UpdatePremintParams): Promise<PremintReturn<any>> {\n return await updatePremint({\n ...args,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n chainId: this.chainId,\n });\n }\n\n /**\n * Prepares data for deleting a premint\n *\n * @param parameters - Parameters for deleting the premint {@link DeletePremintParams}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async deletePremint(\n params: DeletePremintParams,\n ): Promise<PremintReturn<any>> {\n return deletePremint({\n ...params,\n apiClient: this.apiClient,\n publicClient: this.publicClient,\n chainId: this.chainId,\n });\n }\n\n /**\n * Prepares data for creating a premint\n *\n * @param parameters - Parameters for creating the premint {@link CreatePremintParameters}\n * @returns A PremintReturn. {@link PremintReturn}\n */\n async createPremint(\n parameters: CreatePremintParameters,\n ): Promise<PremintReturn<any>> {\n return createPremint({\n ...parameters,\n publicClient: this.publicClient,\n apiClient: this.apiClient,\n chainId: this.chainId,\n });\n }\n\n /**\n * Fetches given premint data from the ZORA API.\n *\n * @param address Address for the premint contract\n * @param uid UID for the desired premint\n * @returns PremintSignatureGetResponse of premint data from the API\n */\n async getPremint({ address, uid }: { address: Address; uid: number }) {\n return await this.apiClient.get({\n collectionAddress: address,\n uid,\n });\n }\n\n /**\n * Gets the deterministic contract address for a premint collection\n * @param collection Collection to get the address for\n * @returns deterministic contract address\n */\n async getCollectionAddress(collection: ContractCreationConfig) {\n return await getPremintCollectionAddress({\n contract: collection,\n publicClient: this.publicClient,\n });\n }\n\n async getMintCosts({\n tokenContract,\n quantityToMint,\n pricePerToken,\n }: {\n quantityToMint: bigint;\n tokenContract: Address;\n pricePerToken: bigint;\n }): Promise<MintCosts> {\n return await getPremintMintCosts({\n publicClient: this.publicClient,\n quantityToMint,\n tokenContract,\n tokenPrice: pricePerToken,\n });\n }\n\n /**\n * Prepares the parameters to collect a premint; it brings the contract and token onchain, then collects\n * tokens on that contract for the mint recipient.\n *\n * @param parameters - Parameters for collecting the Premint {@link MakeMintParametersArguments}\n * @returns receipt, log, zoraURL\n */\n async makeMintParameters({\n minterAccount,\n tokenContract,\n uid,\n mintArguments,\n firstMinter,\n }: MakeMintParametersArguments) {\n return await collectPremint({\n uid,\n tokenContract,\n minterAccount,\n quantityToMint: mintArguments?.quantityToMint || 1n,\n mintComment: mintArguments?.mintComment,\n mintReferral: mintArguments?.mintReferral,\n mintRecipient: mintArguments?.mintRecipient,\n firstMinter,\n premintGetter: this.apiClient,\n publicClient: this.publicClient,\n });\n }\n}\n\nexport function getDataFromPremintReceipt(\n receipt: TransactionReceipt,\n chainId: number,\n blockExplorerUrl?: string,\n) {\n const premintedLog = getPremintedLogFromReceipt(receipt);\n return {\n tokenId: premintedLog?.tokenId,\n collectionAddres: premintedLog?.contractAddress,\n premintedLog,\n urls: makeUrls({\n address: premintedLog?.contractAddress,\n tokenId: premintedLog?.tokenId,\n chainId,\n blockExplorerUrl,\n }),\n };\n}\n\ntype PremintContext = {\n publicClient: PublicClient;\n apiClient: IPremintAPI;\n chainId: number;\n};\n\n/** ======= ADMIN ======= */\n\nexport type SignAndSubmitParams = {\n /** The WalletClient used to sign the premint */\n walletClient: WalletClient;\n} & CheckSignatureParams;\n\nexport type SignAndSubmitReturn = {\n /** The signature of the Premint */\n signature: Hex;\n /** The account that signed the Premint */\n signerAccount: Account | Address;\n};\n\nexport type CheckSignatureParams =\n | {\n /** If the premint signature should be validated before submitting to the API */\n checkSignature: true;\n /** Account that signed the premint */\n account: Account | Address;\n }\n | {\n /** If the premint signature should be validated before submitting to the API */\n checkSignature?: false;\n account?: Account | Address;\n };\n\nexport type SubmitParams = {\n /** The signature of the Premint */\n signature: Hex;\n} & CheckSignatureParams;\n\ntype PremintReturn<T extends PremintConfigVersion> = {\n /** The typedDataDefinition of the Premint which is to be signed the creator. */\n typedDataDefinition: TypedDataDefinition;\n /** The deterministic collection address of the Premint */\n collectionAddress: Address;\n /** Signs the Premint, and submits it and the signature to the Zora Premint API */\n signAndSubmit: (params: SignAndSubmitParams) => Promise<SignAndSubmitReturn>;\n /** For the case where the premint is signed externally, takes the signature for the Premint, and submits it and the Premint to the Zora Premint API */\n submit: (params: SubmitParams) => Promise<void>;\n urls: URLSReturnType;\n} & PremintConfigWithVersion<T>;\n\nfunction makePremintReturn<T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n publicClient,\n apiClient,\n chainId,\n ...collectionAndAddress\n}: PremintConfigWithVersion<T> &\n ContractCreationConfigAndAddress &\n PremintContext): PremintReturn<T> {\n const { collection, collectionAddress } = collectionAndAddress;\n const typedDataDefinition = premintTypedDataDefinition({\n verifyingContract: collectionAddress,\n premintConfig,\n premintConfigVersion,\n chainId,\n });\n\n const signAndSubmit = async ({\n walletClient,\n account: account,\n checkSignature,\n }: SignAndSubmitParams): Promise<SignAndSubmitReturn> => {\n const { signature, signerAccount } = await signPremint({\n account,\n walletClient,\n typedDataDefinition,\n });\n\n await submit({\n signature,\n checkSignature,\n account: signerAccount,\n });\n\n return {\n signature,\n signerAccount,\n };\n };\n\n const submit = async ({\n signature,\n checkSignature,\n account,\n }: SubmitParams) => {\n if (checkSignature) {\n const isAuthorized = await isAuthorizedToCreatePremint({\n collectionAddress,\n additionalAdmins: collection?.additionalAdmins,\n contractAdmin: collection?.contractAdmin,\n publicClient,\n signer: account,\n });\n\n if (!isAuthorized) {\n throw new Error(\"Not authorized to create premint\");\n }\n }\n\n await apiClient.postSignature({\n ...toContractCreationConfigOrAddress(collectionAndAddress),\n signature: signature,\n premintConfig,\n premintConfigVersion,\n });\n };\n\n const urls = makeUrls({\n chainId,\n address: collectionAddress,\n uid: premintConfig.uid,\n });\n\n return {\n premintConfig,\n premintConfigVersion,\n typedDataDefinition,\n collectionAddress,\n signAndSubmit,\n submit,\n urls,\n };\n}\n\nasync function signPremint({\n account,\n walletClient,\n typedDataDefinition,\n}: {\n /** The account that is to sign the premint */\n account?: Address | Account;\n /** WalletClient used to sign the premint */\n walletClient: WalletClient;\n /** Data */\n typedDataDefinition: TypedDataDefinition;\n}) {\n if (!account) {\n account = walletClient.account;\n }\n if (!account) {\n throw new Error(\"No account provided\");\n }\n\n const signature = await walletClient.signTypedData({\n account,\n ...typedDataDefinition,\n });\n\n return {\n signature,\n signerAccount: account,\n };\n}\n\n/** CREATE */\n\ntype CreatePremintParameters = {\n /** tokenCreationConfig Token creation settings, optional settings are overridden with sensible defaults */\n token: TokenConfigInput;\n /** uid the UID to use – optional and retrieved as a fresh UID from ZORA by default. */\n uid?: number;\n} & ContractCreationConfigOrAddress;\n\nasync function createPremint({\n token: tokenCreationConfig,\n uid,\n publicClient,\n apiClient,\n chainId,\n ...collectionOrAddress\n}: CreatePremintParameters & PremintContext) {\n const {\n premintConfig,\n premintConfigVersion,\n collectionAddress: collectionAddressToUse,\n } = await prepareCreatePremintConfig({\n ...collectionOrAddress,\n tokenCreationConfig,\n uid,\n publicClient,\n apiClient,\n chainId,\n });\n\n return makePremintReturn({\n premintConfig,\n premintConfigVersion,\n collectionAddress: collectionAddressToUse,\n collection: collectionOrAddress.contract,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\ntype PreparePremintReturn = {\n collectionAddress: Address;\n} & PremintConfigAndVersion;\n\nasync function prepareCreatePremintConfig({\n tokenCreationConfig,\n uid,\n publicClient,\n apiClient,\n chainId,\n ...collectionOrAddress\n}: {\n tokenCreationConfig: TokenConfigInput;\n uid?: number;\n} & PremintContext &\n ContractCreationConfigOrAddress): Promise<PreparePremintReturn> {\n const newContractAddress = await getPremintCollectionAddress({\n publicClient,\n ...collectionOrAddress,\n });\n\n let uidToUse = uid;\n\n if (typeof uidToUse !== \"number\") {\n uidToUse = await apiClient.getNextUID(newContractAddress);\n }\n\n const supportedVersions = await supportedPremintVersions({\n tokenContract: newContractAddress,\n publicClient,\n });\n\n const tokenConfigAndVersion = makeTokenConfigWithDefaults({\n tokenCreationConfig,\n chainId,\n supportedPremintVersions: supportedVersions,\n });\n\n const premintConfig = makeNewPremint({\n ...tokenConfigAndVersion,\n uid: uidToUse,\n });\n\n const premintConfigAndVersion = {\n premintConfig,\n premintConfigVersion: tokenConfigAndVersion.premintConfigVersion,\n } as PremintConfigAndVersion;\n\n return {\n ...premintConfigAndVersion,\n collectionAddress: newContractAddress,\n };\n}\n\n/** UPDATE */\n\nexport type UpdatePremintParams = {\n /** uid of the Premint to update */\n uid: number;\n /** address of the Premint to update */\n collection: Address;\n /** update to apply to the Premint */\n tokenConfigUpdates: Partial<TokenCreationConfig>;\n};\n\nasync function updatePremint({\n uid,\n collection,\n tokenConfigUpdates,\n apiClient,\n publicClient,\n chainId,\n}: UpdatePremintParams & {\n apiClient: IPremintAPI;\n publicClient: PublicClient;\n chainId: number;\n}) {\n const {\n premint: { premintConfig, premintConfigVersion },\n collection: collectionCreationConfig,\n } = await apiClient.get({\n collectionAddress: collection,\n uid: uid,\n });\n\n const updatedPremint = applyUpdateToPremint({\n uid: premintConfig.uid,\n version: premintConfig.version,\n tokenConfig: premintConfig.tokenConfig,\n tokenConfigUpdates: tokenConfigUpdates,\n });\n\n return makePremintReturn({\n premintConfig: updatedPremint,\n premintConfigVersion,\n collectionAddress: collection,\n collection: collectionCreationConfig,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\n/** DELETE */\n\nexport type DeletePremintParams = {\n /** id of the premint to delete */\n uid: number;\n /** collection address of the Premint to delete */\n collection: Address;\n};\n\nasync function deletePremint({\n uid,\n collection,\n publicClient,\n apiClient,\n chainId,\n}: DeletePremintParams & {\n apiClient: IPremintAPI;\n publicClient: PublicClient;\n chainId: number;\n}) {\n const {\n premint: { premintConfig, premintConfigVersion },\n collection: collectionCreationConfig,\n collectionAddress,\n } = await apiClient.get({\n collectionAddress: collection,\n uid: uid,\n });\n\n const deletedPremint = {\n ...premintConfig,\n version: premintConfig.version + 1,\n deleted: true,\n };\n\n return makePremintReturn({\n premintConfig: deletedPremint,\n premintConfigVersion,\n collectionAddress,\n collection: collectionCreationConfig,\n publicClient,\n apiClient,\n chainId,\n });\n}\n\nexport type MakeMintParametersArguments = {\n /** uid of the Premint to mint */\n uid: number;\n /** Premint contract address */\n tokenContract: Address;\n /** Account to execute the mint */\n minterAccount: Account | Address;\n /** Minting settings */\n mintArguments?: {\n /** Quantity of tokens to mint */\n quantityToMint: number;\n /** Comment to add to the mint */\n mintComment?: string;\n /** Address to receive the mint referral reward */\n mintReferral?: Address;\n /** Address to receive the minted tokens */\n mintRecipient?: Address;\n };\n /** Account to receive first minter reward, if this mint brings the premint onchain */\n firstMinter?: Address;\n};\n\n/** ======== MINTING ======== */\n\nexport async function collectPremint({\n uid,\n tokenContract,\n minterAccount,\n quantityToMint,\n mintComment = \"\",\n mintReferral,\n mintRecipient,\n firstMinter,\n premintGetter,\n publicClient,\n}: Omit<MakePremintMintParametersArguments, \"mintType\"> & {\n premintGetter: IPremintGetter;\n publicClient: PublicClient;\n}): Promise<\n SimulateContractParameters<\n typeof zoraCreator1155PremintExecutorImplABI,\n \"premint\",\n any,\n any,\n any,\n Account | Address\n >\n> {\n if (typeof quantityToMint !== \"undefined\" && quantityToMint < 1) {\n throw new Error(\"Quantity to mint cannot be below 1\");\n }\n\n const premint = await premintGetter.get({\n collectionAddress: tokenContract,\n uid,\n });\n\n const mintFee = await getPremintMintFee({\n tokenContract,\n publicClient,\n });\n\n return buildPremintMintCall({\n mintArguments: {\n minterAccount,\n quantityToMint,\n firstMinter,\n mintComment,\n mintRecipient,\n mintReferral,\n },\n mintFee,\n premint,\n });\n}\n\nexport const buildPremintMintCall = ({\n mintArguments: {\n minterAccount,\n mintComment = \"\",\n mintRecipient,\n mintReferral,\n firstMinter,\n quantityToMint,\n },\n premint: { collection, collectionAddress, premint, signature },\n mintFee,\n}: {\n mintArguments: Omit<MakeMintParametersArgumentsBase, \"tokenContract\"> & {\n firstMinter?: Address;\n };\n premint: Pick<\n PremintFromApi,\n \"collection\" | \"collectionAddress\" | \"premint\" | \"signature\"\n >;\n mintFee: bigint;\n}): SimulateContractParametersWithAccount => {\n const mintArgumentsContract: PremintMintArguments = {\n mintComment: mintComment,\n mintRecipient: mintRecipientOrAccount({\n mintRecipient,\n minterAccount,\n }),\n mintRewardsRecipients: makeMintRewardsRecipient({\n mintReferral,\n }),\n };\n\n const collectionOrEmpty: ContractCreationConfig = collection\n ? defaultAdditionalAdmins(collection)\n : emptyContractCreationConfig();\n const collectionAddressToSubmit = collection\n ? zeroAddress\n : collectionAddress;\n\n const firstMinterToSubmit: Address =\n firstMinter ||\n (typeof minterAccount === \"string\" ? minterAccount : minterAccount.address);\n\n if (premint.premintConfigVersion === PremintConfigVersion.V3) {\n throw new Error(\"PremintV3 not supported in premint SDK\");\n }\n\n const value =\n (mintFee + premint.premintConfig.tokenConfig.pricePerToken) *\n BigInt(quantityToMint);\n\n return makeContractParameters({\n account: minterAccount,\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"premint\",\n value,\n address: getPremintExecutorAddress(),\n args: [\n collectionOrEmpty,\n collectionAddressToSubmit,\n encodePremintConfig(premint),\n signature,\n BigInt(quantityToMint),\n mintArgumentsContract,\n firstMinterToSubmit,\n zeroAddress,\n ],\n });\n};\n\nexport function makeUrls({\n uid,\n address,\n tokenId,\n chainId,\n blockExplorerUrl,\n}: {\n uid?: number;\n tokenId?: bigint;\n address?: Address;\n chainId: number;\n blockExplorerUrl?: string;\n}): URLSReturnType {\n if ((!uid || !tokenId) && !address) {\n return { explorer: null, zoraCollect: null, zoraManage: null };\n }\n\n const zoraTokenPath = uid ? `premint-${uid}` : tokenId;\n\n const network = getApiNetworkConfigForChain(chainId);\n\n return {\n explorer: tokenId\n ? `https://${blockExplorerUrl}/token/${address}/instance/${tokenId}`\n : null,\n zoraCollect: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n zoraManage: `https://${\n network.isTestnet ? \"testnet.\" : \"\"\n }zora.co/collect/${\n network.zoraCollectPathChainName\n }:${address}/${zoraTokenPath}`,\n };\n}\n","import { Address } from \"abitype\";\nimport {\n zoraCreator1155PremintExecutorImplABI as preminterAbi,\n zoraCreator1155ImplABI,\n zoraCreator1155PremintExecutorImplABI,\n zoraCreator1155PremintExecutorImplAddress,\n zoraCreatorFixedPriceSaleStrategyAddress,\n premintTypedDataDefinition,\n ContractCreationConfig,\n PremintConfigForVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n recoverTypedDataAddress,\n Hex,\n zeroAddress,\n hashDomain,\n keccak256,\n concat,\n recoverAddress,\n GetEventArgs,\n parseEther,\n Account,\n} from \"viem\";\nimport {\n PremintConfig,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n TokenCreationConfig,\n} from \"@zoralabs/protocol-deployments\";\nimport { PublicClient } from \"src/utils\";\nimport {\n ContractCreationConfigAndAddress,\n ContractCreationConfigOrAddress,\n ContractCreationConfigWithOptionalAdditionalAdmins,\n} from \"./contract-types\";\nimport { IPremintGetter } from \"./premint-api-client\";\nimport { isPremintConfigV1, isPremintConfigV2 } from \"./conversions\";\nimport { MintCosts } from \"src/mint/types\";\n\nexport const getPremintExecutorAddress = () =>\n zoraCreator1155PremintExecutorImplAddress[999] as Address;\n\nexport type IsValidSignatureReturn = {\n isAuthorized: boolean;\n recoveredAddress?: Address;\n};\n\nexport async function isAuthorizedToCreatePremint({\n contractAdmin = zeroAddress,\n additionalAdmins = [],\n collectionAddress,\n publicClient,\n signer,\n}: {\n contractAdmin?: Address;\n additionalAdmins?: Address[];\n collectionAddress: Address;\n publicClient: PublicClient;\n signer: Address | Account;\n}) {\n // otherwize, we must assume the newer version of premint executor is deployed, so we call that.\n return await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"isAuthorizedToCreatePremintWithAdditionalAdmins\",\n args: [\n typeof signer === \"string\" ? signer : signer.address,\n contractAdmin,\n collectionAddress,\n additionalAdmins,\n ],\n });\n}\n\nexport async function recoverPremintSigner<T extends PremintConfigVersion>({\n signature,\n ...rest\n}: {\n signature: Hex;\n chainId: number;\n verifyingContract: Address;\n} & PremintConfigWithVersion<T>): Promise<Address> {\n return await recoverTypedDataAddress({\n ...premintTypedDataDefinition(rest),\n signature,\n });\n}\n\nexport async function tryRecoverPremintSigner(\n params: Parameters<typeof recoverPremintSigner>[0],\n) {\n try {\n return await recoverPremintSigner(params);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n}\n\n/**\n * Recovers the address from a typed data signature and then checks if the recovered address is authorized to create a premint\n *\n * @param params validationProperties\n * @param params.typedData typed data definition for premint config\n * @param params.signature signature to validate\n * @param params.publicClient public rpc read-only client\n * @param params.premintConfigContractAdmin the original contractAdmin on the ContractCreationConfig for the premint; this is usually the original creator of the premint\n * @param params.tokenContract the address of the 1155 contract\n * @returns\n */\nexport async function isValidSignature<T extends PremintConfigVersion>({\n signature,\n publicClient,\n collection,\n collectionAddress,\n chainId,\n ...premintConfigAndVersion\n}: {\n signature: Hex;\n chainId: number;\n publicClient: PublicClient;\n} & PremintConfigWithVersion<T> &\n ContractCreationConfigAndAddress): Promise<IsValidSignatureReturn> {\n const recoveredAddress = await tryRecoverPremintSigner({\n ...premintConfigAndVersion,\n signature,\n verifyingContract: collectionAddress,\n chainId,\n });\n\n if (!recoverAddress) {\n return {\n isAuthorized: false,\n };\n }\n\n const isAuthorized = await isAuthorizedToCreatePremint({\n signer: recoveredAddress!,\n additionalAdmins: collection?.additionalAdmins,\n contractAdmin: collection?.contractAdmin,\n collectionAddress: collectionAddress,\n publicClient,\n });\n\n return {\n isAuthorized,\n recoveredAddress,\n };\n}\n\n/**\n * Converts a premint config from v1 to v2\n *\n * @param premintConfig premint config to convert\n * @param createReferral address that referred the creator, that will receive create referral rewards for the created token\n */\nexport function migratePremintConfigToV2({\n premintConfig,\n createReferral = zeroAddress,\n}: {\n premintConfig: PremintConfigV1;\n createReferral: Address;\n}): PremintConfigV2 {\n return {\n ...premintConfig,\n tokenConfig: {\n tokenURI: premintConfig.tokenConfig.tokenURI,\n maxSupply: premintConfig.tokenConfig.maxSupply,\n maxTokensPerAddress: premintConfig.tokenConfig.maxTokensPerAddress,\n pricePerToken: premintConfig.tokenConfig.pricePerToken,\n mintStart: premintConfig.tokenConfig.mintStart,\n mintDuration: premintConfig.tokenConfig.mintDuration,\n payoutRecipient: premintConfig.tokenConfig.royaltyRecipient,\n royaltyBPS: premintConfig.tokenConfig.royaltyBPS,\n fixedPriceMinter: premintConfig.tokenConfig.fixedPriceMinter,\n createReferral,\n },\n };\n}\n\nexport type CreatorAttributionEventParams = GetEventArgs<\n typeof zoraCreator1155ImplABI,\n \"CreatorAttribution\",\n { EnableUnion: false }\n>;\n\n/**\n * Recovers the address from a CreatorAttribution event emitted from a ZoraCreator1155 contract\n * Useful for verifying that the creator of a token is the one who signed a premint for its creation.\n * \n\n * @param creatorAttribution parameters from the CreatorAttribution event\n * @param chainId the chain id of the current chain\n * @param tokenContract the address of the 1155 contract\n * @returns the address of the signer\n */\nexport const recoverCreatorFromCreatorAttribution = async ({\n creatorAttribution: { version, domainName, structHash, signature },\n chainId,\n tokenContract,\n}: {\n creatorAttribution: CreatorAttributionEventParams;\n tokenContract: Address;\n chainId: number;\n}) => {\n // hash the eip712 domain based on the parameters emitted from the event:\n const hashedDomain = hashDomain({\n domain: {\n chainId,\n name: domainName,\n verifyingContract: tokenContract,\n version,\n },\n types: {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n },\n });\n\n // re-build the eip-712 typed data hash, consisting of the hashed domain and the structHash emitted from the event:\n const parts: Hex[] = [\"0x1901\", hashedDomain, structHash!];\n\n const hashedTypedData = keccak256(concat(parts));\n\n return await recoverAddress({\n hash: hashedTypedData,\n signature: signature!,\n });\n};\n\nexport const supportedPremintVersions = async ({\n tokenContract,\n publicClient,\n}: {\n tokenContract: Address;\n publicClient: PublicClient;\n}): Promise<PremintConfigVersion[]> => {\n return (await publicClient.readContract({\n abi: preminterAbi,\n address: getPremintExecutorAddress(),\n functionName: \"supportedPremintSignatureVersions\",\n args: [tokenContract],\n })) as PremintConfigVersion[];\n};\n/**\n * Checks if the 1155 contract at that address supports the given version of the premint config.\n */\nexport const supportsPremintVersion = async ({\n version,\n tokenContract,\n publicClient,\n}: {\n version: PremintConfigVersion;\n tokenContract: Address;\n publicClient: PublicClient;\n}): Promise<boolean> => {\n return (\n await supportedPremintVersions({ tokenContract, publicClient })\n ).includes(version);\n};\n\nexport async function getPremintCollectionAddress({\n publicClient,\n contract: collection,\n contractAddress: collectionAddress,\n}: {\n publicClient: PublicClient;\n} & ContractCreationConfigOrAddress): Promise<Address> {\n if (typeof collection !== \"undefined\") {\n return publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"getContractWithAdditionalAdminsAddress\",\n args: [\n {\n ...collection,\n additionalAdmins: collection.additionalAdmins || [],\n },\n ],\n });\n }\n\n return collectionAddress;\n}\n\nexport function applyUpdateToPremint({\n uid,\n version,\n tokenConfig,\n tokenConfigUpdates,\n}: {\n tokenConfig: TokenCreationConfig;\n tokenConfigUpdates: Partial<TokenCreationConfig>;\n} & Pick<PremintConfig, \"uid\" | \"version\">): PremintConfig {\n const updatedTokenConfig: TokenCreationConfig = {\n ...tokenConfig,\n ...tokenConfigUpdates,\n } as const;\n\n const result = {\n deleted: false,\n uid,\n version: version + 1,\n tokenConfig: updatedTokenConfig,\n } as PremintConfig;\n\n return result;\n}\n\nexport function makeNewPremint<T extends PremintConfigVersion>({\n tokenConfig,\n uid,\n}: {\n tokenConfig: PremintConfigForVersion<T>[\"tokenConfig\"];\n uid: number;\n}): PremintConfigForVersion<T> {\n return {\n deleted: false,\n uid,\n version: 0,\n tokenConfig,\n } as PremintConfigForVersion<T>;\n}\n\nexport async function getPremintMintFee({\n tokenContract,\n publicClient,\n}: {\n tokenContract: Address;\n publicClient: PublicClient;\n}) {\n // try reading mint fee function from premint executor. this will revert\n // if the abi is not up to date yet\n try {\n return await publicClient.readContract({\n address: getPremintExecutorAddress(),\n abi: zoraCreator1155PremintExecutorImplABI,\n functionName: \"mintFee\",\n args: [tokenContract],\n });\n } catch (e) {\n console.error(e);\n\n return parseEther(\"0.000777\");\n }\n}\n\ntype GetMintCostsParams = {\n tokenContract: Address;\n tokenPrice: bigint;\n quantityToMint: bigint | number;\n publicClient: PublicClient;\n};\n\nexport async function getPremintMintCosts({\n publicClient,\n tokenContract,\n tokenPrice,\n quantityToMint,\n}: GetMintCostsParams): Promise<MintCosts> {\n const mintFee = await getPremintMintFee({ tokenContract, publicClient });\n\n const quantityToMintBigInt = BigInt(quantityToMint);\n\n return {\n mintFee: mintFee * quantityToMintBigInt,\n totalPurchaseCost: tokenPrice * quantityToMintBigInt,\n totalCostEth: (mintFee + tokenPrice) * quantityToMintBigInt,\n };\n}\nexport async function getPremintPricePerToken({\n collection,\n uid,\n premintGetter,\n}: {\n collection: Address;\n uid: number;\n premintGetter: IPremintGetter;\n}) {\n const { premint: premintConfigWithVersion } = await premintGetter.get({\n collectionAddress: collection,\n uid,\n });\n\n if (\n isPremintConfigV1(premintConfigWithVersion) ||\n isPremintConfigV2(premintConfigWithVersion)\n ) {\n return premintConfigWithVersion.premintConfig.tokenConfig.pricePerToken;\n }\n\n throw new Error(\"Premint version not supported to get price\");\n}\n\nexport async function getPremintMintCostsWithUnknownTokenPrice({\n premintGetter,\n uid,\n ...rest\n}: Omit<GetMintCostsParams, \"tokenPrice\"> & {\n premintGetter: IPremintGetter;\n uid: number;\n}) {\n const pricePerToken = await getPremintPricePerToken({\n uid,\n premintGetter,\n collection: rest.tokenContract,\n });\n\n return await getPremintMintCosts({\n ...rest,\n tokenPrice: pricePerToken,\n });\n}\n\nexport function makeMintRewardsRecipient({\n mintReferral = zeroAddress,\n platformReferral = zeroAddress,\n}: {\n mintReferral?: Address;\n platformReferral?: Address;\n}): Address[] {\n return [mintReferral, platformReferral];\n}\n\nexport function getDefaultFixedPriceMinterAddress(chainId: number): Address {\n return zoraCreatorFixedPriceSaleStrategyAddress[\n chainId as keyof typeof zoraCreatorFixedPriceSaleStrategyAddress\n ]!;\n}\n\nexport const emptyContractCreationConfig = (): ContractCreationConfig => ({\n contractAdmin: zeroAddress,\n contractURI: \"\",\n contractName: \"\",\n additionalAdmins: [],\n});\n\nexport function defaultAdditionalAdmins(\n collection: ContractCreationConfigWithOptionalAdditionalAdmins,\n): ContractCreationConfig {\n return {\n ...collection,\n additionalAdmins: collection.additionalAdmins || [],\n };\n}\n\nexport const toContractCreationConfigOrAddress = ({\n collection,\n collectionAddress,\n}: {\n collection?: ContractCreationConfigWithOptionalAdditionalAdmins;\n collectionAddress?: Address;\n}) => {\n if (typeof collection !== \"undefined\") {\n return {\n contract: collection,\n };\n }\n\n if (typeof collectionAddress !== \"undefined\") {\n return {\n contractAddress: collectionAddress,\n };\n }\n\n throw new Error(\"Must provide either a collection or a collection address\");\n};\n","import {\n arbitrum,\n base,\n baseSepolia,\n foundry,\n mainnet,\n optimism,\n sepolia,\n zora,\n zoraSepolia,\n} from \"viem/chains\";\nimport type { components } from \"./generated/premint-api-types\";\nimport { parseEther } from \"viem\";\nimport { getSubgraph } from \"../constants\";\n\ntype BackendChainName = components[\"schemas\"][\"ChainName\"];\n\nexport type NetworkConfig = {\n chainId: number;\n zoraCollectPathChainName: string;\n zoraBackendChainName: BackendChainName;\n isTestnet: boolean;\n subgraphUrl: string;\n};\n\nexport const REWARD_PER_TOKEN = parseEther(\"0.000777\");\n\nexport const networkConfigByChain: Record<number, NetworkConfig> = {\n [mainnet.id]: {\n chainId: mainnet.id,\n isTestnet: false,\n zoraCollectPathChainName: \"eth\",\n zoraBackendChainName: \"ETHEREUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-mainnet\", \"stable\"),\n },\n [sepolia.id]: {\n chainId: sepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"sep\",\n zoraBackendChainName: \"ETHEREUM-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-sepolia\", \"stable\"),\n },\n [zora.id]: {\n chainId: zora.id,\n isTestnet: false,\n zoraCollectPathChainName: \"zora\",\n zoraBackendChainName: \"ZORA-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-zora-mainnet\", \"stable\"),\n },\n [zoraSepolia.id]: {\n chainId: zoraSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zsep\",\n zoraBackendChainName: \"ZORA-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-zora-sepolia\", \"stable\"),\n },\n [optimism.id]: {\n chainId: optimism.id,\n isTestnet: false,\n zoraCollectPathChainName: \"oeth\",\n zoraBackendChainName: \"OPTIMISM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-optimism\", \"stable\"),\n },\n [arbitrum.id]: {\n chainId: arbitrum.id,\n isTestnet: true,\n zoraCollectPathChainName: \"arb\",\n zoraBackendChainName: \"ARBITRUM-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-arbitrum-one\", \"stable\"),\n },\n [base.id]: {\n chainId: base.id,\n isTestnet: false,\n zoraCollectPathChainName: \"base\",\n zoraBackendChainName: \"BASE-MAINNET\",\n subgraphUrl: getSubgraph(\"zora-create-base-mainnet\", \"stable\"),\n },\n [baseSepolia.id]: {\n chainId: baseSepolia.id,\n isTestnet: true,\n zoraCollectPathChainName: \"bsep\",\n zoraBackendChainName: \"BASE-SEPOLIA\",\n subgraphUrl: getSubgraph(\"zora-create-base-sepolia\", \"stable\"),\n },\n [foundry.id]: {\n chainId: foundry.id,\n isTestnet: true,\n zoraCollectPathChainName: \"zgor\",\n zoraBackendChainName: \"ZORA-GOERLI\",\n subgraphUrl: getSubgraph(\"zora-create-zora-testnet\", \"stable\"),\n },\n};\n\nexport const getSubgraphUrl = (chainId: number): string => {\n const networkConfig = networkConfigByChain[chainId];\n\n if (!networkConfig) {\n throw new Error(`Network not configured for chain id ${chainId}`);\n }\n\n return networkConfig.subgraphUrl;\n};\n","import { parseAbi } from \"viem\";\n\nexport const ZORA_API_BASE = \"https://api.zora.co/\";\nexport const OPEN_EDITION_MINT_SIZE = BigInt(\"18446744073709551615\");\n\n// Subgraph base settings\nconst SUBGRAPH_CONFIG_BASE =\n \"https://api.goldsky.com/api/public/project_clhk16b61ay9t49vm6ntn4mkz/subgraphs\";\n\nexport function getSubgraph(name: string, version: string): string {\n return `${SUBGRAPH_CONFIG_BASE}/${name}/${version}/gn`;\n}\n\nexport const zora721Abi = parseAbi([\n \"function mintWithRewards(address recipient, uint256 quantity, string calldata comment, address mintReferral) external payable\",\n \"function zoraFeeForAmount(uint256 amount) public view returns (address, uint256)\",\n] as const);\n\nexport const zora1155LegacyAbi = [\n {\n type: \"function\",\n name: \"mintWithRewards\",\n inputs: [\n {\n name: \"minter\",\n type: \"address\",\n internalType: \"contract IMinter1155\",\n },\n {\n name: \"tokenId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"quantity\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"minterArguments\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n {\n name: \"mintReferral\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"payable\",\n },\n] as const;\n","import { networkConfigByChain } from \"src/apis/chain-constants\";\nimport { components, paths } from \"src/apis/generated/premint-api-types\";\nimport { Address, Hex } from \"viem\";\nimport {\n ContractCreationConfig,\n PremintConfigAndVersion,\n PremintConfigV1,\n PremintConfigV2,\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport {\n PremintSignatureGetOfCollectionResponse,\n PremintSignatureGetResponse,\n} from \"./premint-api-client\";\nimport { ContractCreationConfigOrAddress } from \"./contract-types\";\n\nexport const convertCollectionFromApi = (\n collection: PremintSignatureGetResponse[\"collection\"],\n): ContractCreationConfig | undefined => {\n if (!collection) return undefined;\n\n return {\n additionalAdmins:\n (collection.additionalAdmins as Address[] | undefined) || [],\n contractAdmin: collection.contractAdmin as Address,\n contractName: collection.contractName,\n contractURI: collection.contractURI,\n };\n};\n\n/**\n * Convert server to on-chain types for a premint\n *\n * @param premint Premint object from the server to convert to one that's compatible with viem\n * @returns Viem type-compatible premint object\n */\nexport const convertPremintFromApi = (\n premint: PremintSignatureGetResponse[\"premint\"],\n): PremintConfigAndVersion => {\n if (\n premint.config_version === PremintConfigVersion.V1 ||\n !premint.config_version\n ) {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV1\"];\n return {\n premintConfigVersion: PremintConfigVersion.V1,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n royaltyRecipient: tokenConfig.royaltyRecipient as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n } else {\n const tokenConfig =\n premint.tokenConfig as components[\"schemas\"][\"TokenCreationConfigV2\"];\n return {\n premintConfigVersion: PremintConfigVersion.V2,\n premintConfig: {\n deleted: premint.deleted,\n uid: premint.uid,\n version: premint.version,\n tokenConfig: {\n ...tokenConfig,\n fixedPriceMinter: tokenConfig.fixedPriceMinter as Address,\n payoutRecipient: tokenConfig.payoutRecipient as Address,\n createReferral: tokenConfig.createReferral as Address,\n maxSupply: BigInt(tokenConfig.maxSupply),\n pricePerToken: BigInt(tokenConfig.pricePerToken),\n mintStart: BigInt(tokenConfig.mintStart),\n mintDuration: BigInt(tokenConfig.mintDuration),\n maxTokensPerAddress: BigInt(tokenConfig.maxTokensPerAddress),\n },\n },\n };\n }\n};\n\nexport type PremintFromApi = ReturnType<typeof convertGetPremintApiResponse>;\n\nexport const convertGetPremintApiResponse = (\n response: PremintSignatureGetResponse,\n) => ({\n collection: convertCollectionFromApi(response.collection),\n collectionAddress: response.collection_address as Address,\n signature: response.signature as Hex,\n signer: response.signer as Address,\n premint: convertPremintFromApi(response.premint),\n});\n\nexport type PremintCollectionFromApi = ReturnType<\n typeof convertGetPremintOfCollectionApiResponse\n>;\n\nexport const convertGetPremintOfCollectionApiResponse = (\n response: PremintSignatureGetOfCollectionResponse,\n) => ({\n collection: convertCollectionFromApi({\n contractAdmin: response.contract_admin,\n contractName: response.contract_name,\n contractURI: response.contract_uri,\n }),\n premints: response.premints.map((premint) => ({\n premint: convertPremintFromApi(premint),\n signature: premint.signature as Hex,\n })),\n});\n\nconst encodePremintV1ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV1): PremintSignatureGetResponse[\"premint\"] => ({\n ...premint,\n config_version: \"1\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nconst encodePremintV2ForAPI = ({\n tokenConfig,\n ...premint\n}: PremintConfigV2): PremintSignatureRequestBody[\"premint\"] => ({\n ...premint,\n config_version: \"2\",\n tokenConfig: {\n ...tokenConfig,\n maxSupply: tokenConfig.maxSupply.toString(),\n pricePerToken: tokenConfig.pricePerToken.toString(),\n mintStart: tokenConfig.mintStart.toString(),\n mintDuration: tokenConfig.mintDuration.toString(),\n maxTokensPerAddress: tokenConfig.maxTokensPerAddress.toString(),\n },\n});\n\nexport const encodePremintForAPI = <T extends PremintConfigVersion>({\n premintConfig,\n premintConfigVersion,\n}: PremintConfigWithVersion<T>): PremintSignatureRequestBody[\"premint\"] => {\n if (premintConfigVersion === PremintConfigVersion.V1) {\n return encodePremintV1ForAPI(premintConfig as PremintConfigV1);\n }\n if (premintConfigVersion === PremintConfigVersion.V2) {\n return encodePremintV2ForAPI(premintConfig as PremintConfigV2);\n }\n throw new Error(`Invalid premint config version ${premintConfigVersion}`);\n};\n\nexport type SignaturePostType = paths[\"/signature\"][\"post\"];\nexport type PremintSignatureRequestBody =\n SignaturePostType[\"requestBody\"][\"content\"][\"application/json\"];\nexport type PremintSignatureResponse =\n SignaturePostType[\"responses\"][200][\"content\"][\"application/json\"];\n\n/**\n * Encode input for posting a premint signature to the premint api\n * @param param0\n * @returns\n */\nexport const encodePostSignatureInput = <T extends PremintConfigVersion>({\n contract: collection,\n contractAddress: collectionAddress,\n premintConfigVersion,\n premintConfig,\n signature,\n chainId,\n}: {\n signature: Hex;\n chainId: number;\n} & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress): PremintSignatureRequestBody => ({\n premint: encodePremintForAPI({\n premintConfig,\n premintConfigVersion,\n }),\n signature,\n collection: collection as\n | PremintSignatureRequestBody[\"collection\"]\n | undefined,\n collection_address: collectionAddress,\n chain_name: networkConfigByChain[chainId]!.zoraBackendChainName,\n});\n\nexport const isPremintConfigV1 = (\n premintConfigAndVersion: PremintConfigAndVersion,\n): premintConfigAndVersion is PremintConfigWithVersion<PremintConfigVersion.V1> =>\n premintConfigAndVersion.premintConfigVersion === PremintConfigVersion.V1;\n\nexport const isPremintConfigV2 = (\n premintConfigAndVersion: PremintConfigAndVersion,\n): premintConfigAndVersion is PremintConfigWithVersion<PremintConfigVersion.V2> =>\n premintConfigAndVersion.premintConfigVersion === PremintConfigVersion.V2;\n","export class BadResponseError<T = any> extends Error {\n status: number;\n json: T;\n constructor(message: string, status: number, json: any) {\n super(message);\n this.name = \"BadResponseError\";\n this.status = status;\n this.json = json;\n }\n}\n\nasync function wait(delayMs: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, delayMs);\n });\n}\n\n/**\n * A simple fetch() wrapper for HTTP gets.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON get against\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const get = async <T>(url: string) => {\n const response = await fetch(url, { method: \"GET\" });\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Invalid response, status ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\n/**\n * A simple fetch() wrapper for HTTP post.\n * Can be overridden as needed.\n *\n * @param path Path to run HTTP JSON POST against\n * @param data Data to POST to the server, converted to JSON\n * @returns JSON object response\n * @throws Error when HTTP response fails\n */\nexport const post = async <T>(url: string, data: any) => {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n },\n body: JSON.stringify(data),\n });\n if (response.status !== 200) {\n let json;\n try {\n json = await response.json();\n } catch (e: any) {}\n throw new BadResponseError(\n `Bad response: ${response.status}`,\n response.status,\n json,\n );\n }\n return (await response.json()) as T;\n};\n\nexport const retries = async <T>(\n tryFn: () => T,\n maxTries: number = 3,\n atTry: number = 1,\n linearBackoffMS: number = 200,\n): Promise<T> => {\n try {\n return await tryFn();\n } catch (err: any) {\n if (err instanceof BadResponseError) {\n if (err.status >= 500) {\n if (atTry <= maxTries) {\n await wait(atTry * linearBackoffMS);\n return await retries(tryFn, maxTries, atTry + 1);\n }\n }\n }\n throw err;\n }\n};\n\nexport interface IHttpClient {\n get: typeof get;\n post: typeof post;\n retries: typeof retries;\n}\n\nexport const httpClient: IHttpClient = {\n get,\n post,\n retries,\n};\n","import { Account, Address } from \"viem\";\nimport {\n GenericTokenIdTypes,\n SimulateContractParametersWithAccount,\n} from \"src/types\";\n\nexport type MintParameters<MintType> = {\n /** Type of the collection to be minted. */\n mintType: MintType;\n};\n\nexport type Erc1155MintParameters = MintParameters<\"1155\"> & {\n /** Token id to mint */\n tokenId: GenericTokenIdTypes;\n};\n\nexport type Erc721MintParameters = MintParameters<\"721\">;\n\nexport type OnChainMintParameters =\n | Erc1155MintParameters\n | Erc721MintParameters;\n\nexport type PremintMintParameters = MintParameters<\"premint\"> & {\n /** uid of the Premint to mint */\n uid: number;\n};\n\nexport type MintType = \"1155\" | \"721\" | \"premint\";\n\nexport type MintTypes =\n | Erc1155MintParameters\n | Erc721MintParameters\n | PremintMintParameters;\n\nexport type GetMintParameters = MintTypes & {\n /** Address of the contract that the item belongs to */\n tokenContract: Address;\n preferredSaleType?: SaleType;\n};\n\nexport type GetMintsOfContractParameters = {\n /** Address of the contract to get the tokens of */\n tokenContract: Address;\n preferredSaleType?: SaleType;\n};\n\nexport const isOnChainMint = (mint: MintTypes): mint is OnChainMintParameters =>\n mint.mintType !== \"premint\";\n\nexport const is1155Mint = (mint: MintTypes): mint is Erc1155MintParameters =>\n mint.mintType === \"1155\";\n\nexport type MintParametersBase = {\n /** Account to execute the mint */\n minterAccount: Account | Address;\n /** Quantity of tokens to mint. Defaults to 1 */\n quantityToMint: number | bigint;\n /** Comment to add to the mint */\n mintComment?: string;\n /** Address to receive the mint referral reward */\n mintReferral?: Address;\n /** Address to receive the minted tokens. Defaults to the minting account */\n mintRecipient?: Address;\n /** If this is a premint, the address to get the first minter reward */\n firstMinter?: Address;\n};\n\nexport type MakeMintParametersArgumentsBase = MintParametersBase & {\n /** Premint contract address */\n tokenContract: Address;\n};\n\nexport type Make1155MintArguments = MakeMintParametersArgumentsBase &\n Erc1155MintParameters & {\n preferredSaleType?: SaleType;\n };\n\nexport type Make721MintArguments = MakeMintParametersArgumentsBase &\n Erc721MintParameters & {\n preferredSaleType?: SaleType;\n };\n\nexport type MakePremintMintParametersArguments =\n MakeMintParametersArgumentsBase &\n PremintMintParameters & {\n /** Account to receive first minter reward, if this mint brings the premint onchain */\n firstMinter?: Address;\n };\n\nexport type MakeMintParametersArguments =\n | Make1155MintArguments\n | Make721MintArguments\n | MakePremintMintParametersArguments;\n\nexport type GetMintCostsParameters = {\n /** Address of token contract/collection to get the mint costs for */\n collection: Address;\n /** Quantity of tokens that will be minted */\n quantityMinted: number | bigint;\n} & MintTypes;\n\nexport type SaleType = \"fixedPrice\" | \"erc20\" | \"premint\";\n\ntype SaleStrategy<T extends SaleType> = {\n saleType: T;\n pricePerToken: bigint;\n maxTokensPerAddress: bigint;\n};\n\ntype FixedPriceSaleStrategy = SaleStrategy<\"fixedPrice\"> & {\n address: Address;\n saleStart: string;\n saleEnd: string;\n};\n\ntype ERC20SaleStrategy = SaleStrategy<\"erc20\"> & {\n address: Address;\n saleStart: string;\n saleEnd: string;\n currency: Address;\n};\n\ntype PremintSaleStrategy = SaleStrategy<\"premint\"> & {\n duration: bigint;\n};\n\nexport type SaleStrategies =\n | FixedPriceSaleStrategy\n | ERC20SaleStrategy\n | PremintSaleStrategy;\n\nexport type OnchainSalesStrategies = FixedPriceSaleStrategy | ERC20SaleStrategy;\n\nexport function isErc20SaleStrategy(\n salesConfig: FixedPriceSaleStrategy | ERC20SaleStrategy | PremintSaleStrategy,\n): salesConfig is ERC20SaleStrategy {\n return salesConfig.saleType === \"erc20\";\n}\n\nexport type ContractInfo = {\n /** Address of the contract */\n address: Address;\n /** Contract metadata uri */\n URI: string;\n /** Contract name */\n name: string;\n};\n\nexport type MintableBase = {\n /** The contract the mintable belongs to */\n contract: ContractInfo;\n /** Token metadata URI */\n tokenURI: string;\n /** Price in eth to mint 1 item */\n mintFeePerQuantity: bigint;\n /** Creator of the mintable item */\n creator: Address;\n /** Maximum total number of items that can be minted */\n maxSupply: bigint;\n /** Total number of items minted so far */\n totalMinted: bigint;\n};\n\nexport type OnchainMintable = MintableBase & {\n mintType: \"721\" | \"1155\";\n tokenId?: bigint;\n contractVersion: string;\n};\n\nexport type PremintMintable = MintableBase & {\n mintType: \"premint\";\n uid: number;\n};\n\nexport type OnchainSalesConfigAndTokenInfo = {\n salesConfig: FixedPriceSaleStrategy | ERC20SaleStrategy;\n} & OnchainMintable;\n\nexport type PremintSalesConfigAndTokenInfo = {\n salesConfig: PremintSaleStrategy;\n} & PremintMintable;\n\nexport type SalesConfigAndTokenInfo =\n | OnchainSalesConfigAndTokenInfo\n | PremintMintable;\n\nexport interface IOnchainMintGetter {\n getMintable(params: {\n tokenAddress: Address;\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n }): Promise<OnchainSalesConfigAndTokenInfo>;\n\n getContractMintable(params: {\n tokenAddress: Address;\n }): Promise<OnchainSalesConfigAndTokenInfo[]>;\n\n getContractPremintTokenIds(params: {\n tokenAddress: Address;\n }): Promise<{ tokenId: BigInt; uid: number }[]>;\n}\n\nexport type MintCosts = {\n /** The total of the mint fee, in eth */\n mintFee: bigint;\n /** If it is a paid or erc20 mint, the total price of the paid or erc20 mint in eth or erc20 value correspondingly. */\n totalPurchaseCost: bigint;\n /** If it is an erc20 mint, the erc20 address */\n totalPurchaseCostCurrency?: Address;\n /** The total cost in eth (mint fee + purchase cost) to mint */\n totalCostEth: bigint;\n};\n\nexport type Erc20Approval = {\n /** ERC20 token address that must be approved */\n erc20: Address;\n /** Quantity of ERC20 that must be approved */\n quantity: bigint;\n /** Address that must be approved to transfer to */\n approveTo: Address;\n};\n\nexport type PrepareMintReturn = {\n /** Prepared parameters to execute the mint transaction */\n parameters: SimulateContractParametersWithAccount;\n /** If an erc20 approval is necessary, information for the erc20 approval */\n erc20Approval?: Erc20Approval;\n /** Cost breakdown to mint the quantity of tokens */\n costs: MintCosts;\n};\n\nexport type PrepareMint = (params: MintParametersBase) => PrepareMintReturn;\n\nexport type MintableReturn = {\n /** Token information */\n token: SalesConfigAndTokenInfo;\n /** Function that takes a quantity of items to mint and returns a prepared transaction and the costs to mint that quantity */\n prepareMint: PrepareMint;\n};\n","import { Account, Address, PublicClient as BasePublicClient } from \"viem\";\nimport { IHttpClient } from \"./apis/http-api-base\";\nimport { SimulateContractParametersWithAccount } from \"./types\";\n\nexport const makeContractParameters = (\n args: SimulateContractParametersWithAccount,\n) => args;\n\nexport type PublicClient = Pick<BasePublicClient, \"readContract\">;\n\nexport type ClientConfig = {\n /** The chain that the client is to run on. */\n chainId: number;\n /** Optional public client for the chain. If not provide, it is created. */\n publicClient: PublicClient;\n};\n\nexport function setupClient({ chainId, publicClient }: ClientConfig) {\n return {\n chainId,\n publicClient,\n };\n}\n\nexport function mintRecipientOrAccount({\n mintRecipient,\n minterAccount,\n}: {\n mintRecipient?: Address;\n minterAccount: Address | Account;\n}): Address {\n return (\n mintRecipient ||\n (typeof minterAccount === \"string\" ? minterAccount : minterAccount.address)\n );\n}\n\nexport type Concrete<Type> = {\n [Property in keyof Type]-?: Type[Property];\n};\n\nexport async function querySubgraphWithRetries({\n httpClient,\n subgraphUrl,\n query,\n variables,\n}: {\n httpClient: IHttpClient;\n subgraphUrl: string;\n query: string;\n variables: any;\n}) {\n const { retries, post } = httpClient;\n\n const result = await retries(async () => {\n return await post<any>(subgraphUrl, {\n query,\n variables,\n });\n });\n\n return result?.data;\n}\n","import { GenericTokenIdTypes } from \"src/types\";\nimport { Address } from \"viem\";\n\nexport type FixedPriceSaleStrategyResult = {\n address: Address;\n pricePerToken: string;\n saleEnd: string;\n saleStart: string;\n maxTokensPerAddress: string;\n};\n\nexport type ERC20SaleStrategyResult = FixedPriceSaleStrategyResult & {\n currency: Address;\n};\n\nexport type SalesStrategyResult =\n | {\n type: \"FIXED_PRICE\";\n fixedPrice: FixedPriceSaleStrategyResult;\n }\n | {\n type: \"ERC_20_MINTER\";\n erc20Minter: ERC20SaleStrategyResult;\n };\n\nexport type TokenQueryResult = {\n tokenId?: string;\n creator: Address;\n uri: string;\n totalMinted: string;\n maxSupply: string;\n salesStrategies?: SalesStrategyResult[];\n tokenStandard: \"ERC1155\" | \"ERC721\";\n contract: {\n mintFeePerQuantity: \"string\";\n salesStrategies: SalesStrategyResult[];\n address: Address;\n contractVersion: string;\n contractURI: string;\n name: string;\n };\n};\n\nconst NFT_SALE_STRATEGY_FRAGMENT = `\nfragment SaleStrategy on SalesStrategyConfig {\n type\n fixedPrice {\n address\n pricePerToken\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n erc20Minter {\n address\n pricePerToken\n currency\n saleEnd\n saleStart\n maxTokensPerAddress\n }\n}`;\n\nconst TOKEN_FRAGMENT = `\nfragment Token on ZoraCreateToken {\n creator\n tokenId\n uri\n totalMinted\n maxSupply\n tokenStandard\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\"]}) {\n ...SaleStrategy\n }\n contract {\n address\n mintFeePerQuantity\n contractVersion\n contractURI\n name\n salesStrategies(where: {type_in: [\"FIXED_PRICE\", \"ERC_20_MINTER\"]}) {\n ...SaleStrategy\n }\n }\n}`;\n\nconst FRAGMENTS = `\n${NFT_SALE_STRATEGY_FRAGMENT}\n${TOKEN_FRAGMENT}\n`;\n\nexport function buildNftTokenSalesQuery({\n tokenId,\n tokenAddress,\n}: {\n tokenId?: GenericTokenIdTypes;\n tokenAddress: Address;\n}): ISubgraphQuery<TokenQueryResult> {\n return {\n query: `\n${FRAGMENTS}\nquery ($id: ID!) {\n zoraCreateToken(id: $id) {\n ...Token \n }\n}\n`,\n variables: {\n id:\n tokenId !== undefined\n ? // Generic Token ID types all stringify down to the base numeric equivalent.\n `${tokenAddress.toLowerCase()}-${tokenId}`\n : `${tokenAddress.toLowerCase()}-0`,\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.zoraCreateToken,\n };\n}\n\nexport function buildGetDefaultMintPriceQuery({}): ISubgraphQuery<\n bigint | undefined\n> {\n return {\n query: `\n{\n defaultMintPrice(id: \"0x0000000000000000000000000000000000000000\") {\n pricePerToken\n }\n}\n`,\n variables: {},\n parseResponseData: (responseData: any | undefined) =>\n responseData?.defaultMintPrice?.pricePerToken\n ? BigInt(responseData?.defaultMintPrice?.pricePerToken)\n : undefined,\n };\n}\n\nexport function buildContractTokensQuery({\n tokenAddress,\n}: {\n tokenAddress: Address;\n}): ISubgraphQuery<TokenQueryResult[]> {\n return {\n query: `\n${FRAGMENTS}\nquery ($contract: Bytes!) {\n zoraCreateTokens(\n where: {address: $contract}\n ) {\n ...Token\n }\n}\n`,\n variables: {\n contract: tokenAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.zoraCreateTokens,\n };\n}\n\nexport type ISubgraphQuery<T> = {\n query: string;\n variables: Record<string, any>;\n parseResponseData: (data: any | undefined) => T | undefined;\n};\n\nexport function buildPremintsOfContractQuery({\n tokenAddress,\n}: {\n tokenAddress: Address;\n}): ISubgraphQuery<{ uid: string; tokenId: string }[]> {\n return {\n query: `\n query ($contractAddress: Bytes!) {\n premints(where:{contractAddress:$contractAddress}) {\n uid\n tokenId\n }\n }\n `,\n variables: {\n contractAddress: tokenAddress.toLowerCase(),\n },\n parseResponseData: (responseData: any | undefined) =>\n responseData?.premints,\n };\n}\n","import { Address } from \"viem\";\nimport {\n httpClient as defaultHttpClient,\n IHttpClient,\n} from \"../apis/http-api-base\";\nimport { NetworkConfig, networkConfigByChain } from \"src/apis/chain-constants\";\nimport { GenericTokenIdTypes } from \"src/types\";\nimport {\n IOnchainMintGetter,\n SaleType,\n OnchainMintable,\n OnchainSalesConfigAndTokenInfo,\n OnchainSalesStrategies,\n isErc20SaleStrategy,\n} from \"./types\";\nimport { querySubgraphWithRetries } from \"src/utils\";\nimport {\n buildContractTokensQuery,\n buildGetDefaultMintPriceQuery,\n buildNftTokenSalesQuery,\n buildPremintsOfContractQuery,\n ISubgraphQuery,\n SalesStrategyResult,\n TokenQueryResult,\n} from \"./subgraph-queries\";\nimport * as semver from \"semver\";\n\nexport const getApiNetworkConfigForChain = (chainId: number): NetworkConfig => {\n if (!networkConfigByChain[chainId]) {\n throw new Error(`chain id ${chainId} network not configured `);\n }\n return networkConfigByChain[chainId]!;\n};\n\nfunction parseSalesConfig(\n targetStrategy: SalesStrategyResult,\n): OnchainSalesStrategies {\n if (targetStrategy.type === \"FIXED_PRICE\")\n return {\n saleType: \"fixedPrice\",\n ...targetStrategy.fixedPrice,\n maxTokensPerAddress: BigInt(\n targetStrategy.fixedPrice.maxTokensPerAddress,\n ),\n pricePerToken: BigInt(targetStrategy.fixedPrice.pricePerToken),\n };\n\n if (targetStrategy.type === \"ERC_20_MINTER\") {\n return {\n saleType: \"erc20\",\n ...targetStrategy.erc20Minter,\n maxTokensPerAddress: BigInt(\n targetStrategy.erc20Minter.maxTokensPerAddress,\n ),\n pricePerToken: BigInt(targetStrategy.erc20Minter.pricePerToken),\n };\n }\n\n throw new Error(\"Unknown saleType\");\n}\n\nfunction getSaleEnd(a: SalesStrategyResult) {\n return BigInt(\n a.type === \"ERC_20_MINTER\" ? a.erc20Minter.saleEnd : a.fixedPrice.saleEnd,\n );\n}\n\nfunction getTargetStrategy({\n tokenId,\n preferredSaleType,\n token,\n}: {\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n token: TokenQueryResult;\n}) {\n const allStrategies =\n (typeof tokenId !== \"undefined\"\n ? token.salesStrategies\n : token.contract.salesStrategies) || [];\n\n const saleStrategies = allStrategies.sort((a, b) =>\n getSaleEnd(a) > getSaleEnd(b) ? 1 : -1,\n );\n\n let targetStrategy: SalesStrategyResult | undefined;\n\n if (!preferredSaleType) {\n targetStrategy = saleStrategies[0];\n if (!targetStrategy) {\n throw new Error(\"Cannot find sale strategy\");\n }\n } else {\n const mappedSaleType =\n preferredSaleType === \"erc20\" ? \"ERC_20_MINTER\" : \"FIXED_PRICE\";\n targetStrategy = saleStrategies.find(\n (strategy: SalesStrategyResult) => strategy.type === mappedSaleType,\n );\n if (!targetStrategy) {\n const targetStrategy = saleStrategies.find(\n (strategy: SalesStrategyResult) =>\n strategy.type === \"FIXED_PRICE\" || strategy.type === \"ERC_20_MINTER\",\n );\n if (!targetStrategy) throw new Error(\"Cannot find valid sale strategy\");\n return targetStrategy;\n }\n }\n\n return targetStrategy;\n}\n\nexport class SubgraphMintGetter implements IOnchainMintGetter {\n httpClient: IHttpClient;\n networkConfig: NetworkConfig;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.httpClient = httpClient || defaultHttpClient;\n this.networkConfig = getApiNetworkConfigForChain(chainId);\n }\n\n async getContractMintFee(contract: TokenQueryResult[\"contract\"]) {\n const storedMintFee = BigInt(contract.mintFeePerQuantity);\n if (!contractUsesMintCardsForMintFee(contract.contractVersion)) {\n return storedMintFee;\n }\n const defaultMintFee = await this.querySubgraphWithRetries(\n buildGetDefaultMintPriceQuery({}),\n );\n\n return defaultMintFee || storedMintFee;\n }\n\n async querySubgraphWithRetries<T>({\n query,\n variables,\n parseResponseData,\n }: ISubgraphQuery<T>) {\n const responseData = await querySubgraphWithRetries({\n httpClient: this.httpClient,\n subgraphUrl: this.networkConfig.subgraphUrl,\n query,\n variables,\n });\n\n return parseResponseData(responseData);\n }\n\n getMintable: IOnchainMintGetter[\"getMintable\"] = async ({\n tokenAddress,\n tokenId,\n preferredSaleType: saleType,\n }) => {\n const token = await this.querySubgraphWithRetries(\n buildNftTokenSalesQuery({\n tokenId,\n tokenAddress,\n }),\n );\n\n if (!token) {\n throw new Error(\"Cannot find token\");\n }\n\n const defaultMintFee = await this.getContractMintFee(token.contract);\n\n return parseTokenQueryResult({\n token: token,\n defaultMintFee,\n tokenId,\n preferredSaleType: saleType,\n });\n };\n\n async getContractMintable({\n tokenAddress,\n preferredSaleType,\n }: {\n tokenAddress: Address;\n preferredSaleType?: SaleType;\n }) {\n const tokens = await this.querySubgraphWithRetries(\n buildContractTokensQuery({\n tokenAddress,\n }),\n );\n\n if (!tokens || tokens.length === 0) return [];\n\n const defaultMintFee = await this.getContractMintFee(tokens[0]!.contract);\n\n return tokens\n .filter((x) => x.tokenId !== \"0\")\n .map((token) =>\n parseTokenQueryResult({\n token,\n tokenId: token.tokenId,\n preferredSaleType,\n defaultMintFee,\n }),\n );\n }\n\n async getContractPremintTokenIds({\n tokenAddress,\n }: {\n tokenAddress: Address;\n }) {\n const premints = await this.querySubgraphWithRetries(\n buildPremintsOfContractQuery({\n tokenAddress,\n }),\n );\n\n return (\n premints?.map((premint) => ({\n tokenId: BigInt(premint.tokenId),\n uid: +premint.uid,\n })) || []\n );\n }\n}\n\nfunction parseTokenQueryResult({\n token,\n tokenId,\n preferredSaleType,\n defaultMintFee,\n}: {\n token: TokenQueryResult;\n tokenId?: GenericTokenIdTypes;\n preferredSaleType?: SaleType;\n defaultMintFee: bigint;\n}): OnchainSalesConfigAndTokenInfo {\n const targetStrategy = getTargetStrategy({\n tokenId,\n preferredSaleType: preferredSaleType,\n token,\n });\n\n const tokenInfo = parseTokenInfo(token, defaultMintFee);\n\n const salesConfig = parseSalesConfig(targetStrategy);\n\n if (isErc20SaleStrategy(salesConfig)) {\n tokenInfo.mintFeePerQuantity = 0n;\n }\n\n return {\n ...tokenInfo,\n salesConfig,\n };\n}\n\nconst contractUsesMintCardsForMintFee = (contractVersion: string) => {\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n return semver.gte(semVerContractVersion, \"2.9.0\");\n};\n\nfunction parseTokenInfo(\n token: TokenQueryResult,\n defaultMintFee: bigint,\n): OnchainMintable {\n return {\n contract: {\n address: token.contract.address,\n name: token.contract.name,\n URI: token.contract.contractURI,\n },\n tokenURI: token.uri,\n tokenId: token.tokenId ? BigInt(token.tokenId) : undefined,\n mintType: token.tokenStandard === \"ERC721\" ? \"721\" : \"1155\",\n creator: token.creator,\n totalMinted: BigInt(token.totalMinted),\n maxSupply: BigInt(token.maxSupply),\n mintFeePerQuantity: defaultMintFee,\n contractVersion: token.contract.contractVersion,\n };\n}\n","import {\n ContractCreationConfig,\n PremintConfigVersion as PremintConfigVersionOrig,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address } from \"viem\";\n\nexport enum PremintConfigVersion {\n V1 = PremintConfigVersionOrig.V1,\n V2 = PremintConfigVersionOrig.V2,\n V3 = PremintConfigVersionOrig.V3,\n}\n\nexport type ContractCreationConfigWithOptionalAdditionalAdmins = Omit<\n ContractCreationConfig,\n \"additionalAdmins\"\n> & {\n /** Optional: if there are additional admins accounts that should be added as contract wide admins upon contract creation. */\n additionalAdmins?: Address[];\n};\n\nexport type ContractCreationConfigAndAddress = {\n /** Parameters for creating the contract for new premints. */\n collection?: ContractCreationConfigWithOptionalAdditionalAdmins;\n /** Premint collection address */\n collectionAddress: Address;\n};\n\nexport type ContractCreationConfigOrAddress =\n | {\n /** Parameters for creating the contract for new premints. */\n contract: ContractCreationConfigWithOptionalAdditionalAdmins;\n contractAddress?: undefined;\n }\n | {\n contract?: undefined;\n /** Premint collection address */\n contractAddress: Address;\n };\n","import {\n IHttpClient,\n httpClient as defaultHttpClient,\n} from \"../apis/http-api-base\";\nimport { components, paths } from \"../apis/generated/premint-api-types\";\nimport { ZORA_API_BASE } from \"../constants\";\nimport { getApiNetworkConfigForChain } from \"src/mint/subgraph-mint-getter\";\nimport {\n PremintConfigVersion,\n PremintConfigWithVersion,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address, Hex } from \"viem\";\nimport {\n PremintCollectionFromApi,\n PremintFromApi,\n PremintSignatureRequestBody,\n PremintSignatureResponse,\n convertGetPremintApiResponse,\n convertGetPremintOfCollectionApiResponse,\n encodePostSignatureInput,\n} from \"./conversions\";\nimport { ContractCreationConfigOrAddress } from \"./contract-types\";\n\ntype PremintNextUIDGetType =\n paths[\"/signature/{chain_name}/{collection_address}/next_uid\"][\"get\"];\ntype PremintNextUIDGetPathParameters =\n PremintNextUIDGetType[\"parameters\"][\"path\"];\nexport type PremintNextUIDGetResponse =\n PremintNextUIDGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetType =\n paths[\"/signature/{chain_name}/{collection_address}/{uid}\"][\"get\"];\nexport type PremintSignatureGetResponse =\n SignaturePremintGetType[\"responses\"][200][\"content\"][\"application/json\"];\n\ntype SignaturePremintGetOfCollectionType =\n paths[\"/signature/{chain_name}/{collection_address}\"][\"get\"];\nexport type PremintSignatureGetOfCollectionResponse =\n SignaturePremintGetOfCollectionType[\"responses\"][200][\"content\"][\"application/json\"];\n\nexport type PremintCollection = PremintSignatureGetResponse[\"collection\"];\n\nexport type BackendChainNames = components[\"schemas\"][\"ChainName\"];\n\nconst postSignature = async ({\n httpClient: { post, retries } = defaultHttpClient,\n ...data\n}: PremintSignatureRequestBody & {\n httpClient?: Pick<IHttpClient, \"retries\" | \"post\">;\n}): Promise<PremintSignatureResponse> =>\n retries(() =>\n post<PremintSignatureResponse>(`${ZORA_API_BASE}premint/signature`, data),\n );\n\nconst getNextUID = async ({\n chainId,\n collection_address,\n httpClient: { retries, get } = defaultHttpClient,\n}: Omit<PremintNextUIDGetPathParameters, \"chain_name\"> & {\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<PremintNextUIDGetResponse> =>\n retries(() =>\n get<PremintNextUIDGetResponse>(\n `${ZORA_API_BASE}premint/signature/${\n getApiNetworkConfigForChain(chainId).zoraBackendChainName\n }/${collection_address}/next_uid`,\n ),\n );\n\nexport const getSignature = async ({\n collectionAddress,\n uid,\n chainId,\n httpClient: { retries, get } = defaultHttpClient,\n}: {\n collectionAddress: Address;\n uid: number;\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}): Promise<PremintFromApi> => {\n const chainName = getApiNetworkConfigForChain(chainId).zoraBackendChainName;\n const result = await retries(() =>\n get<PremintSignatureGetResponse>(\n `${ZORA_API_BASE}premint/signature/${chainName}/${collectionAddress.toLowerCase()}/${uid}`,\n ),\n );\n\n return convertGetPremintApiResponse(result);\n};\n\nconst getOfCollection = async ({\n collectionAddress,\n chainId,\n httpClient: { retries, get } = defaultHttpClient,\n}: {\n collectionAddress: Address;\n chainId: number;\n httpClient?: Pick<IHttpClient, \"retries\" | \"get\">;\n}) => {\n const chainName = getApiNetworkConfigForChain(chainId).zoraBackendChainName;\n const result = await retries(() =>\n get<PremintSignatureGetOfCollectionResponse>(\n `${ZORA_API_BASE}premint/signature/${chainName}/${collectionAddress.toLowerCase()}`,\n ),\n );\n\n return convertGetPremintOfCollectionApiResponse(result);\n};\n\nexport interface IPremintGetter {\n get(params: {\n collectionAddress: Address;\n uid: number;\n }): Promise<PremintFromApi>;\n\n getOfCollection(params: {\n collectionAddress: Address;\n }): Promise<PremintCollectionFromApi>;\n}\n\nexport interface IPremintAPI {\n get: IPremintGetter[\"get\"];\n\n getOfCollection: IPremintGetter[\"getOfCollection\"];\n\n getNextUID(collectionAddress: Address): Promise<number>;\n\n postSignature<T extends PremintConfigVersion>(\n params: {\n signature: Hex;\n } & PremintConfigWithVersion<T> &\n ContractCreationConfigOrAddress,\n ): Promise<PremintSignatureResponse>;\n}\n\nclass PremintAPIClient implements IPremintAPI {\n chainId: number;\n httpClient: IHttpClient;\n\n constructor(chainId: number, httpClient?: IHttpClient) {\n this.chainId = chainId;\n this.httpClient = httpClient || defaultHttpClient;\n }\n postSignature: IPremintAPI[\"postSignature\"] = ({\n signature,\n ...rest\n }): Promise<PremintSignatureResponse> => {\n const data = encodePostSignatureInput({\n ...rest,\n chainId: this.chainId,\n signature,\n });\n return postSignature({\n ...data,\n httpClient: this.httpClient,\n });\n };\n\n getNextUID: IPremintAPI[\"getNextUID\"] = async (collectionAddress) =>\n (\n await getNextUID({\n collection_address: collectionAddress.toLowerCase(),\n chainId: this.chainId,\n httpClient: this.httpClient,\n })\n ).next_uid;\n\n get: IPremintAPI[\"get\"] = async ({ collectionAddress, uid }) => {\n return getSignature({\n collectionAddress,\n uid,\n chainId: this.chainId,\n httpClient: this.httpClient,\n });\n };\n\n getOfCollection: IPremintAPI[\"getOfCollection\"] = async ({\n collectionAddress,\n }) => {\n return getOfCollection({\n collectionAddress,\n chainId: this.chainId,\n httpClient: this.httpClient,\n });\n };\n}\n\nexport { ZORA_API_BASE, PremintAPIClient };\n","import {\n Address,\n encodeAbiParameters,\n parseAbiParameters,\n zeroAddress,\n Account,\n SimulateContractParameters,\n} from \"viem\";\nimport {\n erc20MinterABI,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport { zora721Abi, zora1155LegacyAbi } from \"src/constants\";\nimport {\n GenericTokenIdTypes,\n SimulateContractParametersWithAccount,\n} from \"src/types\";\nimport { makeContractParameters, mintRecipientOrAccount } from \"src/utils\";\nimport { MintCosts, SaleStrategies, isErc20SaleStrategy } from \"./types\";\nimport { MakeMintParametersArgumentsBase } from \"./types\";\n\nimport { contractSupportsNewMintFunction } from \"./utils\";\nimport { OnchainSalesConfigAndTokenInfo } from \"./types\";\n\nexport function makeOnchainMintCall({\n token,\n mintParams,\n}: {\n token: OnchainSalesConfigAndTokenInfo;\n mintParams: Omit<MakeMintParametersArgumentsBase, \"tokenContract\">;\n}): SimulateContractParametersWithAccount {\n if (token.mintType === \"721\") {\n return makePrepareMint721TokenParams({\n salesConfigAndTokenInfo: token,\n tokenContract: token.contract.address,\n ...mintParams,\n });\n }\n\n return makePrepareMint1155TokenParams({\n salesConfigAndTokenInfo: token,\n tokenContract: token.contract.address,\n tokenId: token.tokenId!,\n ...mintParams,\n });\n}\n\nexport type MintableParameters = Pick<\n OnchainSalesConfigAndTokenInfo,\n \"contractVersion\" | \"mintFeePerQuantity\" | \"salesConfig\"\n>;\n\nexport function makePrepareMint1155TokenParams({\n tokenContract: tokenContract,\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n mintComment,\n mintReferral,\n mintRecipient,\n quantityToMint,\n}: {\n salesConfigAndTokenInfo: MintableParameters;\n tokenId: GenericTokenIdTypes;\n} & Pick<\n MakeMintParametersArgumentsBase,\n | \"minterAccount\"\n | \"tokenContract\"\n | \"mintComment\"\n | \"mintReferral\"\n | \"quantityToMint\"\n | \"mintRecipient\"\n>): SimulateContractParameters<any, any, any, any, any, Address | Account> {\n const mintQuantity = BigInt(quantityToMint || 1);\n\n const mintTo = mintRecipientOrAccount({ mintRecipient, minterAccount });\n\n const saleType = salesConfigAndTokenInfo.salesConfig.saleType;\n\n if (saleType === \"fixedPrice\") {\n return makeEthMintCall({\n mintComment,\n minterAccount,\n mintQuantity,\n mintReferral,\n mintTo,\n salesConfigAndTokenInfo,\n tokenContract,\n tokenId,\n });\n }\n\n if (saleType === \"erc20\") {\n return makeContractParameters({\n abi: erc20MinterABI,\n functionName: \"mint\",\n account: minterAccount,\n address: salesConfigAndTokenInfo.salesConfig.address,\n /* args: mintTo, quantity, tokenAddress, tokenId, totalValue, currency, mintReferral, comment */\n args: [\n mintTo,\n mintQuantity,\n tokenContract,\n BigInt(tokenId),\n salesConfigAndTokenInfo.salesConfig.pricePerToken * mintQuantity,\n salesConfigAndTokenInfo.salesConfig.currency,\n mintReferral || zeroAddress,\n mintComment || \"\",\n ],\n });\n }\n\n throw new Error(\"Unsupported sale type\");\n}\n\nfunction makePrepareMint721TokenParams({\n salesConfigAndTokenInfo,\n minterAccount,\n tokenContract,\n mintComment,\n mintReferral,\n mintRecipient,\n quantityToMint,\n}: {\n salesConfigAndTokenInfo: MintableParameters;\n} & Pick<\n MakeMintParametersArgumentsBase,\n | \"minterAccount\"\n | \"tokenContract\"\n | \"mintComment\"\n | \"mintReferral\"\n | \"quantityToMint\"\n | \"mintRecipient\"\n>): SimulateContractParametersWithAccount {\n const actualQuantityToMint = BigInt(quantityToMint || 1);\n const mintValue = parseMintCosts({\n mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: actualQuantityToMint,\n }).totalCostEth;\n\n return makeContractParameters({\n abi: zora721Abi,\n address: tokenContract,\n account: minterAccount,\n functionName: \"mintWithRewards\",\n value: mintValue,\n args: [\n mintRecipientOrAccount({ mintRecipient, minterAccount }),\n actualQuantityToMint,\n mintComment || \"\",\n mintReferral || zeroAddress,\n ],\n });\n}\n\nfunction makeEthMintCall({\n tokenContract,\n tokenId,\n salesConfigAndTokenInfo,\n minterAccount,\n mintComment,\n mintReferral,\n mintQuantity,\n mintTo,\n}: {\n minterAccount: Account | Address;\n tokenContract: Address;\n mintTo: Address;\n salesConfigAndTokenInfo: MintableParameters;\n tokenId: GenericTokenIdTypes;\n mintQuantity: bigint;\n mintComment?: string;\n mintReferral?: Address;\n}): SimulateContractParametersWithAccount {\n const mintValue = parseMintCosts({\n mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: mintQuantity,\n }).totalCostEth;\n\n const minterArguments = encodeAbiParameters(\n parseAbiParameters(\"address, string\"),\n [mintTo, mintComment || \"\"],\n );\n\n // if based on contract version it has the new mint function,\n // call the new mint function.\n if (\n contractSupportsNewMintFunction(salesConfigAndTokenInfo.contractVersion)\n ) {\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"mint\",\n account: minterAccount,\n value: mintValue,\n address: tokenContract,\n args: [\n salesConfigAndTokenInfo.salesConfig.address,\n BigInt(tokenId),\n mintQuantity,\n mintReferral ? [mintReferral] : [],\n minterArguments,\n ],\n });\n }\n\n // otherwise call the deprecated mint function\n return makeContractParameters({\n abi: zora1155LegacyAbi,\n functionName: \"mintWithRewards\",\n account: minterAccount,\n value: mintValue,\n address: tokenContract,\n /* args: minter, tokenId, quantity, minterArguments, mintReferral */\n args: [\n salesConfigAndTokenInfo.salesConfig.address,\n BigInt(tokenId),\n mintQuantity,\n minterArguments,\n mintReferral || zeroAddress,\n ],\n });\n}\n\nexport function parseMintCosts({\n salesConfig,\n mintFeePerQuantity,\n quantityToMint,\n}: {\n salesConfig: SaleStrategies;\n mintFeePerQuantity: bigint;\n quantityToMint: bigint;\n}): MintCosts {\n const mintFeeForTokens = mintFeePerQuantity * quantityToMint;\n\n const tokenPurchaseCost = BigInt(salesConfig.pricePerToken) * quantityToMint;\n\n const totalPurchaseCostCurrency = isErc20SaleStrategy(salesConfig)\n ? salesConfig.currency\n : undefined;\n\n const totalPurchaseCostEth = totalPurchaseCostCurrency\n ? 0n\n : tokenPurchaseCost;\n\n return {\n mintFee: mintFeeForTokens,\n totalPurchaseCost: tokenPurchaseCost,\n totalPurchaseCostCurrency,\n totalCostEth: mintFeeForTokens + totalPurchaseCostEth,\n };\n}\n","import * as semver from \"semver\";\nexport const contractSupportsNewMintFunction = (\n contractVersion?: string | null,\n) => {\n if (!contractVersion) {\n return false;\n }\n\n // Try force-convert version format to semver format\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n return semver.gte(semVerContractVersion, \"2.9.0\");\n};\n","import { IPremintGetter } from \"src/premint/premint-api-client\";\nimport {\n ContractInfo,\n Erc20Approval,\n GetMintCostsParameters,\n GetMintParameters,\n GetMintsOfContractParameters,\n IOnchainMintGetter,\n MintParametersBase,\n MintableReturn,\n OnchainSalesConfigAndTokenInfo,\n PremintSalesConfigAndTokenInfo,\n PrepareMint,\n is1155Mint,\n isOnChainMint,\n} from \"./types\";\nimport { Address, zeroAddress } from \"viem\";\nimport {\n getPremintMintCostsWithUnknownTokenPrice,\n getPremintMintFee,\n} from \"src/premint/preminter\";\nimport {\n PremintFromApi,\n isPremintConfigV1,\n isPremintConfigV2,\n} from \"src/premint/conversions\";\nimport { makeOnchainMintCall, parseMintCosts } from \"./mint-transactions\";\nimport { buildPremintMintCall } from \"src/premint/premint-client\";\nimport { IPublicClient } from \"src/types\";\n\nexport async function getMint({\n params,\n mintGetter,\n premintGetter,\n publicClient,\n}: {\n params: GetMintParameters;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n}): Promise<MintableReturn> {\n const { tokenContract } = params;\n if (isOnChainMint(params)) {\n const tokenId = is1155Mint(params) ? params.tokenId : undefined;\n const result = await mintGetter.getMintable({\n tokenId,\n tokenAddress: tokenContract,\n preferredSaleType: params.preferredSaleType,\n });\n\n return toMintableReturn(result);\n }\n\n const premint = await premintGetter.get({\n collectionAddress: tokenContract,\n uid: params.uid,\n });\n\n const mintFee = await getPremintMintFee({\n publicClient,\n tokenContract: tokenContract,\n });\n\n return toPremintMintReturn({ premint, mintFee });\n}\nexport async function getPremintsOfCollectionWithTokenIds({\n premintGetter,\n mintGetter,\n tokenContract,\n}: {\n premintGetter: IPremintGetter;\n mintGetter: IOnchainMintGetter;\n tokenContract: Address;\n}) {\n const { collection, premints } = await premintGetter.getOfCollection({\n collectionAddress: tokenContract,\n });\n\n const premintUidsAndTokenIds = await mintGetter.getContractPremintTokenIds({\n tokenAddress: tokenContract,\n });\n\n const premintsWithTokenId = premints.map((premint) => ({\n ...premint,\n tokenId: premintUidsAndTokenIds.find(\n ({ uid }) => uid === premint.premint.premintConfig.uid,\n )?.tokenId,\n }));\n\n return {\n collection: collection,\n premints: premintsWithTokenId,\n };\n}\n\nexport async function getMintsOfContract({\n params,\n mintGetter,\n premintGetter,\n publicClient,\n}: {\n params: GetMintsOfContractParameters;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n}): Promise<{ contract?: ContractInfo; tokens: MintableReturn[] }> {\n const onchainMints = (\n await mintGetter.getContractMintable({\n tokenAddress: params.tokenContract,\n })\n ).map(toMintableReturn);\n\n const offchainMints = await getPremintsOfContractMintable({\n mintGetter,\n premintGetter,\n publicClient,\n params: {\n tokenContract: params.tokenContract,\n },\n });\n\n const tokens = [...onchainMints, ...offchainMints];\n\n return {\n tokens: tokens,\n contract: tokens[0]?.token.contract,\n };\n}\n\nexport async function getMintCosts({\n params,\n mintGetter,\n premintGetter,\n publicClient,\n}: {\n params: GetMintCostsParameters;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n}) {\n const { quantityMinted: quantityToMint, collection } = params;\n if (isOnChainMint(params)) {\n const tokenId = is1155Mint(params) ? params.tokenId : undefined;\n const salesConfigAndTokenInfo = await mintGetter.getMintable({\n tokenId,\n tokenAddress: collection,\n });\n\n return parseMintCosts({\n mintFeePerQuantity: salesConfigAndTokenInfo.mintFeePerQuantity,\n salesConfig: salesConfigAndTokenInfo.salesConfig,\n quantityToMint: BigInt(quantityToMint),\n });\n }\n\n return getPremintMintCostsWithUnknownTokenPrice({\n premintGetter,\n publicClient: publicClient,\n quantityToMint: BigInt(quantityToMint),\n uid: params.uid,\n tokenContract: collection,\n });\n}\n\nasync function getPremintsOfContractMintable({\n mintGetter,\n premintGetter,\n publicClient,\n params,\n}: {\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n publicClient: IPublicClient;\n params: { tokenContract: Address };\n}): Promise<MintableReturn[]> {\n const { premints, collection } = await getPremintsOfCollectionWithTokenIds({\n mintGetter,\n premintGetter,\n tokenContract: params.tokenContract,\n });\n\n const offChainPremints = premints.filter(\n (premint) =>\n // if premint's uid is not in the list of uids from the subgraph, it is offchain\n typeof premint.tokenId === \"undefined\",\n );\n\n if (offChainPremints.length === 0) return [];\n\n const mintFee = await getPremintMintFee({\n publicClient,\n tokenContract: params.tokenContract,\n });\n\n return offChainPremints.map((premint) => {\n return toPremintMintReturn({\n premint: {\n premint: premint.premint,\n // todo: fix when api returns signer\n signer: zeroAddress,\n collection,\n collectionAddress: params.tokenContract,\n signature: premint.signature,\n },\n mintFee,\n });\n });\n}\n\n/** Parsing */\n\nfunction parsePremint({\n premint,\n mintFee,\n}: {\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\"\n >;\n mintFee: bigint;\n}): PremintSalesConfigAndTokenInfo {\n if (\n isPremintConfigV1(premint.premint) ||\n isPremintConfigV2(premint.premint)\n ) {\n return {\n creator: premint.signer,\n maxSupply: premint.premint.premintConfig.tokenConfig.maxSupply,\n mintFeePerQuantity: mintFee,\n mintType: \"premint\",\n uid: premint.premint.premintConfig.uid,\n contract: {\n address: premint.collectionAddress,\n name: premint.collection!.contractName,\n URI: premint.collection!.contractURI,\n },\n tokenURI: premint.premint.premintConfig.tokenConfig.tokenURI,\n totalMinted: 0n,\n salesConfig: {\n duration: premint.premint.premintConfig.tokenConfig.mintDuration,\n maxTokensPerAddress:\n premint.premint.premintConfig.tokenConfig.maxTokensPerAddress,\n pricePerToken: premint.premint.premintConfig.tokenConfig.pricePerToken,\n saleType: \"premint\",\n },\n };\n }\n\n throw new Error(\"Invalid premint config version\");\n}\n\nconst makeOnchainPrepareMint =\n (result: OnchainSalesConfigAndTokenInfo): PrepareMint =>\n (params: MintParametersBase) => ({\n parameters: makeOnchainMintCall({ token: result, mintParams: params }),\n erc20Approval: getRequiredErc20Approvals(params, result),\n costs: parseMintCosts({\n salesConfig: result.salesConfig,\n quantityToMint: BigInt(params.quantityToMint),\n mintFeePerQuantity: result.mintFeePerQuantity,\n }),\n });\n\nfunction toMintableReturn(\n result: OnchainSalesConfigAndTokenInfo,\n): MintableReturn {\n return { token: result, prepareMint: makeOnchainPrepareMint(result) };\n}\n\nconst makePremintPrepareMint =\n (\n mintable: PremintSalesConfigAndTokenInfo,\n mintFee: bigint,\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\" | \"signature\"\n >,\n ): PrepareMint =>\n (params: MintParametersBase) => ({\n parameters: buildPremintMintCall({\n mintArguments: params,\n mintFee,\n premint,\n }),\n costs: parseMintCosts({\n mintFeePerQuantity: mintFee,\n quantityToMint: BigInt(params.quantityToMint),\n salesConfig: mintable.salesConfig,\n }),\n });\n\nfunction toPremintMintReturn({\n premint,\n mintFee,\n}: {\n premint: Pick<\n PremintFromApi,\n \"premint\" | \"signer\" | \"collectionAddress\" | \"collection\" | \"signature\"\n >;\n mintFee: bigint;\n}): MintableReturn {\n const mintable = parsePremint({ premint, mintFee });\n\n return {\n token: mintable,\n prepareMint: makePremintPrepareMint(mintable, mintFee, premint),\n };\n}\nfunction getRequiredErc20Approvals(\n params: MintParametersBase,\n result: OnchainSalesConfigAndTokenInfo,\n): Erc20Approval | undefined {\n if (result.salesConfig.saleType !== \"erc20\") return undefined;\n\n return {\n quantity: result.salesConfig.pricePerToken * BigInt(params.quantityToMint),\n approveTo: result.salesConfig.address,\n erc20: result.salesConfig.currency,\n };\n}\n","import { Address, Account, SimulateContractParameters } from \"viem\";\nimport { IPublicClient } from \"src/types\";\nimport {\n GetMintParameters,\n IOnchainMintGetter,\n MintCosts,\n PrepareMintReturn,\n SaleType,\n} from \"./types\";\nimport {\n MakeMintParametersArguments,\n Make1155MintArguments,\n Make721MintArguments,\n GetMintCostsParameters,\n is1155Mint,\n} from \"./types\";\nimport { IPremintGetter } from \"src/premint/premint-api-client\";\n\nimport { makeOnchainMintCall } from \"./mint-transactions\";\nimport { getMint, getMintCosts, getMintsOfContract } from \"./mint-queries\";\n\nclass MintError extends Error {}\nclass MintInactiveError extends Error {}\n\nexport const Errors = {\n MintError,\n MintInactiveError,\n};\n\nexport class MintClient {\n private readonly publicClient: IPublicClient;\n private readonly mintGetter: IOnchainMintGetter;\n private readonly premintGetter: IPremintGetter;\n\n constructor({\n publicClient,\n premintGetter,\n mintGetter,\n }: {\n publicClient: IPublicClient;\n premintGetter: IPremintGetter;\n mintGetter: IOnchainMintGetter;\n }) {\n this.publicClient = publicClient;\n this.mintGetter = mintGetter;\n this.premintGetter = premintGetter;\n }\n\n /**\n * Returns the parameters needed to prepare a transaction mint a token.\n * Works with premint, onchain 1155, and onchain 721.\n *\n * @param parameters - Parameters for collecting the token {@link MakeMintParametersArguments}\n * @returns Parameters for simulating/executing the mint transaction, any necessary erc20 approval, and costs to mint\n */\n async mint(\n parameters: MakeMintParametersArguments,\n ): Promise<PrepareMintReturn> {\n return mint({\n parameters,\n publicClient: this.publicClient,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n });\n }\n\n /**\n * Gets an 1155, 721, or premint, and returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Token to get {@link GetMintParameters}\n * @Returns Information about the mint and a function to build a mint transaction {@link MintableReturn}\n */\n async get(parameters: GetMintParameters) {\n return getMint({\n params: parameters,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Gets onchain and premint tokens of an 1155 contract. For each token returns both information about it, and a function\n * that can be used to build a mint transaction for a quantity of items to mint.\n * @param parameters - Contract address to get tokens for {@link GetMintsOfContractParameters}\n * @Returns Array of tokens, each containing information about the token and a function to build a mint transaction.\n */\n async getOfContract(params: {\n tokenContract: Address;\n preferredSaleType?: SaleType;\n }) {\n return getMintsOfContract({\n params,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n\n /**\n * Gets the costs to mint the quantity of tokens specified for a mint.\n * @param parameters - Parameters for the mint {@link GetMintCostsParameters}\n * @returns Costs to mint the quantity of tokens specified\n */\n async getMintCosts(parameters: GetMintCostsParameters): Promise<MintCosts> {\n return getMintCosts({\n params: parameters,\n mintGetter: this.mintGetter,\n premintGetter: this.premintGetter,\n publicClient: this.publicClient,\n });\n }\n}\n\nasync function mint({\n parameters,\n publicClient,\n mintGetter,\n premintGetter,\n}: {\n parameters: MakeMintParametersArguments;\n publicClient: IPublicClient;\n mintGetter: IOnchainMintGetter;\n premintGetter: IPremintGetter;\n}): Promise<PrepareMintReturn> {\n const { prepareMint } = await getMint({\n params: parameters,\n mintGetter,\n premintGetter,\n publicClient,\n });\n\n return prepareMint({\n minterAccount: parameters.minterAccount,\n quantityToMint: parameters.quantityToMint,\n firstMinter: parameters.firstMinter,\n mintComment: parameters.mintComment,\n mintRecipient: parameters.mintRecipient,\n mintReferral: parameters.mintReferral,\n });\n}\n\nexport async function collectOnchain({\n chainId,\n mintGetter,\n ...parameters\n}: (Make1155MintArguments | Make721MintArguments) & {\n mintGetter: IOnchainMintGetter;\n chainId: number;\n}): Promise<\n SimulateContractParameters<any, any, any, any, any, Account | Address>\n> {\n const { tokenContract: tokenContract, preferredSaleType: saleType } =\n parameters;\n const tokenId = is1155Mint(parameters) ? parameters.tokenId : undefined;\n const salesConfigAndTokenInfo = await mintGetter.getMintable({\n tokenId,\n tokenAddress: tokenContract,\n preferredSaleType: saleType,\n });\n\n return makeOnchainMintCall({\n mintParams: parameters,\n token: salesConfigAndTokenInfo,\n });\n}\n","import {\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\nimport type {\n Account,\n Address,\n Hex,\n PublicClient,\n SimulateContractParameters,\n TransactionReceipt,\n} from \"viem\";\nimport { decodeEventLog } from \"viem\";\nimport { makeContractParameters } from \"src/utils\";\nimport { getContractInfo } from \"./contract-setup\";\nimport { ContractType, CreateNew1155Params, New1155Token } from \"./types\";\nimport { constructCreate1155TokenCalls } from \"./token-setup\";\n\n// Default royalty bps\nconst ROYALTY_BPS_DEFAULT = 1000;\n\nexport const getTokenIdFromCreateReceipt = (\n receipt: TransactionReceipt,\n): bigint | undefined => {\n for (const data of receipt.logs) {\n try {\n const decodedLog = decodeEventLog({\n abi: zoraCreator1155ImplABI,\n eventName: \"SetupNewToken\",\n ...data,\n });\n if (decodedLog && decodedLog.eventName === \"SetupNewToken\") {\n return decodedLog.args.tokenId;\n }\n } catch (err: any) {}\n }\n};\n\ntype CreateNew1155TokenReturn = {\n parameters: SimulateContractParameters<\n any,\n any,\n any,\n any,\n any,\n Account | Address\n >;\n tokenSetupActions: Hex[];\n collectionAddress: Address;\n newTokenId: bigint;\n newToken: New1155Token;\n minter: Address;\n contractExists: boolean;\n};\n\nfunction makeCreateContractAndTokenCall({\n contractExists,\n contractAddress,\n contract,\n account,\n royaltyBPS,\n tokenSetupActions,\n fundsRecipient,\n}: {\n contractExists: boolean;\n contractAddress: Address;\n contract: ContractType;\n account: Address | Account;\n royaltyBPS?: number;\n fundsRecipient?: Address;\n tokenSetupActions: Hex[];\n}) {\n if (!contractAddress && typeof contract === \"string\") {\n throw new Error(\"Invariant: contract cannot be missing and an address\");\n }\n\n if (!contractExists) {\n if (typeof contract === \"string\") {\n throw new Error(\"Invariant: expected contract object\");\n }\n\n const accountAddress =\n typeof account === \"string\" ? account : account.address;\n return makeContractParameters({\n abi: zoraCreator1155FactoryImplABI,\n functionName: \"createContractDeterministic\",\n account,\n address: zoraCreator1155FactoryImplAddress[999],\n args: [\n contract.uri,\n contract.name,\n {\n // deprecated\n royaltyMintSchedule: 0,\n royaltyBPS: royaltyBPS || ROYALTY_BPS_DEFAULT,\n royaltyRecipient: fundsRecipient || accountAddress,\n },\n contract.defaultAdmin || accountAddress,\n tokenSetupActions,\n ],\n });\n }\n\n return makeContractParameters({\n abi: zoraCreator1155ImplABI,\n functionName: \"multicall\",\n account,\n address: contractAddress,\n args: [tokenSetupActions],\n });\n}\n\nexport class Create1155Client {\n private readonly chainId: number;\n private readonly publicClient: Pick<PublicClient, \"readContract\">;\n\n constructor({\n chainId,\n publicClient,\n }: {\n chainId: number;\n publicClient: Pick<PublicClient, \"readContract\">;\n }) {\n this.chainId = chainId;\n this.publicClient = publicClient;\n }\n\n async createNew1155Token(props: CreateNew1155Params) {\n return createNew1155Token({\n ...props,\n publicClient: this.publicClient,\n chainId: this.chainId,\n });\n }\n}\n\nasync function createNew1155Token({\n contract,\n account,\n getAdditionalSetupActions,\n token: tokenConfig,\n publicClient,\n chainId,\n}: CreateNew1155Params & {\n publicClient: Pick<PublicClient, \"readContract\">;\n chainId: number;\n}): Promise<CreateNew1155TokenReturn> {\n const { contractExists, contractAddress, nextTokenId, contractVersion } =\n await getContractInfo({\n publicClient,\n chainId: chainId,\n contract,\n account,\n });\n\n const {\n minter,\n newToken,\n setupActions: tokenSetupActions,\n } = constructCreate1155TokenCalls({\n chainId: chainId,\n ownerAddress: account,\n contractVersion,\n nextTokenId,\n ...tokenConfig,\n });\n\n const setupActions = getAdditionalSetupActions\n ? [\n ...getAdditionalSetupActions({\n tokenId: nextTokenId,\n contractAddress,\n }),\n ...tokenSetupActions,\n ]\n : tokenSetupActions;\n\n const request = makeCreateContractAndTokenCall({\n contractExists,\n contractAddress,\n contract,\n account,\n tokenSetupActions: setupActions,\n royaltyBPS: tokenConfig.royaltyBPS,\n fundsRecipient: tokenConfig.payoutRecipient,\n });\n\n return {\n parameters: request,\n tokenSetupActions,\n collectionAddress: contractAddress,\n contractExists,\n newTokenId: nextTokenId,\n newToken,\n minter,\n };\n}\n","import { Address, PublicClient } from \"viem\";\nimport { ContractType } from \"./types\";\nimport {\n contracts1155,\n zoraCreator1155FactoryImplABI,\n zoraCreator1155FactoryImplAddress,\n zoraCreator1155ImplABI,\n} from \"@zoralabs/protocol-deployments\";\n\ntype contracts1155Address = keyof typeof contracts1155.addresses;\nfunction new1155ContractVersion(chainId: number): string {\n const address = contracts1155.addresses[chainId as contracts1155Address];\n if (!address) {\n throw new Error(`No contract address for chainId ${chainId}`);\n }\n\n return address.CONTRACT_1155_IMPL_VERSION;\n}\n\nexport async function getContractInfo({\n publicClient,\n chainId,\n contract,\n account,\n}: {\n publicClient: Pick<PublicClient, \"readContract\">;\n chainId: number;\n contract: ContractType;\n // Account that is the creator of the contract\n account: Address;\n}): Promise<{\n contractExists: boolean;\n contractAddress: Address;\n contractVersion: string;\n nextTokenId: bigint;\n}> {\n // Check if contract exists either from metadata or the static address passed in.\n // If a static address is passed in, this fails if that contract does not exist.\n const contractAddress =\n typeof contract === \"string\"\n ? contract\n : await publicClient.readContract({\n abi: zoraCreator1155FactoryImplABI,\n // Since this address is deterministic we can hardcode a chain id safely here.\n address:\n zoraCreator1155FactoryImplAddress[\n chainId as keyof typeof zoraCreator1155FactoryImplAddress\n ],\n functionName: \"deterministicContractAddress\",\n args: [\n account,\n contract.uri,\n contract.name,\n contract.defaultAdmin || account,\n ],\n });\n\n let contractVersion: string;\n let contractExists: boolean;\n try {\n contractVersion = await publicClient.readContract({\n abi: zoraCreator1155ImplABI,\n address: contractAddress,\n functionName: \"contractVersion\",\n });\n contractExists = true;\n } catch (e: any) {\n // This logic branch is hit if the contract doesn't exist\n // falling back to contractExists to false.\n contractVersion = new1155ContractVersion(chainId);\n contractExists = false;\n }\n\n const nextTokenId = contractExists\n ? await publicClient.readContract({\n address: contractAddress,\n abi: zoraCreator1155ImplABI,\n functionName: \"nextTokenId\",\n })\n : 1n;\n\n return {\n contractExists,\n contractAddress,\n contractVersion,\n nextTokenId,\n };\n}\n","import {\n erc20MinterABI,\n erc20MinterAddress as erc20MinterAddresses,\n zoraCreator1155ImplABI,\n zoraCreatorFixedPriceSaleStrategyABI,\n zoraCreatorFixedPriceSaleStrategyAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { Address, encodeFunctionData, zeroAddress, Hex } from \"viem\";\nimport * as semver from \"semver\";\nimport {\n ContractProps,\n CreateNew1155TokenProps,\n New1155Token,\n SalesConfigParamsType,\n} from \"./types\";\nimport { OPEN_EDITION_MINT_SIZE } from \"src/constants\";\nimport { Concrete } from \"src/utils\";\n\nexport const PERMISSION_BITS = {\n MINTER: 2n ** 2n,\n};\n\ntype SetupMintersProps = {\n tokenId: bigint;\n chainId: number;\n fundsRecipient: Address;\n salesConfig: Concrete<SalesConfigParamsType>;\n};\n\n// Sales end forever amount (uint64 max)\n\nconst saleSettingsOrDefault = (\n saleSettings?: SalesConfigParamsType,\n): Concrete<SalesConfigParamsType> => {\n const SALE_END_FOREVER = 18446744073709551615n;\n\n const DEFAULT_SALE_SETTINGS: Concrete<SalesConfigParamsType> = {\n currency: zeroAddress,\n // Free Mint\n pricePerToken: 0n,\n // Sale start time – defaults to beginning of unix time\n saleStart: 0n,\n // This is the end of uint64, plenty of time\n saleEnd: SALE_END_FOREVER,\n // 0 Here means no limit\n maxTokensPerAddress: 0n,\n };\n return {\n ...DEFAULT_SALE_SETTINGS,\n ...saleSettings,\n };\n};\n\nfunction applyNew1155Defaults(\n props: CreateNew1155TokenProps,\n ownerAddress: Address,\n): New1155Token {\n const { payoutRecipient: fundsRecipient } = props;\n const fundsRecipientOrOwner =\n fundsRecipient && fundsRecipient !== zeroAddress\n ? fundsRecipient\n : ownerAddress;\n return {\n payoutRecipient: fundsRecipientOrOwner,\n createReferral: props.createReferral || zeroAddress,\n maxSupply:\n typeof props.maxSupply === \"undefined\"\n ? OPEN_EDITION_MINT_SIZE\n : BigInt(props.maxSupply),\n royaltyBPS: props.royaltyBPS || 1000,\n salesConfig: saleSettingsOrDefault(props.salesConfig),\n tokenMetadataURI: props.tokenMetadataURI,\n };\n}\n\ntype SetupErc20MinterProps = {\n chainId: number;\n tokenId: bigint;\n fundsRecipient: Address;\n} & Concrete<SalesConfigParamsType>;\n\nfunction setupErc20Minter({\n pricePerToken,\n chainId,\n tokenId: nextTokenId,\n currency,\n saleStart,\n saleEnd,\n maxTokensPerAddress: mintLimit,\n fundsRecipient,\n}: SetupErc20MinterProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n const erc20MinterAddress =\n erc20MinterAddresses[chainId as keyof typeof erc20MinterAddresses];\n if (!erc20MinterAddress)\n throw new Error(`ERC20Minter not deployed on chainId ${chainId}`);\n\n const erc20MinterApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [BigInt(nextTokenId), erc20MinterAddress, PERMISSION_BITS.MINTER],\n });\n\n const saleData = encodeFunctionData({\n abi: erc20MinterABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n saleStart: saleStart || BigInt(0),\n saleEnd: saleEnd || BigInt(0),\n maxTokensPerAddress: BigInt(mintLimit || 0),\n pricePerToken: pricePerToken,\n fundsRecipient,\n currency: currency,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), erc20MinterAddress, saleData],\n });\n\n return {\n minter: erc20MinterAddress,\n setupActions: [erc20MinterApproval, callSale],\n };\n}\n\ntype SetupFixedPriceMinterProps = {\n fundsRecipient: Address;\n tokenId: bigint;\n chainId: number;\n} & Concrete<Omit<SalesConfigParamsType, \"currency\">>;\n\nfunction setupFixedPriceMinter({\n pricePerToken: price,\n tokenId: nextTokenId,\n chainId,\n saleStart,\n saleEnd,\n maxTokensPerAddress: mintLimit,\n fundsRecipient,\n}: SetupFixedPriceMinterProps): { minter: Address; setupActions: Hex[] } {\n const fixedPriceStrategyAddress =\n zoraCreatorFixedPriceSaleStrategyAddress[\n chainId as keyof typeof zoraCreatorFixedPriceSaleStrategyAddress\n ];\n const fixedPriceApproval = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"addPermission\",\n args: [\n BigInt(nextTokenId),\n fixedPriceStrategyAddress,\n PERMISSION_BITS.MINTER,\n ],\n });\n\n const saleData = encodeFunctionData({\n abi: zoraCreatorFixedPriceSaleStrategyABI,\n functionName: \"setSale\",\n args: [\n BigInt(nextTokenId),\n {\n pricePerToken: price,\n saleStart: saleStart || BigInt(0),\n saleEnd: saleEnd || BigInt(0),\n maxTokensPerAddress: BigInt(mintLimit || 0),\n fundsRecipient,\n },\n ],\n });\n\n const callSale = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"callSale\",\n args: [BigInt(nextTokenId), fixedPriceStrategyAddress, saleData],\n });\n\n return {\n minter: fixedPriceStrategyAddress,\n setupActions: [fixedPriceApproval, callSale],\n };\n}\n\nexport function setupMinters({ salesConfig, ...rest }: SetupMintersProps): {\n minter: Address;\n setupActions: Hex[];\n} {\n if (!salesConfig) throw new Error(\"No sales config for token\");\n const { currency: currencyAddress } = salesConfig;\n\n if (currencyAddress === zeroAddress) {\n return setupFixedPriceMinter({\n ...salesConfig,\n ...rest,\n });\n } else {\n return setupErc20Minter({\n ...salesConfig,\n ...rest,\n });\n }\n}\n\nfunction buildSetupNewToken({\n tokenURI,\n maxSupply = OPEN_EDITION_MINT_SIZE,\n createReferral = zeroAddress,\n contractVersion,\n}: {\n tokenURI: string;\n maxSupply: bigint;\n createReferral: Address;\n contractVersion?: string;\n}): Hex {\n // If we're adding a new token to an existing contract which doesn't support\n // creator rewards, we won't have the 'setupNewTokenWithCreateReferral' method\n // available, so we need to check for that and use the fallback method instead.\n if (contractSupportsMintRewards(contractVersion, \"ERC1155\")) {\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewTokenWithCreateReferral\",\n args: [tokenURI, BigInt(maxSupply), createReferral],\n });\n }\n\n if (createReferral !== zeroAddress) {\n throw new Error(\n \"Contract does not support create referral, but one was provided\",\n );\n }\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"setupNewToken\",\n args: [tokenURI, BigInt(maxSupply)],\n });\n}\n\nfunction setupRoyaltyConfig({\n royaltyBPS,\n royaltyRecipient,\n nextTokenId,\n}: {\n royaltyBPS: number;\n royaltyRecipient: Address;\n nextTokenId: bigint;\n}) {\n if (royaltyBPS > 0 && royaltyRecipient != zeroAddress) {\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"updateRoyaltiesForToken\",\n args: [\n nextTokenId,\n {\n royaltyBPS,\n royaltyRecipient,\n royaltyMintSchedule: 0,\n },\n ],\n });\n }\n\n return null;\n}\n\nfunction makeAdminMintCall({\n ownerAddress,\n mintQuantity,\n nextTokenId,\n}: {\n ownerAddress: Address;\n mintQuantity?: number;\n nextTokenId: bigint;\n}) {\n if (!mintQuantity || mintQuantity <= 0 || !ownerAddress) {\n return null;\n }\n\n return encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"adminMint\",\n args: [ownerAddress, nextTokenId, BigInt(mintQuantity), zeroAddress],\n });\n}\n\nexport function constructCreate1155TokenCalls(\n props: CreateNew1155TokenProps &\n ContractProps & {\n ownerAddress: Address;\n chainId: number;\n },\n): {\n setupActions: `0x${string}`[];\n newToken: New1155Token;\n minter: Address;\n} {\n const {\n chainId,\n nextTokenId,\n mintToCreatorCount,\n ownerAddress,\n contractVersion,\n } = props;\n\n const new1155TokenPropsWithDefaults = applyNew1155Defaults(\n props,\n ownerAddress,\n );\n\n const verifyTokenIdExpected = encodeFunctionData({\n abi: zoraCreator1155ImplABI,\n functionName: \"assumeLastTokenIdMatches\",\n args: [nextTokenId - 1n],\n });\n\n const setupNewToken = buildSetupNewToken({\n tokenURI: new1155TokenPropsWithDefaults.tokenMetadataURI,\n maxSupply: new1155TokenPropsWithDefaults.maxSupply,\n createReferral: new1155TokenPropsWithDefaults.createReferral,\n contractVersion,\n });\n\n const royaltyConfig = setupRoyaltyConfig({\n royaltyBPS: new1155TokenPropsWithDefaults.royaltyBPS,\n royaltyRecipient: new1155TokenPropsWithDefaults.payoutRecipient,\n nextTokenId,\n });\n\n const { minter, setupActions: mintersSetup } = setupMinters({\n tokenId: nextTokenId,\n chainId,\n fundsRecipient: new1155TokenPropsWithDefaults.payoutRecipient,\n salesConfig: new1155TokenPropsWithDefaults.salesConfig,\n });\n\n const adminMintCall = makeAdminMintCall({\n ownerAddress,\n mintQuantity: mintToCreatorCount,\n nextTokenId,\n });\n\n const setupActions = [\n verifyTokenIdExpected,\n setupNewToken,\n ...mintersSetup,\n royaltyConfig,\n adminMintCall,\n ].filter((item) => item !== null) as `0x${string}`[];\n\n return {\n setupActions,\n minter,\n newToken: new1155TokenPropsWithDefaults,\n };\n}\n\nexport const contractSupportsMintRewards = (\n contractVersion?: string | null,\n contractStandard?: \"ERC721\" | \"ERC1155\",\n) => {\n if (!contractStandard || !contractVersion) {\n return false;\n }\n\n // Try force-convert version format to semver format\n const semVerContractVersion = semver.coerce(contractVersion)?.raw;\n if (!semVerContractVersion) return false;\n\n if (contractStandard === \"ERC1155\") {\n return semver.gte(semVerContractVersion, \"1.3.5\");\n } else {\n return semver.gte(semVerContractVersion, \"14.0.0\");\n }\n};\n","import { Address } from \"viem\";\n\nexport const getMintsAccountBalanceWithPriceQuery = (account: Address) => {\n const query = `\n query GetMintAccountBalances($account: String!) {\n mintAccountBalances(where: { account: $account }) {\n balance\n mintToken {\n id\n pricePerToken\n }\n }\n }\n `;\n\n return {\n query,\n variables: { account },\n };\n};\n\nexport type MintAccountBalance = {\n balance: string;\n mintToken: {\n id: string;\n pricePerToken: string;\n };\n};\n\nexport type MintAccountBalancesQueryResult = {\n mintTokenBalances: MintAccountBalance[];\n};\n\n/**\n * Given the result of a mint token balances query, selects the best MINTs to use to collect with that will satisfy the quantity,\n * by selecting the lowest priced MINTs first. Throws an error if not enough mints to collect with.\n */\nexport const selectMintsToCollectWithFromQueryResult = (\n mintAccountBalances: MintAccountBalance[],\n quantityToCollect: bigint,\n) => {\n const parsed = mintAccountBalances.map((r) => {\n return {\n tokenId: BigInt(r.mintToken.id),\n quantity: BigInt(r.balance),\n pricePerToken: BigInt(r.mintToken.pricePerToken),\n };\n });\n\n // now we want to find the best tokens to collect with, sorted by lowest price ascending\n // given its a bigint, lets not do a straight subtraction but sort based on result of comparison gt/lt:\n const sorted = parsed.sort((a, b) => {\n if (a.pricePerToken < b.pricePerToken) {\n return -1;\n }\n return 1;\n });\n\n // we need to get array of tokenIds and quantities to collect with:\n let remainingQuantity = quantityToCollect;\n const tokenIds: bigint[] = [];\n const quantities: bigint[] = [];\n\n while (remainingQuantity > 0) {\n const next = sorted.shift();\n if (!next) {\n throw new Error(\"Not enough MINTs to collect with\");\n }\n\n const quantityToUse =\n remainingQuantity > next.quantity ? next.quantity : remainingQuantity;\n tokenIds.push(next.tokenId);\n quantities.push(quantityToUse);\n remainingQuantity -= quantityToUse;\n }\n\n return {\n tokenIds,\n quantities,\n };\n};\n\n/**\n * Given an array of mint account balances, sums the balances.\n * @param mintAccountBalances\n * @returns Total balance\n */\nexport const sumBalances = (\n mintAccountBalances: Pick<MintAccountBalance, \"balance\">[],\n) => {\n return mintAccountBalances.reduce((acc, curr) => {\n return acc + BigInt(curr.balance);\n }, BigInt(0));\n};\n","import {\n mintsSafeTransferBatchTypedDataDefinition,\n mintsSafeTransferTypedDataDefinition,\n zoraMints1155Config,\n zoraMintsManagerImplABI,\n zoraMintsManagerImplAddress,\n zoraMintsManagerImplConfig,\n} from \"@zoralabs/protocol-deployments\";\nimport { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from \"abitype\";\nimport {\n PremintMintArguments,\n PremintConfigV2,\n} from \"@zoralabs/protocol-deployments\";\nimport { ContractCreationConfig } from \"src/preminter\";\nimport { makeContractParameters } from \"src/utils\";\nimport {\n Account,\n Address,\n ContractFunctionRevertedError,\n Hex,\n PublicClient,\n ReadContractParameters,\n SignTypedDataParameters,\n decodeErrorResult,\n encodeFunctionData,\n zeroAddress,\n} from \"viem\";\n\nconst addressOrAccountAddress = (address: Address | Account) =>\n typeof address === \"string\" ? address : address.address;\n\n/**\n * Constructs the parameters to mint a MINT with ETH on the ZoraMintsManager based on the price of the currently mintable ETH token.\n *\n * @param quantity - The number of mints to be created.\n * @param recipient - The address that will receive the mints.\n * @param chainId - The ID of the blockchain network where the contract is deployed.\n * @param pricePerMint - The price for each mint in ETH. Must match the price of the defualt mintable ETH token.\n * @param account - The address or account that is creating the mints.\n *\n * @returns The parameters for the `mintWithEth` function call, including the ABI, contract address, function name, arguments, value, and account.\n */\nexport const mintWithEthParams = ({\n quantity,\n recipient,\n chainId,\n pricePerMint,\n account,\n}: {\n quantity: bigint;\n recipient?: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n pricePerMint: bigint;\n account: Address | Account;\n}) =>\n makeContractParameters({\n abi: zoraMintsManagerImplConfig.abi,\n address: zoraMintsManagerImplConfig.address[chainId],\n functionName: \"mintWithEth\",\n args: [quantity, recipient || addressOrAccountAddress(account)],\n value: pricePerMint * quantity,\n account,\n });\n\nconst getPaidMintValue = (quantities: bigint[], pricePerMint?: bigint) => {\n if (!pricePerMint || pricePerMint === 0n) return;\n\n return quantities.reduce((a, b) => a + b, 0n) * pricePerMint;\n};\n\n/**\n * Constructs the parameters to get the total mints balance of an account on the ZoraMints1155 contract.\n * @param account - The address of the account to check the balance of.\n * @returns The parameters for the `balanceOfAccount` function call, including the ABI, contract address, function name, and arguments.\n */\nexport const mintsBalanceOfAccountParams = ({\n account,\n chainId,\n}: {\n account: Address;\n chainId: keyof typeof zoraMints1155Config.address;\n}): ReadContractParameters<\n typeof zoraMints1155Config.abi,\n \"balanceOfAccount\"\n> => ({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"balanceOfAccount\",\n args: [account],\n});\n\ntype CollectOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n zoraCreator1155Contract: Address;\n zoraCreator1155TokenId: bigint;\n minter: Address;\n mintArguments: CollectMintArguments;\n};\n\nexport const encodeCollectOnManager = ({\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n}: CollectOnManagerParams) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collect\",\n args: [\n zoraCreator1155Contract,\n minter,\n zoraCreator1155TokenId,\n mintArguments,\n ],\n });\n\n/**\n * Constructs parameters to collect a Zora Creator 1155 token using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the Zora Creator 1155 token with.\n * @param quantities - The quantities of each MINT token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n * @param account - The account that will be executing the transaction, and whos MINTs will be used\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param minter - The IMinter1155 used by the Zora Creator 1155 contract to mint the tokens\n * @param zoraCreator1155Contract - The Zora Creator 1155 contract address to mint tokens on\n * @param zoraCreator1155TokenId - The token id on the Zora Creator contract to mint\n */\nexport function collectWithMintsParams({\n tokenIds,\n quantities,\n chainId,\n paidMintPricePerToken,\n account,\n mintArguments,\n minter,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n}: {\n paidMintValue?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n paidMintPricePerToken?: bigint;\n account: Address | Account;\n} & CollectOnManagerParams) {\n const call = encodeCollectOnManager({\n tokenIds,\n quantities,\n zoraCreator1155Contract,\n zoraCreator1155TokenId,\n minter,\n mintArguments,\n });\n\n return makeContractParameters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n // if it is a paid mint, the aadditional value will be sent to the manager contract and forwarded to the creator 1155 contract\n // for the paid mint cost.\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\ntype PermitTransferBatchParameters = {\n tokenIds: bigint[];\n quantities: bigint[];\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n};\n\n/**\n * Get the current price to mint a MINT with ETH\n * @param publicClient - The public client to use to read the contract\n */\nexport function getMintsEthPrice({\n publicClient,\n}: {\n publicClient: PublicClient;\n}) {\n const chainId = publicClient.chain?.id as\n | keyof typeof zoraMintsManagerImplAddress\n | undefined;\n // if chain id is not in the zoraMintsManagerImplAddress, throw an error:\n if (!chainId || !zoraMintsManagerImplAddress[chainId]) {\n throw new Error(`Chain id ${chainId} not supported`);\n }\n\n return publicClient.readContract({\n abi: zoraMintsManagerImplABI,\n address: zoraMintsManagerImplAddress[chainId],\n functionName: \"getEthPrice\",\n });\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a batch transfer of MINTs.\n * @param tokenIds - The token ids to transfer.\n * @param quantities - The quantities of each token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns permit and corresponding typed data to sign.\n */\nexport function makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: PermitTransferBatchParameters) {\n const permit: PermitSafeTransferBatch = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenIds,\n quantities,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferBatchTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\n/**\n * Builds the permit data and typed data to sign for permitting a transfer of a MINTs for a single MINTs token id\n * @param tokenId - The token id to transfer.\n * @param quantity - The quantity of the token to transfer.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param to - The address to transfer the MINTs to.\n * @param nonce - Random nonce of the permit.\n * @param deadline - The deadline of the permit.\n * @param safeTransferData - The data to be sent with the transfer.\n * @returns\n */\nexport function makePermitTransferTypeData({\n tokenId,\n quantity,\n chainId,\n mintsOwner,\n to,\n nonce,\n deadline,\n safeTransferData,\n}: {\n tokenId: bigint;\n quantity: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n nonce: bigint;\n deadline: bigint;\n mintsOwner: Account | Address;\n to: Address;\n safeTransferData: Hex;\n}) {\n const permit: PermitSafeTransfer = {\n owner: typeof mintsOwner === \"string\" ? mintsOwner : mintsOwner.address,\n to,\n tokenId,\n quantity,\n deadline,\n nonce,\n safeTransferData,\n };\n\n const typedData: SignTypedDataParameters = {\n ...mintsSafeTransferTypedDataDefinition({\n chainId,\n message: permit,\n }),\n account: mintsOwner,\n };\n\n return {\n permit,\n typedData,\n };\n}\n\ntype PremintOnManagerParams = {\n tokenIds: bigint[];\n quantities: bigint[];\n contractCreationConfig: ContractCreationConfig;\n premintConfig: PremintConfigV2;\n premintSignature: Hex;\n mintArguments: PremintMintArguments;\n signerContract?: Address;\n};\n\nconst encodePremintOnManager = ({\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract = zeroAddress,\n}: Omit<PremintOnManagerParams, \"tokenIds\" | \"quantities\">) =>\n encodeFunctionData({\n abi: zoraMintsManagerImplConfig.abi,\n functionName: \"collectPremintV2\",\n args: [\n contractCreationConfig,\n premintConfig,\n premintSignature,\n mintArguments,\n signerContract,\n ],\n });\n\n/**\n * Builds a permit, and corresponding typed data to sign\n * to collect a premint or non-premint Using the mints an account owns.\n * @param mintsOwner - The account that owns the MINTs to be transferred (and the account that is to sign the permit)\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param deadline - The deadline of the permit.\n * @param nonce - Random nonce of the permit.\n * @param tokenIds - The mint token ids to to use\n * @param quantities - The quantities of each token to use to collect the Zora Creator 1155 token with. The sum of these quantities will be the total quantity of the Zora Creator 1155 token collected.\n * @param premint - If this is for a premint, the configuration of the premint to collect\n * @param collect - If this is for a non-premint, the configuration of the non-premint to collect\n * @returns\n */\nexport const makePermitToCollectPremintOrNonPremint = ({\n mintsOwner,\n chainId,\n deadline,\n tokenIds,\n // this quantity of MINTs will be used to collect premint\n // and will be burned. This same quantity is the quantity of\n // premint to collect.\n quantities,\n nonce,\n premint,\n collect,\n}: Omit<PermitTransferBatchParameters, \"to\" | \"safeTransferData\"> &\n (\n | {\n premint: Parameters<typeof encodePremintOnManager>[0];\n collect?: undefined;\n }\n | {\n premint?: undefined;\n collect: Parameters<typeof encodeCollectOnManager>[0];\n }\n )) => {\n let safeTransferData: Hex;\n\n if (premint) {\n safeTransferData = encodePremintOnManager(premint);\n } else if (collect) {\n safeTransferData = encodeCollectOnManager(collect);\n } else {\n throw new Error(\"Invalid operation\");\n }\n\n return makePermitTransferBatchAndTypeData({\n tokenIds,\n quantities,\n chainId,\n mintsOwner,\n nonce,\n deadline,\n safeTransferData,\n to: zoraMintsManagerImplConfig.address[chainId],\n });\n};\n\n/**\n * Constructs the parameters to collect a premint using MINTs an account owns.\n * @param tokenIds - The MINT token ids to use to collect the premint with.\n * @param quantities - The quantities of each MINT token to use to collect the premint with. The sum of these quantities will be the total quantity of the premint collected.\n * @param chainId - The ID of the chain where the MINTs are to be used\n * @param account - The account which's MINTs will be used to collect the premint.\n * @param contractCreationConfig - The premint contract creation config\n * @param premintConfig - The premint config\n * @param premintSignature - The signature for the premint\n * @param mintArguments - The minterArguments, mintRewardsRecipients, and mintComment\n * @param signerContract - The contract that signed the premint, if this is a smart wallet based premint\n * @param paidMintPricePerToken - If this is for a paid mint, this is the price in eth per each token to be collected\n */\nexport function collectPremintV2WithMintsParams({\n tokenIds,\n quantities,\n paidMintPricePerToken,\n account,\n chainId,\n ...rest\n}: {\n paidMintPricePerToken?: bigint;\n chainId: keyof typeof zoraMints1155Config.address;\n account: Address | Account;\n} & PremintOnManagerParams) {\n const call = encodePremintOnManager({\n ...rest,\n });\n\n return makeContractParameters({\n abi: zoraMints1155Config.abi,\n address: zoraMints1155Config.address[chainId],\n functionName: \"transferBatchToManagerAndCall\",\n args: [tokenIds, quantities, call],\n value: getPaidMintValue(quantities, paidMintPricePerToken),\n account,\n });\n}\n\nexport type PermitSafeTransferBatch = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransferBatch\"\n >[\"inputs\"]\n>[0];\n\nexport type PermitSafeTransfer = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<\n typeof zoraMints1155Config.abi,\n \"permitSafeTransfer\"\n >[\"inputs\"]\n>[0];\n\nexport type CollectMintArguments = AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<typeof zoraMintsManagerImplConfig.abi, \"collect\">[\"inputs\"]\n>[3];\n\n/**\n * Can be used to decode an a CallFailed error from the ZoraMints1155 contract when it has called a function on the ZoraMintsManager.\n * @param error\n * @returns\n */\nexport function decodeCallFailedError(error: ContractFunctionRevertedError) {\n if (error.data?.errorName !== \"CallFailed\")\n throw new Error(\"Not a CallFailed error\");\n\n const internalErrorData = error.data?.args?.[0] as Hex;\n\n return decodeErrorResult({\n abi: zoraMintsManagerImplABI,\n data: internalErrorData,\n });\n}\n","import {\n iUnwrapAndForwardActionABI,\n mintsEthUnwrapperAndCallerAddress,\n zoraMints1155Config,\n} from \"@zoralabs/protocol-deployments\";\nimport { Account, Address, Hex, encodeFunctionData } from \"viem\";\nimport { makePermitTransferBatchAndTypeData } from \"./mints-contracts\";\n\ntype CallWithEthParams = {\n address: Address;\n call: Hex;\n value: bigint;\n};\n\n/**\n * Build safeTransferData for the eth unwrapper and caller to call another\n * contract with eth unwrapped from MINTs.\n * @param addressToCall - the address of the contract to call\n * @param functionToCall - the function to call on the contract\n * @param valueToSend - the value to send to the contract\n */\nexport const makeCallWithEthSafeTransferData = ({\n address: addressToCall,\n call: functionToCall,\n value: valueToSend,\n}: CallWithEthParams) =>\n encodeFunctionData({\n abi: iUnwrapAndForwardActionABI,\n functionName: \"callWithEth\",\n args: [addressToCall, functionToCall, valueToSend],\n });\n\n/**\n * Makes a permit and corresponding typed data definition for unwrapping the eth value\n * of mints and forwarding it to another contract with a call. Any eth that is not forwarded\n * is refunded to the owner of the MINTs.\n * @param chainId - the id of the chain that the mints are on.\n * @param tokenIds - the token ids of the MINTs to unwrap\n * @param quantities - the quantities of each token id of the MINTs to unwrap\n * @param from - the address that owns the MINTs - this must be the address to sign the permit.\n * @param addressToCall - the address of the contract to call with the unwrapped eth.\n * @param callWithEth - the target contract, function, and value to call with the unwrapped eth. Any eth not forwarded is refunded to the owner of the MINTs.\n * @param safeTransferData - the safeTransferData to use for the call. If not provided, it will be generated from callWithEth.\n * @returns a permit and corresponding typed data definition to sign.\n */\nexport const unwrapAndForwardEthPermitAndTypedDataDefinition = ({\n chainId,\n tokenIds,\n quantities,\n from,\n callWithEth,\n safeTransferData,\n deadline,\n nonce,\n}: {\n tokenIds: bigint[];\n quantities: bigint[];\n chainId: keyof typeof zoraMints1155Config.address;\n // mints will be transferred from this address; must match the callers address\n from: Address | Account;\n deadline: bigint;\n nonce: bigint;\n} & (\n | {\n callWithEth: CallWithEthParams;\n safeTransferData?: undefined;\n }\n | {\n callWithEth?: undefined;\n safeTransferData: Hex;\n }\n)) =>\n makePermitTransferBatchAndTypeData({\n mintsOwner: from,\n chainId,\n deadline,\n tokenIds,\n quantities,\n safeTransferData:\n safeTransferData || makeCallWithEthSafeTransferData(callWithEth),\n to: mintsEthUnwrapperAndCallerAddress[chainId],\n nonce,\n });\n","import {\n PremintClient,\n getDataFromPremintReceipt,\n} from \"./premint/premint-client\";\nimport { Create1155Client } from \"./create/1155-create-helper\";\nimport { MintClient } from \"./mint/mint-client\";\nimport { ClientConfig } from \"./utils\";\nimport { IPremintAPI, PremintAPIClient } from \"./premint/premint-api-client\";\nimport { SubgraphMintGetter } from \"./mint/subgraph-mint-getter\";\nimport { IOnchainMintGetter } from \"./mint/types\";\n\nexport type CreatorClient = {\n createPremint: PremintClient[\"createPremint\"];\n updatePremint: PremintClient[\"updatePremint\"];\n deletePremint: PremintClient[\"deletePremint\"];\n create1155: Create1155Client[\"createNew1155Token\"];\n};\n\nexport type CollectorClient = {\n getPremint: PremintClient[\"getPremint\"];\n getCollectDataFromPremintReceipt: PremintClient[\"getDataFromPremintReceipt\"];\n mint: MintClient[\"mint\"];\n getMintCosts: MintClient[\"getMintCosts\"];\n getToken: MintClient[\"get\"];\n getTokensOfContract: MintClient[\"getOfContract\"];\n};\n\nexport type CreatorClientConfig = ClientConfig & {\n /** API for submitting and getting premints. Defaults to the Zora Premint API */\n premintApi?: IPremintAPI;\n};\n\n/**\n * Builds the sdk for creating/managing 1155 contracts and tokens\n *\n * @param clientConfig - Configuration for the client {@link CreatorClientConfig}\n * @returns CreatorClient {@link CreatorClient}\n * */\nexport function createCreatorClient(\n clientConfig: CreatorClientConfig,\n): CreatorClient {\n const premintClient = new PremintClient({\n chainId: clientConfig.chainId,\n publicClient: clientConfig.publicClient,\n premintApi:\n clientConfig.premintApi || new PremintAPIClient(clientConfig.chainId),\n });\n\n const create1155CreatorClient = new Create1155Client({\n chainId: clientConfig.chainId,\n publicClient: clientConfig.publicClient,\n });\n\n return {\n createPremint: (p) => premintClient.createPremint(p),\n updatePremint: (p) => premintClient.updatePremint(p),\n deletePremint: (p) => premintClient.deletePremint(p),\n create1155: (p) => create1155CreatorClient.createNew1155Token(p),\n };\n}\n\nexport type CollectorClientConfig = ClientConfig & {\n /** API for getting premints. Defaults to the Zora Premint API */\n premintGetter?: IPremintAPI;\n /** API for getting onchain mints. Defaults to the Zora Creator Subgraph */\n mintGetter?: IOnchainMintGetter;\n};\n\n/**\n * Builds the sdk for collecting Premints, 1155, and 721 tokens.\n *\n * @param clientConfig - Configuration for the client {@link CollectorClientConfig}\n * @returns CollectorClient {@link CollectorClient}\n */\nexport function createCollectorClient(\n params: CollectorClientConfig,\n): CollectorClient {\n const premintGetterToUse =\n params.premintGetter || new PremintAPIClient(params.chainId);\n const mintGetterToUse =\n params.mintGetter || new SubgraphMintGetter(params.chainId);\n const mintClient = new MintClient({\n publicClient: params.publicClient,\n premintGetter: premintGetterToUse,\n mintGetter: mintGetterToUse,\n });\n\n return {\n getPremint: (p) =>\n premintGetterToUse.get({\n collectionAddress: p.address,\n uid: p.uid,\n }),\n getCollectDataFromPremintReceipt: (p) =>\n getDataFromPremintReceipt(p, params.chainId),\n getToken: (p) => mintClient.get(p),\n getTokensOfContract: (p) => mintClient.getOfContract(p),\n mint: (p) => mintClient.mint(p),\n getMintCosts: (p) => mintClient.getMintCosts(p),\n };\n}\n","export type ArweaveURL = `ar://${string}`;\n\nexport function isArweaveURL(url: string | null | undefined): boolean {\n return url && typeof url === \"string\" ? url.startsWith(\"ar://\") : false;\n}\n","var encode_1 = encode;\nvar MSB = 128, REST = 127, MSBALL = ~REST, INT = Math.pow(2, 31);\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n while (num >= INT) {\n out[offset++] = num & 255 | MSB;\n num /= 128;\n }\n while (num & MSBALL) {\n out[offset++] = num & 255 | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n encode.bytes = offset - oldOffset + 1;\n return out;\n}\nvar decode = read;\nvar MSB$1 = 128, REST$1 = 127;\nfunction read(buf, offset) {\n var res = 0, offset = offset || 0, shift = 0, counter = offset, b, l = buf.length;\n do {\n if (counter >= l) {\n read.bytes = 0;\n throw new RangeError('Could not decode varint');\n }\n b = buf[counter++];\n res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1);\n read.bytes = counter - offset;\n return res;\n}\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\nvar length = function (value) {\n return value < N1 ? 1 : value < N2 ? 2 : value < N3 ? 3 : value < N4 ? 4 : value < N5 ? 5 : value < N6 ? 6 : value < N7 ? 7 : value < N8 ? 8 : value < N9 ? 9 : 10;\n};\nvar varint = {\n encode: encode_1,\n decode: decode,\n encodingLength: length\n};\nvar _brrp_varint = varint;\nexport default _brrp_varint;","import varint from '../vendor/varint.js';\nexport const decode = (data, offset = 0) => {\n const code = varint.decode(data, offset);\n return [\n code,\n varint.decode.bytes\n ];\n};\nexport const encodeTo = (int, target, offset = 0) => {\n varint.encode(int, target, offset);\n return target;\n};\nexport const encodingLength = int => {\n return varint.encodingLength(int);\n};","const empty = new Uint8Array(0);\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '');\nconst fromHex = hex => {\n const hexes = hex.match(/../g);\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty;\n};\nconst equals = (aa, bb) => {\n if (aa === bb)\n return true;\n if (aa.byteLength !== bb.byteLength) {\n return false;\n }\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false;\n }\n }\n return true;\n};\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array')\n return o;\n if (o instanceof ArrayBuffer)\n return new Uint8Array(o);\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);\n }\n throw new Error('Unknown type, must be binary type');\n};\nconst isBinary = o => o instanceof ArrayBuffer || ArrayBuffer.isView(o);\nconst fromString = str => new TextEncoder().encode(str);\nconst toString = b => new TextDecoder().decode(b);\nexport {\n equals,\n coerce,\n isBinary,\n fromHex,\n toHex,\n fromString,\n toString,\n empty\n};","import {\n coerce,\n equals as equalBytes\n} from '../bytes.js';\nimport * as varint from '../varint.js';\nexport const create = (code, digest) => {\n const size = digest.byteLength;\n const sizeOffset = varint.encodingLength(code);\n const digestOffset = sizeOffset + varint.encodingLength(size);\n const bytes = new Uint8Array(digestOffset + size);\n varint.encodeTo(code, bytes, 0);\n varint.encodeTo(size, bytes, sizeOffset);\n bytes.set(digest, digestOffset);\n return new Digest(code, size, digest, bytes);\n};\nexport const decode = multihash => {\n const bytes = coerce(multihash);\n const [code, sizeOffset] = varint.decode(bytes);\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset));\n const digest = bytes.subarray(sizeOffset + digestOffset);\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length');\n }\n return new Digest(code, size, digest, bytes);\n};\nexport const equals = (a, b) => {\n if (a === b) {\n return true;\n } else {\n return a.code === b.code && a.size === b.size && equalBytes(a.bytes, b.bytes);\n }\n};\nexport class Digest {\n constructor(code, size, digest, bytes) {\n this.code = code;\n this.size = size;\n this.digest = digest;\n this.bytes = bytes;\n }\n}","function base(ALPHABET, name) {\n if (ALPHABET.length >= 255) {\n throw new TypeError('Alphabet too long');\n }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) {\n throw new TypeError(x + ' is ambiguous');\n }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256);\n var iFACTOR = Math.log(256) / Math.log(BASE);\n function encode(source) {\n if (source instanceof Uint8Array);\n else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) {\n throw new TypeError('Expected Uint8Array');\n }\n if (source.length === 0) {\n return '';\n }\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n var size = (pend - pbegin) * iFACTOR + 1 >>> 0;\n var b58 = new Uint8Array(size);\n while (pbegin !== pend) {\n var carry = source[pbegin];\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n carry += 256 * b58[it1] >>> 0;\n b58[it1] = carry % BASE >>> 0;\n carry = carry / BASE >>> 0;\n }\n if (carry !== 0) {\n throw new Error('Non-zero carry');\n }\n length = i;\n pbegin++;\n }\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) {\n str += ALPHABET.charAt(b58[it2]);\n }\n return str;\n }\n function decodeUnsafe(source) {\n if (typeof source !== 'string') {\n throw new TypeError('Expected String');\n }\n if (source.length === 0) {\n return new Uint8Array();\n }\n var psz = 0;\n if (source[psz] === ' ') {\n return;\n }\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n var size = (source.length - psz) * FACTOR + 1 >>> 0;\n var b256 = new Uint8Array(size);\n while (source[psz]) {\n var carry = BASE_MAP[source.charCodeAt(psz)];\n if (carry === 255) {\n return;\n }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n carry += BASE * b256[it3] >>> 0;\n b256[it3] = carry % 256 >>> 0;\n carry = carry / 256 >>> 0;\n }\n if (carry !== 0) {\n throw new Error('Non-zero carry');\n }\n length = i;\n psz++;\n }\n if (source[psz] === ' ') {\n return;\n }\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch;\n }\n function decode(string) {\n var buffer = decodeUnsafe(string);\n if (buffer) {\n return buffer;\n }\n throw new Error(`Non-${ name } character`);\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n };\n}\nvar src = base;\nvar _brrp__multiformats_scope_baseX = src;\nexport default _brrp__multiformats_scope_baseX;","import basex from '../../vendor/base-x.js';\nimport { coerce } from '../bytes.js';\nclass Encoder {\n constructor(name, prefix, baseEncode) {\n this.name = name;\n this.prefix = prefix;\n this.baseEncode = baseEncode;\n }\n encode(bytes) {\n if (bytes instanceof Uint8Array) {\n return `${ this.prefix }${ this.baseEncode(bytes) }`;\n } else {\n throw Error('Unknown type, must be binary type');\n }\n }\n}\nclass Decoder {\n constructor(name, prefix, baseDecode) {\n this.name = name;\n this.prefix = prefix;\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character');\n }\n this.prefixCodePoint = prefix.codePointAt(0);\n this.baseDecode = baseDecode;\n }\n decode(text) {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${ JSON.stringify(text) }, ${ this.name } decoder only supports inputs prefixed with ${ this.prefix }`);\n }\n return this.baseDecode(text.slice(this.prefix.length));\n } else {\n throw Error('Can only multibase decode strings');\n }\n }\n or(decoder) {\n return or(this, decoder);\n }\n}\nclass ComposedDecoder {\n constructor(decoders) {\n this.decoders = decoders;\n }\n or(decoder) {\n return or(this, decoder);\n }\n decode(input) {\n const prefix = input[0];\n const decoder = this.decoders[prefix];\n if (decoder) {\n return decoder.decode(input);\n } else {\n throw RangeError(`Unable to decode multibase string ${ JSON.stringify(input) }, only inputs prefixed with ${ Object.keys(this.decoders) } are supported`);\n }\n }\n}\nexport const or = (left, right) => new ComposedDecoder({\n ...left.decoders || { [left.prefix]: left },\n ...right.decoders || { [right.prefix]: right }\n});\nexport class Codec {\n constructor(name, prefix, baseEncode, baseDecode) {\n this.name = name;\n this.prefix = prefix;\n this.baseEncode = baseEncode;\n this.baseDecode = baseDecode;\n this.encoder = new Encoder(name, prefix, baseEncode);\n this.decoder = new Decoder(name, prefix, baseDecode);\n }\n encode(input) {\n return this.encoder.encode(input);\n }\n decode(input) {\n return this.decoder.decode(input);\n }\n}\nexport const from = ({name, prefix, encode, decode}) => new Codec(name, prefix, encode, decode);\nexport const baseX = ({prefix, name, alphabet}) => {\n const {encode, decode} = basex(alphabet, name);\n return from({\n prefix,\n name,\n encode,\n decode: text => coerce(decode(text))\n });\n};\nconst decode = (string, alphabet, bitsPerChar, name) => {\n const codes = {};\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i;\n }\n let end = string.length;\n while (string[end - 1] === '=') {\n --end;\n }\n const out = new Uint8Array(end * bitsPerChar / 8 | 0);\n let bits = 0;\n let buffer = 0;\n let written = 0;\n for (let i = 0; i < end; ++i) {\n const value = codes[string[i]];\n if (value === undefined) {\n throw new SyntaxError(`Non-${ name } character`);\n }\n buffer = buffer << bitsPerChar | value;\n bits += bitsPerChar;\n if (bits >= 8) {\n bits -= 8;\n out[written++] = 255 & buffer >> bits;\n }\n }\n if (bits >= bitsPerChar || 255 & buffer << 8 - bits) {\n throw new SyntaxError('Unexpected end of data');\n }\n return out;\n};\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '=';\n const mask = (1 << bitsPerChar) - 1;\n let out = '';\n let bits = 0;\n let buffer = 0;\n for (let i = 0; i < data.length; ++i) {\n buffer = buffer << 8 | data[i];\n bits += 8;\n while (bits > bitsPerChar) {\n bits -= bitsPerChar;\n out += alphabet[mask & buffer >> bits];\n }\n }\n if (bits) {\n out += alphabet[mask & buffer << bitsPerChar - bits];\n }\n if (pad) {\n while (out.length * bitsPerChar & 7) {\n out += '=';\n }\n }\n return out;\n};\nexport const rfc4648 = ({name, prefix, bitsPerChar, alphabet}) => {\n return from({\n prefix,\n name,\n encode(input) {\n return encode(input, alphabet, bitsPerChar);\n },\n decode(input) {\n return decode(input, alphabet, bitsPerChar, name);\n }\n });\n};","import { baseX } from './base.js';\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n});\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n});","import { rfc4648 } from './base.js';\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n});\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n});\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n});\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n});\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n});\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n});\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n});\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n});\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n});","import * as varint from './varint.js';\nimport * as Digest from './hashes/digest.js';\nimport { base58btc } from './bases/base58.js';\nimport { base32 } from './bases/base32.js';\nimport { coerce } from './bytes.js';\nexport class CID {\n constructor(version, code, multihash, bytes) {\n this.code = code;\n this.version = version;\n this.multihash = multihash;\n this.bytes = bytes;\n this.byteOffset = bytes.byteOffset;\n this.byteLength = bytes.byteLength;\n this.asCID = this;\n this._baseCache = new Map();\n Object.defineProperties(this, {\n byteOffset: hidden,\n byteLength: hidden,\n code: readonly,\n version: readonly,\n multihash: readonly,\n bytes: readonly,\n _baseCache: hidden,\n asCID: hidden\n });\n }\n toV0() {\n switch (this.version) {\n case 0: {\n return this;\n }\n default: {\n const {code, multihash} = this;\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0');\n }\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0');\n }\n return CID.createV0(multihash);\n }\n }\n }\n toV1() {\n switch (this.version) {\n case 0: {\n const {code, digest} = this.multihash;\n const multihash = Digest.create(code, digest);\n return CID.createV1(this.code, multihash);\n }\n case 1: {\n return this;\n }\n default: {\n throw Error(`Can not convert CID version ${ this.version } to version 0. This is a bug please report`);\n }\n }\n }\n equals(other) {\n return other && this.code === other.code && this.version === other.version && Digest.equals(this.multihash, other.multihash);\n }\n toString(base) {\n const {bytes, version, _baseCache} = this;\n switch (version) {\n case 0:\n return toStringV0(bytes, _baseCache, base || base58btc.encoder);\n default:\n return toStringV1(bytes, _baseCache, base || base32.encoder);\n }\n }\n toJSON() {\n return {\n code: this.code,\n version: this.version,\n hash: this.multihash.bytes\n };\n }\n get [Symbol.toStringTag]() {\n return 'CID';\n }\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return 'CID(' + this.toString() + ')';\n }\n static isCID(value) {\n deprecate(/^0\\.0/, IS_CID_DEPRECATION);\n return !!(value && (value[cidSymbol] || value.asCID === value));\n }\n get toBaseEncodedString() {\n throw new Error('Deprecated, use .toString()');\n }\n get codec() {\n throw new Error('\"codec\" property is deprecated, use integer \"code\" property instead');\n }\n get buffer() {\n throw new Error('Deprecated .buffer property, use .bytes to get Uint8Array instead');\n }\n get multibaseName() {\n throw new Error('\"multibaseName\" property is deprecated');\n }\n get prefix() {\n throw new Error('\"prefix\" property is deprecated');\n }\n static asCID(value) {\n if (value instanceof CID) {\n return value;\n } else if (value != null && value.asCID === value) {\n const {version, code, multihash, bytes} = value;\n return new CID(version, code, multihash, bytes || encodeCID(version, code, multihash.bytes));\n } else if (value != null && value[cidSymbol] === true) {\n const {version, multihash, code} = value;\n const digest = Digest.decode(multihash);\n return CID.create(version, code, digest);\n } else {\n return null;\n }\n }\n static create(version, code, digest) {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported');\n }\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(`Version 0 CID must use dag-pb (code: ${ DAG_PB_CODE }) block encoding`);\n } else {\n return new CID(version, code, digest, digest.bytes);\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes);\n return new CID(version, code, digest, bytes);\n }\n default: {\n throw new Error('Invalid version');\n }\n }\n }\n static createV0(digest) {\n return CID.create(0, DAG_PB_CODE, digest);\n }\n static createV1(code, digest) {\n return CID.create(1, code, digest);\n }\n static decode(bytes) {\n const [cid, remainder] = CID.decodeFirst(bytes);\n if (remainder.length) {\n throw new Error('Incorrect length');\n }\n return cid;\n }\n static decodeFirst(bytes) {\n const specs = CID.inspectBytes(bytes);\n const prefixSize = specs.size - specs.multihashSize;\n const multihashBytes = coerce(bytes.subarray(prefixSize, prefixSize + specs.multihashSize));\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length');\n }\n const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);\n const digest = new Digest.Digest(specs.multihashCode, specs.digestSize, digestBytes, multihashBytes);\n const cid = specs.version === 0 ? CID.createV0(digest) : CID.createV1(specs.codec, digest);\n return [\n cid,\n bytes.subarray(specs.size)\n ];\n }\n static inspectBytes(initialBytes) {\n let offset = 0;\n const next = () => {\n const [i, length] = varint.decode(initialBytes.subarray(offset));\n offset += length;\n return i;\n };\n let version = next();\n let codec = DAG_PB_CODE;\n if (version === 18) {\n version = 0;\n offset = 0;\n } else if (version === 1) {\n codec = next();\n }\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${ version }`);\n }\n const prefixSize = offset;\n const multihashCode = next();\n const digestSize = next();\n const size = offset + digestSize;\n const multihashSize = size - prefixSize;\n return {\n version,\n codec,\n multihashCode,\n digestSize,\n multihashSize,\n size\n };\n }\n static parse(source, base) {\n const [prefix, bytes] = parseCIDtoBytes(source, base);\n const cid = CID.decode(bytes);\n cid._baseCache.set(prefix, source);\n return cid;\n }\n}\nconst parseCIDtoBytes = (source, base) => {\n switch (source[0]) {\n case 'Q': {\n const decoder = base || base58btc;\n return [\n base58btc.prefix,\n decoder.decode(`${ base58btc.prefix }${ source }`)\n ];\n }\n case base58btc.prefix: {\n const decoder = base || base58btc;\n return [\n base58btc.prefix,\n decoder.decode(source)\n ];\n }\n case base32.prefix: {\n const decoder = base || base32;\n return [\n base32.prefix,\n decoder.decode(source)\n ];\n }\n default: {\n if (base == null) {\n throw Error('To parse non base32 or base58btc encoded CID multibase decoder must be provided');\n }\n return [\n source[0],\n base.decode(source)\n ];\n }\n }\n};\nconst toStringV0 = (bytes, cache, base) => {\n const {prefix} = base;\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${ base.name } encoding`);\n }\n const cid = cache.get(prefix);\n if (cid == null) {\n const cid = base.encode(bytes).slice(1);\n cache.set(prefix, cid);\n return cid;\n } else {\n return cid;\n }\n};\nconst toStringV1 = (bytes, cache, base) => {\n const {prefix} = base;\n const cid = cache.get(prefix);\n if (cid == null) {\n const cid = base.encode(bytes);\n cache.set(prefix, cid);\n return cid;\n } else {\n return cid;\n }\n};\nconst DAG_PB_CODE = 112;\nconst SHA_256_CODE = 18;\nconst encodeCID = (version, code, multihash) => {\n const codeOffset = varint.encodingLength(version);\n const hashOffset = codeOffset + varint.encodingLength(code);\n const bytes = new Uint8Array(hashOffset + multihash.byteLength);\n varint.encodeTo(version, bytes, 0);\n varint.encodeTo(code, bytes, codeOffset);\n bytes.set(multihash, hashOffset);\n return bytes;\n};\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID');\nconst readonly = {\n writable: false,\n configurable: false,\n enumerable: true\n};\nconst hidden = {\n writable: false,\n enumerable: false,\n configurable: false\n};\nconst version = '0.0.0-dev';\nconst deprecate = (range, message) => {\n if (range.test(version)) {\n console.warn(message);\n } else {\n throw new Error(message);\n }\n};\nconst IS_CID_DEPRECATION = `CID.isCID(v) is deprecated and will be removed in the next major release.\nFollowing code pattern:\n\nif (CID.isCID(value)) {\n doSomethingWithCID(value)\n}\n\nIs replaced with:\n\nconst cid = CID.asCID(value)\nif (cid) {\n // Make sure to use cid instead of value\n doSomethingWithCID(cid)\n}\n`;","import { CID } from \"multiformats/cid\";\n\nexport type IPFSUrl = `ipfs://${string}`;\n\nexport function isCID(str: string | null | undefined): boolean {\n if (!str) return false;\n\n try {\n CID.parse(str);\n return true;\n } catch (e) {\n if (/^(bafy|Qm)/.test(str)) return true;\n return false;\n }\n}\n\nexport function normalizeIPFSUrl(\n url: string | null | undefined,\n): IPFSUrl | null {\n if (!url || typeof url !== \"string\") return null;\n\n // Handle urls wrapped in quotes\n url = url.replace(/\"/g, \"\");\n\n // Check if already a normalized IPFS url\n if (isNormalizedIPFSURL(url)) return url as IPFSUrl;\n\n // Check if url is a CID string\n if (isCID(url)) return `ipfs://${url}`;\n\n // If url is not either an ipfs gateway or protocol url\n if (!isIPFSUrl(url)) return null;\n\n // If url is already a gateway url, parse and normalize\n if (isGatewayIPFSUrl(url)) {\n // Replace leading double-slashes and parse URL\n const parsed = new URL(url.replace(/^\\/\\//, \"http://\"));\n // Remove IPFS from the URL\n // http://gateway/ipfs/<CID>?x=y#z -> http://gateway/<CID>?x=y#z\n parsed.pathname = parsed.pathname.replace(/^\\/ipfs\\//, \"\");\n // Remove the protocol and host from the URL\n // http://gateway/<CID>?x=y#z -> <CID>?x=y#z\n const cid = parsed\n .toString()\n .replace(`${parsed.protocol}//${parsed.host}/`, \"\");\n // Prepend ipfs protocol\n return `ipfs://${cid}`;\n }\n\n return null;\n}\n\nfunction isNormalizedIPFSURL(url: string | null | undefined): boolean {\n return url && typeof url === \"string\" ? url.startsWith(\"ipfs://\") : false;\n}\n\nfunction isGatewayIPFSUrl(url: string | null | undefined): boolean {\n if (url && typeof url === \"string\") {\n try {\n const parsed = new URL(url.replace(/^\"|'(.*)\"|'$/, \"$1\"));\n return (\n !isNormalizedIPFSURL(url) &&\n parsed &&\n parsed.pathname.startsWith(\"/ipfs/\")\n );\n } catch {\n return false;\n }\n }\n\n return false;\n}\n\nfunction isIPFSUrl(url: string | null | undefined): boolean {\n return url ? isNormalizedIPFSURL(url) || isGatewayIPFSUrl(url) : false;\n}\n\nexport function isNormalizeableIPFSUrl(\n url: string | null | undefined,\n): boolean {\n return url ? isIPFSUrl(url) || isCID(url) : false;\n}\n","import { isArweaveURL } from \"./arweave\";\nimport { isNormalizeableIPFSUrl, normalizeIPFSUrl } from \"./ipfs\";\n\nconst IPFS_GATEWAY = \"https://magic.decentralized-content.com\";\n\nconst ARWEAVE_GATEWAY = \"https://arweave.net\";\n\nexport function arweaveGatewayUrl(normalizedArweaveUrl: string | null) {\n if (!normalizedArweaveUrl || typeof normalizedArweaveUrl !== \"string\")\n return null;\n return normalizedArweaveUrl.replace(\"ar://\", `${ARWEAVE_GATEWAY}/`);\n}\n\nexport function ipfsGatewayUrl(url: string | null) {\n if (!url || typeof url !== \"string\") return null;\n const normalizedIPFSUrl = normalizeIPFSUrl(url);\n if (normalizedIPFSUrl) {\n return normalizedIPFSUrl.replace(\"ipfs://\", `${IPFS_GATEWAY}/ipfs/`);\n }\n return null;\n}\n\nexport function getFetchableUrl(uri: string | null | undefined): string | null {\n if (!uri || typeof uri !== \"string\") return null;\n\n // Prevent fetching from insecure URLs\n if (uri.startsWith(\"http://\")) return null;\n\n // If it is an IPFS HTTP or ipfs:// url\n if (isNormalizeableIPFSUrl(uri)) {\n // Return a fetchable gateway url\n return ipfsGatewayUrl(uri);\n }\n\n // If it is a ar:// url\n if (isArweaveURL(uri)) {\n // Return a fetchable gateway url\n return arweaveGatewayUrl(uri);\n }\n\n // If it is already a url (or blob or data-uri)\n if (/^(https|data|blob):/.test(uri)) {\n // Return the URI\n return uri;\n }\n\n return null;\n}\n","// text\nconst HTML = \"text/html\";\nconst MARKDOWN = \"text/markdown\";\nconst MARKDOWN_UTF8 = \"text/markdown; charset=utf-8\";\nconst TEXT_PLAIN_UTF8 = \"text/plain; charset=utf-8\";\nexport const TEXT_PLAIN = \"text/plain\";\nconst CSV = \"text/csv\";\nconst NUMBERS = \".numbers\";\nconst EXCEL = \".xlsx\";\nconst PDF = \"application/pdf\";\n\n// image\nconst JPG = \"image/jpg\";\nconst JPEG = \"image/jpeg\";\nconst PNG = \"image/png\";\nconst WEBP = \"image/webp\";\nconst SVG = \"image/svg+xml\";\nconst TIFF = \"image/tiff\";\nconst GIF = \"image/gif\";\n\nexport const isImage = (mimeType: string | null | undefined) => {\n if (!mimeType) return false;\n return [JPG, JPEG, PNG, WEBP, SVG, TIFF, GIF].includes(mimeType);\n};\n\nexport enum MediaType {\n CSV = \"CSV\",\n NUMBERS = \"NUMBERS\",\n EXCEL = \"EXCEL\",\n IMAGE = \"IMAGE\",\n VIDEO = \"VIDEO\",\n AUDIO = \"AUDIO\",\n TIFF = \"TIFF\",\n TEXT = \"TEXT\",\n PDF = \"PDF\",\n MODEL = \"MODEL\",\n HTML = \"HTML\",\n ZIP = \"ZIP\",\n UNKNOWN = \"UNKNOWN\",\n}\n\nexport const DEFAULT_THUMBNAIL_CID_HASHES: { [key: string]: string } = {\n [MediaType.AUDIO]:\n \"bafkreidir5laqi26ta6ivnpe2zpekgrfcyi4tb5x6vhwmwnledmzxshfb4\",\n [MediaType.VIDEO]:\n \"bafkreifm4edadl3j5luoyvw4p6elxeqd77la7bulee6vhq5gq4chfk32mu\",\n [MediaType.HTML]:\n \"bafkreifgvi6xfwqy2l6g45csyokejpaib52ee7zrw6etrxl2tas4xkkclq\",\n [MediaType.ZIP]:\n \"bafkreihe5rr5jbkwzegisjlhxbb7jw22xw5oilfmgd2re6tz6buo4pasdq\", // assuming all zip files are html directories\n [MediaType.TEXT]:\n \"bafkreiaez25nfgggzrnza2loxf6xueb2esm44pnyjyulwoslnipowrf56q\",\n default: \"bafkreihcoahllisbpb4eeypdwtm7go5uh275wxd7wf2tantpxlpjhviok4\",\n};\n\n// video\nconst MP4 = \"video/mp4\";\nconst QUICKTIME = \"video/quicktime\";\nconst M4V = \"video/x-m4v\";\nconst WEBM = \"video/webm\";\n\n// audio\nconst M4A = \"audio/x-m4a\";\nconst MPEG = \"audio/mpeg\";\nconst MP3 = \"audio/mp3\";\nconst WAV = \"audio/wav\";\nconst VND_WAV = \"audio/vnd.wav\";\nconst VND_WAVE = \"audio/vnd.wave\";\nconst WAVE = \"audio/wave\";\nconst X_WAV = \"audio/x-wav\";\nconst AIFF = \"audio/aiff\";\n\n// 3D\nconst GLTF = \"model/gltf+json\";\nconst GLB = \"model/gltf-binary\";\n// File extensions, as some files return '' as the mimetype\nconst GLTF_EXT = \".gltf\";\nconst GLB_EXT = \".glb\";\n\n// application\nexport const JSON_MIME_TYPE = \"application/json\";\nconst ZIP = \"application/zip\";\n\nconst mimeToMediaType = {\n [HTML]: MediaType.HTML,\n [JPG]: MediaType.IMAGE,\n [JPEG]: MediaType.IMAGE,\n [PNG]: MediaType.IMAGE,\n [WEBP]: MediaType.IMAGE,\n [SVG]: MediaType.IMAGE,\n [TIFF]: MediaType.TIFF,\n [GIF]: MediaType.IMAGE,\n [MP4]: MediaType.VIDEO,\n [WEBM]: MediaType.VIDEO,\n [QUICKTIME]: MediaType.VIDEO,\n [M4V]: MediaType.VIDEO,\n [MPEG]: MediaType.AUDIO,\n [MP3]: MediaType.AUDIO,\n [M4A]: MediaType.AUDIO,\n [VND_WAV]: MediaType.AUDIO,\n [VND_WAVE]: MediaType.AUDIO,\n [WAV]: MediaType.AUDIO,\n [WAVE]: MediaType.AUDIO,\n [X_WAV]: MediaType.AUDIO,\n [AIFF]: MediaType.AUDIO,\n [TEXT_PLAIN]: MediaType.TEXT,\n [TEXT_PLAIN_UTF8]: MediaType.TEXT,\n [MARKDOWN]: MediaType.TEXT,\n [MARKDOWN_UTF8]: MediaType.TEXT,\n [CSV]: MediaType.CSV,\n [NUMBERS]: MediaType.NUMBERS,\n [EXCEL]: MediaType.EXCEL,\n [PDF]: MediaType.PDF,\n [ZIP]: MediaType.ZIP,\n [GLTF]: MediaType.MODEL,\n [GLTF_EXT]: MediaType.MODEL,\n [GLB]: MediaType.MODEL,\n // GLTF returns 'application/json' as the mimetype,\n // and as the only JSON-encoded media we currently support,\n // we assume that if the mimetype is JSON, it's a GLTF\n [JSON_MIME_TYPE]: MediaType.MODEL,\n [GLB_EXT]: MediaType.MODEL,\n} as const;\n\n/** Return a MediaType for the given mime type. If mime type is unknown you can provide a filename as a fallback, where the type will be guessed based on extension. */\nexport function mimeTypeToMedia(mimeType?: string | null) {\n if (!mimeType) return MediaType.UNKNOWN;\n\n return (\n mimeToMediaType[mimeType as keyof typeof mimeToMediaType] ||\n MediaType.UNKNOWN\n );\n}\n\nexport async function getMimeType(uri?: string) {\n if (!uri) return uri;\n\n const res = await fetch(uri, { method: \"HEAD\" });\n let mimeType = res.headers.get(\"content-type\");\n return mimeType;\n}\n","import { getFetchableUrl } from \"./gateway\";\nimport {\n DEFAULT_THUMBNAIL_CID_HASHES,\n TEXT_PLAIN,\n getMimeType,\n isImage,\n mimeTypeToMedia,\n} from \"./mimeTypes\";\nimport {\n MakeMediaMetadataParams,\n MakeTextMetadataParams,\n TokenMetadataJson,\n} from \"./types\";\n\n/**\n * Takes properties for a text based nft and formats it as proper json metadata\n * for the token, which should be uploaded to IPFS.\n * @param parameters - The parameters to format into metadata {@link MakeTextMetadataParams}\n */\nexport const makeTextTokenMetadata = (\n parameters: MakeTextMetadataParams,\n): TokenMetadataJson => {\n const { name, textFileUrl, thumbnailUrl, attributes = [] } = parameters;\n\n const content = textFileUrl\n ? {\n mime: TEXT_PLAIN,\n uri: textFileUrl,\n }\n : null;\n\n const image = thumbnailUrl;\n const animation_url = textFileUrl;\n\n return {\n name,\n image,\n animation_url,\n content,\n attributes,\n };\n};\n\n/**\n * Takes properties for a media based nft (video, image, etc) and formats it as proper json metadata\n * for the token, which should be uploaded to IPFS.\n * @param parameters - The parameters to format into metadata {@link MakeMediaMetadataParams}\n */\nexport const makeMediaTokenMetadata = async ({\n name,\n description,\n attributes = [],\n mediaUrl,\n thumbnailUrl,\n}: MakeMediaMetadataParams): Promise<TokenMetadataJson> => {\n const contentUrl = mediaUrl;\n const fetchableContentUrl = getFetchableUrl(contentUrl);\n\n if (!fetchableContentUrl)\n throw new Error(`Content url (${contentUrl}) is not fetchable`);\n\n const mimeType = await getMimeType(fetchableContentUrl);\n const mediaType = mimeTypeToMedia(mimeType);\n\n let image: string | undefined = undefined;\n let animation_url: string | null = null;\n\n // If the media is an image, just set the image field\n // Otherwise we require a thumbnail, set image and animation_url\n if (isImage(mimeType)) {\n image = contentUrl;\n } else {\n image = thumbnailUrl;\n animation_url = mediaUrl;\n }\n\n // If no image determined, use a fallback placeholder\n if (!image)\n image = `ipfs://${\n DEFAULT_THUMBNAIL_CID_HASHES[mediaType] ||\n DEFAULT_THUMBNAIL_CID_HASHES.default\n }`;\n\n const content = contentUrl\n ? {\n mime: mimeType || \"application/octet-stream\",\n uri: contentUrl,\n }\n : null;\n\n return {\n name,\n description,\n image,\n animation_url,\n content,\n attributes,\n };\n};\n","import { TextMetadataFiles } from \"./types\";\n\nconst CHAR_LIMIT = 1111;\n\nconst wrapText = ({\n ctx,\n text,\n x,\n y,\n maxWidth,\n lineHeight,\n}: {\n ctx: CanvasRenderingContext2D;\n text: string;\n x: number;\n y: number;\n maxWidth: number;\n lineHeight: number;\n}) => {\n // Split text into words\n let words = text.replaceAll(\"\\n\", \" \\n \").split(/ +/);\n let line = \"\"; // This will store the text of the current line\n let testLine = \"\"; // This will store the text when we add a word, to test if it's too long\n let lineArray = []; // This is an array of lines, which the function will return\n\n for (var n = 0; n < words.length; n++) {\n // Measure text sizing\n testLine += `${words[n]} `;\n let metrics = ctx.measureText(testLine);\n let testWidth = metrics.width;\n // If the width of this test line is more than the max width\n if (words[n]?.includes(\"\\n\") || (testWidth > maxWidth && n > 0)) {\n // Then the line is finished, push the current line into \"lineArray\"\n lineArray.push({ text: line, x, y });\n // Start a new line\n y += lineHeight;\n // Update line and test line to use this word as the first word on the next line\n // If it's a newline, then don't add a space\n if (words[n]?.includes(\"\\n\")) {\n line = ``;\n testLine = ``;\n } else {\n line = `${words[n]} `;\n testLine = `${words[n]} `;\n }\n } else {\n // Test line is less than the max width, add the word to the current line\n line += `${words[n]} `;\n }\n // Handle a single line...\n if (n === words.length - 1) {\n lineArray.push({ text: line, x, y });\n }\n }\n return lineArray;\n};\n\nasync function generateTextPreview(text: string): Promise<File> {\n // Trim the text to a reasonable max length. Prevent crashes if the user pastes a gigantic string\n const trimmedText = text.trim().slice(0, CHAR_LIMIT);\n\n const [width, height] = [500, 500];\n const padding = 20;\n const dpr = 2;\n\n const fontFamily = \"Inter\";\n const [fontSize, lineHeight] = [16, 24];\n const [textColor, backgroundColor] = [\"black\", \"white\"];\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return reject(new Error(\"Could not create canvas context\"));\n }\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width * dpr, width * dpr);\n ctx.fillStyle = textColor;\n ctx.font = `${fontSize * dpr}px ${fontFamily}`;\n const wrapped = wrapText({\n ctx,\n text: trimmedText,\n x: padding * dpr,\n y: fontSize * dpr + padding * dpr,\n maxWidth: width * dpr - padding * 2 * dpr,\n lineHeight: lineHeight * dpr,\n });\n wrapped.forEach((line) => ctx.fillText(line.text, line.x, line.y));\n canvas.toBlob((blob) => {\n if (!blob) {\n return reject(new Error(\"Could not create blob\"));\n }\n resolve(new File([blob], \"thumbnail.png\", { type: \"image/png\" }));\n });\n });\n}\n\nfunction generateTextTitle(text: string) {\n const firstLine = text.split(\"\\n\")[0]!;\n const firstSentence = firstLine?.split(\". \")[0]!;\n\n if (firstSentence.length > 50) {\n return firstSentence.slice(0, 50) + \"...\";\n }\n\n return firstSentence;\n}\n\nconst toTextFile = (text: string) =>\n new File([text], \"Untitled.txt\", { type: \"text/plain\" });\n\n/** For text nfts, this will generate files that are needed for the metadata json, including the txt.file containing the text, and a thumbnail image containing a preview of the text\n */\nexport async function generateTextNftMetadataFiles(\n text: string,\n): Promise<TextMetadataFiles> {\n const name = generateTextTitle(text);\n const textFile = toTextFile(text);\n const thumbnailFile = await generateTextPreview(text);\n\n return {\n name,\n mediaUrlFile: textFile,\n thumbnailFile,\n };\n}\n"],"mappings":";AAAA,SAAS,gBAAgB,eAAAA,oBAAmB;AAU5C;AAAA,EAGE;AAAA,EACA,yCAAAC;AAAA,OACK;;;ACdP;AAAA,EACE,yCAAyC;AAAA,EAEzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,cAAAC;AAAA,OAEK;;;ACtBP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,kBAAkB;;;ACZ3B,SAAS,gBAAgB;AAElB,IAAM,gBAAgB;AACtB,IAAM,yBAAyB,OAAO,sBAAsB;AAGnE,IAAM,uBACJ;AAEK,SAAS,YAAY,MAAcC,UAAyB;AACjE,SAAO,GAAG,oBAAoB,IAAI,IAAI,IAAIA,QAAO;AACnD;AAEO,IAAM,aAAa,SAAS;AAAA,EACjC;AAAA,EACA;AACF,CAAU;AAEH,IAAM,oBAAoB;AAAA,EAC/B;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,EACnB;AACF;;;AD3BO,IAAM,mBAAmB,WAAW,UAAU;AAE9C,IAAM,uBAAsD;AAAA,EACjE,CAAC,QAAQ,EAAE,GAAG;AAAA,IACZ,SAAS,QAAQ;AAAA,IACjB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,uBAAuB,QAAQ;AAAA,EAC1D;AAAA,EACA,CAAC,QAAQ,EAAE,GAAG;AAAA,IACZ,SAAS,QAAQ;AAAA,IACjB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,uBAAuB,QAAQ;AAAA,EAC1D;AAAA,EACA,CAAC,KAAK,EAAE,GAAG;AAAA,IACT,SAAS,KAAK;AAAA,IACd,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,YAAY,EAAE,GAAG;AAAA,IAChB,SAAS,YAAY;AAAA,IACrB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,SAAS,EAAE,GAAG;AAAA,IACb,SAAS,SAAS;AAAA,IAClB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,wBAAwB,QAAQ;AAAA,EAC3D;AAAA,EACA,CAAC,SAAS,EAAE,GAAG;AAAA,IACb,SAAS,SAAS;AAAA,IAClB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,KAAK,EAAE,GAAG;AAAA,IACT,SAAS,KAAK;AAAA,IACd,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,YAAY,EAAE,GAAG;AAAA,IAChB,SAAS,YAAY;AAAA,IACrB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AAAA,EACA,CAAC,QAAQ,EAAE,GAAG;AAAA,IACZ,SAAS,QAAQ;AAAA,IACjB,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,aAAa,YAAY,4BAA4B,QAAQ;AAAA,EAC/D;AACF;;;AExFA;AAAA,EAKE;AAAA,OAEK;AAOA,IAAM,2BAA2B,CACtC,eACuC;AACvC,MAAI,CAAC;AAAY,WAAO;AAExB,SAAO;AAAA,IACL,kBACG,WAAW,oBAA8C,CAAC;AAAA,IAC7D,eAAe,WAAW;AAAA,IAC1B,cAAc,WAAW;AAAA,IACzB,aAAa,WAAW;AAAA,EAC1B;AACF;AAQO,IAAM,wBAAwB,CACnC,YAC4B;AAC5B,MACE,QAAQ,mBAAmB,qBAAqB,MAChD,CAAC,QAAQ,gBACT;AACA,UAAM,cACJ,QAAQ;AACV,WAAO;AAAA,MACL,sBAAsB,qBAAqB;AAAA,MAC3C,eAAe;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,KAAK,QAAQ;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,aAAa;AAAA,UACX,GAAG;AAAA,UACH,kBAAkB,YAAY;AAAA,UAC9B,kBAAkB,YAAY;AAAA,UAC9B,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,eAAe,OAAO,YAAY,aAAa;AAAA,UAC/C,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,cAAc,OAAO,YAAY,YAAY;AAAA,UAC7C,qBAAqB,OAAO,YAAY,mBAAmB;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL,UAAM,cACJ,QAAQ;AACV,WAAO;AAAA,MACL,sBAAsB,qBAAqB;AAAA,MAC3C,eAAe;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,KAAK,QAAQ;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,aAAa;AAAA,UACX,GAAG;AAAA,UACH,kBAAkB,YAAY;AAAA,UAC9B,iBAAiB,YAAY;AAAA,UAC7B,gBAAgB,YAAY;AAAA,UAC5B,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,eAAe,OAAO,YAAY,aAAa;AAAA,UAC/C,WAAW,OAAO,YAAY,SAAS;AAAA,UACvC,cAAc,OAAO,YAAY,YAAY;AAAA,UAC7C,qBAAqB,OAAO,YAAY,mBAAmB;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAIO,IAAM,+BAA+B,CAC1C,cACI;AAAA,EACJ,YAAY,yBAAyB,SAAS,UAAU;AAAA,EACxD,mBAAmB,SAAS;AAAA,EAC5B,WAAW,SAAS;AAAA,EACpB,QAAQ,SAAS;AAAA,EACjB,SAAS,sBAAsB,SAAS,OAAO;AACjD;AAMO,IAAM,2CAA2C,CACtD,cACI;AAAA,EACJ,YAAY,yBAAyB;AAAA,IACnC,eAAe,SAAS;AAAA,IACxB,cAAc,SAAS;AAAA,IACvB,aAAa,SAAS;AAAA,EACxB,CAAC;AAAA,EACD,UAAU,SAAS,SAAS,IAAI,CAAC,aAAa;AAAA,IAC5C,SAAS,sBAAsB,OAAO;AAAA,IACtC,WAAW,QAAQ;AAAA,EACrB,EAAE;AACJ;AAEA,IAAM,wBAAwB,CAAC;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,OAAgE;AAAA,EAC9D,GAAG;AAAA,EACH,gBAAgB;AAAA,EAChB,aAAa;AAAA,IACX,GAAG;AAAA,IACH,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,eAAe,YAAY,cAAc,SAAS;AAAA,IAClD,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,cAAc,YAAY,aAAa,SAAS;AAAA,IAChD,qBAAqB,YAAY,oBAAoB,SAAS;AAAA,EAChE;AACF;AAEA,IAAM,wBAAwB,CAAC;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,OAAgE;AAAA,EAC9D,GAAG;AAAA,EACH,gBAAgB;AAAA,EAChB,aAAa;AAAA,IACX,GAAG;AAAA,IACH,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,eAAe,YAAY,cAAc,SAAS;AAAA,IAClD,WAAW,YAAY,UAAU,SAAS;AAAA,IAC1C,cAAc,YAAY,aAAa,SAAS;AAAA,IAChD,qBAAqB,YAAY,oBAAoB,SAAS;AAAA,EAChE;AACF;AAEO,IAAM,sBAAsB,CAAiC;AAAA,EAClE;AAAA,EACA;AACF,MAA2E;AACzE,MAAI,yBAAyB,qBAAqB,IAAI;AACpD,WAAO,sBAAsB,aAAgC;AAAA,EAC/D;AACA,MAAI,yBAAyB,qBAAqB,IAAI;AACpD,WAAO,sBAAsB,aAAgC;AAAA,EAC/D;AACA,QAAM,IAAI,MAAM,kCAAkC,oBAAoB,EAAE;AAC1E;AAaO,IAAM,2BAA2B,CAAiC;AAAA,EACvE,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,OAIoE;AAAA,EAClE,SAAS,oBAAoB;AAAA,IAC3B;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD;AAAA,EACA;AAAA,EAGA,oBAAoB;AAAA,EACpB,YAAY,qBAAqB,OAAO,EAAG;AAC7C;AAEO,IAAM,oBAAoB,CAC/B,4BAEA,wBAAwB,yBAAyB,qBAAqB;AAEjE,IAAM,oBAAoB,CAC/B,4BAEA,wBAAwB,yBAAyB,qBAAqB;;;AHtKjE,IAAM,4BAA4B,MACvC,0CAA0C,GAAG;AAO/C,eAAsB,4BAA4B;AAAA,EAChD,gBAAgB;AAAA,EAChB,mBAAmB,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AACF,GAMG;AAED,SAAO,MAAM,aAAa,aAAa;AAAA,IACrC,KAAK;AAAA,IACL,SAAS,0BAA0B;AAAA,IACnC,cAAc;AAAA,IACd,MAAM;AAAA,MACJ,OAAO,WAAW,WAAW,SAAS,OAAO;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,qBAAqD;AAAA,EACzE;AAAA,EACA,GAAG;AACL,GAImD;AACjD,SAAO,MAAM,wBAAwB;AAAA,IACnC,GAAG,2BAA2B,IAAI;AAAA,IAClC;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,wBACpB,QACA;AACA,MAAI;AACF,WAAO,MAAM,qBAAqB,MAAM;AAAA,EAC1C,SAAS,OAAO;AACd,YAAQ,MAAM,KAAK;AACnB,WAAO;AAAA,EACT;AACF;AAaA,eAAsB,iBAAiD;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAKqE;AACnE,QAAM,mBAAmB,MAAM,wBAAwB;AAAA,IACrD,GAAG;AAAA,IACH;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,MAAI,CAAC,gBAAgB;AACnB,WAAO;AAAA,MACL,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,eAAe,MAAM,4BAA4B;AAAA,IACrD,QAAQ;AAAA,IACR,kBAAkB,YAAY;AAAA,IAC9B,eAAe,YAAY;AAAA,IAC3B;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAQO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA,iBAAiB;AACnB,GAGoB;AAClB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa;AAAA,MACX,UAAU,cAAc,YAAY;AAAA,MACpC,WAAW,cAAc,YAAY;AAAA,MACrC,qBAAqB,cAAc,YAAY;AAAA,MAC/C,eAAe,cAAc,YAAY;AAAA,MACzC,WAAW,cAAc,YAAY;AAAA,MACrC,cAAc,cAAc,YAAY;AAAA,MACxC,iBAAiB,cAAc,YAAY;AAAA,MAC3C,YAAY,cAAc,YAAY;AAAA,MACtC,kBAAkB,cAAc,YAAY;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AACF;AAkBO,IAAM,uCAAuC,OAAO;AAAA,EACzD,oBAAoB,EAAE,SAAAC,UAAS,YAAY,YAAY,UAAU;AAAA,EACjE;AAAA,EACA;AACF,MAIM;AAEJ,QAAM,eAAe,WAAW;AAAA,IAC9B,QAAQ;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,SAAAA;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,EAAE,MAAM,QAAQ,MAAM,SAAS;AAAA,QAC/B,EAAE,MAAM,WAAW,MAAM,SAAS;AAAA,QAClC;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,QAAe,CAAC,UAAU,cAAc,UAAW;AAEzD,QAAM,kBAAkB,UAAU,OAAO,KAAK,CAAC;AAE/C,SAAO,MAAM,eAAe;AAAA,IAC1B,MAAM;AAAA,IACN;AAAA,EACF,CAAC;AACH;AAEO,IAAM,2BAA2B,OAAO;AAAA,EAC7C;AAAA,EACA;AACF,MAGuC;AACrC,SAAQ,MAAM,aAAa,aAAa;AAAA,IACtC,KAAK;AAAA,IACL,SAAS,0BAA0B;AAAA,IACnC,cAAc;AAAA,IACd,MAAM,CAAC,aAAa;AAAA,EACtB,CAAC;AACH;AAIO,IAAM,yBAAyB,OAAO;AAAA,EAC3C,SAAAA;AAAA,EACA;AAAA,EACA;AACF,MAIwB;AACtB,UACE,MAAM,yBAAyB,EAAE,eAAe,aAAa,CAAC,GAC9D,SAASA,QAAO;AACpB;AAEA,eAAsB,4BAA4B;AAAA,EAChD;AAAA,EACA,UAAU;AAAA,EACV,iBAAiB;AACnB,GAEuD;AACrD,MAAI,OAAO,eAAe,aAAa;AACrC,WAAO,aAAa,aAAa;AAAA,MAC/B,SAAS,0BAA0B;AAAA,MACnC,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM;AAAA,QACJ;AAAA,UACE,GAAG;AAAA,UACH,kBAAkB,WAAW,oBAAoB,CAAC;AAAA,QACpD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA,SAAAA;AAAA,EACA;AAAA,EACA;AACF,GAG2D;AACzD,QAAM,qBAA0C;AAAA,IAC9C,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,QAAM,SAAS;AAAA,IACb,SAAS;AAAA,IACT;AAAA,IACA,SAASA,WAAU;AAAA,IACnB,aAAa;AAAA,EACf;AAEA,SAAO;AACT;AAEO,SAAS,eAA+C;AAAA,EAC7D;AAAA,EACA;AACF,GAG+B;AAC7B,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,eAAsB,kBAAkB;AAAA,EACtC;AAAA,EACA;AACF,GAGG;AAGD,MAAI;AACF,WAAO,MAAM,aAAa,aAAa;AAAA,MACrC,SAAS,0BAA0B;AAAA,MACnC,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,aAAa;AAAA,IACtB,CAAC;AAAA,EACH,SAAS,GAAG;AACV,YAAQ,MAAM,CAAC;AAEf,WAAOC,YAAW,UAAU;AAAA,EAC9B;AACF;AASA,eAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2C;AACzC,QAAM,UAAU,MAAM,kBAAkB,EAAE,eAAe,aAAa,CAAC;AAEvE,QAAM,uBAAuB,OAAO,cAAc;AAElD,SAAO;AAAA,IACL,SAAS,UAAU;AAAA,IACnB,mBAAmB,aAAa;AAAA,IAChC,eAAe,UAAU,cAAc;AAAA,EACzC;AACF;AACA,eAAsB,wBAAwB;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,SAAS,yBAAyB,IAAI,MAAM,cAAc,IAAI;AAAA,IACpE,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,MACE,kBAAkB,wBAAwB,KAC1C,kBAAkB,wBAAwB,GAC1C;AACA,WAAO,yBAAyB,cAAc,YAAY;AAAA,EAC5D;AAEA,QAAM,IAAI,MAAM,4CAA4C;AAC9D;AAEA,eAAsB,yCAAyC;AAAA,EAC7D;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAGG;AACD,QAAM,gBAAgB,MAAM,wBAAwB;AAAA,IAClD;AAAA,IACA;AAAA,IACA,YAAY,KAAK;AAAA,EACnB,CAAC;AAED,SAAO,MAAM,oBAAoB;AAAA,IAC/B,GAAG;AAAA,IACH,YAAY;AAAA,EACd,CAAC;AACH;AAEO,SAAS,yBAAyB;AAAA,EACvC,eAAe;AAAA,EACf,mBAAmB;AACrB,GAGc;AACZ,SAAO,CAAC,cAAc,gBAAgB;AACxC;AAEO,SAAS,kCAAkC,SAA0B;AAC1E,SAAO,yCACL,OACF;AACF;AAEO,IAAM,8BAA8B,OAA+B;AAAA,EACxE,eAAe;AAAA,EACf,aAAa;AAAA,EACb,cAAc;AAAA,EACd,kBAAkB,CAAC;AACrB;AAEO,SAAS,wBACd,YACwB;AACxB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,kBAAkB,WAAW,oBAAoB,CAAC;AAAA,EACpD;AACF;AAEO,IAAM,oCAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AACF,MAGM;AACJ,MAAI,OAAO,eAAe,aAAa;AACrC,WAAO;AAAA,MACL,UAAU;AAAA,IACZ;AAAA,EACF;AAEA,MAAI,OAAO,sBAAsB,aAAa;AAC5C,WAAO;AAAA,MACL,iBAAiB;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,0DAA0D;AAC5E;;;AD/bA;AAAA,EACE,wBAAAC;AAAA,EAOA,8BAAAC;AAAA,OACK;;;AKxCA,IAAM,mBAAN,cAAwC,MAAM;AAAA,EAGnD,YAAY,SAAiB,QAAgB,MAAW;AACtD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AACF;AAEA,eAAe,KAAK,SAAiB;AACnC,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,SAAS,OAAO;AAAA,EAC7B,CAAC;AACH;AAUO,IAAM,MAAM,OAAU,QAAgB;AAC3C,QAAM,WAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,MAAM,CAAC;AACnD,MAAI,SAAS,WAAW,KAAK;AAC3B,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,SAAS,GAAQ;AAAA,IAAC;AAClB,UAAM,IAAI;AAAA,MACR,4BAA4B,SAAS,MAAM;AAAA,MAC3C,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAQ,MAAM,SAAS,KAAK;AAC9B;AAWO,IAAM,OAAO,OAAU,KAAa,SAAc;AACvD,QAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AACD,MAAI,SAAS,WAAW,KAAK;AAC3B,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,SAAS,GAAQ;AAAA,IAAC;AAClB,UAAM,IAAI;AAAA,MACR,iBAAiB,SAAS,MAAM;AAAA,MAChC,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAQ,MAAM,SAAS,KAAK;AAC9B;AAEO,IAAM,UAAU,OACrB,OACA,WAAmB,GACnB,QAAgB,GAChB,kBAA0B,QACX;AACf,MAAI;AACF,WAAO,MAAM,MAAM;AAAA,EACrB,SAAS,KAAU;AACjB,QAAI,eAAe,kBAAkB;AACnC,UAAI,IAAI,UAAU,KAAK;AACrB,YAAI,SAAS,UAAU;AACrB,gBAAM,KAAK,QAAQ,eAAe;AAClC,iBAAO,MAAM,QAAQ,OAAO,UAAU,QAAQ,CAAC;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACF;AAQO,IAAM,aAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF;;;AC1DO,IAAM,gBAAgB,CAACC,UAC5BA,MAAK,aAAa;AAEb,IAAM,aAAa,CAACA,UACzBA,MAAK,aAAa;AAmFb,SAAS,oBACd,aACkC;AAClC,SAAO,YAAY,aAAa;AAClC;;;ACrIO,IAAM,yBAAyB,CACpC,SACG;AAkBE,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AACF,GAGY;AACV,SACE,kBACC,OAAO,kBAAkB,WAAW,gBAAgB,cAAc;AAEvE;AAMA,eAAsB,yBAAyB;AAAA,EAC7C,YAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,EAAE,SAAAC,UAAS,MAAAC,MAAK,IAAIF;AAE1B,QAAM,SAAS,MAAMC,SAAQ,YAAY;AACvC,WAAO,MAAMC,MAAU,aAAa;AAAA,MAClC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO,QAAQ;AACjB;;;ACnBA,IAAM,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBnC,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBvB,IAAM,YAAY;AAAA,EAChB,0BAA0B;AAAA,EAC1B,cAAc;AAAA;AAGT,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AACF,GAGqC;AACnC,SAAO;AAAA,IACL,OAAO;AAAA,EACT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP,WAAW;AAAA,MACT,IACE,YAAY;AAAA;AAAA,QAER,GAAG,aAAa,YAAY,CAAC,IAAI,OAAO;AAAA,UACxC,GAAG,aAAa,YAAY,CAAC;AAAA,IACrC;AAAA,IACA,mBAAmB,CAAC,iBAClB,cAAc;AAAA,EAClB;AACF;AAEO,SAAS,8BAA8B,CAAC,GAE7C;AACA,SAAO;AAAA,IACL,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP,WAAW,CAAC;AAAA,IACZ,mBAAmB,CAAC,iBAClB,cAAc,kBAAkB,gBAC5B,OAAO,cAAc,kBAAkB,aAAa,IACpD;AAAA,EACR;AACF;AAEO,SAAS,yBAAyB;AAAA,EACvC;AACF,GAEuC;AACrC,SAAO;AAAA,IACL,OAAO;AAAA,EACT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASP,WAAW;AAAA,MACT,UAAU,aAAa,YAAY;AAAA,IACrC;AAAA,IACA,mBAAmB,CAAC,iBAClB,cAAc;AAAA,EAClB;AACF;AAQO,SAAS,6BAA6B;AAAA,EAC3C;AACF,GAEuD;AACrD,SAAO;AAAA,IACL,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP,WAAW;AAAA,MACT,iBAAiB,aAAa,YAAY;AAAA,IAC5C;AAAA,IACA,mBAAmB,CAAC,iBAClB,cAAc;AAAA,EAClB;AACF;;;ACnKA,YAAY,YAAY;AAEjB,IAAM,8BAA8B,CAAC,YAAmC;AAC7E,MAAI,CAAC,qBAAqB,OAAO,GAAG;AAClC,UAAM,IAAI,MAAM,YAAY,OAAO,0BAA0B;AAAA,EAC/D;AACA,SAAO,qBAAqB,OAAO;AACrC;AAEA,SAAS,iBACP,gBACwB;AACxB,MAAI,eAAe,SAAS;AAC1B,WAAO;AAAA,MACL,UAAU;AAAA,MACV,GAAG,eAAe;AAAA,MAClB,qBAAqB;AAAA,QACnB,eAAe,WAAW;AAAA,MAC5B;AAAA,MACA,eAAe,OAAO,eAAe,WAAW,aAAa;AAAA,IAC/D;AAEF,MAAI,eAAe,SAAS,iBAAiB;AAC3C,WAAO;AAAA,MACL,UAAU;AAAA,MACV,GAAG,eAAe;AAAA,MAClB,qBAAqB;AAAA,QACnB,eAAe,YAAY;AAAA,MAC7B;AAAA,MACA,eAAe,OAAO,eAAe,YAAY,aAAa;AAAA,IAChE;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,kBAAkB;AACpC;AAEA,SAAS,WAAW,GAAwB;AAC1C,SAAO;AAAA,IACL,EAAE,SAAS,kBAAkB,EAAE,YAAY,UAAU,EAAE,WAAW;AAAA,EACpE;AACF;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,iBACH,OAAO,YAAY,cAChB,MAAM,kBACN,MAAM,SAAS,oBAAoB,CAAC;AAE1C,QAAM,iBAAiB,cAAc;AAAA,IAAK,CAAC,GAAG,MAC5C,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,IAAI;AAAA,EACtC;AAEA,MAAI;AAEJ,MAAI,CAAC,mBAAmB;AACtB,qBAAiB,eAAe,CAAC;AACjC,QAAI,CAAC,gBAAgB;AACnB,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AAAA,EACF,OAAO;AACL,UAAM,iBACJ,sBAAsB,UAAU,kBAAkB;AACpD,qBAAiB,eAAe;AAAA,MAC9B,CAAC,aAAkC,SAAS,SAAS;AAAA,IACvD;AACA,QAAI,CAAC,gBAAgB;AACnB,YAAMC,kBAAiB,eAAe;AAAA,QACpC,CAAC,aACC,SAAS,SAAS,iBAAiB,SAAS,SAAS;AAAA,MACzD;AACA,UAAI,CAACA;AAAgB,cAAM,IAAI,MAAM,iCAAiC;AACtE,aAAOA;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,qBAAN,MAAuD;AAAA,EAI5D,YAAY,SAAiBC,aAA0B;AAgCvD,uBAAiD,OAAO;AAAA,MACtD;AAAA,MACA;AAAA,MACA,mBAAmB;AAAA,IACrB,MAAM;AACJ,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB,wBAAwB;AAAA,UACtB;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,CAAC,OAAO;AACV,cAAM,IAAI,MAAM,mBAAmB;AAAA,MACrC;AAEA,YAAM,iBAAiB,MAAM,KAAK,mBAAmB,MAAM,QAAQ;AAEnE,aAAO,sBAAsB;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA,mBAAmB;AAAA,MACrB,CAAC;AAAA,IACH;AAvDE,SAAK,aAAaA,eAAc;AAChC,SAAK,gBAAgB,4BAA4B,OAAO;AAAA,EAC1D;AAAA,EAEA,MAAM,mBAAmB,UAAwC;AAC/D,UAAM,gBAAgB,OAAO,SAAS,kBAAkB;AACxD,QAAI,CAAC,gCAAgC,SAAS,eAAe,GAAG;AAC9D,aAAO;AAAA,IACT;AACA,UAAM,iBAAiB,MAAM,KAAK;AAAA,MAChC,8BAA8B,CAAC,CAAC;AAAA,IAClC;AAEA,WAAO,kBAAkB;AAAA,EAC3B;AAAA,EAEA,MAAM,yBAA4B;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAsB;AACpB,UAAM,eAAe,MAAM,yBAAyB;AAAA,MAClD,YAAY,KAAK;AAAA,MACjB,aAAa,KAAK,cAAc;AAAA,MAChC;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,kBAAkB,YAAY;AAAA,EACvC;AAAA,EA4BA,MAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,EACF,GAGG;AACD,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB,yBAAyB;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,UAAU,OAAO,WAAW;AAAG,aAAO,CAAC;AAE5C,UAAM,iBAAiB,MAAM,KAAK,mBAAmB,OAAO,CAAC,EAAG,QAAQ;AAExE,WAAO,OACJ,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,EAC/B;AAAA,MAAI,CAAC,UACJ,sBAAsB;AAAA,QACpB;AAAA,QACA,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACJ;AAAA,EAEA,MAAM,2BAA2B;AAAA,IAC/B;AAAA,EACF,GAEG;AACD,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,6BAA6B;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WACE,UAAU,IAAI,CAAC,aAAa;AAAA,MAC1B,SAAS,OAAO,QAAQ,OAAO;AAAA,MAC/B,KAAK,CAAC,QAAQ;AAAA,IAChB,EAAE,KAAK,CAAC;AAAA,EAEZ;AACF;AAEA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKmC;AACjC,QAAM,iBAAiB,kBAAkB;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,YAAY,eAAe,OAAO,cAAc;AAEtD,QAAM,cAAc,iBAAiB,cAAc;AAEnD,MAAI,oBAAoB,WAAW,GAAG;AACpC,cAAU,qBAAqB;AAAA,EACjC;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EACF;AACF;AAEA,IAAM,kCAAkC,CAAC,oBAA4B;AACnE,QAAM,wBAA+B,cAAO,eAAe,GAAG;AAC9D,MAAI,CAAC;AAAuB,WAAO;AAEnC,SAAc,WAAI,uBAAuB,OAAO;AAClD;AAEA,SAAS,eACP,OACA,gBACiB;AACjB,SAAO;AAAA,IACL,UAAU;AAAA,MACR,SAAS,MAAM,SAAS;AAAA,MACxB,MAAM,MAAM,SAAS;AAAA,MACrB,KAAK,MAAM,SAAS;AAAA,IACtB;AAAA,IACA,UAAU,MAAM;AAAA,IAChB,SAAS,MAAM,UAAU,OAAO,MAAM,OAAO,IAAI;AAAA,IACjD,UAAU,MAAM,kBAAkB,WAAW,QAAQ;AAAA,IACrD,SAAS,MAAM;AAAA,IACf,aAAa,OAAO,MAAM,WAAW;AAAA,IACrC,WAAW,OAAO,MAAM,SAAS;AAAA,IACjC,oBAAoB;AAAA,IACpB,iBAAiB,MAAM,SAAS;AAAA,EAClC;AACF;;;AT9MO,IAAM,oCAAoC,OAG3C;AAAA,EACJ,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,YAAY;AAAA;AACd;AAEA,IAAM,oBAAoB,CAAC,iBAAmC;AAAA,EAC5D,WAAW,YAAY;AAAA,EACvB,qBAAqB,YAAY;AAAA,EACjC,eAAe,YAAY;AAAA,EAC3B,cAAc,YAAY;AAAA,EAC1B,WAAW,YAAY;AAAA,EACvB,YAAY,YAAY;AAAA,EACxB,UAAU,YAAY;AAAA,EACtB,kBAAkB,YAAY;AAChC;AAEA,IAAM,oBAAoB,CAAC,iBAAmC;AAAA,EAC5D,WAAW,YAAY;AAAA,EACvB,qBAAqB,YAAY;AAAA,EACjC,eAAe,YAAY;AAAA,EAC3B,cAAc,YAAY;AAAA,EAC1B,WAAW,YAAY;AAAA,EACvB,YAAY,YAAY;AAAA,EACxB,UAAU,YAAY;AAAA,EACtB,iBAAiB,YAAY;AAAA,EAC7B,gBAAgB,YAAY,kBAAkBC;AAChD;AAEA,IAAM,2BAA2B,CAC/B,aACA,sBAC2B;AAAA,EAC3B,GAAG,kBAAkB,WAAW;AAAA,EAChC,GAAG,kCAAkC;AAAA,EACrC;AACF;AAEA,IAAM,2BAA2B,CAC/B,aACA,sBAC2B;AAAA,EAC3B,GAAG,kBAAkB,WAAW;AAAA,EAChC,GAAG,kCAAkC;AAAA,EACrC;AACF;AAEO,IAAM,oCAAoC,OAG3C;AAAA,EACJ,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA;AACd;AAuBA,IAAM,8BAA8B,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA,0BAAAC;AACF,MAMK;AACH,QAAM,mBAAmB,kCAAkC,OAAO;AAElE,MAAI,CAACA,0BAAyB,SAASC,sBAAqB,EAAE,GAAG;AAE/D,QAAI,oBAAoB,gBAAgB;AACtC,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AAEA,WAAO;AAAA,MACL,sBAAsBA,sBAAqB;AAAA,MAC3C,aAAa;AAAA,QACX;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,sBAAsBA,sBAAqB;AAAA,IAC3C,aAAa;AAAA,MACX;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAQO,SAAS,2BACd,SACgC;AAChC,aAAW,QAAQ,QAAQ,MAAM;AAC/B,QAAI;AACF,YAAM,aAAa,eAAe;AAAA,QAChC,KAAKC;AAAA,QACL,WAAW;AAAA,QACX,GAAG;AAAA,MACL,CAAC;AACD,UAAI,WAAW,cAAc,eAAe;AAC1C,eAAO,WAAW;AAAA,MACpB;AAAA,IACF,SAAS,KAAU;AAAA,IAAC;AAAA,EACtB;AACF;AAIO,IAAM,gBAAN,MAAoB;AAAA,EAKzB,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,0BACE,SACA,kBACA;AACA,WAAO,0BAA0B,SAAS,KAAK,SAAS,gBAAgB;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAc,MAAwD;AAC1E,WAAO,MAAM,cAAc;AAAA,MACzB,GAAG;AAAA,MACH,WAAW,KAAK;AAAA,MAChB,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cACJ,QAC6B;AAC7B,WAAO,cAAc;AAAA,MACnB,GAAG;AAAA,MACH,WAAW,KAAK;AAAA,MAChB,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cACJ,YAC6B;AAC7B,WAAO,cAAc;AAAA,MACnB,GAAG;AAAA,MACH,cAAc,KAAK;AAAA,MACnB,WAAW,KAAK;AAAA,MAChB,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,WAAW,EAAE,SAAS,IAAI,GAAsC;AACpE,WAAO,MAAM,KAAK,UAAU,IAAI;AAAA,MAC9B,mBAAmB;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,qBAAqB,YAAoC;AAC7D,WAAO,MAAM,4BAA4B;AAAA,MACvC,UAAU;AAAA,MACV,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIuB;AACrB,WAAO,MAAM,oBAAoB;AAAA,MAC/B,cAAc,KAAK;AAAA,MACnB;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAgC;AAC9B,WAAO,MAAM,eAAe;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,eAAe,kBAAkB;AAAA,MACjD,aAAa,eAAe;AAAA,MAC5B,cAAc,eAAe;AAAA,MAC7B,eAAe,eAAe;AAAA,MAC9B;AAAA,MACA,eAAe,KAAK;AAAA,MACpB,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AACF;AAEO,SAAS,0BACd,SACA,SACA,kBACA;AACA,QAAM,eAAe,2BAA2B,OAAO;AACvD,SAAO;AAAA,IACL,SAAS,cAAc;AAAA,IACvB,kBAAkB,cAAc;AAAA,IAChC;AAAA,IACA,MAAM,SAAS;AAAA,MACb,SAAS,cAAc;AAAA,MACvB,SAAS,cAAc;AAAA,MACvB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAoDA,SAAS,kBAAkD;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEoC;AAClC,QAAM,EAAE,YAAY,kBAAkB,IAAI;AAC1C,QAAM,sBAAsBC,4BAA2B;AAAA,IACrD,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,OAAO;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAyD;AACvD,UAAM,EAAE,WAAW,cAAc,IAAI,MAAM,YAAY;AAAA,MACrD;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,OAAO;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAoB;AAClB,QAAI,gBAAgB;AAClB,YAAM,eAAe,MAAM,4BAA4B;AAAA,QACrD;AAAA,QACA,kBAAkB,YAAY;AAAA,QAC9B,eAAe,YAAY;AAAA,QAC3B;AAAA,QACA,QAAQ;AAAA,MACV,CAAC;AAED,UAAI,CAAC,cAAc;AACjB,cAAM,IAAI,MAAM,kCAAkC;AAAA,MACpD;AAAA,IACF;AAEA,UAAM,UAAU,cAAc;AAAA,MAC5B,GAAG,kCAAkC,oBAAoB;AAAA,MACzD;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,OAAO,SAAS;AAAA,IACpB;AAAA,IACA,SAAS;AAAA,IACT,KAAK,cAAc;AAAA,EACrB,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAe,YAAY;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAOG;AACD,MAAI,CAAC,SAAS;AACZ,cAAU,aAAa;AAAA,EACzB;AACA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAEA,QAAM,YAAY,MAAM,aAAa,cAAc;AAAA,IACjD;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,eAAe;AAAA,EACjB;AACF;AAWA,eAAe,cAAc;AAAA,EAC3B,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA6C;AAC3C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,EACrB,IAAI,MAAM,2BAA2B;AAAA,IACnC,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB,YAAY,oBAAoB;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAMA,eAAe,2BAA2B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAIkE;AAChE,QAAM,qBAAqB,MAAM,4BAA4B;AAAA,IAC3D;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AAED,MAAI,WAAW;AAEf,MAAI,OAAO,aAAa,UAAU;AAChC,eAAW,MAAM,UAAU,WAAW,kBAAkB;AAAA,EAC1D;AAEA,QAAM,oBAAoB,MAAM,yBAAyB;AAAA,IACvD,eAAe;AAAA,IACf;AAAA,EACF,CAAC;AAED,QAAM,wBAAwB,4BAA4B;AAAA,IACxD;AAAA,IACA;AAAA,IACA,0BAA0B;AAAA,EAC5B,CAAC;AAED,QAAM,gBAAgB,eAAe;AAAA,IACnC,GAAG;AAAA,IACH,KAAK;AAAA,EACP,CAAC;AAED,QAAM,0BAA0B;AAAA,IAC9B;AAAA,IACA,sBAAsB,sBAAsB;AAAA,EAC9C;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,EACrB;AACF;AAaA,eAAe,cAAc;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM;AAAA,IACJ,SAAS,EAAE,eAAe,qBAAqB;AAAA,IAC/C,YAAY;AAAA,EACd,IAAI,MAAM,UAAU,IAAI;AAAA,IACtB,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,qBAAqB;AAAA,IAC1C,KAAK,cAAc;AAAA,IACnB,SAAS,cAAc;AAAA,IACvB,aAAa,cAAc;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,kBAAkB;AAAA,IACvB,eAAe;AAAA,IACf;AAAA,IACA,mBAAmB;AAAA,IACnB,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAWA,eAAe,cAAc;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM;AAAA,IACJ,SAAS,EAAE,eAAe,qBAAqB;AAAA,IAC/C,YAAY;AAAA,IACZ;AAAA,EACF,IAAI,MAAM,UAAU,IAAI;AAAA,IACtB,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB;AAAA,IACrB,GAAG;AAAA,IACH,SAAS,cAAc,UAAU;AAAA,IACjC,SAAS;AAAA,EACX;AAEA,SAAO,kBAAkB;AAAA,IACvB,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AA0BA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAYE;AACA,MAAI,OAAO,mBAAmB,eAAe,iBAAiB,GAAG;AAC/D,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAEA,QAAM,UAAU,MAAM,cAAc,IAAI;AAAA,IACtC,mBAAmB;AAAA,IACnB;AAAA,EACF,CAAC;AAED,QAAM,UAAU,MAAM,kBAAkB;AAAA,IACtC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,qBAAqB;AAAA,IAC1B,eAAe;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEO,IAAM,uBAAuB,CAAC;AAAA,EACnC,eAAe;AAAA,IACb;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS,EAAE,YAAY,mBAAmB,SAAS,UAAU;AAAA,EAC7D;AACF,MAS6C;AAC3C,QAAM,wBAA8C;AAAA,IAClD;AAAA,IACA,eAAe,uBAAuB;AAAA,MACpC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,uBAAuB,yBAAyB;AAAA,MAC9C;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,oBAA4C,aAC9C,wBAAwB,UAAU,IAClC,4BAA4B;AAChC,QAAM,4BAA4B,aAC9BJ,eACA;AAEJ,QAAM,sBACJ,gBACC,OAAO,kBAAkB,WAAW,gBAAgB,cAAc;AAErE,MAAI,QAAQ,yBAAyBE,sBAAqB,IAAI;AAC5D,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,QAAM,SACH,UAAU,QAAQ,cAAc,YAAY,iBAC7C,OAAO,cAAc;AAEvB,SAAO,uBAAuB;AAAA,IAC5B,SAAS;AAAA,IACT,KAAKC;AAAA,IACL,cAAc;AAAA,IACd;AAAA,IACA,SAAS,0BAA0B;AAAA,IACnC,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,oBAAoB,OAAO;AAAA,MAC3B;AAAA,MACA,OAAO,cAAc;AAAA,MACrB;AAAA,MACA;AAAA,MACAH;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMmB;AACjB,OAAK,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS;AAClC,WAAO,EAAE,UAAU,MAAM,aAAa,MAAM,YAAY,KAAK;AAAA,EAC/D;AAEA,QAAM,gBAAgB,MAAM,WAAW,GAAG,KAAK;AAE/C,QAAM,UAAU,4BAA4B,OAAO;AAEnD,SAAO;AAAA,IACL,UAAU,UACN,WAAW,gBAAgB,UAAU,OAAO,aAAa,OAAO,KAChE;AAAA,IACJ,aAAa,WACX,QAAQ,YAAY,aAAa,EACnC,mBACE,QAAQ,wBACV,IAAI,OAAO,IAAI,aAAa;AAAA,IAC5B,YAAY,WACV,QAAQ,YAAY,aAAa,EACnC,mBACE,QAAQ,wBACV,IAAI,OAAO,IAAI,aAAa;AAAA,EAC9B;AACF;;;AU75BA;AAAA,EAEE,wBAAwB;AAAA,OACnB;AAGA,IAAKK,yBAAL,CAAKA,0BAAL;AACL,EAAAA,4CAAA,QAAK,yBAAyB,MAA9B;AACA,EAAAA,4CAAA,QAAK,yBAAyB,MAA9B;AACA,EAAAA,4CAAA,QAAK,yBAAyB,MAA9B;AAHU,SAAAA;AAAA,4BAAA;;;ACsCZ,IAAM,gBAAgB,OAAO;AAAA,EAC3B,YAAY,EAAE,MAAAC,OAAM,SAAAC,SAAQ,IAAI;AAAA,EAChC,GAAG;AACL,MAGEA;AAAA,EAAQ,MACND,MAA+B,GAAG,aAAa,qBAAqB,IAAI;AAC1E;AAEF,IAAM,aAAa,OAAO;AAAA,EACxB;AAAA,EACA;AAAA,EACA,YAAY,EAAE,SAAAC,UAAS,KAAAC,KAAI,IAAI;AACjC,MAIED;AAAA,EAAQ,MACNC;AAAA,IACE,GAAG,aAAa,qBACd,4BAA4B,OAAO,EAAE,oBACvC,IAAI,kBAAkB;AAAA,EACxB;AACF;AAEK,IAAM,eAAe,OAAO;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,EAAE,SAAAD,UAAS,KAAAC,KAAI,IAAI;AACjC,MAK+B;AAC7B,QAAM,YAAY,4BAA4B,OAAO,EAAE;AACvD,QAAM,SAAS,MAAMD;AAAA,IAAQ,MAC3BC;AAAA,MACE,GAAG,aAAa,qBAAqB,SAAS,IAAI,kBAAkB,YAAY,CAAC,IAAI,GAAG;AAAA,IAC1F;AAAA,EACF;AAEA,SAAO,6BAA6B,MAAM;AAC5C;AAEA,IAAM,kBAAkB,OAAO;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,YAAY,EAAE,SAAAD,UAAS,KAAAC,KAAI,IAAI;AACjC,MAIM;AACJ,QAAM,YAAY,4BAA4B,OAAO,EAAE;AACvD,QAAM,SAAS,MAAMD;AAAA,IAAQ,MAC3BC;AAAA,MACE,GAAG,aAAa,qBAAqB,SAAS,IAAI,kBAAkB,YAAY,CAAC;AAAA,IACnF;AAAA,EACF;AAEA,SAAO,yCAAyC,MAAM;AACxD;AA4BA,IAAM,mBAAN,MAA8C;AAAA,EAI5C,YAAY,SAAiBC,aAA0B;AAIvD,yBAA8C,CAAC;AAAA,MAC7C;AAAA,MACA,GAAG;AAAA,IACL,MAAyC;AACvC,YAAM,OAAO,yBAAyB;AAAA,QACpC,GAAG;AAAA,QACH,SAAS,KAAK;AAAA,QACd;AAAA,MACF,CAAC;AACD,aAAO,cAAc;AAAA,QACnB,GAAG;AAAA,QACH,YAAY,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,sBAAwC,OAAO,uBAE3C,MAAM,WAAW;AAAA,MACf,oBAAoB,kBAAkB,YAAY;AAAA,MAClD,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,IACnB,CAAC,GACD;AAEJ,eAA0B,OAAO,EAAE,mBAAmB,IAAI,MAAM;AAC9D,aAAO,aAAa;AAAA,QAClB;AAAA,QACA;AAAA,QACA,SAAS,KAAK;AAAA,QACd,YAAY,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,2BAAkD,OAAO;AAAA,MACvD;AAAA,IACF,MAAM;AACJ,aAAO,gBAAgB;AAAA,QACrB;AAAA,QACA,SAAS,KAAK;AAAA,QACd,YAAY,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AA5CE,SAAK,UAAU;AACf,SAAK,aAAaA,eAAc;AAAA,EAClC;AA2CF;;;AC1LA;AAAA,EAEE;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA,0BAAAC;AAAA,OACK;;;ACXP,YAAYC,aAAY;AACjB,IAAM,kCAAkC,CAC7C,oBACG;AACH,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,EACT;AAGA,QAAM,wBAA+B,eAAO,eAAe,GAAG;AAC9D,MAAI,CAAC;AAAuB,WAAO;AAEnC,SAAc,YAAI,uBAAuB,OAAO;AAClD;;;ADWO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AACF,GAG0C;AACxC,MAAI,MAAM,aAAa,OAAO;AAC5B,WAAO,8BAA8B;AAAA,MACnC,yBAAyB;AAAA,MACzB,eAAe,MAAM,SAAS;AAAA,MAC9B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAEA,SAAO,+BAA+B;AAAA,IACpC,yBAAyB;AAAA,IACzB,eAAe,MAAM,SAAS;AAAA,IAC9B,SAAS,MAAM;AAAA,IACf,GAAG;AAAA,EACL,CAAC;AACH;AAOO,SAAS,+BAA+B;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAW2E;AACzE,QAAM,eAAe,OAAO,kBAAkB,CAAC;AAE/C,QAAM,SAAS,uBAAuB,EAAE,eAAe,cAAc,CAAC;AAEtE,QAAM,WAAW,wBAAwB,YAAY;AAErD,MAAI,aAAa,cAAc;AAC7B,WAAO,gBAAgB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,aAAa,SAAS;AACxB,WAAO,uBAAuB;AAAA,MAC5B,KAAK;AAAA,MACL,cAAc;AAAA,MACd,SAAS;AAAA,MACT,SAAS,wBAAwB,YAAY;AAAA;AAAA,MAE7C,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,OAAO;AAAA,QACd,wBAAwB,YAAY,gBAAgB;AAAA,QACpD,wBAAwB,YAAY;AAAA,QACpC,gBAAgBC;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,IAAI,MAAM,uBAAuB;AACzC;AAEA,SAAS,8BAA8B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAU0C;AACxC,QAAM,uBAAuB,OAAO,kBAAkB,CAAC;AACvD,QAAM,YAAY,eAAe;AAAA,IAC/B,oBAAoB,wBAAwB;AAAA,IAC5C,aAAa,wBAAwB;AAAA,IACrC,gBAAgB;AAAA,EAClB,CAAC,EAAE;AAEH,SAAO,uBAAuB;AAAA,IAC5B,KAAK;AAAA,IACL,SAAS;AAAA,IACT,SAAS;AAAA,IACT,cAAc;AAAA,IACd,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,uBAAuB,EAAE,eAAe,cAAc,CAAC;AAAA,MACvD;AAAA,MACA,eAAe;AAAA,MACf,gBAAgBA;AAAA,IAClB;AAAA,EACF,CAAC;AACH;AAEA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAS0C;AACxC,QAAM,YAAY,eAAe;AAAA,IAC/B,oBAAoB,wBAAwB;AAAA,IAC5C,aAAa,wBAAwB;AAAA,IACrC,gBAAgB;AAAA,EAClB,CAAC,EAAE;AAEH,QAAM,kBAAkB;AAAA,IACtB,mBAAmB,iBAAiB;AAAA,IACpC,CAAC,QAAQ,eAAe,EAAE;AAAA,EAC5B;AAIA,MACE,gCAAgC,wBAAwB,eAAe,GACvE;AACA,WAAO,uBAAuB;AAAA,MAC5B,KAAKC;AAAA,MACL,cAAc;AAAA,MACd,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,wBAAwB,YAAY;AAAA,QACpC,OAAO,OAAO;AAAA,QACd;AAAA,QACA,eAAe,CAAC,YAAY,IAAI,CAAC;AAAA,QACjC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAGA,SAAO,uBAAuB;AAAA,IAC5B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,IAET,MAAM;AAAA,MACJ,wBAAwB,YAAY;AAAA,MACpC,OAAO,OAAO;AAAA,MACd;AAAA,MACA;AAAA,MACA,gBAAgBD;AAAA,IAClB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAIc;AACZ,QAAM,mBAAmB,qBAAqB;AAE9C,QAAM,oBAAoB,OAAO,YAAY,aAAa,IAAI;AAE9D,QAAM,4BAA4B,oBAAoB,WAAW,IAC7D,YAAY,WACZ;AAEJ,QAAM,uBAAuB,4BACzB,KACA;AAEJ,SAAO;AAAA,IACL,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB;AAAA,IACA,cAAc,mBAAmB;AAAA,EACnC;AACF;;;AE5OA,SAAkB,eAAAE,oBAAmB;AAcrC,eAAsB,QAAQ;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK4B;AAC1B,QAAM,EAAE,cAAc,IAAI;AAC1B,MAAI,cAAc,MAAM,GAAG;AACzB,UAAM,UAAU,WAAW,MAAM,IAAI,OAAO,UAAU;AACtD,UAAM,SAAS,MAAM,WAAW,YAAY;AAAA,MAC1C;AAAA,MACA,cAAc;AAAA,MACd,mBAAmB,OAAO;AAAA,IAC5B,CAAC;AAED,WAAO,iBAAiB,MAAM;AAAA,EAChC;AAEA,QAAM,UAAU,MAAM,cAAc,IAAI;AAAA,IACtC,mBAAmB;AAAA,IACnB,KAAK,OAAO;AAAA,EACd,CAAC;AAED,QAAM,UAAU,MAAM,kBAAkB;AAAA,IACtC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,oBAAoB,EAAE,SAAS,QAAQ,CAAC;AACjD;AACA,eAAsB,oCAAoC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,YAAY,SAAS,IAAI,MAAM,cAAc,gBAAgB;AAAA,IACnE,mBAAmB;AAAA,EACrB,CAAC;AAED,QAAM,yBAAyB,MAAM,WAAW,2BAA2B;AAAA,IACzE,cAAc;AAAA,EAChB,CAAC;AAED,QAAM,sBAAsB,SAAS,IAAI,CAAC,aAAa;AAAA,IACrD,GAAG;AAAA,IACH,SAAS,uBAAuB;AAAA,MAC9B,CAAC,EAAE,IAAI,MAAM,QAAQ,QAAQ,QAAQ,cAAc;AAAA,IACrD,GAAG;AAAA,EACL,EAAE;AAEF,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,EACZ;AACF;AAEA,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKmE;AACjE,QAAM,gBACJ,MAAM,WAAW,oBAAoB;AAAA,IACnC,cAAc,OAAO;AAAA,EACvB,CAAC,GACD,IAAI,gBAAgB;AAEtB,QAAM,gBAAgB,MAAM,8BAA8B;AAAA,IACxD;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,MACN,eAAe,OAAO;AAAA,IACxB;AAAA,EACF,CAAC;AAED,QAAM,SAAS,CAAC,GAAG,cAAc,GAAG,aAAa;AAEjD,SAAO;AAAA,IACL;AAAA,IACA,UAAU,OAAO,CAAC,GAAG,MAAM;AAAA,EAC7B;AACF;AAEA,eAAsB,aAAa;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,EAAE,gBAAgB,gBAAgB,WAAW,IAAI;AACvD,MAAI,cAAc,MAAM,GAAG;AACzB,UAAM,UAAU,WAAW,MAAM,IAAI,OAAO,UAAU;AACtD,UAAM,0BAA0B,MAAM,WAAW,YAAY;AAAA,MAC3D;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAED,WAAO,eAAe;AAAA,MACpB,oBAAoB,wBAAwB;AAAA,MAC5C,aAAa,wBAAwB;AAAA,MACrC,gBAAgB,OAAO,cAAc;AAAA,IACvC,CAAC;AAAA,EACH;AAEA,SAAO,yCAAyC;AAAA,IAC9C;AAAA,IACA;AAAA,IACA,gBAAgB,OAAO,cAAc;AAAA,IACrC,KAAK,OAAO;AAAA,IACZ,eAAe;AAAA,EACjB,CAAC;AACH;AAEA,eAAe,8BAA8B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK8B;AAC5B,QAAM,EAAE,UAAU,WAAW,IAAI,MAAM,oCAAoC;AAAA,IACzE;AAAA,IACA;AAAA,IACA,eAAe,OAAO;AAAA,EACxB,CAAC;AAED,QAAM,mBAAmB,SAAS;AAAA,IAChC,CAAC;AAAA;AAAA,MAEC,OAAO,QAAQ,YAAY;AAAA;AAAA,EAC/B;AAEA,MAAI,iBAAiB,WAAW;AAAG,WAAO,CAAC;AAE3C,QAAM,UAAU,MAAM,kBAAkB;AAAA,IACtC;AAAA,IACA,eAAe,OAAO;AAAA,EACxB,CAAC;AAED,SAAO,iBAAiB,IAAI,CAAC,YAAY;AACvC,WAAO,oBAAoB;AAAA,MACzB,SAAS;AAAA,QACP,SAAS,QAAQ;AAAA;AAAA,QAEjB,QAAQC;AAAA,QACR;AAAA,QACA,mBAAmB,OAAO;AAAA,QAC1B,WAAW,QAAQ;AAAA,MACrB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAIA,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AACF,GAMmC;AACjC,MACE,kBAAkB,QAAQ,OAAO,KACjC,kBAAkB,QAAQ,OAAO,GACjC;AACA,WAAO;AAAA,MACL,SAAS,QAAQ;AAAA,MACjB,WAAW,QAAQ,QAAQ,cAAc,YAAY;AAAA,MACrD,oBAAoB;AAAA,MACpB,UAAU;AAAA,MACV,KAAK,QAAQ,QAAQ,cAAc;AAAA,MACnC,UAAU;AAAA,QACR,SAAS,QAAQ;AAAA,QACjB,MAAM,QAAQ,WAAY;AAAA,QAC1B,KAAK,QAAQ,WAAY;AAAA,MAC3B;AAAA,MACA,UAAU,QAAQ,QAAQ,cAAc,YAAY;AAAA,MACpD,aAAa;AAAA,MACb,aAAa;AAAA,QACX,UAAU,QAAQ,QAAQ,cAAc,YAAY;AAAA,QACpD,qBACE,QAAQ,QAAQ,cAAc,YAAY;AAAA,QAC5C,eAAe,QAAQ,QAAQ,cAAc,YAAY;AAAA,QACzD,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,gCAAgC;AAClD;AAEA,IAAM,yBACJ,CAAC,WACD,CAAC,YAAgC;AAAA,EAC/B,YAAY,oBAAoB,EAAE,OAAO,QAAQ,YAAY,OAAO,CAAC;AAAA,EACrE,eAAe,0BAA0B,QAAQ,MAAM;AAAA,EACvD,OAAO,eAAe;AAAA,IACpB,aAAa,OAAO;AAAA,IACpB,gBAAgB,OAAO,OAAO,cAAc;AAAA,IAC5C,oBAAoB,OAAO;AAAA,EAC7B,CAAC;AACH;AAEF,SAAS,iBACP,QACgB;AAChB,SAAO,EAAE,OAAO,QAAQ,aAAa,uBAAuB,MAAM,EAAE;AACtE;AAEA,IAAM,yBACJ,CACE,UACA,SACA,YAKF,CAAC,YAAgC;AAAA,EAC/B,YAAY,qBAAqB;AAAA,IAC/B,eAAe;AAAA,IACf;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,OAAO,eAAe;AAAA,IACpB,oBAAoB;AAAA,IACpB,gBAAgB,OAAO,OAAO,cAAc;AAAA,IAC5C,aAAa,SAAS;AAAA,EACxB,CAAC;AACH;AAEF,SAAS,oBAAoB;AAAA,EAC3B;AAAA,EACA;AACF,GAMmB;AACjB,QAAM,WAAW,aAAa,EAAE,SAAS,QAAQ,CAAC;AAElD,SAAO;AAAA,IACL,OAAO;AAAA,IACP,aAAa,uBAAuB,UAAU,SAAS,OAAO;AAAA,EAChE;AACF;AACA,SAAS,0BACP,QACA,QAC2B;AAC3B,MAAI,OAAO,YAAY,aAAa;AAAS,WAAO;AAEpD,SAAO;AAAA,IACL,UAAU,OAAO,YAAY,gBAAgB,OAAO,OAAO,cAAc;AAAA,IACzE,WAAW,OAAO,YAAY;AAAA,IAC9B,OAAO,OAAO,YAAY;AAAA,EAC5B;AACF;;;AC1SA,IAAM,YAAN,cAAwB,MAAM;AAAC;AAC/B,IAAM,oBAAN,cAAgC,MAAM;AAAC;AAEhC,IAAM,SAAS;AAAA,EACpB;AAAA,EACA;AACF;AAEO,IAAM,aAAN,MAAiB;AAAA,EAKtB,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,KACJ,YAC4B;AAC5B,WAAO,KAAK;AAAA,MACV;AAAA,MACA,cAAc,KAAK;AAAA,MACnB,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,IACtB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,IAAI,YAA+B;AACvC,WAAO,QAAQ;AAAA,MACb,QAAQ;AAAA,MACR,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,MACpB,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAc,QAGjB;AACD,WAAO,mBAAmB;AAAA,MACxB;AAAA,MACA,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,MACpB,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,YAAwD;AACzE,WAAO,aAAa;AAAA,MAClB,QAAQ;AAAA,MACR,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,MACpB,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA,EACH;AACF;AAEA,eAAe,KAAK;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK+B;AAC7B,QAAM,EAAE,YAAY,IAAI,MAAM,QAAQ;AAAA,IACpC,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,YAAY;AAAA,IACjB,eAAe,WAAW;AAAA,IAC1B,gBAAgB,WAAW;AAAA,IAC3B,aAAa,WAAW;AAAA,IACxB,aAAa,WAAW;AAAA,IACxB,eAAe,WAAW;AAAA,IAC1B,cAAc,WAAW;AAAA,EAC3B,CAAC;AACH;AAEA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAKE;AACA,QAAM,EAAE,eAA8B,mBAAmB,SAAS,IAChE;AACF,QAAM,UAAU,WAAW,UAAU,IAAI,WAAW,UAAU;AAC9D,QAAM,0BAA0B,MAAM,WAAW,YAAY;AAAA,IAC3D;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,EACrB,CAAC;AAED,SAAO,oBAAoB;AAAA,IACzB,YAAY;AAAA,IACZ,OAAO;AAAA,EACT,CAAC;AACH;;;ACrKA;AAAA,EACE,iCAAAC;AAAA,EACA,qCAAAC;AAAA,EACA,0BAAAC;AAAA,OACK;AASP,SAAS,kBAAAC,uBAAsB;;;ACX/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,0BAAAC;AAAA,OACK;AAGP,SAAS,uBAAuB,SAAyB;AACvD,QAAM,UAAU,cAAc,UAAU,OAA+B;AACvE,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,mCAAmC,OAAO,EAAE;AAAA,EAC9D;AAEA,SAAO,QAAQ;AACjB;AAEA,eAAsB,gBAAgB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWG;AAGD,QAAM,kBACJ,OAAO,aAAa,WAChB,WACA,MAAM,aAAa,aAAa;AAAA,IAC9B,KAAK;AAAA;AAAA,IAEL,SACE,kCACE,OACF;AAAA,IACF,cAAc;AAAA,IACd,MAAM;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS,gBAAgB;AAAA,IAC3B;AAAA,EACF,CAAC;AAEP,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,sBAAkB,MAAM,aAAa,aAAa;AAAA,MAChD,KAAKA;AAAA,MACL,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,CAAC;AACD,qBAAiB;AAAA,EACnB,SAAS,GAAQ;AAGf,sBAAkB,uBAAuB,OAAO;AAChD,qBAAiB;AAAA,EACnB;AAEA,QAAM,cAAc,iBAChB,MAAM,aAAa,aAAa;AAAA,IAC9B,SAAS;AAAA,IACT,KAAKA;AAAA,IACL,cAAc;AAAA,EAChB,CAAC,IACD;AAEJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACvFA;AAAA,EACE,kBAAAC;AAAA,EACA,sBAAsB;AAAA,EACtB,0BAAAC;AAAA,EACA;AAAA,EACA,4CAAAC;AAAA,OACK;AACP,SAAkB,oBAAoB,eAAAC,oBAAwB;AAC9D,YAAYC,aAAY;AAUjB,IAAM,kBAAkB;AAAA,EAC7B,QAAQ,MAAM;AAChB;AAWA,IAAM,wBAAwB,CAC5B,iBACoC;AACpC,QAAM,mBAAmB;AAEzB,QAAM,wBAAyD;AAAA,IAC7D,UAAUC;AAAA;AAAA,IAEV,eAAe;AAAA;AAAA,IAEf,WAAW;AAAA;AAAA,IAEX,SAAS;AAAA;AAAA,IAET,qBAAqB;AAAA,EACvB;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;AAEA,SAAS,qBACP,OACA,cACc;AACd,QAAM,EAAE,iBAAiB,eAAe,IAAI;AAC5C,QAAM,wBACJ,kBAAkB,mBAAmBA,eACjC,iBACA;AACN,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,gBAAgB,MAAM,kBAAkBA;AAAA,IACxC,WACE,OAAO,MAAM,cAAc,cACvB,yBACA,OAAO,MAAM,SAAS;AAAA,IAC5B,YAAY,MAAM,cAAc;AAAA,IAChC,aAAa,sBAAsB,MAAM,WAAW;AAAA,IACpD,kBAAkB,MAAM;AAAA,EAC1B;AACF;AAQA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB;AACF,GAGE;AACA,QAAM,qBACJ,qBAAqB,OAA4C;AACnE,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,uCAAuC,OAAO,EAAE;AAElE,QAAM,sBAAsB,mBAAmB;AAAA,IAC7C,KAAKC;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,OAAO,WAAW,GAAG,oBAAoB,gBAAgB,MAAM;AAAA,EACxE,CAAC;AAED,QAAM,WAAW,mBAAmB;AAAA,IAClC,KAAKC;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA,MACJ,OAAO,WAAW;AAAA,MAClB;AAAA,QACE,WAAW,aAAa,OAAO,CAAC;AAAA,QAChC,SAAS,WAAW,OAAO,CAAC;AAAA,QAC5B,qBAAqB,OAAO,aAAa,CAAC;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,WAAW,mBAAmB;AAAA,IAClC,KAAKD;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,OAAO,WAAW,GAAG,oBAAoB,QAAQ;AAAA,EAC1D,CAAC;AAED,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,cAAc,CAAC,qBAAqB,QAAQ;AAAA,EAC9C;AACF;AAQA,SAAS,sBAAsB;AAAA,EAC7B,eAAe;AAAA,EACf,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB;AACF,GAAyE;AACvE,QAAM,4BACJE,0CACE,OACF;AACF,QAAM,qBAAqB,mBAAmB;AAAA,IAC5C,KAAKF;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA,MACJ,OAAO,WAAW;AAAA,MAClB;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,EACF,CAAC;AAED,QAAM,WAAW,mBAAmB;AAAA,IAClC,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA,MACJ,OAAO,WAAW;AAAA,MAClB;AAAA,QACE,eAAe;AAAA,QACf,WAAW,aAAa,OAAO,CAAC;AAAA,QAChC,SAAS,WAAW,OAAO,CAAC;AAAA,QAC5B,qBAAqB,OAAO,aAAa,CAAC;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,WAAW,mBAAmB;AAAA,IAClC,KAAKA;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,OAAO,WAAW,GAAG,2BAA2B,QAAQ;AAAA,EACjE,CAAC;AAED,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,cAAc,CAAC,oBAAoB,QAAQ;AAAA,EAC7C;AACF;AAEO,SAAS,aAAa,EAAE,aAAa,GAAG,KAAK,GAGlD;AACA,MAAI,CAAC;AAAa,UAAM,IAAI,MAAM,2BAA2B;AAC7D,QAAM,EAAE,UAAU,gBAAgB,IAAI;AAEtC,MAAI,oBAAoBD,cAAa;AACnC,WAAO,sBAAsB;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,EACH,OAAO;AACL,WAAO,iBAAiB;AAAA,MACtB,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA,YAAY;AAAA,EACZ,iBAAiBA;AAAA,EACjB;AACF,GAKQ;AAIN,MAAI,4BAA4B,iBAAiB,SAAS,GAAG;AAC3D,WAAO,mBAAmB;AAAA,MACxB,KAAKC;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,UAAU,OAAO,SAAS,GAAG,cAAc;AAAA,IACpD,CAAC;AAAA,EACH;AAEA,MAAI,mBAAmBD,cAAa;AAClC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO,mBAAmB;AAAA,IACxB,KAAKC;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,UAAU,OAAO,SAAS,CAAC;AAAA,EACpC,CAAC;AACH;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,MAAI,aAAa,KAAK,oBAAoBD,cAAa;AACrD,WAAO,mBAAmB;AAAA,MACxB,KAAKC;AAAA,MACL,cAAc;AAAA,MACd,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA,qBAAqB;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,MAAI,CAAC,gBAAgB,gBAAgB,KAAK,CAAC,cAAc;AACvD,WAAO;AAAA,EACT;AAEA,SAAO,mBAAmB;AAAA,IACxB,KAAKA;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,cAAc,aAAa,OAAO,YAAY,GAAGD,YAAW;AAAA,EACrE,CAAC;AACH;AAEO,SAAS,8BACd,OASA;AACA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,gCAAgC;AAAA,IACpC;AAAA,IACA;AAAA,EACF;AAEA,QAAM,wBAAwB,mBAAmB;AAAA,IAC/C,KAAKC;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,cAAc,EAAE;AAAA,EACzB,CAAC;AAED,QAAM,gBAAgB,mBAAmB;AAAA,IACvC,UAAU,8BAA8B;AAAA,IACxC,WAAW,8BAA8B;AAAA,IACzC,gBAAgB,8BAA8B;AAAA,IAC9C;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,mBAAmB;AAAA,IACvC,YAAY,8BAA8B;AAAA,IAC1C,kBAAkB,8BAA8B;AAAA,IAChD;AAAA,EACF,CAAC;AAED,QAAM,EAAE,QAAQ,cAAc,aAAa,IAAI,aAAa;AAAA,IAC1D,SAAS;AAAA,IACT;AAAA,IACA,gBAAgB,8BAA8B;AAAA,IAC9C,aAAa,8BAA8B;AAAA,EAC7C,CAAC;AAED,QAAM,gBAAgB,kBAAkB;AAAA,IACtC;AAAA,IACA,cAAc;AAAA,IACd;AAAA,EACF,CAAC;AAED,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,EAAE,OAAO,CAAC,SAAS,SAAS,IAAI;AAEhC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,8BAA8B,CACzC,iBACA,qBACG;AACH,MAAI,CAAC,oBAAoB,CAAC,iBAAiB;AACzC,WAAO;AAAA,EACT;AAGA,QAAM,wBAA+B,eAAO,eAAe,GAAG;AAC9D,MAAI,CAAC;AAAuB,WAAO;AAEnC,MAAI,qBAAqB,WAAW;AAClC,WAAc,YAAI,uBAAuB,OAAO;AAAA,EAClD,OAAO;AACL,WAAc,YAAI,uBAAuB,QAAQ;AAAA,EACnD;AACF;;;AFtWA,IAAM,sBAAsB;AAErB,IAAM,8BAA8B,CACzC,YACuB;AACvB,aAAW,QAAQ,QAAQ,MAAM;AAC/B,QAAI;AACF,YAAM,aAAaG,gBAAe;AAAA,QAChC,KAAKC;AAAA,QACL,WAAW;AAAA,QACX,GAAG;AAAA,MACL,CAAC;AACD,UAAI,cAAc,WAAW,cAAc,iBAAiB;AAC1D,eAAO,WAAW,KAAK;AAAA,MACzB;AAAA,IACF,SAAS,KAAU;AAAA,IAAC;AAAA,EACtB;AACF;AAmBA,SAAS,+BAA+B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQG;AACD,MAAI,CAAC,mBAAmB,OAAO,aAAa,UAAU;AACpD,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AAEA,MAAI,CAAC,gBAAgB;AACnB,QAAI,OAAO,aAAa,UAAU;AAChC,YAAM,IAAI,MAAM,qCAAqC;AAAA,IACvD;AAEA,UAAM,iBACJ,OAAO,YAAY,WAAW,UAAU,QAAQ;AAClD,WAAO,uBAAuB;AAAA,MAC5B,KAAKC;AAAA,MACL,cAAc;AAAA,MACd;AAAA,MACA,SAASC,mCAAkC,GAAG;AAAA,MAC9C,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,SAAS;AAAA,QACT;AAAA;AAAA,UAEE,qBAAqB;AAAA,UACrB,YAAY,cAAc;AAAA,UAC1B,kBAAkB,kBAAkB;AAAA,QACtC;AAAA,QACA,SAAS,gBAAgB;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,uBAAuB;AAAA,IAC5B,KAAKF;AAAA,IACL,cAAc;AAAA,IACd;AAAA,IACA,SAAS;AAAA,IACT,MAAM,CAAC,iBAAiB;AAAA,EAC1B,CAAC;AACH;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAI5B,YAAY;AAAA,IACV;AAAA,IACA;AAAA,EACF,GAGG;AACD,SAAK,UAAU;AACf,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,mBAAmB,OAA4B;AACnD,WAAO,mBAAmB;AAAA,MACxB,GAAG;AAAA,MACH,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AACF;AAEA,eAAe,mBAAmB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAGsC;AACpC,QAAM,EAAE,gBAAgB,iBAAiB,aAAa,gBAAgB,IACpE,MAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAEH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,cAAc;AAAA,EAChB,IAAI,8BAA8B;AAAA,IAChC;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AAED,QAAM,eAAe,4BACjB;AAAA,IACE,GAAG,0BAA0B;AAAA,MAC3B,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAAA,IACD,GAAG;AAAA,EACL,IACA;AAEJ,QAAM,UAAU,+BAA+B;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB,YAAY,YAAY;AAAA,IACxB,gBAAgB,YAAY;AAAA,EAC9B,CAAC;AAED,SAAO;AAAA,IACL,YAAY;AAAA,IACZ;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACF;AACF;;;AGnMO,IAAM,uCAAuC,CAAC,YAAqB;AACxE,QAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYd,SAAO;AAAA,IACL;AAAA,IACA,WAAW,EAAE,QAAQ;AAAA,EACvB;AACF;AAkBO,IAAM,0CAA0C,CACrD,qBACA,sBACG;AACH,QAAM,SAAS,oBAAoB,IAAI,CAAC,MAAM;AAC5C,WAAO;AAAA,MACL,SAAS,OAAO,EAAE,UAAU,EAAE;AAAA,MAC9B,UAAU,OAAO,EAAE,OAAO;AAAA,MAC1B,eAAe,OAAO,EAAE,UAAU,aAAa;AAAA,IACjD;AAAA,EACF,CAAC;AAID,QAAM,SAAS,OAAO,KAAK,CAAC,GAAG,MAAM;AACnC,QAAI,EAAE,gBAAgB,EAAE,eAAe;AACrC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AAGD,MAAI,oBAAoB;AACxB,QAAM,WAAqB,CAAC;AAC5B,QAAM,aAAuB,CAAC;AAE9B,SAAO,oBAAoB,GAAG;AAC5B,UAAM,OAAO,OAAO,MAAM;AAC1B,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAEA,UAAM,gBACJ,oBAAoB,KAAK,WAAW,KAAK,WAAW;AACtD,aAAS,KAAK,KAAK,OAAO;AAC1B,eAAW,KAAK,aAAa;AAC7B,yBAAqB;AAAA,EACvB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAOO,IAAM,cAAc,CACzB,wBACG;AACH,SAAO,oBAAoB,OAAO,CAAC,KAAK,SAAS;AAC/C,WAAO,MAAM,OAAO,KAAK,OAAO;AAAA,EAClC,GAAG,OAAO,CAAC,CAAC;AACd;;;AC7FA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQP;AAAA,EAQE;AAAA,EACA,sBAAAG;AAAA,EACA,eAAAC;AAAA,OACK;AAEP,IAAM,0BAA0B,CAAC,YAC/B,OAAO,YAAY,WAAW,UAAU,QAAQ;AAa3C,IAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAOE,uBAAuB;AAAA,EACrB,KAAK,2BAA2B;AAAA,EAChC,SAAS,2BAA2B,QAAQ,OAAO;AAAA,EACnD,cAAc;AAAA,EACd,MAAM,CAAC,UAAU,aAAa,wBAAwB,OAAO,CAAC;AAAA,EAC9D,OAAO,eAAe;AAAA,EACtB;AACF,CAAC;AAEH,IAAM,mBAAmB,CAAC,YAAsB,iBAA0B;AACxE,MAAI,CAAC,gBAAgB,iBAAiB;AAAI;AAE1C,SAAO,WAAW,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,IAAI;AAClD;AAOO,IAAM,8BAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AACF,OAMM;AAAA,EACJ,KAAK,oBAAoB;AAAA,EACzB,SAAS,oBAAoB,QAAQ,OAAO;AAAA,EAC5C,cAAc;AAAA,EACd,MAAM,CAAC,OAAO;AAChB;AAWO,IAAM,yBAAyB,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MACED,oBAAmB;AAAA,EACjB,KAAK,2BAA2B;AAAA,EAChC,cAAc;AAAA,EACd,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF,CAAC;AAcI,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK4B;AAC1B,QAAM,OAAO,uBAAuB;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,uBAAuB;AAAA,IAC5B,KAAK,oBAAoB;AAAA,IACzB,SAAS,oBAAoB,QAAQ,OAAO;AAAA,IAC5C,cAAc;AAAA,IACd,MAAM,CAAC,UAAU,YAAY,IAAI;AAAA;AAAA;AAAA,IAGjC,OAAO,iBAAiB,YAAY,qBAAqB;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAiBO,SAAS,iBAAiB;AAAA,EAC/B;AACF,GAEG;AACD,QAAM,UAAU,aAAa,OAAO;AAIpC,MAAI,CAAC,WAAW,CAAC,4BAA4B,OAAO,GAAG;AACrD,UAAM,IAAI,MAAM,YAAY,OAAO,gBAAgB;AAAA,EACrD;AAEA,SAAO,aAAa,aAAa;AAAA,IAC/B,KAAK;AAAA,IACL,SAAS,4BAA4B,OAAO;AAAA,IAC5C,cAAc;AAAA,EAChB,CAAC;AACH;AAcO,SAAS,mCAAmC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkC;AAChC,QAAM,SAAkC;AAAA,IACtC,OAAO,OAAO,eAAe,WAAW,aAAa,WAAW;AAAA,IAChE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,YAAqC;AAAA,IACzC,GAAG,0CAA0C;AAAA,MAC3C;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAAA,IACD,SAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAcO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASG;AACD,QAAM,SAA6B;AAAA,IACjC,OAAO,OAAO,eAAe,WAAW,aAAa,WAAW;AAAA,IAChE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,YAAqC;AAAA,IACzC,GAAG,qCAAqC;AAAA,MACtC;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAAA,IACD,SAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAYA,IAAM,yBAAyB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiBC;AACnB,MACED,oBAAmB;AAAA,EACjB,KAAK,2BAA2B;AAAA,EAChC,cAAc;AAAA,EACd,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF,CAAC;AAeI,IAAM,yCAAyC,CAAC;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAUQ;AACN,MAAI;AAEJ,MAAI,SAAS;AACX,uBAAmB,uBAAuB,OAAO;AAAA,EACnD,WAAW,SAAS;AAClB,uBAAmB,uBAAuB,OAAO;AAAA,EACnD,OAAO;AACL,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AAEA,SAAO,mCAAmC;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,2BAA2B,QAAQ,OAAO;AAAA,EAChD,CAAC;AACH;AAeO,SAAS,gCAAgC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAI4B;AAC1B,QAAM,OAAO,uBAAuB;AAAA,IAClC,GAAG;AAAA,EACL,CAAC;AAED,SAAO,uBAAuB;AAAA,IAC5B,KAAK,oBAAoB;AAAA,IACzB,SAAS,oBAAoB,QAAQ,OAAO;AAAA,IAC5C,cAAc;AAAA,IACd,MAAM,CAAC,UAAU,YAAY,IAAI;AAAA,IACjC,OAAO,iBAAiB,YAAY,qBAAqB;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAyBO,SAAS,sBAAsB,OAAsC;AAC1E,MAAI,MAAM,MAAM,cAAc;AAC5B,UAAM,IAAI,MAAM,wBAAwB;AAE1C,QAAM,oBAAoB,MAAM,MAAM,OAAO,CAAC;AAE9C,SAAO,kBAAkB;AAAA,IACvB,KAAK;AAAA,IACL,MAAM;AAAA,EACR,CAAC;AACH;;;AC7cA;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAgC,sBAAAE,2BAA0B;AAgBnD,IAAM,kCAAkC,CAAC;AAAA,EAC9C,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AACT,MACEC,oBAAmB;AAAA,EACjB,KAAK;AAAA,EACL,cAAc;AAAA,EACd,MAAM,CAAC,eAAe,gBAAgB,WAAW;AACnD,CAAC;AAeI,IAAM,kDAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAkBE,mCAAmC;AAAA,EACjC,YAAYA;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBACE,oBAAoB,gCAAgC,WAAW;AAAA,EACjE,IAAI,kCAAkC,OAAO;AAAA,EAC7C;AACF,CAAC;;;AC5CI,SAAS,oBACd,cACe;AACf,QAAM,gBAAgB,IAAI,cAAc;AAAA,IACtC,SAAS,aAAa;AAAA,IACtB,cAAc,aAAa;AAAA,IAC3B,YACE,aAAa,cAAc,IAAI,iBAAiB,aAAa,OAAO;AAAA,EACxE,CAAC;AAED,QAAM,0BAA0B,IAAI,iBAAiB;AAAA,IACnD,SAAS,aAAa;AAAA,IACtB,cAAc,aAAa;AAAA,EAC7B,CAAC;AAED,SAAO;AAAA,IACL,eAAe,CAAC,MAAM,cAAc,cAAc,CAAC;AAAA,IACnD,eAAe,CAAC,MAAM,cAAc,cAAc,CAAC;AAAA,IACnD,eAAe,CAAC,MAAM,cAAc,cAAc,CAAC;AAAA,IACnD,YAAY,CAAC,MAAM,wBAAwB,mBAAmB,CAAC;AAAA,EACjE;AACF;AAeO,SAAS,sBACd,QACiB;AACjB,QAAM,qBACJ,OAAO,iBAAiB,IAAI,iBAAiB,OAAO,OAAO;AAC7D,QAAM,kBACJ,OAAO,cAAc,IAAI,mBAAmB,OAAO,OAAO;AAC5D,QAAM,aAAa,IAAI,WAAW;AAAA,IAChC,cAAc,OAAO;AAAA,IACrB,eAAe;AAAA,IACf,YAAY;AAAA,EACd,CAAC;AAED,SAAO;AAAA,IACL,YAAY,CAAC,MACX,mBAAmB,IAAI;AAAA,MACrB,mBAAmB,EAAE;AAAA,MACrB,KAAK,EAAE;AAAA,IACT,CAAC;AAAA,IACH,kCAAkC,CAAC,MACjC,0BAA0B,GAAG,OAAO,OAAO;AAAA,IAC7C,UAAU,CAAC,MAAM,WAAW,IAAI,CAAC;AAAA,IACjC,qBAAqB,CAAC,MAAM,WAAW,cAAc,CAAC;AAAA,IACtD,MAAM,CAAC,MAAM,WAAW,KAAK,CAAC;AAAA,IAC9B,cAAc,CAAC,MAAM,WAAW,aAAa,CAAC;AAAA,EAChD;AACF;;;AClGO,SAAS,aAAa,KAAyC;AACpE,SAAO,OAAO,OAAO,QAAQ,WAAW,IAAI,WAAW,OAAO,IAAI;AACpE;;;ACJA,IAAI,WAAW;AACf,IAAI,MAAM;AAAV,IAAe,OAAO;AAAtB,IAA2B,SAAS,CAAC;AAArC,IAA2C,MAAM,KAAK,IAAI,GAAG,EAAE;AAC/D,SAAS,OAAO,KAAK,KAAK,QAAQ;AAChC,QAAM,OAAO,CAAC;AACd,WAAS,UAAU;AACnB,MAAI,YAAY;AAChB,SAAO,OAAO,KAAK;AACjB,QAAI,QAAQ,IAAI,MAAM,MAAM;AAC5B,WAAO;AAAA,EACT;AACA,SAAO,MAAM,QAAQ;AACnB,QAAI,QAAQ,IAAI,MAAM,MAAM;AAC5B,aAAS;AAAA,EACX;AACA,MAAI,MAAM,IAAI,MAAM;AACpB,SAAO,QAAQ,SAAS,YAAY;AACpC,SAAO;AACT;AACA,IAAI,SAAS;AACb,IAAI,QAAQ;AAAZ,IAAiB,SAAS;AAC1B,SAAS,KAAK,KAAK,QAAQ;AACzB,MAAI,MAAM,GAAG,SAAS,UAAU,GAAG,QAAQ,GAAG,UAAU,QAAQ,GAAG,IAAI,IAAI;AAC3E,KAAG;AACD,QAAI,WAAW,GAAG;AAChB,WAAK,QAAQ;AACb,YAAM,IAAI,WAAW,yBAAyB;AAAA,IAChD;AACA,QAAI,IAAI,SAAS;AACjB,WAAO,QAAQ,MAAM,IAAI,WAAW,SAAS,IAAI,UAAU,KAAK,IAAI,GAAG,KAAK;AAC5E,aAAS;AAAA,EACX,SAAS,KAAK;AACd,OAAK,QAAQ,UAAU;AACvB,SAAO;AACT;AACA,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC;AACtB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,SAAS,SAAU,OAAO;AAC5B,SAAO,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI;AAClK;AACA,IAAI,SAAS;AAAA,EACX,QAAQ;AAAA,EACR;AAAA,EACA,gBAAgB;AAClB;AACA,IAAI,eAAe;AACnB,IAAO,iBAAQ;;;ACnDR,IAAMC,UAAS,CAAC,MAAM,SAAS,MAAM;AAC1C,QAAM,OAAO,eAAO,OAAO,MAAM,MAAM;AACvC,SAAO;AAAA,IACL;AAAA,IACA,eAAO,OAAO;AAAA,EAChB;AACF;AACO,IAAM,WAAW,CAAC,KAAK,QAAQ,SAAS,MAAM;AACnD,iBAAO,OAAO,KAAK,QAAQ,MAAM;AACjC,SAAO;AACT;AACO,IAAM,iBAAiB,SAAO;AACnC,SAAO,eAAO,eAAe,GAAG;AAClC;;;ACdA,IAAM,QAAQ,IAAI,WAAW,CAAC;AAM9B,IAAM,SAAS,CAAC,IAAI,OAAO;AACzB,MAAI,OAAO;AACT,WAAO;AACT,MAAI,GAAG,eAAe,GAAG,YAAY;AACnC,WAAO;AAAA,EACT;AACA,WAAS,KAAK,GAAG,KAAK,GAAG,YAAY,MAAM;AACzC,QAAI,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG;AACrB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AACA,IAAMC,UAAS,OAAK;AAClB,MAAI,aAAa,cAAc,EAAE,YAAY,SAAS;AACpD,WAAO;AACT,MAAI,aAAa;AACf,WAAO,IAAI,WAAW,CAAC;AACzB,MAAI,YAAY,OAAO,CAAC,GAAG;AACzB,WAAO,IAAI,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU;AAAA,EAC5D;AACA,QAAM,IAAI,MAAM,mCAAmC;AACrD;;;ACvBO,IAAM,SAAS,CAAC,MAAM,WAAW;AACtC,QAAM,OAAO,OAAO;AACpB,QAAM,aAAoB,eAAe,IAAI;AAC7C,QAAM,eAAe,aAAoB,eAAe,IAAI;AAC5D,QAAM,QAAQ,IAAI,WAAW,eAAe,IAAI;AAChD,EAAO,SAAS,MAAM,OAAO,CAAC;AAC9B,EAAO,SAAS,MAAM,OAAO,UAAU;AACvC,QAAM,IAAI,QAAQ,YAAY;AAC9B,SAAO,IAAI,OAAO,MAAM,MAAM,QAAQ,KAAK;AAC7C;AACO,IAAMC,UAAS,eAAa;AACjC,QAAM,QAAQC,QAAO,SAAS;AAC9B,QAAM,CAAC,MAAM,UAAU,IAAWD,QAAO,KAAK;AAC9C,QAAM,CAAC,MAAM,YAAY,IAAWA,QAAO,MAAM,SAAS,UAAU,CAAC;AACrE,QAAM,SAAS,MAAM,SAAS,aAAa,YAAY;AACvD,MAAI,OAAO,eAAe,MAAM;AAC9B,UAAM,IAAI,MAAM,kBAAkB;AAAA,EACpC;AACA,SAAO,IAAI,OAAO,MAAM,MAAM,QAAQ,KAAK;AAC7C;AACO,IAAME,UAAS,CAAC,GAAG,MAAM;AAC9B,MAAI,MAAM,GAAG;AACX,WAAO;AAAA,EACT,OAAO;AACL,WAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,OAAW,EAAE,OAAO,EAAE,KAAK;AAAA,EAC9E;AACF;AACO,IAAM,SAAN,MAAa;AAAA,EAClB,YAAY,MAAM,MAAM,QAAQ,OAAO;AACrC,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,QAAQ;AAAA,EACf;AACF;;;ACvCA,SAASC,MAAK,UAAU,MAAM;AAC5B,MAAI,SAAS,UAAU,KAAK;AAC1B,UAAM,IAAI,UAAU,mBAAmB;AAAA,EACzC;AACA,MAAI,WAAW,IAAI,WAAW,GAAG;AACjC,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,aAAS,CAAC,IAAI;AAAA,EAChB;AACA,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,IAAI,SAAS,OAAO,CAAC;AACzB,QAAI,KAAK,EAAE,WAAW,CAAC;AACvB,QAAI,SAAS,EAAE,MAAM,KAAK;AACxB,YAAM,IAAI,UAAU,IAAI,eAAe;AAAA,IACzC;AACA,aAAS,EAAE,IAAI;AAAA,EACjB;AACA,MAAI,OAAO,SAAS;AACpB,MAAI,SAAS,SAAS,OAAO,CAAC;AAC9B,MAAI,SAAS,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG;AAC1C,MAAI,UAAU,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI;AAC3C,WAASC,QAAO,QAAQ;AACtB,QAAI,kBAAkB;AAAW;AAAA,aACxB,YAAY,OAAO,MAAM,GAAG;AACnC,eAAS,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,OAAO,UAAU;AAAA,IAC7E,WAAW,MAAM,QAAQ,MAAM,GAAG;AAChC,eAAS,WAAW,KAAK,MAAM;AAAA,IACjC;AACA,QAAI,EAAE,kBAAkB,aAAa;AACnC,YAAM,IAAI,UAAU,qBAAqB;AAAA,IAC3C;AACA,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO;AAAA,IACT;AACA,QAAI,SAAS;AACb,QAAIC,UAAS;AACb,QAAI,SAAS;AACb,QAAI,OAAO,OAAO;AAClB,WAAO,WAAW,QAAQ,OAAO,MAAM,MAAM,GAAG;AAC9C;AACA;AAAA,IACF;AACA,QAAI,QAAQ,OAAO,UAAU,UAAU,MAAM;AAC7C,QAAI,MAAM,IAAI,WAAW,IAAI;AAC7B,WAAO,WAAW,MAAM;AACtB,UAAI,QAAQ,OAAO,MAAM;AACzB,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAID,YAAW,QAAQ,IAAI,OAAOC,MAAK;AAC9E,iBAAS,MAAM,IAAI,GAAG,MAAM;AAC5B,YAAI,GAAG,IAAI,QAAQ,SAAS;AAC5B,gBAAQ,QAAQ,SAAS;AAAA,MAC3B;AACA,UAAI,UAAU,GAAG;AACf,cAAM,IAAI,MAAM,gBAAgB;AAAA,MAClC;AACA,MAAAD,UAASC;AACT;AAAA,IACF;AACA,QAAI,MAAM,OAAOD;AACjB,WAAO,QAAQ,QAAQ,IAAI,GAAG,MAAM,GAAG;AACrC;AAAA,IACF;AACA,QAAI,MAAM,OAAO,OAAO,MAAM;AAC9B,WAAO,MAAM,MAAM,EAAE,KAAK;AACxB,aAAO,SAAS,OAAO,IAAI,GAAG,CAAC;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AACA,WAAS,aAAa,QAAQ;AAC5B,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,IAAI,UAAU,iBAAiB;AAAA,IACvC;AACA,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO,IAAI,WAAW;AAAA,IACxB;AACA,QAAI,MAAM;AACV,QAAI,OAAO,GAAG,MAAM,KAAK;AACvB;AAAA,IACF;AACA,QAAI,SAAS;AACb,QAAIA,UAAS;AACb,WAAO,OAAO,GAAG,MAAM,QAAQ;AAC7B;AACA;AAAA,IACF;AACA,QAAI,QAAQ,OAAO,SAAS,OAAO,SAAS,MAAM;AAClD,QAAI,OAAO,IAAI,WAAW,IAAI;AAC9B,WAAO,OAAO,GAAG,GAAG;AAClB,UAAI,QAAQ,SAAS,OAAO,WAAW,GAAG,CAAC;AAC3C,UAAI,UAAU,KAAK;AACjB;AAAA,MACF;AACA,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAID,YAAW,QAAQ,IAAI,OAAOC,MAAK;AAC9E,iBAAS,OAAO,KAAK,GAAG,MAAM;AAC9B,aAAK,GAAG,IAAI,QAAQ,QAAQ;AAC5B,gBAAQ,QAAQ,QAAQ;AAAA,MAC1B;AACA,UAAI,UAAU,GAAG;AACf,cAAM,IAAI,MAAM,gBAAgB;AAAA,MAClC;AACA,MAAAD,UAASC;AACT;AAAA,IACF;AACA,QAAI,OAAO,GAAG,MAAM,KAAK;AACvB;AAAA,IACF;AACA,QAAI,MAAM,OAAOD;AACjB,WAAO,QAAQ,QAAQ,KAAK,GAAG,MAAM,GAAG;AACtC;AAAA,IACF;AACA,QAAI,MAAM,IAAI,WAAW,UAAU,OAAO,IAAI;AAC9C,QAAIE,KAAI;AACR,WAAO,QAAQ,MAAM;AACnB,UAAIA,IAAG,IAAI,KAAK,KAAK;AAAA,IACvB;AACA,WAAO;AAAA,EACT;AACA,WAASC,QAAO,QAAQ;AACtB,QAAI,SAAS,aAAa,MAAM;AAChC,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AACA,UAAM,IAAI,MAAM,OAAQ,IAAK,YAAY;AAAA,EAC3C;AACA,SAAO;AAAA,IACL,QAAQJ;AAAA,IACR;AAAA,IACA,QAAQI;AAAA,EACV;AACF;AACA,IAAI,MAAML;AACV,IAAI,kCAAkC;AACtC,IAAO,iBAAQ;;;AClIf,IAAM,UAAN,MAAc;AAAA,EACZ,YAAY,MAAM,QAAQ,YAAY;AACpC,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AACZ,QAAI,iBAAiB,YAAY;AAC/B,aAAO,GAAI,KAAK,MAAO,GAAI,KAAK,WAAW,KAAK,CAAE;AAAA,IACpD,OAAO;AACL,YAAM,MAAM,mCAAmC;AAAA,IACjD;AAAA,EACF;AACF;AACA,IAAM,UAAN,MAAc;AAAA,EACZ,YAAY,MAAM,QAAQ,YAAY;AACpC,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,QAAI,OAAO,YAAY,CAAC,MAAM,QAAW;AACvC,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AACA,SAAK,kBAAkB,OAAO,YAAY,CAAC;AAC3C,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,OAAO,MAAM;AACX,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,KAAK,YAAY,CAAC,MAAM,KAAK,iBAAiB;AAChD,cAAM,MAAM,qCAAsC,KAAK,UAAU,IAAI,CAAE,KAAM,KAAK,IAAK,+CAAgD,KAAK,MAAO,EAAE;AAAA,MACvJ;AACA,aAAO,KAAK,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM,CAAC;AAAA,IACvD,OAAO;AACL,YAAM,MAAM,mCAAmC;AAAA,IACjD;AAAA,EACF;AAAA,EACA,GAAG,SAAS;AACV,WAAO,GAAG,MAAM,OAAO;AAAA,EACzB;AACF;AACA,IAAM,kBAAN,MAAsB;AAAA,EACpB,YAAY,UAAU;AACpB,SAAK,WAAW;AAAA,EAClB;AAAA,EACA,GAAG,SAAS;AACV,WAAO,GAAG,MAAM,OAAO;AAAA,EACzB;AAAA,EACA,OAAO,OAAO;AACZ,UAAM,SAAS,MAAM,CAAC;AACtB,UAAM,UAAU,KAAK,SAAS,MAAM;AACpC,QAAI,SAAS;AACX,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B,OAAO;AACL,YAAM,WAAW,qCAAsC,KAAK,UAAU,KAAK,CAAE,+BAAgC,OAAO,KAAK,KAAK,QAAQ,CAAE,gBAAgB;AAAA,IAC1J;AAAA,EACF;AACF;AACO,IAAM,KAAK,CAAC,MAAM,UAAU,IAAI,gBAAgB;AAAA,EACrD,GAAG,KAAK,YAAY,EAAE,CAAC,KAAK,MAAM,GAAG,KAAK;AAAA,EAC1C,GAAG,MAAM,YAAY,EAAE,CAAC,MAAM,MAAM,GAAG,MAAM;AAC/C,CAAC;AACM,IAAM,QAAN,MAAY;AAAA,EACjB,YAAY,MAAM,QAAQ,YAAY,YAAY;AAChD,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,UAAU,IAAI,QAAQ,MAAM,QAAQ,UAAU;AACnD,SAAK,UAAU,IAAI,QAAQ,MAAM,QAAQ,UAAU;AAAA,EACrD;AAAA,EACA,OAAO,OAAO;AACZ,WAAO,KAAK,QAAQ,OAAO,KAAK;AAAA,EAClC;AAAA,EACA,OAAO,OAAO;AACZ,WAAO,KAAK,QAAQ,OAAO,KAAK;AAAA,EAClC;AACF;AACO,IAAM,OAAO,CAAC,EAAC,MAAM,QAAQ,QAAAM,SAAQ,QAAAC,QAAM,MAAM,IAAI,MAAM,MAAM,QAAQD,SAAQC,OAAM;AACvF,IAAM,QAAQ,CAAC,EAAC,QAAQ,MAAM,SAAQ,MAAM;AACjD,QAAM,EAAC,QAAAD,SAAQ,QAAAC,QAAM,IAAI,eAAM,UAAU,IAAI;AAC7C,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA,QAAAD;AAAA,IACA,QAAQ,UAAQE,QAAOD,QAAO,IAAI,CAAC;AAAA,EACrC,CAAC;AACH;AACA,IAAMA,UAAS,CAAC,QAAQ,UAAU,aAAa,SAAS;AACtD,QAAM,QAAQ,CAAC;AACf,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,UAAM,SAAS,CAAC,CAAC,IAAI;AAAA,EACvB;AACA,MAAI,MAAM,OAAO;AACjB,SAAO,OAAO,MAAM,CAAC,MAAM,KAAK;AAC9B,MAAE;AAAA,EACJ;AACA,QAAM,MAAM,IAAI,WAAW,MAAM,cAAc,IAAI,CAAC;AACpD,MAAI,OAAO;AACX,MAAI,SAAS;AACb,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAC5B,UAAM,QAAQ,MAAM,OAAO,CAAC,CAAC;AAC7B,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI,YAAY,OAAQ,IAAK,YAAY;AAAA,IACjD;AACA,aAAS,UAAU,cAAc;AACjC,YAAQ;AACR,QAAI,QAAQ,GAAG;AACb,cAAQ;AACR,UAAI,SAAS,IAAI,MAAM,UAAU;AAAA,IACnC;AAAA,EACF;AACA,MAAI,QAAQ,eAAe,MAAM,UAAU,IAAI,MAAM;AACnD,UAAM,IAAI,YAAY,wBAAwB;AAAA,EAChD;AACA,SAAO;AACT;AACA,IAAMD,UAAS,CAAC,MAAM,UAAU,gBAAgB;AAC9C,QAAM,MAAM,SAAS,SAAS,SAAS,CAAC,MAAM;AAC9C,QAAM,QAAQ,KAAK,eAAe;AAClC,MAAI,MAAM;AACV,MAAI,OAAO;AACX,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,aAAS,UAAU,IAAI,KAAK,CAAC;AAC7B,YAAQ;AACR,WAAO,OAAO,aAAa;AACzB,cAAQ;AACR,aAAO,SAAS,OAAO,UAAU,IAAI;AAAA,IACvC;AAAA,EACF;AACA,MAAI,MAAM;AACR,WAAO,SAAS,OAAO,UAAU,cAAc,IAAI;AAAA,EACrD;AACA,MAAI,KAAK;AACP,WAAO,IAAI,SAAS,cAAc,GAAG;AACnC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AACO,IAAM,UAAU,CAAC,EAAC,MAAM,QAAQ,aAAa,SAAQ,MAAM;AAChE,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA,OAAO,OAAO;AACZ,aAAOA,QAAO,OAAO,UAAU,WAAW;AAAA,IAC5C;AAAA,IACA,OAAO,OAAO;AACZ,aAAOC,QAAO,OAAO,UAAU,aAAa,IAAI;AAAA,IAClD;AAAA,EACF,CAAC;AACH;;;ACvJO,IAAM,YAAY,MAAM;AAAA,EAC7B,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AACZ,CAAC;AACM,IAAM,eAAe,MAAM;AAAA,EAChC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AACZ,CAAC;;;ACTM,IAAM,SAAS,QAAQ;AAAA,EAC5B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,cAAc,QAAQ;AAAA,EACjC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,YAAY,QAAQ;AAAA,EAC/B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,iBAAiB,QAAQ;AAAA,EACpC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,YAAY,QAAQ;AAAA,EAC/B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,iBAAiB,QAAQ;AAAA,EACpC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,eAAe,QAAQ;AAAA,EAClC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,oBAAoB,QAAQ;AAAA,EACvC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AACM,IAAM,UAAU,QAAQ;AAAA,EAC7B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;;;ACjDM,IAAM,MAAN,MAAM,KAAI;AAAA,EACf,YAAYE,UAAS,MAAM,WAAW,OAAO;AAC3C,SAAK,OAAO;AACZ,SAAK,UAAUA;AACf,SAAK,YAAY;AACjB,SAAK,QAAQ;AACb,SAAK,aAAa,MAAM;AACxB,SAAK,aAAa,MAAM;AACxB,SAAK,QAAQ;AACb,SAAK,aAAa,oBAAI,IAAI;AAC1B,WAAO,iBAAiB,MAAM;AAAA,MAC5B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AACL,YAAQ,KAAK,SAAS;AAAA,MACtB,KAAK,GAAG;AACJ,eAAO;AAAA,MACT;AAAA,MACF,SAAS;AACL,cAAM,EAAC,MAAM,UAAS,IAAI;AAC1B,YAAI,SAAS,aAAa;AACxB,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AACA,YAAI,UAAU,SAAS,cAAc;AACnC,gBAAM,IAAI,MAAM,oDAAoD;AAAA,QACtE;AACA,eAAO,KAAI,SAAS,SAAS;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AACL,YAAQ,KAAK,SAAS;AAAA,MACtB,KAAK,GAAG;AACJ,cAAM,EAAC,MAAM,OAAM,IAAI,KAAK;AAC5B,cAAM,YAAmB,OAAO,MAAM,MAAM;AAC5C,eAAO,KAAI,SAAS,KAAK,MAAM,SAAS;AAAA,MAC1C;AAAA,MACF,KAAK,GAAG;AACJ,eAAO;AAAA,MACT;AAAA,MACF,SAAS;AACL,cAAM,MAAM,+BAAgC,KAAK,OAAQ,4CAA4C;AAAA,MACvG;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,OAAO;AACZ,WAAO,SAAS,KAAK,SAAS,MAAM,QAAQ,KAAK,YAAY,MAAM,WAAkBC,QAAO,KAAK,WAAW,MAAM,SAAS;AAAA,EAC7H;AAAA,EACA,SAASC,OAAM;AACb,UAAM,EAAC,OAAO,SAAAF,UAAS,WAAU,IAAI;AACrC,YAAQA,UAAS;AAAA,MACjB,KAAK;AACH,eAAO,WAAW,OAAO,YAAYE,SAAQ,UAAU,OAAO;AAAA,MAChE;AACE,eAAO,WAAW,OAAO,YAAYA,SAAQ,OAAO,OAAO;AAAA,IAC7D;AAAA,EACF;AAAA,EACA,SAAS;AACP,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,MAAM,KAAK,UAAU;AAAA,IACvB;AAAA,EACF;AAAA,EACA,KAAK,OAAO,WAAW,IAAI;AACzB,WAAO;AAAA,EACT;AAAA,EACA,CAAC,OAAO,IAAI,4BAA4B,CAAC,IAAI;AAC3C,WAAO,SAAS,KAAK,SAAS,IAAI;AAAA,EACpC;AAAA,EACA,OAAO,MAAM,OAAO;AAClB,cAAU,SAAS,kBAAkB;AACrC,WAAO,CAAC,EAAE,UAAU,MAAM,SAAS,KAAK,MAAM,UAAU;AAAA,EAC1D;AAAA,EACA,IAAI,sBAAsB;AACxB,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AAAA,EACA,IAAI,QAAQ;AACV,UAAM,IAAI,MAAM,qEAAqE;AAAA,EACvF;AAAA,EACA,IAAI,SAAS;AACX,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AAAA,EACA,IAAI,gBAAgB;AAClB,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAAA,EACA,IAAI,SAAS;AACX,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AAAA,EACA,OAAO,MAAM,OAAO;AAClB,QAAI,iBAAiB,MAAK;AACxB,aAAO;AAAA,IACT,WAAW,SAAS,QAAQ,MAAM,UAAU,OAAO;AACjD,YAAM,EAAC,SAAAF,UAAS,MAAM,WAAW,MAAK,IAAI;AAC1C,aAAO,IAAI,KAAIA,UAAS,MAAM,WAAW,SAAS,UAAUA,UAAS,MAAM,UAAU,KAAK,CAAC;AAAA,IAC7F,WAAW,SAAS,QAAQ,MAAM,SAAS,MAAM,MAAM;AACrD,YAAM,EAAC,SAAAA,UAAS,WAAW,KAAI,IAAI;AACnC,YAAM,SAAgBG,QAAO,SAAS;AACtC,aAAO,KAAI,OAAOH,UAAS,MAAM,MAAM;AAAA,IACzC,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAO,OAAOA,UAAS,MAAM,QAAQ;AACnC,QAAI,OAAO,SAAS,UAAU;AAC5B,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AACA,YAAQA,UAAS;AAAA,MACjB,KAAK,GAAG;AACJ,YAAI,SAAS,aAAa;AACxB,gBAAM,IAAI,MAAM,wCAAyC,WAAY,kBAAkB;AAAA,QACzF,OAAO;AACL,iBAAO,IAAI,KAAIA,UAAS,MAAM,QAAQ,OAAO,KAAK;AAAA,QACpD;AAAA,MACF;AAAA,MACF,KAAK,GAAG;AACJ,cAAM,QAAQ,UAAUA,UAAS,MAAM,OAAO,KAAK;AACnD,eAAO,IAAI,KAAIA,UAAS,MAAM,QAAQ,KAAK;AAAA,MAC7C;AAAA,MACF,SAAS;AACL,cAAM,IAAI,MAAM,iBAAiB;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,SAAS,QAAQ;AACtB,WAAO,KAAI,OAAO,GAAG,aAAa,MAAM;AAAA,EAC1C;AAAA,EACA,OAAO,SAAS,MAAM,QAAQ;AAC5B,WAAO,KAAI,OAAO,GAAG,MAAM,MAAM;AAAA,EACnC;AAAA,EACA,OAAO,OAAO,OAAO;AACnB,UAAM,CAAC,KAAK,SAAS,IAAI,KAAI,YAAY,KAAK;AAC9C,QAAI,UAAU,QAAQ;AACpB,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA,EACA,OAAO,YAAY,OAAO;AACxB,UAAM,QAAQ,KAAI,aAAa,KAAK;AACpC,UAAM,aAAa,MAAM,OAAO,MAAM;AACtC,UAAM,iBAAiBI,QAAO,MAAM,SAAS,YAAY,aAAa,MAAM,aAAa,CAAC;AAC1F,QAAI,eAAe,eAAe,MAAM,eAAe;AACrD,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,UAAM,cAAc,eAAe,SAAS,MAAM,gBAAgB,MAAM,UAAU;AAClF,UAAM,SAAS,IAAW,OAAO,MAAM,eAAe,MAAM,YAAY,aAAa,cAAc;AACnG,UAAM,MAAM,MAAM,YAAY,IAAI,KAAI,SAAS,MAAM,IAAI,KAAI,SAAS,MAAM,OAAO,MAAM;AACzF,WAAO;AAAA,MACL;AAAA,MACA,MAAM,SAAS,MAAM,IAAI;AAAA,IAC3B;AAAA,EACF;AAAA,EACA,OAAO,aAAa,cAAc;AAChC,QAAI,SAAS;AACb,UAAM,OAAO,MAAM;AACjB,YAAM,CAAC,GAAGC,OAAM,IAAWF,QAAO,aAAa,SAAS,MAAM,CAAC;AAC/D,gBAAUE;AACV,aAAO;AAAA,IACT;AACA,QAAIL,WAAU,KAAK;AACnB,QAAI,QAAQ;AACZ,QAAIA,aAAY,IAAI;AAClB,MAAAA,WAAU;AACV,eAAS;AAAA,IACX,WAAWA,aAAY,GAAG;AACxB,cAAQ,KAAK;AAAA,IACf;AACA,QAAIA,aAAY,KAAKA,aAAY,GAAG;AAClC,YAAM,IAAI,WAAW,uBAAwBA,QAAQ,EAAE;AAAA,IACzD;AACA,UAAM,aAAa;AACnB,UAAM,gBAAgB,KAAK;AAC3B,UAAM,aAAa,KAAK;AACxB,UAAM,OAAO,SAAS;AACtB,UAAM,gBAAgB,OAAO;AAC7B,WAAO;AAAA,MACL,SAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,MAAM,QAAQE,OAAM;AACzB,UAAM,CAAC,QAAQ,KAAK,IAAI,gBAAgB,QAAQA,KAAI;AACpD,UAAM,MAAM,KAAI,OAAO,KAAK;AAC5B,QAAI,WAAW,IAAI,QAAQ,MAAM;AACjC,WAAO;AAAA,EACT;AACF;AACA,IAAM,kBAAkB,CAAC,QAAQA,UAAS;AACxC,UAAQ,OAAO,CAAC,GAAG;AAAA,IACnB,KAAK,KAAK;AACN,YAAM,UAAUA,SAAQ;AACxB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ,OAAO,GAAI,UAAU,MAAO,GAAI,MAAO,EAAE;AAAA,MACnD;AAAA,IACF;AAAA,IACF,KAAK,UAAU,QAAQ;AACnB,YAAM,UAAUA,SAAQ;AACxB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ,OAAO,MAAM;AAAA,MACvB;AAAA,IACF;AAAA,IACF,KAAK,OAAO,QAAQ;AAChB,YAAM,UAAUA,SAAQ;AACxB,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,OAAO,MAAM;AAAA,MACvB;AAAA,IACF;AAAA,IACF,SAAS;AACL,UAAIA,SAAQ,MAAM;AAChB,cAAM,MAAM,iFAAiF;AAAA,MAC/F;AACA,aAAO;AAAA,QACL,OAAO,CAAC;AAAA,QACRA,MAAK,OAAO,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;AACA,IAAM,aAAa,CAAC,OAAO,OAAOA,UAAS;AACzC,QAAM,EAAC,OAAM,IAAIA;AACjB,MAAI,WAAW,UAAU,QAAQ;AAC/B,UAAM,MAAM,8BAA+BA,MAAK,IAAK,WAAW;AAAA,EAClE;AACA,QAAM,MAAM,MAAM,IAAI,MAAM;AAC5B,MAAI,OAAO,MAAM;AACf,UAAMI,OAAMJ,MAAK,OAAO,KAAK,EAAE,MAAM,CAAC;AACtC,UAAM,IAAI,QAAQI,IAAG;AACrB,WAAOA;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AACA,IAAM,aAAa,CAAC,OAAO,OAAOJ,UAAS;AACzC,QAAM,EAAC,OAAM,IAAIA;AACjB,QAAM,MAAM,MAAM,IAAI,MAAM;AAC5B,MAAI,OAAO,MAAM;AACf,UAAMI,OAAMJ,MAAK,OAAO,KAAK;AAC7B,UAAM,IAAI,QAAQI,IAAG;AACrB,WAAOA;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AACA,IAAM,cAAc;AACpB,IAAM,eAAe;AACrB,IAAM,YAAY,CAACN,UAAS,MAAM,cAAc;AAC9C,QAAM,aAAoB,eAAeA,QAAO;AAChD,QAAM,aAAa,aAAoB,eAAe,IAAI;AAC1D,QAAM,QAAQ,IAAI,WAAW,aAAa,UAAU,UAAU;AAC9D,EAAO,SAASA,UAAS,OAAO,CAAC;AACjC,EAAO,SAAS,MAAM,OAAO,UAAU;AACvC,QAAM,IAAI,WAAW,UAAU;AAC/B,SAAO;AACT;AACA,IAAM,YAAY,OAAO,IAAI,kBAAkB;AAC/C,IAAM,WAAW;AAAA,EACf,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AACd;AACA,IAAM,SAAS;AAAA,EACb,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,cAAc;AAChB;AACA,IAAM,UAAU;AAChB,IAAM,YAAY,CAAC,OAAO,YAAY;AACpC,MAAI,MAAM,KAAK,OAAO,GAAG;AACvB,YAAQ,KAAK,OAAO;AAAA,EACtB,OAAO;AACL,UAAM,IAAI,MAAM,OAAO;AAAA,EACzB;AACF;AACA,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACjSpB,SAAS,MAAM,KAAyC;AAC7D,MAAI,CAAC;AAAK,WAAO;AAEjB,MAAI;AACF,QAAI,MAAM,GAAG;AACb,WAAO;AAAA,EACT,SAAS,GAAG;AACV,QAAI,aAAa,KAAK,GAAG;AAAG,aAAO;AACnC,WAAO;AAAA,EACT;AACF;AAEO,SAAS,iBACd,KACgB;AAChB,MAAI,CAAC,OAAO,OAAO,QAAQ;AAAU,WAAO;AAG5C,QAAM,IAAI,QAAQ,MAAM,EAAE;AAG1B,MAAI,oBAAoB,GAAG;AAAG,WAAO;AAGrC,MAAI,MAAM,GAAG;AAAG,WAAO,UAAU,GAAG;AAGpC,MAAI,CAAC,UAAU,GAAG;AAAG,WAAO;AAG5B,MAAI,iBAAiB,GAAG,GAAG;AAEzB,UAAM,SAAS,IAAI,IAAI,IAAI,QAAQ,SAAS,SAAS,CAAC;AAGtD,WAAO,WAAW,OAAO,SAAS,QAAQ,aAAa,EAAE;AAGzD,UAAM,MAAM,OACT,SAAS,EACT,QAAQ,GAAG,OAAO,QAAQ,KAAK,OAAO,IAAI,KAAK,EAAE;AAEpD,WAAO,UAAU,GAAG;AAAA,EACtB;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,KAAyC;AACpE,SAAO,OAAO,OAAO,QAAQ,WAAW,IAAI,WAAW,SAAS,IAAI;AACtE;AAEA,SAAS,iBAAiB,KAAyC;AACjE,MAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,QAAI;AACF,YAAM,SAAS,IAAI,IAAI,IAAI,QAAQ,gBAAgB,IAAI,CAAC;AACxD,aACE,CAAC,oBAAoB,GAAG,KACxB,UACA,OAAO,SAAS,WAAW,QAAQ;AAAA,IAEvC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,UAAU,KAAyC;AAC1D,SAAO,MAAM,oBAAoB,GAAG,KAAK,iBAAiB,GAAG,IAAI;AACnE;AAEO,SAAS,uBACd,KACS;AACT,SAAO,MAAM,UAAU,GAAG,KAAK,MAAM,GAAG,IAAI;AAC9C;;;AC9EA,IAAM,eAAe;AAErB,IAAM,kBAAkB;AAEjB,SAAS,kBAAkB,sBAAqC;AACrE,MAAI,CAAC,wBAAwB,OAAO,yBAAyB;AAC3D,WAAO;AACT,SAAO,qBAAqB,QAAQ,SAAS,GAAG,eAAe,GAAG;AACpE;AAEO,SAAS,eAAe,KAAoB;AACjD,MAAI,CAAC,OAAO,OAAO,QAAQ;AAAU,WAAO;AAC5C,QAAM,oBAAoB,iBAAiB,GAAG;AAC9C,MAAI,mBAAmB;AACrB,WAAO,kBAAkB,QAAQ,WAAW,GAAG,YAAY,QAAQ;AAAA,EACrE;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,KAA+C;AAC7E,MAAI,CAAC,OAAO,OAAO,QAAQ;AAAU,WAAO;AAG5C,MAAI,IAAI,WAAW,SAAS;AAAG,WAAO;AAGtC,MAAI,uBAAuB,GAAG,GAAG;AAE/B,WAAO,eAAe,GAAG;AAAA,EAC3B;AAGA,MAAI,aAAa,GAAG,GAAG;AAErB,WAAO,kBAAkB,GAAG;AAAA,EAC9B;AAGA,MAAI,sBAAsB,KAAK,GAAG,GAAG;AAEnC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;AC9CA,IAAM,OAAO;AACb,IAAM,WAAW;AACjB,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AACjB,IAAM,aAAa;AAC1B,IAAM,MAAM;AACZ,IAAM,UAAU;AAChB,IAAM,QAAQ;AACd,IAAM,MAAM;AAGZ,IAAM,MAAM;AACZ,IAAM,OAAO;AACb,IAAM,MAAM;AACZ,IAAM,OAAO;AACb,IAAM,MAAM;AACZ,IAAM,OAAO;AACb,IAAM,MAAM;AAEL,IAAM,UAAU,CAAC,aAAwC;AAC9D,MAAI,CAAC;AAAU,WAAO;AACtB,SAAO,CAAC,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,GAAG,EAAE,SAAS,QAAQ;AACjE;AAkBO,IAAM,+BAA0D;AAAA,EACrE,CAAC,mBAAe,GACd;AAAA,EACF,CAAC,mBAAe,GACd;AAAA,EACF,CAAC,iBAAc,GACb;AAAA,EACF,CAAC,eAAa,GACZ;AAAA;AAAA,EACF,CAAC,iBAAc,GACb;AAAA,EACF,SAAS;AACX;AAGA,IAAM,MAAM;AACZ,IAAM,YAAY;AAClB,IAAM,MAAM;AACZ,IAAM,OAAO;AAGb,IAAM,MAAM;AACZ,IAAM,OAAO;AACb,IAAM,MAAM;AACZ,IAAM,MAAM;AACZ,IAAM,UAAU;AAChB,IAAM,WAAW;AACjB,IAAM,OAAO;AACb,IAAM,QAAQ;AACd,IAAM,OAAO;AAGb,IAAM,OAAO;AACb,IAAM,MAAM;AAEZ,IAAM,WAAW;AACjB,IAAM,UAAU;AAGT,IAAM,iBAAiB;AAC9B,IAAM,MAAM;AAEZ,IAAM,kBAAkB;AAAA,EACtB,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,SAAS,GAAG;AAAA,EACb,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,OAAO,GAAG;AAAA,EACX,CAAC,QAAQ,GAAG;AAAA,EACZ,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,UAAU,GAAG;AAAA,EACd,CAAC,eAAe,GAAG;AAAA,EACnB,CAAC,QAAQ,GAAG;AAAA,EACZ,CAAC,aAAa,GAAG;AAAA,EACjB,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,OAAO,GAAG;AAAA,EACX,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,QAAQ,GAAG;AAAA,EACZ,CAAC,GAAG,GAAG;AAAA;AAAA;AAAA;AAAA,EAIP,CAAC,cAAc,GAAG;AAAA,EAClB,CAAC,OAAO,GAAG;AACb;AAGO,SAAS,gBAAgB,UAA0B;AACxD,MAAI,CAAC;AAAU,WAAO;AAEtB,SACE,gBAAgB,QAAwC,KACxD;AAEJ;AAEA,eAAsB,YAAY,KAAc;AAC9C,MAAI,CAAC;AAAK,WAAO;AAEjB,QAAM,MAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,OAAO,CAAC;AAC/C,MAAI,WAAW,IAAI,QAAQ,IAAI,cAAc;AAC7C,SAAO;AACT;;;ACzHO,IAAM,wBAAwB,CACnC,eACsB;AACtB,QAAM,EAAE,MAAM,aAAa,cAAc,aAAa,CAAC,EAAE,IAAI;AAE7D,QAAM,UAAU,cACZ;AAAA,IACE,MAAM;AAAA,IACN,KAAK;AAAA,EACP,IACA;AAEJ,QAAM,QAAQ;AACd,QAAM,gBAAgB;AAEtB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAOO,IAAM,yBAAyB,OAAO;AAAA,EAC3C;AAAA,EACA;AAAA,EACA,aAAa,CAAC;AAAA,EACd;AAAA,EACA;AACF,MAA2D;AACzD,QAAM,aAAa;AACnB,QAAM,sBAAsB,gBAAgB,UAAU;AAEtD,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,gBAAgB,UAAU,oBAAoB;AAEhE,QAAM,WAAW,MAAM,YAAY,mBAAmB;AACtD,QAAM,YAAY,gBAAgB,QAAQ;AAE1C,MAAI,QAA4B;AAChC,MAAI,gBAA+B;AAInC,MAAI,QAAQ,QAAQ,GAAG;AACrB,YAAQ;AAAA,EACV,OAAO;AACL,YAAQ;AACR,oBAAgB;AAAA,EAClB;AAGA,MAAI,CAAC;AACH,YAAQ,UACN,6BAA6B,SAAS,KACtC,6BAA6B,OAC/B;AAEF,QAAM,UAAU,aACZ;AAAA,IACE,MAAM,YAAY;AAAA,IAClB,KAAK;AAAA,EACP,IACA;AAEJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AChGA,IAAM,aAAa;AAEnB,IAAM,WAAW,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAOM;AAEJ,MAAI,QAAQ,KAAK,WAAW,MAAM,MAAM,EAAE,MAAM,IAAI;AACpD,MAAI,OAAO;AACX,MAAI,WAAW;AACf,MAAI,YAAY,CAAC;AAEjB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAErC,gBAAY,GAAG,MAAM,CAAC,CAAC;AACvB,QAAI,UAAU,IAAI,YAAY,QAAQ;AACtC,QAAI,YAAY,QAAQ;AAExB,QAAI,MAAM,CAAC,GAAG,SAAS,IAAI,KAAM,YAAY,YAAY,IAAI,GAAI;AAE/D,gBAAU,KAAK,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AAEnC,WAAK;AAGL,UAAI,MAAM,CAAC,GAAG,SAAS,IAAI,GAAG;AAC5B,eAAO;AACP,mBAAW;AAAA,MACb,OAAO;AACL,eAAO,GAAG,MAAM,CAAC,CAAC;AAClB,mBAAW,GAAG,MAAM,CAAC,CAAC;AAAA,MACxB;AAAA,IACF,OAAO;AAEL,cAAQ,GAAG,MAAM,CAAC,CAAC;AAAA,IACrB;AAEA,QAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,gBAAU,KAAK,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,oBAAoB,MAA6B;AAE9D,QAAM,cAAc,KAAK,KAAK,EAAE,MAAM,GAAG,UAAU;AAEnD,QAAM,CAAC,OAAO,MAAM,IAAI,CAAC,KAAK,GAAG;AACjC,QAAM,UAAU;AAChB,QAAM,MAAM;AAEZ,QAAM,aAAa;AACnB,QAAM,CAAC,UAAU,UAAU,IAAI,CAAC,IAAI,EAAE;AACtC,QAAM,CAAC,WAAW,eAAe,IAAI,CAAC,SAAS,OAAO;AAEtD,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,QAAQ,QAAQ;AACvB,WAAO,SAAS,SAAS;AACzB,UAAM,MAAM,OAAO,WAAW,IAAI;AAClC,QAAI,CAAC,KAAK;AACR,aAAO,OAAO,IAAI,MAAM,iCAAiC,CAAC;AAAA,IAC5D;AACA,QAAI,YAAY;AAChB,QAAI,SAAS,GAAG,GAAG,QAAQ,KAAK,QAAQ,GAAG;AAC3C,QAAI,YAAY;AAChB,QAAI,OAAO,GAAG,WAAW,GAAG,MAAM,UAAU;AAC5C,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,MACA,MAAM;AAAA,MACN,GAAG,UAAU;AAAA,MACb,GAAG,WAAW,MAAM,UAAU;AAAA,MAC9B,UAAU,QAAQ,MAAM,UAAU,IAAI;AAAA,MACtC,YAAY,aAAa;AAAA,IAC3B,CAAC;AACD,YAAQ,QAAQ,CAAC,SAAS,IAAI,SAAS,KAAK,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC;AACjE,WAAO,OAAO,CAAC,SAAS;AACtB,UAAI,CAAC,MAAM;AACT,eAAO,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAAA,MAClD;AACA,cAAQ,IAAI,KAAK,CAAC,IAAI,GAAG,iBAAiB,EAAE,MAAM,YAAY,CAAC,CAAC;AAAA,IAClE,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,kBAAkB,MAAc;AACvC,QAAM,YAAY,KAAK,MAAM,IAAI,EAAE,CAAC;AACpC,QAAM,gBAAgB,WAAW,MAAM,IAAI,EAAE,CAAC;AAE9C,MAAI,cAAc,SAAS,IAAI;AAC7B,WAAO,cAAc,MAAM,GAAG,EAAE,IAAI;AAAA,EACtC;AAEA,SAAO;AACT;AAEA,IAAM,aAAa,CAAC,SAClB,IAAI,KAAK,CAAC,IAAI,GAAG,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIzD,eAAsB,6BACpB,MAC4B;AAC5B,QAAM,OAAO,kBAAkB,IAAI;AACnC,QAAM,WAAW,WAAW,IAAI;AAChC,QAAM,gBAAgB,MAAM,oBAAoB,IAAI;AAEpD,SAAO;AAAA,IACL;AAAA,IACA,cAAc;AAAA,IACd;AAAA,EACF;AACF;","names":["zeroAddress","zoraCreator1155PremintExecutorImplABI","parseEther","version","version","parseEther","PremintConfigVersion","premintTypedDataDefinition","mint","httpClient","retries","post","targetStrategy","httpClient","zeroAddress","supportedPremintVersions","PremintConfigVersion","zoraCreator1155PremintExecutorImplABI","premintTypedDataDefinition","PremintConfigVersion","post","retries","get","httpClient","zeroAddress","zoraCreator1155ImplABI","semver","zeroAddress","zoraCreator1155ImplABI","zeroAddress","zeroAddress","zoraCreator1155FactoryImplABI","zoraCreator1155FactoryImplAddress","zoraCreator1155ImplABI","decodeEventLog","zoraCreator1155ImplABI","erc20MinterABI","zoraCreator1155ImplABI","zoraCreatorFixedPriceSaleStrategyAddress","zeroAddress","semver","zeroAddress","zoraCreator1155ImplABI","erc20MinterABI","zoraCreatorFixedPriceSaleStrategyAddress","decodeEventLog","zoraCreator1155ImplABI","zoraCreator1155FactoryImplABI","zoraCreator1155FactoryImplAddress","encodeFunctionData","zeroAddress","encodeFunctionData","encodeFunctionData","from","decode","coerce","decode","coerce","equals","base","encode","length","i","j","decode","encode","decode","coerce","version","equals","base","decode","coerce","length","cid"]}
|