{"version":3,"sources":["../src/index.ts","../src/extrinsic/ExtrinsicBuilder.utils.ts","../src/extrinsic/ExtrinsicBuilder.interfaces.ts","../src/types/BaseConfig.ts","../src/types/substrate/SubstrateQueryConfig.ts","../src/asset-min/AssetMinBuilder.ts","../src/balance/BalanceBuilder.ts","../src/types/evm/ContractConfig.ts","../src/contract/contracts/XcmPrecompile/XcmPrecompile.ts","../src/types/evm/EvmQueryConfig.ts","../src/types/substrate/ExtrinsicConfig.ts","../src/types/substrate/SubstrateCallConfig.ts","../src/contract/ContractBuilder.interfaces.ts","../src/contract/ContractBuilder.utils.ts","../src/extrinsic/pallets/polkadotXcm/polkadotXcm.util.ts","../src/contract/contracts/XcmPrecompile/XcmPrecompileAbi.ts","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.ts","../src/contract/ContractBuilder.ts","../src/balance/Erc20Abi.ts","../src/extrinsic/pallets/eqBalances/eqBalances.ts","../src/extrinsic/pallets/polkadotXcm/polkadotXcm.ts","../src/extrinsic/pallets/xcmPallet/xcmPallet.ts","../src/extrinsic/pallets/xTokens/xTokens.utils.ts","../src/extrinsic/pallets/xTokens/xTokens.ts","../src/extrinsic/pallets/xTransfer/xTransfer.ts","../src/extrinsic/ExtrinsicBuilder.ts","../src/fee/gateway/gateway.ts","../src/mrl/providers/snowbridge/contract/Gateway/GatewayAbi.ts","../src/fee/outboundQueueApi/outboundQueueApi.ts","../src/fee/FeeBuilder.utils.ts","../src/fee/VersionedAssetBuilder.ts","../src/fee/xcmPaymentApi/xcmPaymentApi.utils.ts","../src/fee/xcmPaymentApi/xcmPaymentApi.ts","../src/fee/FeeBuilder.ts","../src/monitoring/eventMonitoring/eventMonitoring.ts","../src/monitoring/eventMonitoring/eventMonitoring.utils.ts","../src/monitoring/MonitoringBuilder.ts","../src/mrl/providers/snowbridge/contract/Gateway/Gateway.ts","../src/mrl/MrlBuilder.interfaces.ts","../src/mrl/providers/snowbridge/snowbridge/SnowbridgeConfig.ts","../src/mrl/providers/snowbridge/contract/index.ts","../src/mrl/providers/snowbridge/extrinsic/ethereumTokenTransfer/ethereumTokenTransfers.ts","../src/mrl/providers/snowbridge/extrinsic/polkadotXcm/polkadotXcm.ts","../src/mrl/providers/snowbridge/extrinsic/xcmPallet/xcmPallet.ts","../src/mrl/providers/snowbridge/extrinsic/xcmPallet/xcmPallet.utils.ts","../src/mrl/providers/snowbridge/extrinsic/index.ts","../src/mrl/providers/snowbridge/index.ts","../src/mrl/providers/wormhole/contract/Batch/Batch.ts","../src/mrl/providers/wormhole/extrinsic/polkadotXcm/polkadotXcm.ts","../src/mrl/providers/wormhole/contract/Batch/abi/BatchContractAbi.ts","../src/mrl/providers/wormhole/contract/Batch/abi/XcmUtilsContractAbi.ts","../src/mrl/providers/wormhole/contract/Batch/abi/XtokensContractAbi.ts","../src/mrl/providers/wormhole/contract/Batch/abi/abi.helpers.ts","../src/mrl/providers/wormhole/contract/Gmp/Gmp.ts","../src/mrl/providers/wormhole/contract/Gmp/GmpAbi.ts","../src/mrl/providers/wormhole/contract/TokenBridge/TokenBridge.ts","../src/mrl/providers/wormhole/wormhole/WormholeConfig.ts","../src/mrl/providers/wormhole/wormhole/wormhole.ts","../src/mrl/providers/wormhole/wormhole/wormholeFactory.ts","../src/mrl/providers/wormhole/contract/TokenBridge/TokenBridgeAbi.ts","../src/mrl/providers/wormhole/contract/TokenBridgeRelayer/TokenBridgeRelayer.ts","../src/mrl/providers/wormhole/contract/TokenBridgeRelayer/TokenBridgeRelayerAbi.ts","../src/mrl/providers/wormhole/contract/index.ts","../src/mrl/providers/wormhole/extrinsic/ethereumXcm/ethereumXcm.ts","../src/mrl/MrlBuilder.constants.ts","../src/mrl/providers/wormhole/extrinsic/ethereumXcm/BatchContractAbi.ts","../src/mrl/providers/wormhole/extrinsic/index.ts","../src/mrl/providers/wormhole/index.ts","../src/mrl/MrlBuilder.ts"],"sourcesContent":["import '@polkadot/api-augment';\n\nexport * from './asset-min';\nexport * from './balance';\nexport * from './builder.interfaces';\nexport * from './contract';\nexport * from './extrinsic';\nexport * from './fee';\nexport * from './monitoring';\nexport * from './mrl';\nexport * from './types';\n","import { isEthAddress } from '@moonbeam-network/xcm-utils';\nimport type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport { getTypeDef } from '@polkadot/types';\nimport type { AnyJson } from '@polkadot/types/types';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport { XcmVersion } from './ExtrinsicBuilder.interfaces';\n\nexport function getExtrinsicArgumentVersion(\n  func?: SubmittableExtrinsicFunction<'promise'>,\n  index = 0,\n): XcmVersion {\n  if (!func) return XcmVersion.v1;\n\n  const { type } = func.meta.args[index];\n  const instance = func.meta.registry.createType(type.toString());\n  const raw = getTypeDef(instance?.toRawType());\n\n  if (!raw.sub) {\n    return XcmVersion.v1;\n  }\n\n  const versions = Array.isArray(raw.sub)\n    ? raw.sub.map((x) => x.name)\n    : [raw.sub.name];\n\n  if (versions.includes(XcmVersion.v5)) {\n    return XcmVersion.v5;\n  }\n\n  if (versions.includes(XcmVersion.v4)) {\n    return XcmVersion.v4;\n  }\n\n  if (versions.includes(XcmVersion.v3)) {\n    return XcmVersion.v3;\n  }\n\n  if (versions.includes(XcmVersion.v2)) {\n    return XcmVersion.v2;\n  }\n\n  if (versions.includes(XcmVersion.v1)) {\n    return XcmVersion.v1;\n  }\n\n  throw new Error(\"Can't find XCM version\");\n}\n\nexport function getExtrinsicAccount(address: string) {\n  return isEthAddress(address)\n    ? {\n        AccountKey20: {\n          key: address,\n        },\n      }\n    : {\n        AccountId32: {\n          id: u8aToHex(decodeAddress(address)),\n          network: null,\n        },\n      };\n}\n\nexport function isXcmV4(xcmVersion: XcmVersion): boolean {\n  return xcmVersion >= XcmVersion.v4;\n}\n\nexport function normalizeX1(\n  xcmVersion: XcmVersion,\n  versionedObject: Record<string, AnyJson | object>,\n) {\n  if (!isXcmV4(xcmVersion)) return versionedObject;\n\n  const normalizedObject = { ...versionedObject };\n  const interior = normalizedObject.interior as object;\n\n  if ('X1' in interior && interior?.X1 && !Array.isArray(interior.X1)) {\n    interior.X1 = [interior.X1];\n  } else if ('x1' in interior && interior?.x1 && !Array.isArray(interior.x1)) {\n    interior.x1 = [interior.x1];\n  }\n\n  return normalizedObject;\n}\n\nexport function normalizeConcrete(\n  xcmVersion: XcmVersion,\n  versionedObject: object,\n) {\n  return isXcmV4(xcmVersion)\n    ? versionedObject\n    : applyConcreteWrapper(versionedObject);\n}\n\nexport function applyConcreteWrapper(versionedObject: object) {\n  return {\n    Concrete: { ...versionedObject },\n  };\n}\n","import type { ConfigBuilder } from '../builder.interfaces';\nimport type { ExtrinsicConfig } from '../types/substrate/ExtrinsicConfig';\n\nexport type ExtrinsicConfigBuilder = ConfigBuilder<ExtrinsicConfig>;\n\nexport enum XcmVersion {\n  v1 = 'V1',\n  v2 = 'V2',\n  v3 = 'V3',\n  v4 = 'V4',\n  v5 = 'V5',\n}\n\nexport type Parents = 0 | 1;\n","export interface BaseConfigConstructorParams {\n  module: string;\n  func: string;\n}\n\nexport class BaseConfig {\n  readonly module: string;\n\n  readonly func: string;\n\n  constructor({ module, func }: BaseConfigConstructorParams) {\n    this.module = module;\n    this.func = func;\n  }\n}\n","import { BaseConfig, type BaseConfigConstructorParams } from '../BaseConfig';\n\ntype QueryType = 'query' | 'call';\n\nexport interface QueryConfigConstructorParams\n  extends BaseConfigConstructorParams {\n  queryType?: QueryType;\n  args?: unknown[];\n  // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n  transform: (data: any) => Promise<bigint>;\n}\n\nexport class SubstrateQueryConfig extends BaseConfig {\n  readonly args: unknown[];\n\n  readonly queryType: QueryType;\n\n  readonly transform: (data: unknown) => Promise<bigint>;\n\n  static is(obj: unknown): obj is SubstrateQueryConfig {\n    return obj instanceof SubstrateQueryConfig;\n  }\n\n  constructor({\n    args = [],\n    transform,\n    queryType = 'query',\n    ...other\n  }: QueryConfigConstructorParams) {\n    super({ ...other });\n\n    this.args = args;\n    this.queryType = queryType;\n    this.transform = transform;\n  }\n}\n","import type { Option } from '@polkadot/types';\nimport type { PalletAssetsAssetDetails } from '@polkadot/types/lookup';\nimport { getExtrinsicAccount } from '../extrinsic/ExtrinsicBuilder.utils';\nimport { SubstrateQueryConfig } from '../types/substrate/SubstrateQueryConfig';\nimport type { AssetMinConfigBuilder } from './AssetMinBuilder.interfaces';\n\nexport function AssetMinBuilder() {\n  return {\n    assetRegistry,\n    assets,\n    foreignAssets,\n  };\n}\n\nfunction assetRegistry() {\n  const pallet = 'assetRegistry';\n  return {\n    assetMetadatas: (): AssetMinConfigBuilder => ({\n      build: ({ asset }) =>\n        new SubstrateQueryConfig({\n          module: pallet,\n          func: 'assetMetadatas',\n          args: [asset],\n          // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n          transform: async (response: Option<any>): Promise<bigint> =>\n            response.unwrapOrDefault().minimalBalance.toBigInt(),\n        }),\n    }),\n    currencyMetadatas: (): AssetMinConfigBuilder => ({\n      build: ({ asset }) =>\n        new SubstrateQueryConfig({\n          module: pallet,\n          func: 'currencyMetadatas',\n          args: [asset],\n          // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n          transform: async (response: Option<any>): Promise<bigint> =>\n            response.unwrapOrDefault().minimalBalance.toBigInt(),\n        }),\n    }),\n    metadata: (): AssetMinConfigBuilder => ({\n      build: ({ asset }) =>\n        new SubstrateQueryConfig({\n          module: pallet,\n          func: 'metadata',\n          args: [asset],\n          // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n          transform: async (response: Option<any>): Promise<bigint> =>\n            response.unwrapOrDefault().existentialDeposit.toBigInt(),\n        }),\n    }),\n  };\n}\n\nfunction assets() {\n  return {\n    asset: (): AssetMinConfigBuilder => ({\n      build: ({ asset }) =>\n        new SubstrateQueryConfig({\n          module: 'assets',\n          func: 'asset',\n          args: [asset],\n          transform: async (\n            response: Option<PalletAssetsAssetDetails>,\n          ): Promise<bigint> =>\n            response.unwrapOrDefault().minBalance.toBigInt(),\n        }),\n    }),\n  };\n}\n\nfunction foreignAssets() {\n  return {\n    asset: (): AssetMinConfigBuilder => ({\n      build: ({ address }) => {\n        if (!address) {\n          throw new Error(\n            'Asset address is missing for foreignAssets.asset min calculation',\n          );\n        }\n        const multilocation = {\n          parents: 2,\n          interior: {\n            X2: [\n              {\n                globalconsensus: {\n                  ethereum: {\n                    chainId: 1,\n                  },\n                },\n              },\n              getExtrinsicAccount(address),\n            ],\n          },\n        };\n        return new SubstrateQueryConfig({\n          module: 'foreignAssets',\n          func: 'asset',\n          args: [multilocation],\n          transform: async (\n            response: Option<PalletAssetsAssetDetails>,\n          ): Promise<bigint> =>\n            response.unwrapOrDefault().minBalance.toBigInt(),\n        });\n      },\n    }),\n  };\n}\n","import type { Option } from '@polkadot/types';\nimport type {\n  FrameSystemAccountInfo,\n  PalletAssetsAssetAccount,\n  PalletBalancesAccountData,\n} from '@polkadot/types/lookup';\nimport { evmToAddress } from '@polkadot/util-crypto';\nimport type { Address } from 'viem';\nimport { ContractConfig } from '../contract';\nimport { getExtrinsicAccount } from '../extrinsic/ExtrinsicBuilder.utils';\nimport { EvmQueryConfig } from '../types/evm/EvmQueryConfig';\nimport { SubstrateQueryConfig } from '../types/substrate/SubstrateQueryConfig';\nimport type {\n  BalanceConfigBuilder,\n  EquilibriumSystemBalanceData,\n  PalletBalancesAccountDataOld,\n  TokensPalletAccountData,\n} from './BalanceBuilder.interfaces';\nimport { ERC20_ABI } from './Erc20Abi';\n\nexport function BalanceBuilder() {\n  return {\n    evm,\n    substrate,\n  };\n}\n\nexport function evm() {\n  return {\n    erc20,\n    native,\n  };\n}\n\nfunction erc20(): BalanceConfigBuilder {\n  return {\n    build: ({ asset, address }) => {\n      if (!asset.address) {\n        throw new Error(`Asset ${asset.key} has no address`);\n      }\n\n      return new ContractConfig({\n        address: asset.address,\n        abi: ERC20_ABI,\n        args: [address],\n        func: 'balanceOf',\n        module: 'Erc20',\n      });\n    },\n  };\n}\n\nfunction native(): BalanceConfigBuilder {\n  return {\n    build: ({ address }) => {\n      return new EvmQueryConfig({\n        func: 'getBalance',\n        args: [{ address: address as Address }],\n      });\n    },\n  };\n}\nexport function substrate() {\n  return {\n    assets,\n    foreignAssets,\n    system,\n    tokens,\n  };\n}\n\nfunction assets() {\n  return {\n    account: (): BalanceConfigBuilder => ({\n      build: ({ address, asset }) =>\n        new SubstrateQueryConfig({\n          module: 'assets',\n          func: 'account',\n          args: [asset.getBalanceAssetId(), address],\n          transform: async (\n            response: Option<PalletAssetsAssetAccount>,\n          ): Promise<bigint> => response.unwrapOrDefault().balance.toBigInt(),\n        }),\n    }),\n  };\n}\n\nfunction foreignAssets() {\n  return {\n    account: () => ({\n      globalConsensus: (): BalanceConfigBuilder => ({\n        build: ({ address, asset }) => {\n          if (!asset.address) {\n            throw new Error(\n              'Asset address is needed to calculate balance with foreignAssets.account function',\n            );\n          }\n\n          const multilocation = {\n            parents: 2,\n            interior: {\n              X2: [\n                { GlobalConsensus: { ethereum: { chainId: 1 } } },\n                getExtrinsicAccount(asset.address),\n              ],\n            },\n          };\n\n          return new SubstrateQueryConfig({\n            module: 'foreignAssets',\n            func: 'account',\n            args: [multilocation, address],\n            transform: async (\n              response: Option<PalletAssetsAssetAccount>,\n            ): Promise<bigint> => response.unwrapOrDefault().balance.toBigInt(),\n          });\n        },\n      }),\n      id: (): BalanceConfigBuilder => ({\n        build: ({ address, asset }) => {\n          return new SubstrateQueryConfig({\n            module: 'foreignAssets',\n            func: 'account',\n            args: [asset.getBalanceAssetId(), address],\n            transform: async (\n              response: Option<PalletAssetsAssetAccount>,\n            ): Promise<bigint> => response.unwrapOrDefault().balance.toBigInt(),\n          });\n        },\n      }),\n    }),\n  };\n}\n\nfunction system() {\n  return {\n    account: (): BalanceConfigBuilder => ({\n      build: ({ address }) =>\n        new SubstrateQueryConfig({\n          module: 'system',\n          func: 'account',\n          args: [address],\n          transform: async (\n            response: FrameSystemAccountInfo,\n          ): Promise<bigint> => calculateSystemAccountBalance(response),\n        }),\n    }),\n    accountEquilibrium: (): BalanceConfigBuilder => ({\n      build: ({ address, asset }) =>\n        new SubstrateQueryConfig({\n          module: 'system',\n          func: 'account',\n          args: [address],\n          transform: async (response): Promise<bigint> => {\n            if (response.data.isEmpty) {\n              return 0n;\n            }\n\n            const res = response.data.toJSON() as unknown;\n            let balances: EquilibriumSystemBalanceData | undefined;\n\n            if (Array.isArray(res)) {\n              balances = res;\n            }\n\n            // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n            if (Array.isArray((res as any)?.v0?.balance)) {\n              // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n              balances = (res as any).v0.balance;\n            }\n\n            if (!balances) {\n              throw new Error(\"Can't get balance from Equilibrium chain\");\n            }\n\n            const balance = balances.find(\n              ([assetId]) => assetId === asset.getBalanceAssetId(),\n            );\n\n            if (!balance) {\n              return 0n;\n            }\n\n            return BigInt(balance[1].positive);\n          },\n        }),\n    }),\n    accountEvmTo32: (): BalanceConfigBuilder => ({\n      build: ({ address }) => {\n        const substrateAddress = evmToAddress(address);\n\n        return new SubstrateQueryConfig({\n          module: 'system',\n          func: 'account',\n          args: [substrateAddress],\n          transform: async (\n            response: FrameSystemAccountInfo,\n          ): Promise<bigint> => calculateSystemAccountBalance(response),\n        });\n      },\n    }),\n  };\n}\n\nfunction tokens() {\n  return {\n    accounts: (): BalanceConfigBuilder => ({\n      build: ({ address, asset }) =>\n        new SubstrateQueryConfig({\n          module: 'tokens',\n          func: 'accounts',\n          args: [address, asset.getBalanceAssetId()],\n          transform: async ({\n            free,\n            frozen,\n          }: TokensPalletAccountData): Promise<bigint> =>\n            BigInt(free.sub(frozen).toString()),\n        }),\n    }),\n  };\n}\n\nexport async function calculateSystemAccountBalance(\n  response: FrameSystemAccountInfo,\n): Promise<bigint> {\n  const balance = response.data as PalletBalancesAccountData &\n    PalletBalancesAccountDataOld;\n\n  const free = BigInt(balance.free.toString());\n  const frozen = balance.miscFrozen ?? balance.frozen;\n  const frozenMinusReserved = BigInt(frozen.sub(balance.reserved).toString());\n  const locked = frozenMinusReserved < 0n ? 0n : frozenMinusReserved;\n\n  return free - locked;\n}\n","import { type Abi, encodeFunctionData } from 'viem';\nimport { BaseConfig, type BaseConfigConstructorParams } from '../BaseConfig';\n\nexport interface ContractConfigConstructorParams\n  extends BaseConfigConstructorParams {\n  address: string;\n  abi: Abi;\n  args: unknown[];\n  value?: bigint;\n}\n\nexport class ContractConfig extends BaseConfig {\n  readonly address: string;\n  readonly abi: Abi;\n  readonly args: unknown[];\n  readonly value?: bigint;\n\n  static is(obj: unknown): obj is ContractConfig {\n    return obj instanceof ContractConfig;\n  }\n\n  constructor({\n    address,\n    abi,\n    args,\n    value,\n    ...other\n  }: ContractConfigConstructorParams) {\n    super({ ...other });\n\n    this.address = address;\n    this.abi = abi;\n    this.args = args;\n    this.value = value;\n  }\n\n  encodeFunctionData() {\n    return encodeFunctionData({\n      abi: this.abi,\n      functionName: this.func,\n      args: this.args,\n    });\n  }\n}\n","import type { AssetAmount } from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type { BuilderParams } from '../../../builder.interfaces';\nimport { getExtrinsicArgumentVersion } from '../../../extrinsic/ExtrinsicBuilder.utils';\nimport { ContractConfig } from '../../../types';\nimport {\n  type AssetAddressFormat,\n  type AssetMultilocation,\n  type ContractConfigBuilder,\n  TransferType,\n} from '../../ContractBuilder.interfaces';\nimport {\n  encodeXcmMessageToBytes,\n  getAddressGlobalConsensusAssetMultilocation,\n  getAssetAddressMultilocation,\n  getBeneficiaryMultilocation,\n  getDestinationParachainMultilocation,\n  getGlobalConsensusAssetMultilocation,\n  getGlobalConsensusDestination,\n  getPalletInstanceMultilocation,\n} from '../../ContractBuilder.utils';\nimport { XCM_ABI } from './XcmPrecompileAbi';\n\nconst XCM_PRECOMPILE_ADDRESS = '0x000000000000000000000000000000000000081A';\n\nexport function XcmPrecompile() {\n  return {\n    transferAssetsToPara20: (\n      shouldTransferAssetPrecedeFeeAsset = true,\n    ): ContractConfigBuilder => ({\n      build: ({ destinationAddress, asset, destination, fee }) => {\n        const assets = getAssets(\n          asset,\n          fee,\n          shouldTransferAssetPrecedeFeeAsset,\n        );\n\n        return new ContractConfig({\n          address: XCM_PRECOMPILE_ADDRESS,\n          abi: XCM_ABI,\n          args: [destination.parachainId, destinationAddress, assets, 0],\n          func: 'transferAssetsToPara20',\n          module: 'Xcm',\n        });\n      },\n    }),\n    transferAssetsToPara32: (\n      shouldTransferAssetPrecedeFeeAsset = false,\n    ): ContractConfigBuilder => ({\n      build: ({ destinationAddress, asset, destination, fee }) => {\n        const assets = getAssets(\n          asset,\n          fee,\n          shouldTransferAssetPrecedeFeeAsset,\n        );\n\n        return new ContractConfig({\n          address: XCM_PRECOMPILE_ADDRESS,\n          abi: XCM_ABI,\n          args: [\n            destination.parachainId,\n            u8aToHex(decodeAddress(destinationAddress)),\n            assets,\n            0,\n          ],\n          func: 'transferAssetsToPara32',\n          module: 'Xcm',\n        });\n      },\n    }),\n    transferAssetsToRelay: (): ContractConfigBuilder => ({\n      build: ({ destinationAddress, asset }) => {\n        return new ContractConfig({\n          address: XCM_PRECOMPILE_ADDRESS,\n          abi: XCM_ABI,\n          args: [\n            u8aToHex(decodeAddress(destinationAddress)),\n            [[asset.address, asset.amount]],\n            0,\n          ],\n          func: 'transferAssetsToRelay',\n          module: 'Xcm',\n        });\n      },\n    }),\n    transferAssetsLocation: () => ({\n      nativeAsset: (): ContractConfigBuilder => ({\n        build: (params) => {\n          return buildTransferAssetsLocation({\n            ...params,\n            assetsMultilocations: [\n              getPalletInstanceMultilocation(params.sourceApi, params.asset),\n            ],\n          });\n        },\n      }),\n      localErc20: (): ContractConfigBuilder => ({\n        build: (params) => {\n          return buildTransferAssetsLocation({\n            ...params,\n            assetsMultilocations: [\n              getAssetAddressMultilocation(\n                params.sourceApi,\n                params.asset,\n                params.destination,\n              ),\n            ],\n          });\n        },\n      }),\n      foreignAsset: (): ContractConfigBuilder => ({\n        build: (params) => {\n          return buildTransferAssetsLocation({\n            ...params,\n            assetsMultilocations: [\n              getGlobalConsensusAssetMultilocation(\n                params.sourceApi,\n                params.asset,\n                params.destination,\n              ),\n            ],\n          });\n        },\n      }),\n      foreignErc20: (): ContractConfigBuilder => ({\n        build: (params) => {\n          return buildTransferAssetsLocation({\n            ...params,\n            assetsMultilocations: [\n              // fee asset\n              getGlobalConsensusAssetMultilocation(\n                params.sourceApi,\n                params.fee,\n                params.destination,\n              ),\n              // transfer asset\n              getAddressGlobalConsensusAssetMultilocation(\n                params.sourceApi,\n                params.asset,\n                params.destination,\n              ),\n            ],\n          });\n        },\n      }),\n    }),\n    transferAssetsUsingTypeAndThenAddress: (\n      shouldTransferAssetPrecedeFeeAsset = false,\n    ): ContractConfigBuilder => ({\n      build: ({\n        destinationAddress,\n        asset,\n        fee,\n        destination,\n        destinationApi,\n        sourceApi,\n      }) => {\n        const assets = getAssets(\n          asset,\n          fee,\n          shouldTransferAssetPrecedeFeeAsset,\n        );\n\n        const xcmMessage = buildXcmMessage(\n          assets,\n          destinationAddress,\n          sourceApi,\n        );\n\n        const customXcmOnDest = encodeXcmMessageToBytes(\n          xcmMessage,\n          destinationApi,\n        );\n\n        const feeIndex = shouldTransferAssetPrecedeFeeAsset ? 1 : 0;\n\n        return new ContractConfig({\n          address: XCM_PRECOMPILE_ADDRESS,\n          abi: XCM_ABI,\n          args: [\n            getDestinationParachainMultilocation(destination),\n            assets,\n            TransferType.DestinationReserve,\n            feeIndex,\n            TransferType.DestinationReserve,\n            customXcmOnDest,\n          ],\n          func: 'transferAssetsUsingTypeAndThenAddress',\n          module: 'Xcm',\n        });\n      },\n    }),\n  };\n}\n\nfunction getAssets(\n  asset: AssetAmount,\n  feeAsset: AssetAmount,\n  shouldTransferAssetPrecedeFeeAsset: boolean,\n): AssetAddressFormat[] {\n  if (feeAsset.isSame(asset)) {\n    return [[asset.address, asset.amount]];\n  }\n\n  return shouldTransferAssetPrecedeFeeAsset\n    ? [\n        [asset.address, asset.amount],\n        [feeAsset.address, feeAsset.amount],\n      ]\n    : [\n        [feeAsset.address, feeAsset.amount],\n        [asset.address, asset.amount],\n      ];\n}\n\nfunction buildXcmMessage(\n  assets: AssetAddressFormat[],\n  destinationAddress: string,\n  sourceApi: ApiPromise | undefined,\n) {\n  const xcmVersion = getExtrinsicArgumentVersion(\n    sourceApi?.tx.polkadotXcm?.send || sourceApi?.tx.xcmPallet?.send,\n  );\n\n  const instruction = {\n    DepositAsset: {\n      assets: { Wild: { AllCounted: assets.length } },\n      beneficiary: {\n        parents: 0,\n        interior: {\n          X1: [\n            {\n              AccountId32: {\n                id: u8aToHex(decodeAddress(destinationAddress)),\n                network: null,\n              },\n            },\n          ],\n        },\n      },\n    },\n  };\n  return {\n    [xcmVersion]: [instruction],\n  };\n}\n\ninterface BuildTransferAssetsLocationParams extends BuilderParams {\n  assetsMultilocations: AssetMultilocation[];\n  feeAssetItem?: number;\n}\n\nfunction buildTransferAssetsLocation({\n  assetsMultilocations,\n  feeAssetItem = 0,\n  destinationAddress,\n  destination,\n  sourceApi,\n}: BuildTransferAssetsLocationParams) {\n  return new ContractConfig({\n    address: XCM_PRECOMPILE_ADDRESS,\n    abi: XCM_ABI,\n    args: [\n      getGlobalConsensusDestination(sourceApi, destination),\n      getBeneficiaryMultilocation(destinationAddress, destination),\n      assetsMultilocations,\n      feeAssetItem,\n    ],\n    func: 'transferAssetsLocation',\n    module: 'Xcm',\n  });\n}\n","import type { HttpTransport, PublicClient } from 'viem';\n\nexport type EvmQueryFunctions = 'getBalance';\nexport type EvmFunctionArgs = Parameters<\n  PublicClient<HttpTransport>[EvmQueryFunctions]\n>;\n\nexport interface EvmQueryConfigParams {\n  readonly args: EvmFunctionArgs;\n  readonly func: EvmQueryFunctions;\n}\n\nexport class EvmQueryConfig {\n  readonly args: EvmFunctionArgs;\n  readonly func: EvmQueryFunctions;\n\n  static is(obj: unknown): obj is EvmQueryConfig {\n    return obj instanceof EvmQueryConfig;\n  }\n\n  constructor({ args, func }: EvmQueryConfigParams) {\n    this.args = args;\n    this.func = func;\n  }\n}\n","import type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport { BaseConfig, type BaseConfigConstructorParams } from '../BaseConfig';\n\nexport interface ExtrinsicConfigConstructorParams\n  extends Omit<BaseConfigConstructorParams, 'type'> {\n  // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n  getArgs: (func?: SubmittableExtrinsicFunction<'promise'>) => any[];\n}\n\nexport class ExtrinsicConfig extends BaseConfig {\n  // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n  getArgs: (func?: SubmittableExtrinsicFunction<'promise'>) => any[];\n\n  static is(obj: unknown): obj is ExtrinsicConfig {\n    return obj instanceof ExtrinsicConfig;\n  }\n\n  constructor({ getArgs, ...other }: ExtrinsicConfigConstructorParams) {\n    super({ ...other });\n\n    this.getArgs = getArgs;\n  }\n}\n","import type { ApiPromise } from '@polkadot/api';\n\nexport interface SubstrateCallConfigConstructorParams {\n  api: ApiPromise;\n  call: () => Promise<bigint>;\n}\n\nexport class SubstrateCallConfig {\n  readonly api: ApiPromise;\n\n  // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n  readonly call: () => Promise<any>;\n\n  static is(obj: unknown): obj is SubstrateCallConfig {\n    return obj instanceof SubstrateCallConfig;\n  }\n\n  constructor({ api, call }: SubstrateCallConfigConstructorParams) {\n    this.api = api;\n    this.call = call;\n  }\n}\n","import type { ConfigBuilder } from '../builder.interfaces';\nimport type { ContractConfig } from '../types/evm/ContractConfig';\n\nexport type ContractConfigBuilder = ConfigBuilder<ContractConfig>;\n\nexport type DestinationMultilocation = [\n  /**\n   * 0 - if destination is referring to a location in the same chain\n   * 1 - if transaction is going through or to a relay chain\n   * 2 - if transaction is going to a parachain in another ecosystem\n   */\n  0 | 1 | 2,\n  (\n    | [\n        /**\n         * example '0x00000007DC'\n         * 7DC - parachain id in hex\n         * can be found here:\n         *   - https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fkusama-rpc.polkadot.io#/parachains\n         *   - https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/parachains\n         */\n        string,\n        /**\n         * example '0x01%account%00',\n         * enum = 01 (AccountId32)\n         * networkId = 00 (any)\n         */\n        string,\n      ]\n    | [\n        /**\n         * example '0x01%account%00',\n         * enum = 01 (AccountId32)\n         * networkId = 00 (any)\n         */\n        string,\n      ]\n    /**\n     * example 'Here',\n     */\n    | []\n  ),\n];\n\nexport type AssetAddressFormat = (string | bigint | undefined)[];\n\nexport enum TransferType {\n  Teleport,\n  LocalReserve,\n  DestinationReserve,\n}\n\nexport type AssetMultilocation = [[number, string[]], bigint];\n","import {\n  type AnyParachain,\n  type AssetAmount,\n  EvmParachain,\n} from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type { Address } from 'viem';\nimport { getGlobalConsensus } from '../extrinsic/pallets/polkadotXcm/polkadotXcm.util';\nimport type {\n  AssetMultilocation,\n  DestinationMultilocation,\n} from './ContractBuilder.interfaces';\n\nexport function getPrecompileDestinationInterior(\n  destination: AnyParachain,\n  address?: string,\n): [Address, Address] | [Address] {\n  if (!address) {\n    return [encodeParachain(destination.parachainId)];\n  }\n  const acc = encodeAddress(destination, address);\n\n  return destination.parachainId\n    ? [encodeParachain(destination.parachainId), acc]\n    : [acc];\n}\n\nexport function getBeneficiaryMultilocation(\n  address: string,\n  destination: AnyParachain,\n): DestinationMultilocation {\n  return [0, [encodeAddress(destination, address)]];\n}\n\nexport function getDestinationMultilocation(\n  address: string,\n  destination: AnyParachain,\n): DestinationMultilocation {\n  const interior = getPrecompileDestinationInterior(destination, address);\n  return [1, interior];\n}\n\nexport function getDestinationParachainMultilocation(\n  destination: AnyParachain,\n): DestinationMultilocation {\n  if (destination.isRelay) {\n    return [1, []];\n  }\n\n  return [1, [encodeParachain(destination.parachainId)]];\n}\n\nexport function getGlobalConsensusDestination(\n  sourceApi: ApiPromise | undefined,\n  destination: AnyParachain,\n) {\n  return [\n    2,\n    [\n      encodeGlobalConsensus(sourceApi, destination),\n      encodeParachain(destination.parachainId),\n    ],\n  ] as const;\n}\n\nexport function getPalletInstanceMultilocation(\n  sourceApi: ApiPromise | undefined,\n  asset: AssetAmount,\n): AssetMultilocation {\n  return [\n    [0, [encodePalletInstance(sourceApi, asset.getAssetPalletInstance())]],\n    asset.amount,\n  ];\n}\n\nexport function getAssetAddressMultilocation(\n  sourceApi: ApiPromise | undefined,\n  asset: AssetAmount,\n  destination: AnyParachain,\n): AssetMultilocation {\n  if (!asset.address) {\n    throw new Error(`Asset address is required for ${asset.key}`);\n  }\n\n  return [\n    [\n      0,\n      [\n        encodePalletInstance(sourceApi, asset.getAssetPalletInstance()),\n        encodeAddress(destination, asset.address),\n      ],\n    ],\n    asset.amount,\n  ];\n}\n\nexport function getGlobalConsensusAssetMultilocation(\n  sourceApi: ApiPromise | undefined,\n  asset: AssetAmount,\n  destination: AnyParachain,\n): AssetMultilocation {\n  const assetInDestination = destination.getChainAsset(asset);\n  return [\n    [\n      2,\n      [\n        encodeGlobalConsensus(sourceApi, destination),\n        encodeParachain(destination.parachainId),\n        encodePalletInstance(\n          sourceApi,\n          assetInDestination.getAssetPalletInstance(),\n        ),\n      ],\n    ],\n    asset.amount,\n  ];\n}\n\nexport function getAddressGlobalConsensusAssetMultilocation(\n  sourceApi: ApiPromise | undefined,\n  asset: AssetAmount,\n  destination: AnyParachain,\n): AssetMultilocation {\n  const assetInDestination = destination.getChainAsset(asset);\n\n  if (!assetInDestination.address) {\n    throw new Error(`Asset address is required for ${assetInDestination.key}`);\n  }\n\n  return [\n    [\n      2,\n      [\n        encodeGlobalConsensus(sourceApi, destination),\n        encodeParachain(destination.parachainId),\n        encodePalletInstance(\n          sourceApi,\n          assetInDestination.getAssetPalletInstance(),\n        ),\n        encodeAddress(destination, assetInDestination.address),\n      ],\n    ],\n    asset.amount,\n  ];\n}\n\n/**\n * Encodes an XCM message to bytes for use in Solidity precompiles\n */\nexport function encodeXcmMessageToBytes(\n  xcmMessage: Record<string, unknown>,\n  api: ApiPromise | undefined,\n): Address {\n  if (!api) {\n    throw new Error('API is required to encode XCM message');\n  }\n\n  try {\n    const versionedXcm = api.createType('XcmVersionedXcm', xcmMessage);\n    return versionedXcm.toHex();\n  } catch (error) {\n    console.error('Failed to encode XCM message:', error);\n    throw error;\n  }\n}\n\nfunction encodeParachain(paraId: number): Address {\n  return `0x00${paraId.toString(16).padStart(8, '0')}`;\n}\n\nfunction encodeGlobalConsensus(\n  api: ApiPromise | undefined,\n  destination: AnyParachain,\n): Address {\n  const globalConsensus = getGlobalConsensus(destination);\n\n  return encodeXcmJunction(api, {\n    GlobalConsensus: globalConsensus,\n  });\n}\n\nfunction encodePalletInstance(\n  api: ApiPromise | undefined,\n  palletInstance: number,\n): Address {\n  return encodeXcmJunction(api, {\n    PalletInstance: palletInstance,\n  });\n}\n\nfunction encodeXcmJunction(\n  api: ApiPromise | undefined,\n  junction: object,\n): Address {\n  if (!api) {\n    throw new Error('API is required to encode XCM junction');\n  }\n\n  const junctionType = api.createType('XcmV3Junction', junction);\n\n  return junctionType.toHex();\n}\n\nfunction encodeAddress(destination: AnyParachain, address: string): Address {\n  const accountType = EvmParachain.is(destination) ? '03' : '01';\n  return `0x${accountType}${u8aToHex(\n    decodeAddress(address),\n    -1,\n    false,\n  )}00` as Address;\n}\n","import { type AnyParachain, Ecosystem } from '@moonbeam-network/xcm-types';\nimport type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport type { BuilderParams } from '../../../builder.interfaces';\nimport type { Parents } from '../../ExtrinsicBuilder.interfaces';\nimport {\n  getExtrinsicAccount,\n  getExtrinsicArgumentVersion,\n  normalizeX1,\n} from '../../ExtrinsicBuilder.utils';\n\nexport interface GetExtrinsicParams extends Omit<BuilderParams, 'asset'> {\n  assets: object[];\n  func?: SubmittableExtrinsicFunction<'promise'>;\n  parents?: Parents;\n  feeIndex?: number;\n  globalConsensus?: Ecosystem;\n}\n\nexport function getPolkadotXcmExtrinsicArgs({\n  assets,\n  destinationAddress,\n  destination,\n  func,\n  parents = 1,\n  feeIndex = 0,\n}: GetExtrinsicParams) {\n  const version = getExtrinsicArgumentVersion(func);\n\n  return [\n    // dest\n    {\n      [version]: normalizeX1(version, {\n        parents,\n        interior: {\n          X1: {\n            Parachain: destination.parachainId,\n          },\n        },\n      }),\n    },\n    // beneficiary\n    {\n      [version]: normalizeX1(version, {\n        parents: 0,\n        interior: {\n          X1: getExtrinsicAccount(destinationAddress),\n        },\n      }),\n    },\n    // assets\n    {\n      [version]: assets,\n    },\n    // feeAssetItem\n    feeIndex,\n    // weightLimit\n    'Unlimited',\n  ];\n}\n\nfunction isKusamaDestination(destination: AnyParachain) {\n  return (\n    destination.ecosystem === Ecosystem.Kusama ||\n    destination.ecosystem === Ecosystem.MoonsamaRelay\n  );\n}\n\nfunction isPolkadotDestination(destination: AnyParachain) {\n  return (\n    destination.ecosystem === Ecosystem.Polkadot ||\n    destination.ecosystem === Ecosystem.MoonlamaRelay\n  );\n}\n\nexport function getGlobalConsensus(destination: AnyParachain) {\n  if (isKusamaDestination(destination)) {\n    return 'Kusama';\n  }\n\n  if (isPolkadotDestination(destination)) {\n    return 'Polkadot';\n  }\n\n  return {\n    ByGenesis: destination.relayGenesisHash,\n  };\n}\n\nexport function getEcosystemTransferExtrinsicArgs({\n  assets,\n  destinationAddress,\n  destination,\n  func,\n  feeIndex = 0,\n}: GetExtrinsicParams) {\n  const version = getExtrinsicArgumentVersion(func);\n\n  const globalConsensus = getGlobalConsensus(destination);\n\n  return [\n    // dest\n    {\n      [version]: normalizeX1(version, {\n        parents: 2,\n        interior: {\n          X2: [\n            { GlobalConsensus: globalConsensus },\n            {\n              Parachain: destination.parachainId,\n            },\n          ],\n        },\n      }),\n    },\n    // beneficiary\n    {\n      [version]: normalizeX1(version, {\n        parents: 0,\n        interior: {\n          X1: getExtrinsicAccount(destinationAddress),\n        },\n      }),\n    },\n    // assets\n    {\n      [version]: assets,\n    },\n    // feeAssetItem\n    feeIndex,\n    // weightLimit\n    'Unlimited',\n  ];\n}\n\nexport function shouldFeeAssetPrecedeAsset({\n  asset,\n  fee,\n}: BuilderParams): boolean {\n  const assetIdNumber = Number(asset.getAssetId());\n  const feeAssetIdNumber = Number(fee.getAssetId());\n\n  if (Number.isNaN(assetIdNumber) || Number.isNaN(feeAssetIdNumber)) {\n    return false;\n  }\n\n  return assetIdNumber > feeAssetIdNumber;\n}\n","export const XCM_ABI = [\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct XCM.Location',\n        name: 'dest',\n        type: 'tuple',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct XCM.Location',\n        name: 'beneficiary',\n        type: 'tuple',\n      },\n      {\n        components: [\n          {\n            components: [\n              {\n                internalType: 'uint8',\n                name: 'parents',\n                type: 'uint8',\n              },\n              {\n                internalType: 'bytes[]',\n                name: 'interior',\n                type: 'bytes[]',\n              },\n            ],\n            internalType: 'struct XCM.Location',\n            name: 'location',\n            type: 'tuple',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct XCM.AssetLocationInfo[]',\n        name: 'assets',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'uint32',\n        name: 'feeAssetItem',\n        type: 'uint32',\n      },\n    ],\n    name: 'transferAssetsLocation',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint32',\n        name: 'paraId',\n        type: 'uint32',\n      },\n      {\n        internalType: 'address',\n        name: 'beneficiary',\n        type: 'address',\n      },\n      {\n        components: [\n          {\n            internalType: 'address',\n            name: 'asset',\n            type: 'address',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct XCM.AssetAddressInfo[]',\n        name: 'assets',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'uint32',\n        name: 'feeAssetItem',\n        type: 'uint32',\n      },\n    ],\n    name: 'transferAssetsToPara20',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint32',\n        name: 'paraId',\n        type: 'uint32',\n      },\n      {\n        internalType: 'bytes32',\n        name: 'beneficiary',\n        type: 'bytes32',\n      },\n      {\n        components: [\n          {\n            internalType: 'address',\n            name: 'asset',\n            type: 'address',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct XCM.AssetAddressInfo[]',\n        name: 'assets',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'uint32',\n        name: 'feeAssetItem',\n        type: 'uint32',\n      },\n    ],\n    name: 'transferAssetsToPara32',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes32',\n        name: 'beneficiary',\n        type: 'bytes32',\n      },\n      {\n        components: [\n          {\n            internalType: 'address',\n            name: 'asset',\n            type: 'address',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct XCM.AssetAddressInfo[]',\n        name: 'assets',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'uint32',\n        name: 'feeAssetItem',\n        type: 'uint32',\n      },\n    ],\n    name: 'transferAssetsToRelay',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct XCM.Location',\n        name: 'dest',\n        type: 'tuple',\n      },\n      {\n        components: [\n          {\n            internalType: 'address',\n            name: 'asset',\n            type: 'address',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct XCM.AssetAddressInfo[]',\n        name: 'assets',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'enum XCM.TransferType',\n        name: 'assetsTransferType',\n        type: 'uint8',\n      },\n      {\n        internalType: 'uint8',\n        name: 'remoteFeesIdIndex',\n        type: 'uint8',\n      },\n      {\n        internalType: 'enum XCM.TransferType',\n        name: 'feesTransferType',\n        type: 'uint8',\n      },\n      {\n        internalType: 'bytes',\n        name: 'customXcmOnDest',\n        type: 'bytes',\n      },\n    ],\n    name: 'transferAssetsUsingTypeAndThenAddress',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct XCM.Location',\n        name: 'dest',\n        type: 'tuple',\n      },\n      {\n        components: [\n          {\n            internalType: 'address',\n            name: 'asset',\n            type: 'address',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct XCM.AssetAddressInfo[]',\n        name: 'assets',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'uint8',\n        name: 'remoteFeesIdIndex',\n        type: 'uint8',\n      },\n      {\n        internalType: 'bytes',\n        name: 'customXcmOnDest',\n        type: 'bytes',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct XCM.Location',\n        name: 'remoteReserve',\n        type: 'tuple',\n      },\n    ],\n    name: 'transferAssetsUsingTypeAndThenAddress',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct XCM.Location',\n        name: 'dest',\n        type: 'tuple',\n      },\n      {\n        components: [\n          {\n            components: [\n              {\n                internalType: 'uint8',\n                name: 'parents',\n                type: 'uint8',\n              },\n              {\n                internalType: 'bytes[]',\n                name: 'interior',\n                type: 'bytes[]',\n              },\n            ],\n            internalType: 'struct XCM.Location',\n            name: 'location',\n            type: 'tuple',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct XCM.AssetLocationInfo[]',\n        name: 'assets',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'enum XCM.TransferType',\n        name: 'assetsTransferType',\n        type: 'uint8',\n      },\n      {\n        internalType: 'uint8',\n        name: 'remoteFeesIdIndex',\n        type: 'uint8',\n      },\n      {\n        internalType: 'enum XCM.TransferType',\n        name: 'feesTransferType',\n        type: 'uint8',\n      },\n      {\n        internalType: 'bytes',\n        name: 'customXcmOnDest',\n        type: 'bytes',\n      },\n    ],\n    name: 'transferAssetsUsingTypeAndThenLocation',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct XCM.Location',\n        name: 'dest',\n        type: 'tuple',\n      },\n      {\n        components: [\n          {\n            components: [\n              {\n                internalType: 'uint8',\n                name: 'parents',\n                type: 'uint8',\n              },\n              {\n                internalType: 'bytes[]',\n                name: 'interior',\n                type: 'bytes[]',\n              },\n            ],\n            internalType: 'struct XCM.Location',\n            name: 'location',\n            type: 'tuple',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct XCM.AssetLocationInfo[]',\n        name: 'assets',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'uint8',\n        name: 'remoteFeesIdIndex',\n        type: 'uint8',\n      },\n      {\n        internalType: 'bytes',\n        name: 'customXcmOnDest',\n        type: 'bytes',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct XCM.Location',\n        name: 'remoteReserve',\n        type: 'tuple',\n      },\n    ],\n    name: 'transferAssetsUsingTypeAndThenLocation',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n] as const;\n","import type { AnyParachain } from '@moonbeam-network/xcm-types';\nimport { formatAssetIdToERC20 } from '@moonbeam-network/xcm-utils';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress, evmToAddress } from '@polkadot/util-crypto';\nimport { ContractConfig } from '../../../types/evm/ContractConfig';\nimport type {\n  ContractConfigBuilder,\n  DestinationMultilocation,\n} from '../../ContractBuilder.interfaces';\nimport { getDestinationMultilocation } from '../../ContractBuilder.utils';\nimport { XTOKENS_ABI } from './XtokensABI';\n\nconst U_64_MAX = 18446744073709551615n;\nconst XTOKENS_CONTRACT_ADDRESS = '0x0000000000000000000000000000000000000804';\n\nexport function Xtokens() {\n  return {\n    transfer: (weight = U_64_MAX): ContractConfigBuilder => ({\n      build: ({ destinationAddress, asset, destination }) =>\n        new ContractConfig({\n          address: XTOKENS_CONTRACT_ADDRESS,\n          abi: XTOKENS_ABI,\n          args: [\n            asset.address\n              ? formatAssetIdToERC20(asset.address)\n              : asset.getAssetId(),\n            asset.amount,\n            getDestinationMultilocation(destinationAddress, destination),\n            weight,\n          ],\n          func: 'transfer',\n          module: 'Xtokens',\n        }),\n    }),\n    transferMultiCurrencies: (\n      shouldTransferAssetPrecedeFeeAsset = true,\n      weight = U_64_MAX,\n    ): ContractConfigBuilder => ({\n      build: ({ asset, destination, destinationAddress, fee }) => {\n        const transferAsset = [\n          asset.address\n            ? formatAssetIdToERC20(asset.address)\n            : asset.getAssetId(),\n          asset.amount,\n        ];\n\n        const feeAsset = [\n          fee.address ? formatAssetIdToERC20(fee.address) : fee.getAssetId(),\n          fee.amount,\n        ];\n\n        const assets = shouldTransferAssetPrecedeFeeAsset\n          ? [transferAsset, feeAsset]\n          : [feeAsset, transferAsset];\n        const feeAssetIndex = shouldTransferAssetPrecedeFeeAsset ? 1 : 0;\n        return new ContractConfig({\n          address: XTOKENS_CONTRACT_ADDRESS,\n          abi: XTOKENS_ABI,\n          args: [\n            assets,\n            feeAssetIndex,\n            getDestinationMultilocation(destinationAddress, destination),\n            weight,\n          ],\n          func: 'transferMultiCurrencies',\n          module: 'Xtokens',\n        });\n      },\n    }),\n    transferWithEvmTo32: (weight = U_64_MAX): ContractConfigBuilder => ({\n      build: ({ destinationAddress, asset, destination }) => {\n        const multilocation =\n          getDestinationMultilocationForPrecompileDestination(\n            destinationAddress,\n            destination,\n          );\n\n        return new ContractConfig({\n          address: XTOKENS_CONTRACT_ADDRESS,\n          abi: XTOKENS_ABI,\n          args: [\n            asset.address\n              ? formatAssetIdToERC20(asset.address)\n              : asset.getAssetId(),\n            asset.amount,\n            multilocation,\n            weight,\n          ],\n          func: 'transfer',\n          module: 'Xtokens',\n        });\n      },\n    }),\n  };\n}\n\nfunction getDestinationMultilocationForPrecompileDestination(\n  address: string,\n  destination: AnyParachain,\n): DestinationMultilocation {\n  /* \n   01: AccountId32\n   03: AccountKey20\n   https://docs.moonbeam.network/builders/interoperability/xcm/xc20/xtokens/#building-the-precompile-multilocation\n   */\n  const accountType = '01';\n  const substrateAddress = evmToAddress(address);\n  const acc = `0x${accountType}${u8aToHex(\n    decodeAddress(substrateAddress),\n    -1,\n    false,\n  )}00`;\n\n  return [\n    1,\n    destination.parachainId\n      ? [`0x0000000${destination.parachainId.toString(16)}`, acc]\n      : [acc],\n  ];\n}\n","export const XTOKENS_ABI = [\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'currencyAddress',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct Xtokens.Multilocation',\n        name: 'destination',\n        type: 'tuple',\n      },\n      {\n        internalType: 'uint64',\n        name: 'weight',\n        type: 'uint64',\n      },\n    ],\n    name: 'transfer',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'address',\n            name: 'currencyAddress',\n            type: 'address',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct Xtokens.Currency[]',\n        name: 'currencies',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'uint32',\n        name: 'feeItem',\n        type: 'uint32',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct Xtokens.Multilocation',\n        name: 'destination',\n        type: 'tuple',\n      },\n      {\n        internalType: 'uint64',\n        name: 'weight',\n        type: 'uint64',\n      },\n    ],\n    name: 'transferMultiCurrencies',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n] as const;\n","import { XcmPrecompile } from './contracts/XcmPrecompile';\nimport { Xtokens } from './contracts/Xtokens';\n\nexport function ContractBuilder() {\n  return {\n    Xtokens,\n    XcmPrecompile,\n  };\n}\n","export const ERC20_ABI = [\n  {\n    constant: true,\n    inputs: [],\n    name: 'name',\n    outputs: [\n      {\n        name: '',\n        type: 'string',\n      },\n    ],\n    payable: false,\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    constant: false,\n    inputs: [\n      {\n        name: '_spender',\n        type: 'address',\n      },\n      {\n        name: '_value',\n        type: 'uint256',\n      },\n    ],\n    name: 'approve',\n    outputs: [\n      {\n        name: '',\n        type: 'bool',\n      },\n    ],\n    payable: false,\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    constant: true,\n    inputs: [],\n    name: 'totalSupply',\n    outputs: [\n      {\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    payable: false,\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    constant: false,\n    inputs: [\n      {\n        name: '_from',\n        type: 'address',\n      },\n      {\n        name: '_to',\n        type: 'address',\n      },\n      {\n        name: '_value',\n        type: 'uint256',\n      },\n    ],\n    name: 'transferFrom',\n    outputs: [\n      {\n        name: '',\n        type: 'bool',\n      },\n    ],\n    payable: false,\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    constant: true,\n    inputs: [],\n    name: 'decimals',\n    outputs: [\n      {\n        name: '',\n        type: 'uint8',\n      },\n    ],\n    payable: false,\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    constant: true,\n    inputs: [\n      {\n        name: '_owner',\n        type: 'address',\n      },\n    ],\n    name: 'balanceOf',\n    outputs: [\n      {\n        name: 'balance',\n        type: 'uint256',\n      },\n    ],\n    payable: false,\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    constant: true,\n    inputs: [],\n    name: 'symbol',\n    outputs: [\n      {\n        name: '',\n        type: 'string',\n      },\n    ],\n    payable: false,\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    constant: false,\n    inputs: [\n      {\n        name: '_to',\n        type: 'address',\n      },\n      {\n        name: '_value',\n        type: 'uint256',\n      },\n    ],\n    name: 'transfer',\n    outputs: [\n      {\n        name: '',\n        type: 'bool',\n      },\n    ],\n    payable: false,\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    constant: true,\n    inputs: [\n      {\n        name: '_owner',\n        type: 'address',\n      },\n      {\n        name: '_spender',\n        type: 'address',\n      },\n    ],\n    name: 'allowance',\n    outputs: [\n      {\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    payable: false,\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    payable: true,\n    stateMutability: 'payable',\n    type: 'fallback',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'Approval',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'Transfer',\n    type: 'event',\n  },\n] as const;\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport type { ExtrinsicConfigBuilder } from '../../ExtrinsicBuilder.interfaces';\nimport { getExtrinsicAccount } from '../../ExtrinsicBuilder.utils';\n\nexport enum EqBalancesFee {\n  SovereignAccWillPay = 'SovereignAccWillPay',\n  TargetChainAccWillPay = 'TargetChainAccWillPay',\n  ThisAccWillPay = 'ThisAccWillPay',\n}\n\nconst pallet = 'eqBalances';\n\nexport function eqBalances() {\n  return {\n    xcmTransfer: (): ExtrinsicConfigBuilder => ({\n      build: ({ destinationAddress, asset, destination }) =>\n        new ExtrinsicConfig({\n          module: pallet,\n          func: 'xcmTransfer',\n          getArgs: () => [\n            asset.getAssetId(),\n            asset.amount,\n            {\n              parents: 1,\n              interior: {\n                X2: [\n                  {\n                    Parachain: destination.parachainId,\n                  },\n                  getExtrinsicAccount(destinationAddress),\n                ],\n              },\n            },\n            EqBalancesFee.ThisAccWillPay,\n          ],\n        }),\n    }),\n    transferXcm: (): ExtrinsicConfigBuilder => ({\n      build: ({ destinationAddress: address, asset, destination, fee }) =>\n        new ExtrinsicConfig({\n          module: pallet,\n          func: 'transferXcm',\n          getArgs: () => {\n            const amountWithoutFee =\n              asset.amount - fee.amount > 0n ? asset.amount - fee.amount : 0n;\n\n            return [\n              [\n                asset.getAssetId(),\n                asset.isSame(fee) ? amountWithoutFee : asset.amount,\n              ],\n              [fee.getAssetId(), fee.amount],\n              {\n                parents: 1,\n                interior: {\n                  X2: [\n                    {\n                      Parachain: destination.parachainId,\n                    },\n                    getExtrinsicAccount(address),\n                  ],\n                },\n              },\n            ];\n          },\n        }),\n    }),\n  };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport type { ExtrinsicConfigBuilder } from '../../ExtrinsicBuilder.interfaces';\nimport {\n  getExtrinsicAccount,\n  getExtrinsicArgumentVersion,\n  normalizeConcrete,\n  normalizeX1,\n} from '../../ExtrinsicBuilder.utils';\nimport {\n  getEcosystemTransferExtrinsicArgs,\n  getGlobalConsensus,\n  getPolkadotXcmExtrinsicArgs,\n  shouldFeeAssetPrecedeAsset,\n} from './polkadotXcm.util';\n\nconst pallet = 'polkadotXcm';\n\nexport function polkadotXcm() {\n  return {\n    limitedReserveTransferAssets: () => {\n      const func = 'limitedReserveTransferAssets';\n\n      return {\n        here: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets: [\n                    {\n                      id: normalizeConcrete(version, {\n                        parents: 0,\n                        interior: 'Here',\n                      }),\n                      fun: {\n                        Fungible: params.asset.amount,\n                      },\n                    },\n                  ],\n                });\n              },\n            }),\n        }),\n        X1: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets: [\n                    {\n                      id: normalizeConcrete(\n                        version,\n                        normalizeX1(version, {\n                          parents: 0,\n                          interior: {\n                            X1: {\n                              PalletInstance:\n                                params.asset.getAssetPalletInstance(),\n                            },\n                          },\n                        }),\n                      ),\n                      fun: {\n                        Fungible: params.asset.amount,\n                      },\n                    },\n                  ],\n                });\n              },\n            }),\n        }),\n        X2: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const isAssetDifferent = !params.asset.isSame(params.fee);\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                const assets = [\n                  {\n                    id: normalizeConcrete(version, {\n                      parents: 0,\n                      interior: {\n                        X2: [\n                          {\n                            PalletInstance:\n                              params.asset.getAssetPalletInstance(),\n                          },\n                          {\n                            GeneralIndex: params.asset.getAssetId(),\n                          },\n                        ],\n                      },\n                    }),\n                    fun: {\n                      Fungible: params.asset.amount,\n                    },\n                  },\n                ];\n\n                const shouldFeeAssetPrecede =\n                  shouldFeeAssetPrecedeAsset(params);\n\n                if (isAssetDifferent) {\n                  const feeAsset = {\n                    id: normalizeConcrete(version, {\n                      parents: 0,\n                      interior: {\n                        X2: [\n                          {\n                            PalletInstance: params.fee.getAssetPalletInstance(),\n                          },\n                          {\n                            GeneralIndex: params.fee.getAssetId(),\n                          },\n                        ],\n                      },\n                    }),\n                    fun: {\n                      Fungible: params.fee.amount,\n                    },\n                  };\n\n                  if (shouldFeeAssetPrecede) {\n                    assets.unshift(feeAsset);\n                  } else {\n                    assets.push(feeAsset);\n                  }\n                }\n\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets,\n                  feeIndex: isAssetDifferent && !shouldFeeAssetPrecede ? 1 : 0,\n                });\n              },\n            }),\n        }),\n        X2PalletInstance: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                const assetInDestination = params.destination.getChainAsset(\n                  params.asset,\n                );\n\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets: [\n                    {\n                      id: normalizeConcrete(version, {\n                        parents: 1,\n                        interior: {\n                          X2: [\n                            {\n                              Parachain: params.destination.parachainId,\n                            },\n                            {\n                              PalletInstance:\n                                assetInDestination.getAssetPalletInstance(),\n                            },\n                          ],\n                        },\n                      }),\n                      fun: {\n                        Fungible: params.asset.amount,\n                      },\n                    },\n                  ],\n                });\n              },\n            }),\n        }),\n      };\n    },\n    limitedReserveWithdrawAssets: () => {\n      const func = 'limitedReserveWithdrawAssets';\n\n      return {\n        X2: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets: [\n                    {\n                      id: normalizeConcrete(version, {\n                        parents: 1,\n                        interior: {\n                          X2: [\n                            {\n                              Parachain: params.destination.parachainId,\n                            },\n                            {\n                              PalletInstance:\n                                params.asset.getAssetPalletInstance(),\n                            },\n                          ],\n                        },\n                      }),\n                      fun: {\n                        Fungible: params.asset.amount,\n                      },\n                    },\n                  ],\n                });\n              },\n            }),\n        }),\n      };\n    },\n    transferAssets: () => {\n      const func = 'transferAssets';\n\n      return {\n        here: (parents = 0): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets: [\n                    {\n                      id: normalizeConcrete(version, {\n                        parents,\n                        interior: 'Here',\n                      }),\n                      fun: {\n                        Fungible: params.asset.amount,\n                      },\n                    },\n                  ],\n                });\n              },\n            }),\n        }),\n        X1: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets: [\n                    {\n                      id: normalizeConcrete(version, {\n                        parents: 0,\n                        interior: {\n                          X1: [\n                            {\n                              GeneralIndex: params.asset.getAssetId(),\n                            },\n                          ],\n                        },\n                      }),\n                      fun: {\n                        Fungible: params.asset.amount,\n                      },\n                    },\n                  ],\n                });\n              },\n            }),\n        }),\n        X1GeneralKey: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                const isAssetDifferent = !params.asset.isSame(params.fee);\n\n                const assets = [\n                  {\n                    id: normalizeConcrete(\n                      version,\n                      normalizeX1(version, {\n                        parents: 0,\n                        interior: {\n                          X1: {\n                            GeneralKey: params.asset.getGeneralKey(),\n                          },\n                        },\n                      }),\n                    ),\n                    fun: {\n                      Fungible: params.asset.amount,\n                    },\n                  },\n                ];\n\n                if (isAssetDifferent) {\n                  const feeAsset = {\n                    id: normalizeConcrete(\n                      version,\n                      normalizeX1(version, {\n                        parents: 0,\n                        interior: {\n                          X1: {\n                            GeneralKey: params.fee.getGeneralKey(),\n                          },\n                        },\n                      }),\n                    ),\n                    fun: {\n                      Fungible: params.fee.amount,\n                    },\n                  };\n\n                  assets.unshift(feeAsset);\n                }\n\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets,\n                });\n              },\n            }),\n        }),\n        X2: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                // TODO find a better way to identify when the asset info is in the destination\n                const assetInDestination = params.destination.getChainAsset(\n                  params.asset,\n                );\n\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets: [\n                    {\n                      id: normalizeConcrete(version, {\n                        parents: 1,\n                        interior: {\n                          X2: [\n                            {\n                              Parachain: params.destination.parachainId,\n                            },\n                            {\n                              PalletInstance:\n                                assetInDestination.getAssetPalletInstance(),\n                            },\n                          ],\n                        },\n                      }),\n                      fun: {\n                        Fungible: params.asset.amount,\n                      },\n                    },\n                  ],\n                });\n              },\n            }),\n        }),\n        X3: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                const assetInDestination = params.destination.getChainAsset(\n                  params.asset,\n                );\n\n                const feeAssetInDestination = params.destination.getChainAsset(\n                  params.fee,\n                );\n\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets: [\n                    {\n                      id: normalizeConcrete(version, {\n                        parents: 1,\n                        interior: {\n                          X2: [\n                            {\n                              Parachain: params.destination.parachainId,\n                            },\n                            {\n                              PalletInstance:\n                                feeAssetInDestination.getAssetPalletInstance(),\n                            },\n                          ],\n                        },\n                      }),\n                      fun: {\n                        Fungible: params.fee.amount,\n                      },\n                    },\n                    {\n                      id: normalizeConcrete(version, {\n                        parents: 1,\n                        interior: {\n                          X3: [\n                            {\n                              Parachain: params.destination.parachainId,\n                            },\n                            {\n                              PalletInstance:\n                                assetInDestination.getAssetPalletInstance(),\n                            },\n                            {\n                              AccountKey20: {\n                                key: assetInDestination.address,\n                              },\n                            },\n                          ],\n                        },\n                      }),\n                      fun: {\n                        Fungible: params.asset.amount,\n                      },\n                    },\n                  ],\n                });\n              },\n            }),\n        }),\n        X2AndFeeHere: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets: [\n                    {\n                      id: normalizeConcrete(version, {\n                        parents: 0,\n                        interior: {\n                          X2: [\n                            {\n                              PalletInstance:\n                                params.asset.getAssetPalletInstance(),\n                            },\n                            {\n                              GeneralIndex: params.asset.getAssetId(),\n                            },\n                          ],\n                        },\n                      }),\n                      fun: {\n                        Fungible: params.asset.amount,\n                      },\n                    },\n                    // Fee Asset\n                    {\n                      id: normalizeConcrete(version, {\n                        parents: 1,\n                        interior: 'Here',\n                      }),\n                      fun: {\n                        Fungible: params.fee.amount,\n                      },\n                    },\n                  ],\n                  feeIndex: 1,\n                });\n              },\n            }),\n        }),\n      };\n    },\n    transferAssetsUsingTypeAndThen: () => {\n      const func = 'transferAssetsUsingTypeAndThen';\n      return {\n        here: (parents = 0): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                return [\n                  {\n                    [version]: {\n                      parents: 1,\n                      interior: {\n                        X1: [\n                          {\n                            Parachain: params.destination.parachainId,\n                          },\n                        ],\n                      },\n                    },\n                  },\n                  {\n                    [version]: [\n                      {\n                        id: {\n                          parents,\n                          interior: 'Here',\n                        },\n                        fun: {\n                          Fungible: params.asset.amount,\n                        },\n                      },\n                    ],\n                  },\n                  'LocalReserve',\n                  {\n                    [version]: {\n                      parents,\n                      interior: 'Here',\n                    },\n                  },\n                  'LocalReserve',\n                  {\n                    [version]: [\n                      {\n                        DepositAsset: {\n                          assets: {\n                            Wild: { AllCounted: 1 },\n                          },\n                          beneficiary: {\n                            parents: 0,\n                            interior: {\n                              X1: [\n                                getExtrinsicAccount(params.destinationAddress),\n                              ],\n                            },\n                          },\n                        },\n                      },\n                    ],\n                  },\n                  'Unlimited',\n                ];\n              },\n            }),\n        }),\n        X2: (parents = 0): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                const isSameAsset = params.asset.isSame(params.fee);\n\n                const shouldFeeAssetPrecede =\n                  shouldFeeAssetPrecedeAsset(params);\n\n                const asset = {\n                  parents: 0,\n                  interior: {\n                    X2: [\n                      {\n                        PalletInstance: params.asset.getAssetPalletInstance(),\n                      },\n                      {\n                        GeneralIndex: params.asset.getAssetId(),\n                      },\n                    ],\n                  },\n                };\n\n                const assetWithAmount = {\n                  id: asset,\n                  fun: { Fungible: params.asset.amount },\n                };\n\n                const feeAsset = {\n                  parents,\n                  interior: 'Here',\n                };\n\n                const feeAssetWithAmount = {\n                  id: feeAsset,\n                  fun: { Fungible: params.fee.amount },\n                };\n\n                const assets = isSameAsset\n                  ? [assetWithAmount]\n                  : shouldFeeAssetPrecede\n                    ? [feeAssetWithAmount, assetWithAmount]\n                    : [assetWithAmount, feeAssetWithAmount];\n\n                return [\n                  // dest\n                  {\n                    [version]: {\n                      parents: 1,\n                      interior: {\n                        X1: [\n                          {\n                            Parachain: params.destination.parachainId,\n                          },\n                        ],\n                      },\n                    },\n                  },\n                  // assets\n                  {\n                    [version]: assets,\n                  },\n                  // assetsTransferType\n                  'LocalReserve',\n                  // remoteFeesId\n                  {\n                    [version]: isSameAsset ? asset : feeAsset,\n                  },\n                  // feesTransferType\n                  'LocalReserve',\n                  // customXcmOnDest\n                  {\n                    [version]: [\n                      {\n                        DepositAsset: {\n                          assets: {\n                            Wild: { AllCounted: isSameAsset ? 1 : 2 },\n                          },\n                          beneficiary: {\n                            parents: 0,\n                            interior: {\n                              X1: [\n                                getExtrinsicAccount(params.destinationAddress),\n                              ],\n                            },\n                          },\n                        },\n                      },\n                    ],\n                  },\n                  // weightLimit\n                  'Unlimited',\n                ];\n              },\n            }),\n        }),\n        // TODO we could pass a parameter globalConsensus in the chain asset if we need a different one\n        globalConsensusEthereum: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n\n              getArgs: (extrinsicFunction) => {\n                if (!params.asset.address) {\n                  throw new Error(\n                    'Asset address is needed for transferAssetsUsingTypeAndThen.globalConsensus function',\n                  );\n                }\n\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n                return [\n                  {\n                    [version]: {\n                      parents: 1,\n                      interior: {\n                        X1: [\n                          {\n                            Parachain: params.destination.parachainId,\n                          },\n                        ],\n                      },\n                    },\n                  },\n                  {\n                    [version]: [\n                      {\n                        id: normalizeConcrete(version, {\n                          parents: 2,\n                          interior: {\n                            X2: [\n                              { globalConsensus: { Ethereum: { ChainId: 1 } } },\n                              getExtrinsicAccount(params.asset.address),\n                            ],\n                          },\n                        }),\n                        fun: { fungible: params.asset.amount },\n                      },\n                    ],\n                  },\n                  'LocalReserve',\n                  {\n                    [version]: normalizeConcrete(version, {\n                      parents: 2,\n                      interior: {\n                        X2: [\n                          { globalConsensus: { Ethereum: { ChainId: 1 } } },\n                          getExtrinsicAccount(params.asset.address),\n                        ],\n                      },\n                    }),\n                  },\n                  'LocalReserve',\n                  {\n                    [version]: [\n                      {\n                        DepositAsset: {\n                          assets: {\n                            Wild: { AllCounted: 1 },\n                          },\n                          beneficiary: normalizeX1(version, {\n                            parents: 0,\n                            interior: {\n                              X1: getExtrinsicAccount(\n                                params.destinationAddress,\n                              ),\n                            },\n                          }),\n                        },\n                      },\n                    ],\n                  },\n                  'Unlimited',\n                ];\n              },\n            }),\n        }),\n      };\n    },\n    transferAssetsToEcosystem: () => {\n      const func = 'transferAssets';\n\n      return {\n        X1: (): ExtrinsicConfigBuilder => ({\n          build: (params) => {\n            return new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                const assets = [\n                  {\n                    id: normalizeConcrete(\n                      version,\n                      normalizeX1(version, {\n                        parents: 0,\n                        interior: {\n                          X1: {\n                            PalletInstance:\n                              params.asset.getAssetPalletInstance(),\n                          },\n                        },\n                      }),\n                    ),\n                    fun: {\n                      Fungible: params.asset.amount,\n                    },\n                  },\n                ];\n\n                return getEcosystemTransferExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets,\n                });\n              },\n            });\n          },\n        }),\n        X2: (): ExtrinsicConfigBuilder => ({\n          build: (params) => {\n            return new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                const assets = [\n                  {\n                    id: normalizeConcrete(version, {\n                      parents: 0,\n                      interior: {\n                        X2: [\n                          {\n                            PalletInstance:\n                              params.asset.getAssetPalletInstance(),\n                          },\n                          {\n                            AccountKey20: {\n                              key: params.asset.address,\n                            },\n                          },\n                        ],\n                      },\n                    }),\n                    fun: {\n                      Fungible: params.asset.amount,\n                    },\n                  },\n                ];\n\n                return getEcosystemTransferExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets,\n                });\n              },\n            });\n          },\n        }),\n        X3: (): ExtrinsicConfigBuilder => ({\n          build: (params) => {\n            const assetInDestination = params.destination.getChainAsset(\n              params.asset,\n            );\n            return new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                const assets = [\n                  {\n                    id: normalizeConcrete(version, {\n                      parents: 2,\n                      interior: {\n                        X3: [\n                          {\n                            GlobalConsensus: getGlobalConsensus(\n                              params.destination,\n                            ),\n                          },\n                          {\n                            Parachain: params.destination.parachainId,\n                          },\n                          {\n                            PalletInstance:\n                              assetInDestination.getAssetPalletInstance(),\n                          },\n                        ],\n                      },\n                    }),\n                    fun: {\n                      Fungible: params.asset.amount,\n                    },\n                  },\n                ];\n\n                return getEcosystemTransferExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets,\n                });\n              },\n            });\n          },\n        }),\n        X4: (): ExtrinsicConfigBuilder => ({\n          build: (params) => {\n            return new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n                const feeAssetInDestination = params.destination.getChainAsset(\n                  params.fee,\n                );\n\n                const assetInDestination = params.destination.getChainAsset(\n                  params.asset,\n                );\n\n                const globalConsensus = getGlobalConsensus(params.destination);\n\n                const assets = [\n                  {\n                    id: normalizeConcrete(version, {\n                      parents: 2,\n                      interior: {\n                        X3: [\n                          {\n                            GlobalConsensus: globalConsensus,\n                          },\n                          {\n                            Parachain: params.destination.parachainId,\n                          },\n                          {\n                            PalletInstance:\n                              feeAssetInDestination.getAssetPalletInstance(),\n                          },\n                        ],\n                      },\n                    }),\n                    fun: {\n                      Fungible: params.fee.amount,\n                    },\n                  },\n                  {\n                    id: normalizeConcrete(version, {\n                      parents: 2,\n                      interior: {\n                        X4: [\n                          {\n                            GlobalConsensus: globalConsensus,\n                          },\n                          {\n                            Parachain: params.destination.parachainId,\n                          },\n                          {\n                            PalletInstance:\n                              assetInDestination.getAssetPalletInstance(),\n                          },\n                          {\n                            AccountKey20: {\n                              key: assetInDestination.address,\n                            },\n                          },\n                        ],\n                      },\n                    }),\n                    fun: {\n                      Fungible: params.asset.amount,\n                    },\n                  },\n                ];\n\n                return getEcosystemTransferExtrinsicArgs({\n                  ...params,\n                  func: extrinsicFunction,\n                  assets,\n                });\n              },\n            });\n          },\n        }),\n      };\n    },\n  };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport {\n  type ExtrinsicConfigBuilder,\n  type Parents,\n  XcmVersion,\n} from '../../ExtrinsicBuilder.interfaces';\nimport {\n  getExtrinsicAccount,\n  getExtrinsicArgumentVersion,\n  normalizeConcrete,\n} from '../../ExtrinsicBuilder.utils';\nimport { getPolkadotXcmExtrinsicArgs } from '../polkadotXcm/polkadotXcm.util';\n\nconst pallet = 'xcmPallet';\n\nexport function xcmPallet() {\n  return {\n    limitedReserveTransferAssets: (parents: Parents = 1) => {\n      const func = 'limitedReserveTransferAssets';\n\n      return {\n        here: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n                return getPolkadotXcmExtrinsicArgs({\n                  ...params,\n                  parents,\n                  func: extrinsicFunction,\n                  assets: [\n                    {\n                      id: normalizeConcrete(version, {\n                        parents: 0,\n                        interior: 'Here',\n                      }),\n                      fun: {\n                        Fungible: params.asset.amount,\n                      },\n                    },\n                  ],\n                });\n              },\n            }),\n        }),\n      };\n    },\n    transferAssetsUsingTypeAndThen: () => {\n      const func = 'transferAssetsUsingTypeAndThen';\n\n      return {\n        here: (): ExtrinsicConfigBuilder => ({\n          build: (params) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: () => {\n                const version = XcmVersion.v4;\n                return [\n                  {\n                    [version]: {\n                      parents: 0,\n                      interior: {\n                        X1: [\n                          {\n                            Parachain: params.destination.parachainId,\n                          },\n                        ],\n                      },\n                    },\n                  },\n                  {\n                    [version]: [\n                      {\n                        id: {\n                          parents: 0,\n                          interior: 'Here',\n                        },\n                        fun: {\n                          Fungible: params.asset.amount,\n                        },\n                      },\n                    ],\n                  },\n                  'LocalReserve',\n                  {\n                    [version]: {\n                      parents: 0,\n                      interior: 'Here',\n                    },\n                  },\n                  'LocalReserve',\n                  {\n                    [version]: [\n                      {\n                        DepositAsset: {\n                          assets: {\n                            Wild: { AllCounted: 1 },\n                          },\n                          beneficiary: {\n                            parents: 0,\n                            interior: {\n                              X1: [\n                                getExtrinsicAccount(params.destinationAddress),\n                              ],\n                            },\n                          },\n                        },\n                      },\n                    ],\n                  },\n                  'Unlimited',\n                ];\n              },\n            }),\n        }),\n      };\n    },\n  };\n}\n","import type { AnyParachain } from '@moonbeam-network/xcm-types';\nimport type { XcmVersion } from '../../ExtrinsicBuilder.interfaces';\nimport { getExtrinsicAccount } from '../../ExtrinsicBuilder.utils';\nimport type { XTokensWeightLimit } from './xTokens.interfaces';\n\n/**\n * It is safer to always use unlimited\n */\nexport function getWeight(): XTokensWeightLimit {\n  return 'Unlimited';\n}\n\nexport function getDestination(\n  version: XcmVersion,\n  address: string,\n  destination: AnyParachain,\n) {\n  return {\n    [version]: {\n      parents: 1,\n      interior: {\n        X2: [\n          {\n            Parachain: destination.parachainId,\n          },\n          getExtrinsicAccount(address),\n        ],\n      },\n    },\n  };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport {\n  type ExtrinsicConfigBuilder,\n  XcmVersion,\n} from '../../ExtrinsicBuilder.interfaces';\nimport {\n  getExtrinsicArgumentVersion,\n  normalizeConcrete,\n  normalizeX1,\n} from '../../ExtrinsicBuilder.utils';\nimport { getDestination, getWeight } from './xTokens.utils';\n\nconst pallet = 'xTokens';\n\nexport function xTokens() {\n  return {\n    transfer: (): ExtrinsicConfigBuilder => ({\n      build: ({ destinationAddress, asset, destination }) =>\n        new ExtrinsicConfig({\n          module: pallet,\n          func: 'transfer',\n          getArgs: (func) => {\n            const destIndex = 2;\n            const version = getExtrinsicArgumentVersion(func, destIndex);\n\n            return [\n              asset.getAssetId(),\n              asset.amount,\n              getDestination(version, destinationAddress, destination),\n              getWeight(),\n            ];\n          },\n        }),\n    }),\n    transferMultiAsset: (originParachainId: number) => {\n      const funcName = 'transferMultiasset';\n      const destIndex = 1;\n\n      return {\n        here: (): ExtrinsicConfigBuilder => ({\n          build: ({ destinationAddress: address, asset, destination }) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func: funcName,\n              getArgs: (func) => {\n                const version = getExtrinsicArgumentVersion(func, destIndex);\n\n                return [\n                  {\n                    [version]: {\n                      id: normalizeConcrete(version, {\n                        parents: 0,\n                        interior: 'Here',\n                      }),\n                      fun: {\n                        Fungible: asset.amount,\n                      },\n                    },\n                  },\n                  getDestination(version, address, destination),\n                  getWeight(),\n                ];\n              },\n            }),\n        }),\n        X1: (): ExtrinsicConfigBuilder => ({\n          build: ({ destinationAddress: address, asset, destination }) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func: funcName,\n              getArgs: (func) => {\n                const version = getExtrinsicArgumentVersion(func, destIndex);\n\n                return [\n                  {\n                    [version]: {\n                      id: normalizeConcrete(\n                        version,\n                        normalizeX1(version, {\n                          parents: 1,\n                          interior: {\n                            X1: {\n                              Parachain: originParachainId,\n                            },\n                          },\n                        }),\n                      ),\n                      fun: {\n                        Fungible: asset.amount,\n                      },\n                    },\n                  },\n                  getDestination(version, address, destination),\n                  getWeight(),\n                ];\n              },\n            }),\n        }),\n        X2: (): ExtrinsicConfigBuilder => ({\n          build: ({ destinationAddress: address, asset, destination }) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func: funcName,\n              getArgs: (func) => {\n                const version = getExtrinsicArgumentVersion(func, destIndex);\n\n                return [\n                  {\n                    [version]: {\n                      id: normalizeConcrete(version, {\n                        parents: 1,\n                        interior: {\n                          X2: [\n                            {\n                              Parachain: originParachainId,\n                            },\n                            {\n                              GeneralKey: asset.getAssetId(),\n                            },\n                          ],\n                        },\n                      }),\n                      fun: {\n                        Fungible: asset.amount,\n                      },\n                    },\n                  },\n                  getDestination(version, address, destination),\n                  getWeight(),\n                ];\n              },\n            }),\n        }),\n      };\n    },\n    transferMultiCurrencies: (): ExtrinsicConfigBuilder => ({\n      build: ({ destinationAddress: address, asset, destination, fee }) =>\n        new ExtrinsicConfig({\n          module: pallet,\n          func: 'transferMulticurrencies',\n          getArgs: () => [\n            [\n              [asset.getAssetId(), asset.amount],\n              [fee.getAssetId(), fee.amount],\n            ],\n            1,\n            getDestination(XcmVersion.v3, address, destination),\n            getWeight(),\n          ],\n        }),\n    }),\n  };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport type { ExtrinsicConfigBuilder } from '../../ExtrinsicBuilder.interfaces';\nimport { getExtrinsicAccount } from '../../ExtrinsicBuilder.utils';\n\nconst pallet = 'xTransfer';\n\nexport function xTransfer() {\n  return {\n    transfer: () => {\n      const method = 'transfer';\n\n      return {\n        here: (): ExtrinsicConfigBuilder => ({\n          build: ({ destinationAddress: address, asset, destination }) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func: method,\n              getArgs: () => [\n                {\n                  id: {\n                    Concrete: {\n                      parents: 0,\n                      interior: 'Here',\n                    },\n                  },\n                  fun: {\n                    Fungible: asset.amount,\n                  },\n                },\n                {\n                  parents: 1,\n                  interior: {\n                    X2: [\n                      {\n                        Parachain: destination.parachainId,\n                      },\n                      getExtrinsicAccount(address),\n                    ],\n                  },\n                },\n                {\n                  refTime: 5_000_000_000,\n                  proofSize: 0,\n                },\n              ],\n            }),\n        }),\n        X2: (): ExtrinsicConfigBuilder => ({\n          build: ({ destinationAddress, asset, destination }) =>\n            new ExtrinsicConfig({\n              module: pallet,\n              func: method,\n              getArgs: () => [\n                {\n                  id: {\n                    Concrete: {\n                      parents: 1,\n                      interior: {\n                        X2: [\n                          {\n                            Parachain: destination.parachainId,\n                          },\n                          {\n                            PalletInstance: asset.getAssetPalletInstance(),\n                          },\n                        ],\n                      },\n                    },\n                  },\n                  fun: {\n                    Fungible: asset.amount || 1n,\n                  },\n                },\n                {\n                  parents: 1,\n                  interior: {\n                    X2: [\n                      {\n                        Parachain: destination.parachainId,\n                      },\n                      getExtrinsicAccount(destinationAddress),\n                    ],\n                  },\n                },\n                {\n                  refTime: 5_000_000_000,\n                  proofSize: 0,\n                },\n              ],\n            }),\n        }),\n      };\n    },\n  };\n}\n","import { eqBalances } from './pallets/eqBalances';\nimport { polkadotXcm } from './pallets/polkadotXcm';\nimport { xcmPallet } from './pallets/xcmPallet';\nimport { xTokens } from './pallets/xTokens';\nimport { xTransfer } from './pallets/xTransfer';\n\nexport function ExtrinsicBuilder() {\n  return {\n    eqBalances,\n    xTokens,\n    xTransfer,\n    polkadotXcm,\n    xcmPallet,\n  };\n}\n","import { EvmChain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { ContractConfig } from '../..';\nimport { GATEWAY_ABI } from '../../mrl/providers/snowbridge/snowbridge/SnowbridgeConstants';\nimport type { ProtocolFeeConfigBuilder } from '../FeeBuilder.interfaces';\n\nexport function gateway() {\n  return {\n    quoteSendTokenFee(): ProtocolFeeConfigBuilder {\n      return {\n        build: ({ asset, destination, source, bridgeChainFee }) => {\n          if (!asset.address) {\n            throw new Error(`Asset ${asset.key} has no address`);\n          }\n\n          if (!EvmChain.is(source) || !source.contracts?.Gateway) {\n            throw new Error(\n              'Source must be an EVMChain with the Gateway contract address configured for getting the quote send token fee for Gateway module',\n            );\n          }\n\n          if (!EvmParachain.isAnyParachain(destination)) {\n            throw new Error(\n              'Destination must be a Parachain or EvmParachain for getting the quote send token fee for Gateway module',\n            );\n          }\n\n          return new ContractConfig({\n            address: source.contracts.Gateway,\n            abi: GATEWAY_ABI,\n            args: [\n              asset.address,\n              destination.parachainId,\n              bridgeChainFee.amount,\n            ],\n            func: 'quoteSendTokenFee',\n            module: 'Gateway',\n          });\n        },\n      };\n    },\n  };\n}\n","export const GATEWAY_ABI = [\n  {\n    inputs: [\n      { internalType: 'address', name: 'beefyClient', type: 'address' },\n      { internalType: 'address', name: 'agentExecutor', type: 'address' },\n      { internalType: 'ParaID', name: 'bridgeHubParaID', type: 'uint32' },\n      { internalType: 'bytes32', name: 'bridgeHubAgentID', type: 'bytes32' },\n      { internalType: 'uint8', name: 'foreignTokenDecimals', type: 'uint8' },\n      { internalType: 'uint128', name: 'maxDestinationFee', type: 'uint128' },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'constructor',\n  },\n  { inputs: [], name: 'AgentAlreadyCreated', type: 'error' },\n  { inputs: [], name: 'AgentDoesNotExist', type: 'error' },\n  { inputs: [], name: 'CantSetMiddlewareToSameAddress', type: 'error' },\n  { inputs: [], name: 'CantSetMiddlewareToZeroAddress', type: 'error' },\n  { inputs: [], name: 'ChannelAlreadyCreated', type: 'error' },\n  { inputs: [], name: 'ChannelDoesNotExist', type: 'error' },\n  { inputs: [], name: 'Disabled', type: 'error' },\n  {\n    inputs: [\n      { internalType: 'uint256', name: 'epoch', type: 'uint256' },\n      { internalType: 'uint256', name: 'eraIndex', type: 'uint256' },\n      { internalType: 'address', name: 'tokenAddress', type: 'address' },\n      { internalType: 'uint256', name: 'totalPointsToken', type: 'uint256' },\n      { internalType: 'uint256', name: 'totalTokensInflated', type: 'uint256' },\n      { internalType: 'bytes32', name: 'rewardsRoot', type: 'bytes32' },\n      { internalType: 'bytes', name: 'errorBytes', type: 'bytes' },\n    ],\n    name: 'EUnableToProcessRewardsB',\n    type: 'error',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: 'epoch', type: 'uint256' },\n      { internalType: 'uint256', name: 'eraIndex', type: 'uint256' },\n      { internalType: 'address', name: 'tokenAddress', type: 'address' },\n      { internalType: 'uint256', name: 'totalPointsToken', type: 'uint256' },\n      { internalType: 'uint256', name: 'totalTokensInflated', type: 'uint256' },\n      { internalType: 'bytes32', name: 'rewardsRoot', type: 'bytes32' },\n      { internalType: 'string', name: 'errorString', type: 'string' },\n    ],\n    name: 'EUnableToProcessRewardsS',\n    type: 'error',\n  },\n  { inputs: [], name: 'FeePaymentToLow', type: 'error' },\n  { inputs: [], name: 'InvalidAgentExecutionPayload', type: 'error' },\n  { inputs: [], name: 'InvalidChannelUpdate', type: 'error' },\n  { inputs: [], name: 'InvalidCodeHash', type: 'error' },\n  { inputs: [], name: 'InvalidConstructorParams', type: 'error' },\n  { inputs: [], name: 'InvalidContract', type: 'error' },\n  { inputs: [], name: 'InvalidNonce', type: 'error' },\n  { inputs: [], name: 'InvalidProof', type: 'error' },\n  { inputs: [], name: 'MiddlewareNotSet', type: 'error' },\n  { inputs: [], name: 'NativeTransferFailed', type: 'error' },\n  { inputs: [], name: 'NotEnoughGas', type: 'error' },\n  { inputs: [], name: 'Operators__OperatorsKeysCannotBeEmpty', type: 'error' },\n  { inputs: [], name: 'Operators__OperatorsLengthTooLong', type: 'error' },\n  {\n    inputs: [\n      { internalType: 'uint256', name: 'x', type: 'uint256' },\n      { internalType: 'uint256', name: 'y', type: 'uint256' },\n    ],\n    name: 'PRBMath_MulDiv18_Overflow',\n    type: 'error',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: 'x', type: 'uint256' },\n      { internalType: 'uint256', name: 'y', type: 'uint256' },\n      { internalType: 'uint256', name: 'denominator', type: 'uint256' },\n    ],\n    name: 'PRBMath_MulDiv_Overflow',\n    type: 'error',\n  },\n  {\n    inputs: [{ internalType: 'uint256', name: 'x', type: 'uint256' }],\n    name: 'PRBMath_UD60x18_Convert_Overflow',\n    type: 'error',\n  },\n  {\n    inputs: [{ internalType: 'UD60x18', name: 'x', type: 'uint256' }],\n    name: 'PRBMath_UD60x18_Exp2_InputTooBig',\n    type: 'error',\n  },\n  {\n    inputs: [{ internalType: 'UD60x18', name: 'x', type: 'uint256' }],\n    name: 'PRBMath_UD60x18_Log_InputTooSmall',\n    type: 'error',\n  },\n  { inputs: [], name: 'TokenNotRegistered', type: 'error' },\n  { inputs: [], name: 'Unauthorized', type: 'error' },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'bytes32',\n        name: 'agentID',\n        type: 'bytes32',\n      },\n      {\n        indexed: false,\n        internalType: 'address',\n        name: 'agent',\n        type: 'address',\n      },\n    ],\n    name: 'AgentCreated',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'bytes32',\n        name: 'agentID',\n        type: 'bytes32',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    name: 'AgentFundsWithdrawn',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'ChannelID',\n        name: 'channelID',\n        type: 'bytes32',\n      },\n    ],\n    name: 'ChannelCreated',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'ChannelID',\n        name: 'channelID',\n        type: 'bytes32',\n      },\n    ],\n    name: 'ChannelUpdated',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'bytes32',\n        name: 'tokenID',\n        type: 'bytes32',\n      },\n      {\n        indexed: false,\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n    ],\n    name: 'ForeignTokenRegistered',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'ChannelID',\n        name: 'channelID',\n        type: 'bytes32',\n      },\n      { indexed: false, internalType: 'uint64', name: 'nonce', type: 'uint64' },\n      {\n        indexed: true,\n        internalType: 'bytes32',\n        name: 'messageID',\n        type: 'bytes32',\n      },\n      { indexed: false, internalType: 'bool', name: 'success', type: 'bool' },\n    ],\n    name: 'InboundMessageDispatched',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'previousMiddleware',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'newMiddleware',\n        type: 'address',\n      },\n    ],\n    name: 'MiddlewareChanged',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'enum OperatingMode',\n        name: 'mode',\n        type: 'uint8',\n      },\n    ],\n    name: 'OperatingModeChanged',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'uint256',\n        name: 'validatorsCount',\n        type: 'uint256',\n      },\n      { indexed: false, internalType: 'bytes', name: 'payload', type: 'bytes' },\n    ],\n    name: 'OperatorsDataCreated',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'ChannelID',\n        name: 'channelID',\n        type: 'bytes32',\n      },\n      { indexed: false, internalType: 'uint64', name: 'nonce', type: 'uint64' },\n      {\n        indexed: true,\n        internalType: 'bytes32',\n        name: 'messageID',\n        type: 'bytes32',\n      },\n      { indexed: false, internalType: 'bytes', name: 'payload', type: 'bytes' },\n    ],\n    name: 'OutboundMessageAccepted',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'previousOwner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'newOwner',\n        type: 'address',\n      },\n    ],\n    name: 'OwnershipTransferred',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: 'PricingParametersChanged',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n    ],\n    name: 'TokenRegistrationSent',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'ParaID',\n        name: 'destinationChain',\n        type: 'uint32',\n      },\n      {\n        components: [\n          { internalType: 'enum Kind', name: 'kind', type: 'uint8' },\n          { internalType: 'bytes', name: 'data', type: 'bytes' },\n        ],\n        indexed: false,\n        internalType: 'struct MultiAddress',\n        name: 'destinationAddress',\n        type: 'tuple',\n      },\n      {\n        indexed: false,\n        internalType: 'uint128',\n        name: 'amount',\n        type: 'uint128',\n      },\n    ],\n    name: 'TokenSent',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: 'TokenTransferFeesChanged',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'bytes32',\n        name: 'operatorKey',\n        type: 'bytes32',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'slashFranction',\n        type: 'uint256',\n      },\n      {\n        indexed: true,\n        internalType: 'uint256',\n        name: 'epoch',\n        type: 'uint256',\n      },\n      { indexed: false, internalType: 'bytes', name: 'error', type: 'bytes' },\n    ],\n    name: 'UnableToProcessIndividualSlashB',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'bytes32',\n        name: 'operatorKey',\n        type: 'bytes32',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'slashFranction',\n        type: 'uint256',\n      },\n      {\n        indexed: true,\n        internalType: 'uint256',\n        name: 'epoch',\n        type: 'uint256',\n      },\n      { indexed: false, internalType: 'string', name: 'error', type: 'string' },\n    ],\n    name: 'UnableToProcessIndividualSlashS',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: false, internalType: 'bytes', name: 'error', type: 'bytes' },\n    ],\n    name: 'UnableToProcessRewardsMessageB',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: false, internalType: 'string', name: 'error', type: 'string' },\n    ],\n    name: 'UnableToProcessRewardsMessageS',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: false, internalType: 'bytes', name: 'error', type: 'bytes' },\n    ],\n    name: 'UnableToProcessSlashMessageB',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: false, internalType: 'string', name: 'error', type: 'string' },\n    ],\n    name: 'UnableToProcessSlashMessageS',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'implementation',\n        type: 'address',\n      },\n    ],\n    name: 'Upgraded',\n    type: 'event',\n  },\n  {\n    inputs: [],\n    name: 'AGENT_EXECUTOR',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'BEEFY_CLIENT',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'agentExecute',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes32', name: 'agentID', type: 'bytes32' }],\n    name: 'agentOf',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'ChannelID', name: 'channelID', type: 'bytes32' }],\n    name: 'channelNoncesOf',\n    outputs: [\n      { internalType: 'uint64', name: '', type: 'uint64' },\n      { internalType: 'uint64', name: '', type: 'uint64' },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'ChannelID', name: 'channelID', type: 'bytes32' }],\n    name: 'channelOperatingModeOf',\n    outputs: [{ internalType: 'enum OperatingMode', name: '', type: 'uint8' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'createAgent',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'createChannel',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'implementation',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'initialize',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'address', name: 'token', type: 'address' }],\n    name: 'isTokenRegistered',\n    outputs: [{ internalType: 'bool', name: '', type: 'bool' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'mintForeignToken',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'operatingMode',\n    outputs: [{ internalType: 'enum OperatingMode', name: '', type: 'uint8' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'pricingParameters',\n    outputs: [\n      { internalType: 'UD60x18', name: '', type: 'uint256' },\n      { internalType: 'uint128', name: '', type: 'uint128' },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'address', name: 'token', type: 'address' }],\n    name: 'queryForeignTokenID',\n    outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'quoteRegisterTokenFee',\n    outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'address', name: 'token', type: 'address' },\n      { internalType: 'ParaID', name: 'destinationChain', type: 'uint32' },\n      { internalType: 'uint128', name: 'destinationFee', type: 'uint128' },\n    ],\n    name: 'quoteSendTokenFee',\n    outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'registerForeignToken',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'address', name: 'token', type: 'address' }],\n    name: 'registerToken',\n    outputs: [],\n    stateMutability: 'payable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'reportSlashes',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 's_middleware',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes32[]', name: 'data', type: 'bytes32[]' },\n      { internalType: 'uint48', name: 'epoch', type: 'uint48' },\n    ],\n    name: 'sendOperatorsData',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'sendRewards',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'address', name: 'token', type: 'address' },\n      { internalType: 'ParaID', name: 'destinationChain', type: 'uint32' },\n      {\n        components: [\n          { internalType: 'enum Kind', name: 'kind', type: 'uint8' },\n          { internalType: 'bytes', name: 'data', type: 'bytes' },\n        ],\n        internalType: 'struct MultiAddress',\n        name: 'destinationAddress',\n        type: 'tuple',\n      },\n      { internalType: 'uint128', name: 'destinationFee', type: 'uint128' },\n      { internalType: 'uint128', name: 'amount', type: 'uint128' },\n    ],\n    name: 'sendToken',\n    outputs: [],\n    stateMutability: 'payable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'address', name: 'middleware', type: 'address' }],\n    name: 'setMiddleware',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'setOperatingMode',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'setPricingParameters',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'setTokenTransferFees',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: 'ChannelID', name: 'channelID', type: 'bytes32' },\n          { internalType: 'uint64', name: 'nonce', type: 'uint64' },\n          { internalType: 'enum Command', name: 'command', type: 'uint8' },\n          { internalType: 'bytes', name: 'params', type: 'bytes' },\n          { internalType: 'uint64', name: 'maxDispatchGas', type: 'uint64' },\n          { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' },\n          { internalType: 'uint256', name: 'reward', type: 'uint256' },\n          { internalType: 'bytes32', name: 'id', type: 'bytes32' },\n        ],\n        internalType: 'struct InboundMessage',\n        name: 'message',\n        type: 'tuple',\n      },\n      { internalType: 'bytes32[]', name: 'leafProof', type: 'bytes32[]' },\n      {\n        components: [\n          {\n            components: [\n              { internalType: 'uint8', name: 'version', type: 'uint8' },\n              { internalType: 'uint32', name: 'parentNumber', type: 'uint32' },\n              { internalType: 'bytes32', name: 'parentHash', type: 'bytes32' },\n              {\n                internalType: 'uint64',\n                name: 'nextAuthoritySetID',\n                type: 'uint64',\n              },\n              {\n                internalType: 'uint32',\n                name: 'nextAuthoritySetLen',\n                type: 'uint32',\n              },\n              {\n                internalType: 'bytes32',\n                name: 'nextAuthoritySetRoot',\n                type: 'bytes32',\n              },\n            ],\n            internalType: 'struct Verification.MMRLeafPartial',\n            name: 'leafPartial',\n            type: 'tuple',\n          },\n          { internalType: 'bytes32[]', name: 'leafProof', type: 'bytes32[]' },\n          {\n            internalType: 'bytes32',\n            name: 'parachainHeadsRoot',\n            type: 'bytes32',\n          },\n          { internalType: 'uint256', name: 'leafProofOrder', type: 'uint256' },\n        ],\n        internalType: 'struct Verification.Proof',\n        name: 'headerProof',\n        type: 'tuple',\n      },\n    ],\n    name: 'submitV1',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes32', name: 'tokenID', type: 'bytes32' }],\n    name: 'tokenAddressOf',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'transferNativeFromAgent',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'transferNativeToken',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'address', name: 'newOwner', type: 'address' }],\n    name: 'transferOwnership',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'updateChannel',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n    name: 'upgrade',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n] as const;\n","import type { u128 } from '@polkadot/types';\nimport { SubstrateQueryConfig } from '../../types';\nimport type { ProtocolFeeConfigBuilder } from '../FeeBuilder.interfaces';\n\nexport function outboundQueueApi() {\n  return {\n    calculateFee: () => ({\n      mintForeignToken: (): ProtocolFeeConfigBuilder => ({\n        build: ({ address, balance, feeAsset }) => {\n          const args = [\n            {\n              MintForeignToken: {\n                tokenId: feeAsset.getAssetId(),\n                recipient: address,\n                amount: balance?.amount,\n              },\n            },\n            null,\n          ];\n          return new SubstrateQueryConfig({\n            module: 'outboundQueueApi',\n            func: 'calculateFee',\n            args,\n            queryType: 'call',\n            transform: async (data: {\n              local: u128;\n              remote: u128;\n            }): Promise<bigint> =>\n              data.local.toBigInt() + data.remote.toBigInt(),\n          });\n        },\n      }),\n      agentExecute: (): ProtocolFeeConfigBuilder => ({\n        build: ({ address, balance, destination }) => {\n          const assetInDestination = balance\n            ? destination.getChainAsset(balance)\n            : undefined;\n\n          const args = [\n            {\n              AgentExecute: {\n                agentId:\n                  '0x0000000000000000000000000000000000000000000000000000000000000000', // actual value is not important\n                TokenTransfer: {\n                  tokenId: assetInDestination?.address,\n                  recipient: address,\n                  amount: balance?.amount,\n                },\n              },\n            },\n            null,\n          ];\n          return new SubstrateQueryConfig({\n            module: 'outboundQueueApi',\n            func: 'calculateFee',\n            args,\n            queryType: 'call',\n            transform: async (data: {\n              local: u128;\n              remote: u128;\n            }): Promise<bigint> =>\n              data.local.toBigInt() + data.remote.toBigInt(),\n          });\n        },\n      }),\n    }),\n  };\n}\n","import { type AnyChain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { isEthAddress } from '@moonbeam-network/xcm-utils';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { Result, u128 } from '@polkadot/types';\nimport type {\n  Error as PolkadotError,\n  Weight,\n} from '@polkadot/types/interfaces';\nimport type { AnyJson } from '@polkadot/types/types';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport { XcmVersion } from '../extrinsic';\nimport { getGlobalConsensus } from '../extrinsic/pallets/polkadotXcm/polkadotXcm.util';\n\nconst DEFAULT_AMOUNT = 10 ** 6;\nconst DEFAULT_HEX_STRING =\n  '0xabcdef1234567890fedcba0987654321abcdef1234567890fedcba0987654321';\n\nexport const STABLE_XCM_VERSION: XcmVersion = XcmVersion.v4; // TODO: make this dynamic\n\nfunction isXcmV4() {\n  return STABLE_XCM_VERSION === XcmVersion.v4;\n}\n\nexport function getWithdrawAssetInstruction(assetTypes: object[]) {\n  return {\n    WithdrawAsset: assetTypes.map((assetType) => ({\n      id: { ...assetType },\n      fun: {\n        Fungible: DEFAULT_AMOUNT,\n      },\n    })),\n  };\n}\n\nexport function getUniversalOriginInstruction(source?: AnyChain) {\n  if (!EvmParachain.isAnyParachain(source)) {\n    throw new Error('Source is not a parachain');\n  }\n\n  return {\n    UniversalOrigin: {\n      GlobalConsensus: getGlobalConsensus(source),\n    },\n  };\n}\n\nexport function getDescendOriginInstruction(source?: AnyChain) {\n  if (!EvmParachain.isAnyParachain(source)) {\n    throw new Error('Source is not a parachain');\n  }\n\n  return {\n    DescendOrigin: {\n      X1: [\n        {\n          Parachain: source.parachainId,\n        },\n      ],\n    },\n  };\n}\n\nexport function getReserveAssetDepositedInstruction(assetTypes: object[]) {\n  return {\n    ReserveAssetDeposited: assetTypes.map((assetType) => ({\n      id: { ...assetType },\n      fun: {\n        Fungible: DEFAULT_AMOUNT,\n      },\n    })),\n  };\n}\n\nexport function getClearOriginInstruction() {\n  return {\n    ClearOrigin: 'NULL',\n  };\n}\n\nexport function getBuyExecutionInstruction(assetType: object) {\n  // TODO should verify that asset is in acceptable payment assets\n  // api.call.xcmPaymentApi.queryAcceptablePaymentAssets(xcmVersion)\n  return {\n    BuyExecution: {\n      fees: {\n        id: {\n          ...assetType,\n        },\n        fun: {\n          Fungible: DEFAULT_AMOUNT,\n        },\n      },\n      weight_limit: {\n        Unlimited: 'NULL',\n      },\n    },\n  };\n}\n\nexport function getDepositAssetInstruction(address: string, assets: object[]) {\n  const accountKey = {\n    [isEthAddress(address) ? 'AccountKey20' : 'AccountId32']: {\n      key: isEthAddress(address) ? address : u8aToHex(decodeAddress(address)),\n      network: null,\n    },\n  };\n\n  return {\n    DepositAsset: {\n      assets: {\n        Wild: {\n          AllCounted: assets.length,\n        },\n      },\n      beneficiary: {\n        interior: {\n          X1: isXcmV4() ? [accountKey] : accountKey,\n        },\n        parents: 0,\n      },\n      max_assets: 0,\n    },\n  };\n}\n\nexport function getSetTopicInstruction() {\n  return {\n    SetTopic: DEFAULT_HEX_STRING,\n  };\n}\n\nexport async function getFeeForXcmInstructionsAndAsset(\n  api: ApiPromise,\n  instructions: AnyJson,\n  versionedAssetId: object,\n) {\n  const xcmToWeightResult = await api.call.xcmPaymentApi.queryXcmWeight<\n    Result<Weight, PolkadotError>\n  >({\n    [STABLE_XCM_VERSION]: instructions,\n  });\n  if (!xcmToWeightResult.isOk) {\n    throw new Error(\n      'There was an error trying to get the weight for the xcm instructions (queryXcmWeight)',\n    );\n  }\n\n  const xcmToWeight = xcmToWeightResult.asOk;\n\n  const weightToForeignAssets =\n    await api.call.xcmPaymentApi.queryWeightToAssetFee<\n      Result<u128, PolkadotError>\n    >(xcmToWeight, {\n      [STABLE_XCM_VERSION]: {\n        ...versionedAssetId,\n      },\n    });\n\n  // If the asset is not supported by V4, retry with V5\n  // TODO this is a temporary solution, we should find a better way to handle this, with xcmPallet.supportedVersion or polkadotXcm.supportedVersion\n  if (!weightToForeignAssets.isOk) {\n    console.error(\n      'Error trying to get the fee with the weight and asset (weightToForeignAssets) with V4, retrying with V5',\n    );\n\n    const weightToForeignAssetsV5 =\n      await api.call.xcmPaymentApi.queryWeightToAssetFee<\n        Result<u128, PolkadotError>\n      >(xcmToWeight, {\n        [XcmVersion.v5]: {\n          ...versionedAssetId,\n        },\n      });\n\n    if (!weightToForeignAssetsV5.isOk) {\n      throw new Error(\n        'There was an error trying to get the fee with the weight and asset (weightToForeignAssets). Make sure the asset is supported by XcmPaymentApi.',\n      );\n    }\n    return weightToForeignAssetsV5.asOk.toBigInt();\n  }\n  return weightToForeignAssets.asOk.toBigInt();\n}\n","import type { AnyChain, ChainAsset } from '@moonbeam-network/xcm-types';\nimport { Parachain } from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { Option } from '@polkadot/types';\nimport type { StagingXcmV4Location } from '@polkadot/types/lookup';\nimport { normalizeX1 } from '../extrinsic/ExtrinsicBuilder.utils';\nimport type { MoonbeamRuntimeXcmConfigAssetType } from './FeeBuilder.interfaces';\nimport { STABLE_XCM_VERSION } from './FeeBuilder.utils';\n\nexport function BuildVersionedAsset() {\n  return {\n    fromHere: (parents = 1) => ({\n      parents,\n      interior: 'Here',\n    }),\n\n    fromAccountKey20: (asset: ChainAsset): object => ({\n      interior: {\n        X2: [\n          {\n            PalletInstance: asset.getAssetPalletInstance(),\n          },\n          {\n            AccountKey20: {\n              key: asset.address,\n              network: null,\n            },\n          },\n        ],\n      },\n      parents: '0',\n    }),\n\n    fromGeneralIndex: (asset: ChainAsset): object => ({\n      interior: {\n        X1: [{ GeneralIndex: asset.getAssetId() }],\n      },\n      parents: '0',\n    }),\n\n    fromGlobalConsensus: (asset: ChainAsset): object => ({\n      interior: {\n        X2: [\n          { GlobalConsensus: { Ethereum: { chainId: 1 } } },\n          { AccountKey20: { key: asset.address, network: null } },\n        ],\n      },\n      parents: 2,\n    }),\n\n    fromPalletInstance: (asset: ChainAsset): object => {\n      return {\n        interior: {\n          X1: [\n            {\n              PalletInstance: asset.getAssetPalletInstance(),\n            },\n          ],\n        },\n        parents: '0',\n      };\n    },\n\n    fromPalletInstanceAndGeneralIndex: (asset: ChainAsset): object => {\n      return {\n        interior: {\n          X2: [\n            {\n              PalletInstance: asset.getAssetPalletInstance(),\n            },\n            { GeneralIndex: asset.getAssetId() },\n          ],\n        },\n        parents: '0',\n      };\n    },\n\n    fromSource: () => ({\n      accountKey20: (source: AnyChain, asset: ChainAsset) => {\n        if (!(source instanceof Parachain)) {\n          throw new Error(\n            `Chain ${source.name} must be a Parachain to build versioned asset id for XcmPaymentApi fee calculation`,\n          );\n        }\n\n        const sourceAsset = source.getChainAsset(asset);\n\n        return {\n          interior: {\n            X3: [\n              { Parachain: source.parachainId },\n              { PalletInstance: sourceAsset.getAssetPalletInstance() },\n              { AccountKey20: { key: sourceAsset.address, network: null } },\n            ],\n          },\n          parents: 1,\n        };\n      },\n\n      palletInstance: (source: AnyChain, asset: ChainAsset): object => {\n        if (!(source instanceof Parachain)) {\n          throw new Error(\n            `Chain ${source.name} must be a Parachain to build versioned asset id for XcmPaymentApi fee calculation`,\n          );\n        }\n\n        const sourceAsset = source.getChainAsset(asset);\n\n        return {\n          interior: {\n            X2: [\n              { Parachain: source.parachainId },\n              {\n                PalletInstance: sourceAsset.getAssetPalletInstance(),\n              },\n            ],\n          },\n          parents: 1,\n        };\n      },\n\n      palletInstanceAndGeneralIndex: (\n        source: AnyChain,\n        asset: ChainAsset,\n      ): object => {\n        if (!(source instanceof Parachain)) {\n          throw new Error(\n            `Chain ${source.name} must be a Parachain to build versioned asset id for XcmPaymentApi fee calculation`,\n          );\n        }\n\n        const sourceAsset = source.getChainAsset(asset);\n\n        return {\n          interior: {\n            X3: [\n              { Parachain: source.parachainId },\n              { PalletInstance: sourceAsset.getAssetPalletInstance() },\n              { GeneralIndex: sourceAsset.getAssetId() },\n            ],\n          },\n          parents: 1,\n        };\n      },\n    }),\n  };\n}\n\nexport function QueryVersionedAsset() {\n  return {\n    fromCurrencyIdToLocations: async (asset: ChainAsset, api: ApiPromise) => {\n      const result = await api.query.assetRegistry.currencyIdToLocations(\n        asset.getAssetRegisteredId(),\n      );\n\n      if (!result || result.isEmpty) {\n        throw new Error(`No location found for asset ${asset.getSymbol()}`);\n      }\n\n      return result.toJSON() as object;\n    },\n    fromAssetId: async (asset: ChainAsset, api: ApiPromise) => {\n      if (!asset.getAssetRegisteredId()) {\n        throw new Error(\n          `No asset registered id found for asset ${asset.getSymbol()}`,\n        );\n      }\n\n      const assetManagerResult = await api.query.assetManager?.assetIdType<\n        Option<MoonbeamRuntimeXcmConfigAssetType>\n      >(asset.getAssetRegisteredId());\n\n      if (\n        !assetManagerResult ||\n        assetManagerResult.isNone ||\n        assetManagerResult.isEmpty ||\n        !assetManagerResult.unwrap().isXcm\n      ) {\n        const evmForeignAssetsResult =\n          await api.query.evmForeignAssets?.assetsById<\n            Option<StagingXcmV4Location>\n          >(asset.getAssetRegisteredId());\n\n        if (\n          !evmForeignAssetsResult ||\n          evmForeignAssetsResult.isEmpty ||\n          evmForeignAssetsResult.isNone\n        ) {\n          throw new Error(`No asset type found for asset ${asset.getSymbol()}`);\n        }\n\n        return evmForeignAssetsResult.unwrapOrDefault().toJSON() as object;\n      }\n\n      return normalizeX1(\n        STABLE_XCM_VERSION,\n        assetManagerResult.unwrapOrDefault().asXcm.toJSON(),\n      ) as object;\n    },\n  };\n}\n","import type { AnyChain } from '@moonbeam-network/xcm-types';\nimport type { FeeConfigBuilderParams } from '../FeeBuilder.interfaces';\nimport {\n  getBuyExecutionInstruction,\n  getClearOriginInstruction,\n  getDepositAssetInstruction,\n  getDescendOriginInstruction,\n  getReserveAssetDepositedInstruction,\n  getSetTopicInstruction,\n  getUniversalOriginInstruction,\n  getWithdrawAssetInstruction,\n} from '../FeeBuilder.utils';\nimport type { CreateXcmFeeBuilderProps } from './xcmPaymentApi';\n\nexport interface GetVersionedAssetsProps extends CreateXcmFeeBuilderProps {\n  params: FeeConfigBuilderParams;\n}\n\nexport async function getVersionedAssets({\n  getVersionedFeeAsset,\n  getVersionedTransferAsset,\n  options,\n  params,\n}: GetVersionedAssetsProps): Promise<[object[], object]> {\n  const { asset: transferAsset, feeAsset } = params;\n  const versionedFeeAssetId = await getVersionedFeeAsset(params);\n\n  const assets = [versionedFeeAssetId];\n\n  if (feeAsset !== transferAsset && getVersionedTransferAsset) {\n    const versionedTransferAssetId = await getVersionedTransferAsset(params);\n\n    if (options.shouldTransferAssetPrecedeFeeAsset) {\n      assets.unshift(versionedTransferAssetId);\n    } else {\n      assets.push(versionedTransferAssetId);\n    }\n  }\n\n  return [assets, versionedFeeAssetId];\n}\n\ninterface GetInstructionsProps {\n  isAssetReserveChain: boolean;\n  assets: object[];\n  versionedFeeAssetId: object;\n  address: string;\n  source?: AnyChain;\n  isEcosystemBridge?: boolean;\n}\n\nexport function getInstructions({\n  isAssetReserveChain,\n  assets,\n  versionedFeeAssetId,\n  address,\n  source,\n  isEcosystemBridge,\n}: GetInstructionsProps) {\n  const instructions = [\n    isAssetReserveChain\n      ? getWithdrawAssetInstruction(assets)\n      : getReserveAssetDepositedInstruction(assets),\n    getClearOriginInstruction(),\n    getBuyExecutionInstruction(versionedFeeAssetId),\n    getDepositAssetInstruction(address, assets),\n    getSetTopicInstruction(),\n  ];\n\n  if (isEcosystemBridge) {\n    return [\n      getUniversalOriginInstruction(source),\n      getDescendOriginInstruction(source),\n      ...instructions,\n    ];\n  }\n\n  return instructions;\n}\n","import { SubstrateCallConfig } from '../../types/substrate/SubstrateCallConfig';\nimport type {\n  FeeConfigBuilder,\n  FeeConfigBuilderParams,\n  GetVersionedAssetId,\n  XcmPaymentFeeProps,\n} from '../FeeBuilder.interfaces';\nimport { getFeeForXcmInstructionsAndAsset } from '../FeeBuilder.utils';\nimport {\n  BuildVersionedAsset,\n  QueryVersionedAsset,\n} from '../VersionedAssetBuilder';\nimport { getInstructions, getVersionedAssets } from './xcmPaymentApi.utils';\n\nexport function xcmPaymentApi() {\n  const localMethods = {\n    fromHere: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: () =>\n          BuildVersionedAsset().fromHere(options.parents),\n        options,\n      }),\n\n    fromHereAndGeneralIndex: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: () => BuildVersionedAsset().fromHere(),\n        getVersionedTransferAsset: ({ asset }) =>\n          BuildVersionedAsset().fromPalletInstanceAndGeneralIndex(asset),\n        options,\n      }),\n\n    fromPalletInstanceAndGeneralIndex: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: ({ feeAsset }) =>\n          BuildVersionedAsset().fromPalletInstanceAndGeneralIndex(feeAsset),\n        options,\n      }),\n\n    fromHereAndSourceGeneralIndex: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: () => BuildVersionedAsset().fromHere(),\n        getVersionedTransferAsset: ({ source, asset }) =>\n          BuildVersionedAsset()\n            .fromSource()\n            .palletInstanceAndGeneralIndex(source, asset),\n        options,\n      }),\n\n    fromGeneralIndex: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: ({ feeAsset }) =>\n          BuildVersionedAsset().fromGeneralIndex(feeAsset),\n        options,\n      }),\n\n    fromPalletInstance: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: ({ feeAsset }) =>\n          BuildVersionedAsset().fromPalletInstance(feeAsset),\n        options,\n      }),\n\n    fromPalletInstanceAndAccountKey20: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: ({ feeAsset }) =>\n          BuildVersionedAsset().fromPalletInstance(feeAsset),\n        getVersionedTransferAsset: ({ asset }) =>\n          BuildVersionedAsset().fromAccountKey20(asset),\n        options,\n      }),\n\n    fromGlobalConsensus: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: ({ feeAsset }) =>\n          BuildVersionedAsset().fromGlobalConsensus(feeAsset),\n        options,\n      }),\n  };\n\n  const sourceMethods = {\n    fromSourceAccountKey20: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: ({ source, asset }) =>\n          BuildVersionedAsset().fromSource().accountKey20(source, asset),\n        options,\n      }),\n\n    fromSourcePalletInstance: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: ({ source, feeAsset }) =>\n          BuildVersionedAsset().fromSource().palletInstance(source, feeAsset),\n        options,\n      }),\n  };\n\n  const queryMethods = {\n    fromCurrencyIdToLocations: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: async ({ feeAsset, api }) => {\n          return await QueryVersionedAsset().fromCurrencyIdToLocations(\n            feeAsset,\n            api,\n          );\n        },\n        options,\n      }),\n    fromAssetIdQuery: (options: XcmPaymentFeeProps) =>\n      createXcmFeeBuilder({\n        getVersionedFeeAsset: async ({ feeAsset, api }) => {\n          return await QueryVersionedAsset().fromAssetId(feeAsset, api);\n        },\n        getVersionedTransferAsset: async ({ asset, api }) => {\n          return await QueryVersionedAsset().fromAssetId(asset, api);\n        },\n        options,\n      }),\n  };\n\n  return {\n    ...localMethods,\n    ...sourceMethods,\n    ...queryMethods,\n  };\n}\n\nexport interface CreateXcmFeeBuilderProps {\n  getVersionedFeeAsset: GetVersionedAssetId;\n  getVersionedTransferAsset?: GetVersionedAssetId;\n  options: XcmPaymentFeeProps;\n}\n\nconst createXcmFeeBuilder = ({\n  getVersionedFeeAsset,\n  getVersionedTransferAsset,\n  options,\n}: CreateXcmFeeBuilderProps): FeeConfigBuilder => ({\n  build: (params: FeeConfigBuilderParams) => {\n    return new SubstrateCallConfig({\n      api: params.api,\n      call: async (): Promise<bigint> => {\n        const [assets, versionedFeeAssetId] = await getVersionedAssets({\n          getVersionedFeeAsset,\n          getVersionedTransferAsset,\n          options,\n          params,\n        });\n\n        const instructions = getInstructions({\n          isAssetReserveChain: options.isAssetReserveChain,\n          assets,\n          versionedFeeAssetId,\n          address: params.address,\n          source: params.source,\n          isEcosystemBridge: options.isEcosystemBridge,\n        });\n\n        return getFeeForXcmInstructionsAndAsset(\n          params.api,\n          instructions,\n          versionedFeeAssetId,\n        );\n      },\n    });\n  },\n});\n","import { gateway } from './gateway';\nimport { outboundQueueApi } from './outboundQueueApi';\nimport { xcmPaymentApi } from './xcmPaymentApi';\n\nexport function FeeBuilder() {\n  return {\n    gateway,\n    outboundQueueApi,\n    xcmPaymentApi,\n  };\n}\n","import type { Bool, U8aFixed } from '@polkadot/types';\nimport type {\n  AccountId32,\n  EventRecord,\n  H256,\n} from '@polkadot/types/interfaces';\nimport type {\n  CumulusPrimitivesCoreAggregateMessageOrigin,\n  StagingXcmV5Location,\n} from '@polkadot/types/lookup';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type {\n  DestinationChecker,\n  MonitorEventReturn,\n  SourceChecker,\n} from './eventMonitoring.interfaces';\nimport {\n  createDestinationChecker,\n  createSourceChecker,\n} from './eventMonitoring.utils';\n\ninterface MessageQueueProcessedData {\n  id: H256;\n  origin: CumulusPrimitivesCoreAggregateMessageOrigin;\n  weightUsed: unknown;\n  success: Bool;\n}\n\nexport interface XcmEventData {\n  origin: StagingXcmV5Location;\n  messageId: U8aFixed;\n}\n\ninterface XTokensEventData {\n  sender: AccountId32;\n}\n\ninterface XcmQueueEventData {\n  messageHash: U8aFixed;\n}\n\ninterface EthereumXcmEventData {\n  xcmMsgHash: H256;\n  ethTxHash: H256;\n}\n\nexport function GetAddress() {\n  return {\n    fromXcmEvent:\n      () =>\n      (event: EventRecord): string => {\n        const eventData = event.event.data as unknown as XcmEventData;\n        const interior = eventData.origin.interior.asX1[0];\n\n        if (interior.isAccountId32) {\n          return interior.asAccountId32.id.toHex();\n        } else if (interior.isAccountKey20) {\n          return interior.asAccountKey20.key.toString();\n        } else {\n          throw new Error('Unsupported address type');\n        }\n      },\n\n    fromXTokensEvent:\n      () =>\n      (event: EventRecord): string => {\n        const eventData = event.event.data as unknown as XTokensEventData;\n        return u8aToHex(decodeAddress(eventData.sender.toString()));\n      },\n  };\n}\n\nexport function GetMessageId() {\n  return {\n    fromXcmEvent:\n      () =>\n      (event: EventRecord): string => {\n        const eventData = event.event.data as unknown as XcmEventData;\n        return eventData.messageId.toHex();\n      },\n\n    fromXcmpQueue:\n      () =>\n      (_event: EventRecord, events?: EventRecord[]): string => {\n        const xcmpEvent = events?.find(\n          (event) =>\n            event.event.section === 'xcmpQueue' &&\n            event.event.method === 'XcmpMessageSent',\n        );\n\n        if (!xcmpEvent) {\n          throw new Error('XcmpMessageSent event not found');\n        }\n\n        const eventData = xcmpEvent.event.data as unknown as XcmQueueEventData;\n        return eventData.messageHash.toHex();\n      },\n  };\n}\n\nexport function MatchMessageId() {\n  return {\n    fromMessageQueueId:\n      () =>\n      (event: EventRecord, messageId?: string): boolean => {\n        if (!messageId) return true;\n\n        try {\n          const eventData = event.event\n            .data as unknown as MessageQueueProcessedData;\n          return eventData.id.toString() === messageId;\n        } catch {\n          return false;\n        }\n      },\n\n    fromXcmpQueueHash:\n      () =>\n      (event: EventRecord, messageId?: string): boolean => {\n        if (!messageId) return true;\n\n        try {\n          const eventData = event.event.data as unknown as XcmQueueEventData;\n          return eventData.messageHash.toString() === messageId;\n        } catch {\n          return false;\n        }\n      },\n\n    fromEthereumXcmEvent:\n      () =>\n      (event: EventRecord): string => {\n        const eventData = event.event.data as unknown as EthereumXcmEventData;\n        return eventData.xcmMsgHash.toHex();\n      },\n\n    never: () => (): boolean => true, // Always match for cases where messageId is not used\n  };\n}\n\nexport function GetIsSuccess() {\n  return {\n    fromMessageQueueProcessed:\n      () =>\n      (event: EventRecord): boolean => {\n        try {\n          const eventData = event.event\n            .data as unknown as MessageQueueProcessedData;\n          return eventData.success.isTrue;\n        } catch {\n          return false;\n        }\n      },\n\n    fromXcmpQueueEvent:\n      () =>\n      (event: EventRecord): boolean => {\n        return event.event.method === 'Success';\n      },\n\n    alwaysTrue: () => (): boolean => true, // Always successful for simple cases\n  };\n}\n\nfunction CheckSource() {\n  return {\n    xcmPallet: (): SourceChecker =>\n      createSourceChecker(\n        'xcmPallet',\n        'Sent',\n        GetAddress().fromXcmEvent(),\n        GetMessageId().fromXcmEvent(),\n      ),\n\n    polkadotXcm: (): SourceChecker =>\n      createSourceChecker(\n        'polkadotXcm',\n        'Sent',\n        GetAddress().fromXcmEvent(),\n        GetMessageId().fromXcmEvent(),\n      ),\n\n    polkadotXcmAndXcmpQueue: (): SourceChecker =>\n      createSourceChecker(\n        'polkadotXcm',\n        'Sent',\n        GetAddress().fromXcmEvent(),\n        GetMessageId().fromXcmpQueue(),\n      ),\n\n    xTokens: (): SourceChecker =>\n      createSourceChecker(\n        'xTokens',\n        ['TransferredMultiAssets', 'TransferredAssets'],\n        GetAddress().fromXTokensEvent(),\n        GetMessageId().fromXcmpQueue(),\n      ),\n\n    bridgeMessages: (): SourceChecker => (events) => {\n      const event = events.find(\n        (event) =>\n          event.event.section === 'bridgeMessages' &&\n          event.event.method === 'MessageAccepted',\n      );\n\n      return event ? { matched: true, event } : { matched: false };\n    },\n  };\n}\n\nfunction CheckDestination() {\n  return {\n    messageQueue: (): DestinationChecker =>\n      createDestinationChecker(\n        'messageQueue',\n        'Processed',\n        MatchMessageId().fromMessageQueueId(),\n        GetIsSuccess().fromMessageQueueProcessed(),\n      ),\n\n    xcmpQueue: (): DestinationChecker => (events, messageId) => {\n      // Special handling for xcmpQueue as it needs to check both Success and Fail events\n      const messageIdMatcher = MatchMessageId().fromXcmpQueueHash();\n\n      const successEvent = events.find((event) => {\n        if (\n          event.event.section !== 'xcmpQueue' ||\n          event.event.method !== 'Success'\n        ) {\n          return false;\n        }\n\n        return messageIdMatcher(event, messageId);\n      });\n\n      const failEvent = events.find((event) => {\n        if (\n          event.event.section !== 'xcmpQueue' ||\n          event.event.method !== 'Fail'\n        ) {\n          return false;\n        }\n\n        return messageIdMatcher(event, messageId);\n      });\n\n      if (!successEvent && !failEvent) {\n        return { matched: false, success: false };\n      }\n\n      return {\n        matched: true,\n        success: !!successEvent,\n        event: successEvent || failEvent,\n      };\n    },\n\n    bridgeMessages: (): DestinationChecker =>\n      createDestinationChecker(\n        'bridgeMessages',\n        'MessagesReceived',\n        // TODO implement message matching\n        MatchMessageId().never(),\n        GetIsSuccess().alwaysTrue(),\n      ),\n\n    ethereumXcm: (): DestinationChecker =>\n      createDestinationChecker(\n        'ethereumXcm',\n        'ExecutedFromXcm',\n        MatchMessageId().never(),\n        GetIsSuccess().alwaysTrue(),\n      ),\n  };\n}\n\nexport function monitorEvent(): MonitorEventReturn {\n  return {\n    xcmPallet: () => ({\n      messageQueue: () => ({\n        checkSource: CheckSource().xcmPallet(),\n        checkDestination: CheckDestination().messageQueue(),\n      }),\n    }),\n\n    polkadotXcm: () => ({\n      messageQueue: () => ({\n        checkSource: CheckSource().polkadotXcm(),\n        checkDestination: CheckDestination().messageQueue(),\n      }),\n      mixedQueue: () => ({\n        checkSource: CheckSource().polkadotXcmAndXcmpQueue(),\n        checkDestination: CheckDestination().messageQueue(),\n      }),\n      xcmpQueue: () => ({\n        checkSource: CheckSource().polkadotXcmAndXcmpQueue(),\n        checkDestination: CheckDestination().xcmpQueue(),\n      }),\n    }),\n\n    xTokens: () => ({\n      messageQueue: () => ({\n        checkSource: CheckSource().xTokens(),\n        checkDestination: CheckDestination().messageQueue(),\n      }),\n      ethereumXcm: () => ({\n        checkSource: CheckSource().xTokens(),\n        checkDestination: CheckDestination().ethereumXcm(),\n      }),\n    }),\n\n    bridgeMessages: () => ({\n      bridgeMessages: () => ({\n        checkSource: CheckSource().bridgeMessages(),\n        checkDestination: CheckDestination().bridgeMessages(),\n      }),\n    }),\n  };\n}\n","import type { EventRecord } from '@polkadot/types/interfaces';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type {\n  DestinationChecker,\n  SourceChecker,\n} from './eventMonitoring.interfaces';\n\nexport const createSourceChecker =\n  (\n    section: string,\n    method: string | string[],\n    addressExtractor: (event: EventRecord) => string,\n    messageIdExtractor: (event: EventRecord, events?: EventRecord[]) => string,\n  ): SourceChecker =>\n  (events, sourceAddress) => {\n    const decodedSourceAddress = u8aToHex(decodeAddress(sourceAddress));\n    const methods = Array.isArray(method) ? method : [method];\n\n    const event = events.find((event) => {\n      if (\n        event.event.section !== section ||\n        !methods.includes(event.event.method)\n      ) {\n        return false;\n      }\n\n      try {\n        const address = addressExtractor(event);\n        return address === decodedSourceAddress;\n      } catch {\n        return false;\n      }\n    });\n\n    if (!event) {\n      return { matched: false };\n    }\n\n    try {\n      const messageId = messageIdExtractor(event, events);\n      return { matched: true, messageId, event };\n    } catch {\n      return { matched: true, event }; // Return without messageId if extraction fails\n    }\n  };\n\nexport const createDestinationChecker =\n  (\n    section: string,\n    method: string | string[],\n    matchMessageId: (event: EventRecord, messageId?: string) => boolean,\n    getIsSuccess: (event: EventRecord) => boolean,\n  ): DestinationChecker =>\n  (events, messageId) => {\n    const methods = Array.isArray(method) ? method : [method];\n\n    const event = events.find((event) => {\n      if (\n        event.event.section !== section ||\n        !methods.includes(event.event.method)\n      ) {\n        return false;\n      }\n\n      return matchMessageId(event, messageId);\n    });\n\n    if (!event) {\n      return { matched: false, success: false };\n    }\n\n    const success = getIsSuccess(event);\n    return { matched: true, success, event };\n  };\n","import { monitorEvent } from './eventMonitoring/eventMonitoring';\n\nexport function MonitoringBuilder() {\n  return {\n    monitorEvent,\n  };\n}\n","import {\n  type AnyChain,\n  type AssetAmount,\n  EvmParachain,\n} from '@moonbeam-network/xcm-types';\nimport {\n  type MrlConfigBuilder,\n  Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport { SnowbridgeConfig } from '../../snowbridge';\n\nexport function Gateway() {\n  const provider = Provider.Snowbridge;\n\n  return {\n    sendToken: (): MrlConfigBuilder => ({\n      provider,\n      build: ({\n        asset,\n        destinationAddress,\n        protocolFee,\n        destination,\n        bridgeChainFee,\n      }) =>\n        callSendToken(\n          asset,\n          protocolFee,\n          destination,\n          destinationAddress,\n          bridgeChainFee,\n        ),\n    }),\n    approveAndSendToken: (): MrlConfigBuilder => ({\n      provider,\n      build: ({\n        asset,\n        destinationAddress,\n        protocolFee,\n        destination,\n        bridgeChainFee,\n      }) => {\n        const requiresApproval = protocolFee && !protocolFee.isSame(asset);\n\n        return callSendToken(\n          asset,\n          protocolFee,\n          destination,\n          destinationAddress,\n          bridgeChainFee,\n          requiresApproval,\n        );\n      },\n    }),\n  };\n}\n\nfunction callSendToken(\n  asset: AssetAmount,\n  protocolFee: AssetAmount | undefined,\n  destination: AnyChain,\n  destinationAddress: string,\n  bridgeChainFee: AssetAmount | undefined,\n  requiresApproval = false,\n): SnowbridgeConfig {\n  if (!protocolFee) {\n    throw new Error('Protocol fee is required for Gateway module');\n  }\n\n  if (!bridgeChainFee) {\n    throw new Error('Bridge chain fee is required for Gateway module');\n  }\n\n  if (!EvmParachain.isAnyParachain(destination)) {\n    throw new Error(\n      'Destination must be a Parachain or EvmParachain for sending token with Gateway module',\n    );\n  }\n\n  const isDifferentAsset = !asset.isSame(protocolFee);\n\n  const value =\n    requiresApproval || isDifferentAsset\n      ? protocolFee.amount\n      : asset.amount + protocolFee.amount;\n\n  return new SnowbridgeConfig({\n    args: {\n      tokenAddress: asset.address as string,\n      destinationAddress,\n      destinationParaId: destination.parachainId,\n      amount: asset.amount,\n      bridgeFeeAmount: protocolFee.amount,\n      bridgeChainFee: bridgeChainFee.amount,\n      requiresApproval,\n      value,\n    },\n    func: 'sendToken',\n  });\n}\n","import type {\n  AnyChain,\n  AnyParachain,\n  AssetAmount,\n  ChainAsset,\n} from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { HexString } from '@polkadot/util/types';\nimport type { BuilderParams, ConfigBuilder } from '../builder.interfaces';\nimport type { ContractConfig } from '../contract';\nimport type { ExtrinsicConfig } from '../extrinsic';\nimport type { SnowbridgeConfig } from './providers/snowbridge/snowbridge';\nimport type { WormholeConfig } from './providers/wormhole/wormhole';\n\nexport enum Provider {\n  Snowbridge = 'snowbridge',\n  Wormhole = 'wormhole',\n}\n\nexport type MrlTransferConfig =\n  | ContractConfig\n  | ExtrinsicConfig\n  | WormholeConfig\n  | SnowbridgeConfig;\n\nexport type MrlConfigBuilder = ConfigBuilder<\n  MrlTransferConfig,\n  MrlBuilderParams\n> & {\n  provider: Provider;\n};\n\nexport type MrlExecuteConfigBuilder = ConfigBuilder<\n  ContractConfig,\n  MrlExecuteBuilderParams\n>;\n\nexport interface MrlBuilderParams extends BuilderParams<AnyChain> {\n  isAutomatic: boolean;\n  protocolFee?: AssetAmount;\n  bridgeChainFee?: AssetAmount;\n  moonApi: ApiPromise;\n  moonAsset: ChainAsset;\n  bridgeChain: AnyParachain;\n  bridgeChainGasLimit?: bigint;\n  sendOnlyRemoteExecution?: boolean;\n  transact?: Transact;\n}\n\nexport interface MrlExecuteBuilderParams {\n  bytes?: Uint8Array;\n}\n\nexport interface Transact {\n  call: HexString;\n  txWeight: {\n    refTime: bigint;\n    proofSize: bigint;\n  };\n}\n","import { Provider } from '../../../MrlBuilder.interfaces';\n\nexport type SnowbridgeFunctions = 'sendToken';\n\nexport interface SnowbridgeFunctionArgs {\n  tokenAddress: string;\n  destinationAddress: string;\n  destinationParaId: number;\n  amount: bigint;\n  bridgeFeeAmount: bigint;\n  bridgeChainFee: bigint;\n  requiresApproval: boolean;\n  value: bigint;\n}\n\nexport interface SnowbridgeConfigConstructorParams {\n  args: SnowbridgeFunctionArgs;\n  func: SnowbridgeFunctions;\n}\n\nexport class SnowbridgeConfig {\n  readonly args: SnowbridgeFunctionArgs;\n\n  readonly func: SnowbridgeFunctions;\n\n  readonly provider = Provider.Snowbridge;\n\n  static is(obj: unknown): obj is SnowbridgeConfig {\n    return obj instanceof SnowbridgeConfig;\n  }\n\n  constructor({ args, func }: SnowbridgeConfigConstructorParams) {\n    this.args = args;\n    this.func = func;\n  }\n}\n","import { Gateway } from './Gateway';\n\nexport function contract() {\n  return { Gateway };\n}\n","import { ExtrinsicConfig } from '../../../../../types';\nimport {\n  type MrlConfigBuilder,\n  Provider,\n} from '../../../../MrlBuilder.interfaces';\n\nconst pallet = 'ethereumTokenTransfers';\n\nexport function ethereumTokenTransfers() {\n  return {\n    transferNativeToken: (): MrlConfigBuilder => {\n      const func = 'transferNativeToken';\n      const provider = Provider.Snowbridge;\n\n      return {\n        provider,\n        build: ({ asset, destinationAddress }) => {\n          return new ExtrinsicConfig({\n            module: pallet,\n            func,\n            getArgs: () => [asset.amount, destinationAddress],\n          });\n        },\n      };\n    },\n  };\n}\n","import { EvmChain } from '@moonbeam-network/xcm-types';\nimport { TransferType } from '../../../../../contract';\nimport { getExtrinsicArgumentVersion } from '../../../../../extrinsic/ExtrinsicBuilder.utils';\nimport { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig';\nimport {\n  type MrlConfigBuilder,\n  Provider,\n} from '../../../../MrlBuilder.interfaces';\n\nconst pallet = 'polkadotXcm';\n\nexport function polkadotXcm() {\n  return {\n    transferAssetsUsingTypeAndThen: () => {\n      const func = 'transferAssetsUsingTypeAndThen';\n      const provider = Provider.Snowbridge;\n\n      return {\n        canonicalEth: (): MrlConfigBuilder => ({\n          provider,\n          build: ({ asset, destination, destinationAddress, protocolFee }) => {\n            if (!EvmChain.is(destination)) {\n              throw new Error(\n                'Destination must be an EVM chain for globalConsensus function',\n              );\n            }\n\n            if (!protocolFee) {\n              throw new Error(\n                'Bridge chain fee is required for the polkadotXcm.canonicalEth function',\n              );\n            }\n\n            const protocolFeeAmount = (protocolFee.amount * 110n) / 100n; // bump by 10%\n\n            return new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const version = getExtrinsicArgumentVersion(extrinsicFunction);\n                const dest = {\n                  [version]: {\n                    parents: 1,\n                    interior: 'Here',\n                  },\n                };\n\n                const assets = {\n                  [version]: [\n                    {\n                      id: {\n                        parents: 1,\n                        interior: 'Here',\n                      },\n                      fun: { Fungible: protocolFeeAmount },\n                    },\n                    {\n                      id: {\n                        parents: 2,\n                        interior: {\n                          X1: [\n                            {\n                              GlobalConsensus: {\n                                Ethereum: { chainId: destination.id },\n                              },\n                            },\n                          ],\n                        },\n                      },\n                      fun: { Fungible: asset.amount },\n                    },\n                  ],\n                };\n                const assetsTransferType = TransferType.DestinationReserve;\n                const remoteFeesId = {\n                  [version]: {\n                    parents: 1,\n                    interior: 'Here',\n                  },\n                };\n                const feesTransferType = TransferType.DestinationReserve;\n                const customXcmOnDest = {\n                  [version]: [\n                    {\n                      InitiateReserveWithdraw: {\n                        assets: {\n                          Definite: [\n                            {\n                              id: {\n                                parents: 1,\n                                interior: {\n                                  X1: [\n                                    {\n                                      GlobalConsensus: {\n                                        Ethereum: { chainId: destination.id },\n                                      },\n                                    },\n                                  ],\n                                },\n                              },\n                              fun: { Fungible: asset.amount },\n                            },\n                          ],\n                        },\n                        reserve: {\n                          parents: 1,\n                          interior: {\n                            X1: [\n                              {\n                                GlobalConsensus: {\n                                  Ethereum: { chainId: destination.id },\n                                },\n                              },\n                            ],\n                          },\n                        },\n                        xcm: [\n                          {\n                            DepositAsset: {\n                              assets: {\n                                Definite: [\n                                  {\n                                    id: {\n                                      parents: 0,\n                                      interior: 'Here',\n                                    },\n                                    fun: { Fungible: asset.amount },\n                                  },\n                                ],\n                              },\n                              beneficiary: {\n                                parents: 0,\n                                interior: {\n                                  X1: [\n                                    {\n                                      AccountKey20: {\n                                        network: {\n                                          Ethereum: { chainId: destination.id },\n                                        },\n                                        key: destinationAddress,\n                                      },\n                                    },\n                                  ],\n                                },\n                              },\n                            },\n                          },\n                        ],\n                      },\n                    },\n                  ],\n                };\n\n                return [\n                  dest,\n                  assets,\n                  assetsTransferType,\n                  remoteFeesId,\n                  feesTransferType,\n                  customXcmOnDest,\n                  'Unlimited',\n                ];\n              },\n            });\n          },\n        }),\n      };\n    },\n  };\n}\n","import { EvmChain } from '@moonbeam-network/xcm-types';\nimport { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig';\nimport {\n  type MrlConfigBuilder,\n  Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport { getGlobalConsensusArgs } from './xcmPallet.utils';\n\nconst pallet = 'xcmPallet';\n\nexport function xcmPallet() {\n  return {\n    transferAssets: () => {\n      const func = 'transferAssets';\n      const provider = Provider.Snowbridge;\n\n      return {\n        globalConsensus: (): MrlConfigBuilder => ({\n          provider,\n          build: ({ asset, destination, destinationAddress }) => {\n            if (!EvmChain.is(destination)) {\n              throw new Error(\n                'Destination must be an EVM chain for globalConsensus function',\n              );\n            }\n\n            return new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const assets = [\n                  {\n                    id: {\n                      parents: 1,\n                      interior: {\n                        X1: [\n                          {\n                            GlobalConsensus: {\n                              Ethereum: { chainId: destination.id },\n                            },\n                          },\n                        ],\n                      },\n                    },\n                    fun: { Fungible: asset.amount },\n                  },\n                ];\n\n                return getGlobalConsensusArgs({\n                  assets,\n                  destination,\n                  destinationAddress,\n                  func: extrinsicFunction,\n                });\n              },\n            });\n          },\n        }),\n        globalConsensusErc20: (): MrlConfigBuilder => ({\n          provider,\n          build: ({ asset, destination, destinationAddress }) => {\n            if (!EvmChain.is(destination)) {\n              throw new Error(\n                'Destination must be an EVM chain for globalConsensusErc20 function',\n              );\n            }\n\n            const assetInDestination = destination.getChainAsset(asset);\n\n            return new ExtrinsicConfig({\n              module: pallet,\n              func,\n              getArgs: (extrinsicFunction) => {\n                const assets = [\n                  {\n                    id: {\n                      parents: 1,\n                      interior: {\n                        X2: [\n                          {\n                            GlobalConsensus: {\n                              Ethereum: { chainId: destination.id },\n                            },\n                          },\n                          {\n                            AccountKey20: {\n                              network: {\n                                Ethereum: { chainId: destination.id },\n                              },\n                              key: assetInDestination.address,\n                            },\n                          },\n                        ],\n                      },\n                    },\n                    fun: { Fungible: asset.amount },\n                  },\n                ];\n\n                return getGlobalConsensusArgs({\n                  assets,\n                  destination,\n                  destinationAddress,\n                  func: extrinsicFunction,\n                });\n              },\n            });\n          },\n        }),\n      };\n    },\n  };\n}\n","import type { EvmChain } from '@moonbeam-network/xcm-types';\nimport type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport { getExtrinsicArgumentVersion } from '../../../../../extrinsic/ExtrinsicBuilder.utils';\n\ninterface GetGlobalConsensusArgsParams {\n  assets: object[];\n  destination: EvmChain;\n  destinationAddress: string;\n  func?: SubmittableExtrinsicFunction<'promise'>;\n}\n\nexport function getGlobalConsensusArgs({\n  assets,\n  destination,\n  destinationAddress,\n  func,\n}: GetGlobalConsensusArgsParams) {\n  const version = getExtrinsicArgumentVersion(func);\n\n  const dest = {\n    [version]: {\n      parents: 1,\n      interior: {\n        X1: [\n          {\n            GlobalConsensus: {\n              Ethereum: { chainId: destination.id },\n            },\n          },\n        ],\n      },\n    },\n  };\n\n  const beneficiary = {\n    [version]: {\n      parents: 0,\n      interior: {\n        X1: [\n          {\n            AccountKey20: {\n              network: { Ethereum: { chainId: destination.id } },\n              key: destinationAddress,\n            },\n          },\n        ],\n      },\n    },\n  };\n\n  const assetsArg = {\n    [version]: assets,\n  };\n\n  return [\n    dest,\n    beneficiary,\n    assetsArg,\n    0, // feeAssetItem\n    'Unlimited',\n  ];\n}\n","import { ethereumTokenTransfers } from './ethereumTokenTransfer/ethereumTokenTransfers';\nimport { polkadotXcm } from './polkadotXcm/polkadotXcm';\nimport { xcmPallet } from './xcmPallet/xcmPallet';\n\nexport function extrinsic() {\n  return { ethereumTokenTransfers, xcmPallet, polkadotXcm };\n}\n","import { contract } from './contract';\nimport { extrinsic } from './extrinsic';\n\nexport * from './snowbridge';\n\nexport function snowbridge() {\n  return {\n    contract,\n    extrinsic,\n  };\n}\n","import {\n  type AnyChain,\n  type AnyParachain,\n  type AssetAmount,\n  type ChainAsset,\n  EvmParachain,\n  type Parachain,\n} from '@moonbeam-network/xcm-types';\n\nimport { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils';\nimport type { ApiPromise } from '@polkadot/api';\nimport { evmToAddress } from '@polkadot/util-crypto';\nimport { type Abi, type Address, encodeFunctionData, maxUint64 } from 'viem';\nimport { ContractBuilder, ContractConfig } from '../../../../../contract';\nimport {\n  getGlobalConsensusDestination,\n  getPrecompileDestinationInterior,\n} from '../../../../../contract/ContractBuilder.utils';\nimport {\n  type MrlConfigBuilder,\n  Provider,\n  type Transact,\n} from '../../../../MrlBuilder.interfaces';\nimport {\n  buildSendExtrinsic,\n  CROSS_CHAIN_FEE,\n} from '../../extrinsic/polkadotXcm/polkadotXcm';\nimport { getAbisForChain } from './abi/abi.helpers';\n\nconst module = 'Batch';\n\nexport function Batch() {\n  const provider = Provider.Wormhole;\n\n  return {\n    /**\n     * Transfers assets and XCM message using XTokens contract for multi-currency transfer.\n     * Uses parents: 1 for multilocation derivation.\n     */\n    transferAssetsAndMessageViaXtokens: (): MrlConfigBuilder => ({\n      provider,\n      build: (params) => {\n        const { source, sourceAddress, sourceApi } = params;\n\n        if (!EvmParachain.is(source)) {\n          throw new Error('Source chain needs to be an EVMParachain');\n        }\n\n        if (!sourceApi) {\n          throw new Error('Source API needs to be defined');\n        }\n\n        if (\n          !source.contracts?.Xtokens ||\n          !source.contracts?.XcmUtils ||\n          !source.contracts?.Batch\n        ) {\n          throw new Error(\n            'Source chain needs to have the Xtokens, XcmUtils and Batch contract addresses configured',\n          );\n        }\n\n        const subMappedAddress = evmToAddress(sourceAddress);\n        const { address20: computedOriginAccount } =\n          getMultilocationDerivedAddresses({\n            address: subMappedAddress,\n            paraId: source.parachainId,\n            parents: 1,\n          });\n\n        const encodedXcmMessage = buildXcmMessage({\n          asset: params.asset,\n          destination: params.destination,\n          destinationAddress: params.destinationAddress,\n          computedOriginAccount,\n          fee: params.fee,\n          isAutomatic: params.isAutomatic,\n          moonAsset: params.moonAsset,\n          bridgeChain: params.bridgeChain,\n          moonApi: params.moonApi,\n          source,\n          sourceAddress,\n          sourceApi: sourceApi,\n          transact: params.transact,\n        });\n\n        // XTokens-specific: Build transfer using XTokens contract\n        const { BatchAbi, XcmUtilsAbi, XtokensAbi } = getAbisForChain(source);\n        const { destinationParachainAndAddress } = getDestinationInHex(\n          params.bridgeChain,\n          computedOriginAccount,\n        );\n\n        const { currencies, feeItem } = getCurrencies({\n          source,\n          moonAsset: params.moonAsset,\n          asset: params.asset,\n        });\n\n        const multiTransferTxData = encodeFunctionData({\n          abi: XtokensAbi,\n          functionName: 'transferMultiCurrencies',\n          args: [\n            currencies,\n            feeItem,\n            destinationParachainAndAddress,\n            maxUint64,\n          ],\n        });\n\n        const xcmSendTxData = buildXcmSendTxData({\n          abi: XcmUtilsAbi,\n          destination: getDestinationInHex(\n            params.bridgeChain,\n            computedOriginAccount,\n          ).destinationParachain,\n          encodedXcmMessage,\n        });\n\n        return new ContractConfig({\n          address: source.contracts.Batch,\n          abi: BatchAbi,\n          args: [\n            [source.contracts.Xtokens, source.contracts.XcmUtils],\n            [],\n            [multiTransferTxData, xcmSendTxData],\n            [],\n          ],\n          func: 'batchAll',\n          module,\n        });\n      },\n    }),\n    transferAssetsAndMessageViaXcmPrecompile: (): MrlConfigBuilder => ({\n      provider,\n      build: (params) => {\n        const { source, sourceAddress, sourceApi } = params;\n\n        if (!EvmParachain.is(source)) {\n          throw new Error('Source chain needs to be an EVMParachain');\n        }\n\n        if (!sourceApi) {\n          throw new Error('Source API needs to be defined');\n        }\n\n        if (!params.bridgeChainFee) {\n          throw new Error('Bridge chain fee is required');\n        }\n\n        if (\n          !source.contracts?.XcmUtils ||\n          !source.contracts?.Batch ||\n          !source.contracts?.XcmPrecompile\n        ) {\n          throw new Error(\n            'Source chain needs to have the XcmUtils, Batch and XcmPrecompile contract addresses configured',\n          );\n        }\n\n        const { address20: computedOriginAccount } =\n          getMultilocationDerivedAddresses({\n            address: sourceAddress,\n            paraId: source.parachainId,\n            parents: 2, // this function is only used for global consensus currently\n          });\n\n        const encodedXcmMessage = buildXcmMessage({\n          asset: params.asset,\n          destination: params.destination,\n          destinationAddress: params.destinationAddress,\n          computedOriginAccount,\n          fee: params.fee,\n          isAutomatic: params.isAutomatic,\n          moonAsset: params.moonAsset,\n          bridgeChain: params.bridgeChain,\n          moonApi: params.moonApi,\n          source,\n          sourceAddress,\n          sourceApi: sourceApi,\n          transact: params.transact,\n        });\n\n        const { BatchAbi, XcmUtilsAbi } = getAbisForChain(source);\n\n        const transferAssetsCall = ContractBuilder()\n          .XcmPrecompile()\n          .transferAssetsLocation()\n          .foreignErc20()\n          .build({\n            sourceApi,\n            asset: params.asset,\n            fee: params.bridgeChainFee,\n            destination: params.bridgeChain,\n            destinationAddress: computedOriginAccount,\n            source,\n            sourceAddress,\n          });\n\n        const transferAssetsCallData = transferAssetsCall.encodeFunctionData();\n\n        const globalConsensusDestination = getGlobalConsensusDestination(\n          sourceApi,\n          params.bridgeChain,\n        );\n\n        const xcmSendTxData = buildXcmSendTxData({\n          abi: XcmUtilsAbi,\n          destination: {\n            parents: globalConsensusDestination[0],\n            interior: globalConsensusDestination[1],\n          },\n          encodedXcmMessage,\n        });\n\n        return new ContractConfig({\n          address: source.contracts.Batch,\n          abi: BatchAbi,\n          args: [\n            [source.contracts.XcmPrecompile, source.contracts.XcmUtils],\n            [],\n            [transferAssetsCallData, xcmSendTxData],\n            [],\n          ],\n          func: 'batchAll',\n          module,\n        });\n      },\n    }),\n  };\n}\n\n/**\n * Builds the XCM message for cross-chain communication\n */\nfunction buildXcmMessage(params: {\n  asset: AssetAmount;\n  destination: AnyChain;\n  destinationAddress: string;\n  computedOriginAccount: string;\n  fee: AssetAmount;\n  isAutomatic: boolean;\n  moonAsset: ChainAsset;\n  bridgeChain: AnyParachain;\n  moonApi: ApiPromise;\n  source: AnyParachain;\n  sourceAddress: string;\n  sourceApi: ApiPromise;\n  transact: Transact | undefined;\n}): string {\n  const send = buildSendExtrinsic(params);\n  return send.args[1].toHex();\n}\n\n/**\n * Builds the xcmSend transaction data\n */\nfunction buildXcmSendTxData(params: {\n  abi: Abi;\n  destination: unknown;\n  encodedXcmMessage: string;\n}): string {\n  return encodeFunctionData({\n    abi: params.abi,\n    functionName: 'xcmSend',\n    args: [params.destination, params.encodedXcmMessage],\n  });\n}\n\nfunction getDestinationInHex(\n  bridgeChain: AnyParachain,\n  computedOriginAccount: string,\n) {\n  const destinationParachain = {\n    parents: 1,\n    interior: getPrecompileDestinationInterior(bridgeChain),\n  } as const;\n\n  const destinationParachainAndAddress = {\n    parents: 1,\n    interior: getPrecompileDestinationInterior(\n      bridgeChain,\n      computedOriginAccount,\n    ),\n  } as const;\n\n  return {\n    destinationParachain,\n    destinationParachainAndAddress,\n  };\n}\n\ninterface GetCurrenciesParams {\n  source: Parachain | EvmParachain;\n  moonAsset: ChainAsset;\n  asset: AssetAmount;\n}\n\nfunction getCurrencies({ source, moonAsset, asset }: GetCurrenciesParams) {\n  const currencies = [\n    {\n      currencyAddress: source.getChainAsset(moonAsset).address as Address,\n      amount: CROSS_CHAIN_FEE,\n    },\n    {\n      currencyAddress: asset.address as Address,\n      amount: asset.amount,\n    },\n  ];\n  const feeItem = 0; // moonAsset\n  return { currencies, feeItem };\n}\n","import {\n  type AnyParachain,\n  AssetAmount,\n  Parachain,\n} from '@moonbeam-network/xcm-types';\nimport { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { SubmittableExtrinsic } from '@polkadot/api/types';\nimport type { ISubmittableResult } from '@polkadot/types/types';\nimport { ExtrinsicBuilder } from '../../../../../extrinsic/ExtrinsicBuilder';\nimport {\n  getExtrinsicArgumentVersion,\n  normalizeConcrete,\n  normalizeX1,\n} from '../../../../../extrinsic/ExtrinsicBuilder.utils';\nimport { getGlobalConsensus } from '../../../../../extrinsic/pallets/polkadotXcm/polkadotXcm.util';\nimport { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig';\nimport {\n  type MrlBuilderParams,\n  type MrlConfigBuilder,\n  Provider,\n} from '../../../../MrlBuilder.interfaces';\n\n// TODO: these have to come from the configs\nconst BUY_EXECUTION_FEE = 100_000_000_000_000_000n; // bridgeChainFee\nexport const CROSS_CHAIN_FEE = 100_000_000_000_000_000n; // fee for processing the xcm message in moon chain\n\nexport function polkadotXcm() {\n  const provider = Provider.Wormhole;\n\n  return {\n    send: (\n      transferAssetsPallet?: 'polkadotXcm' | 'xTokens',\n    ): MrlConfigBuilder => ({\n      provider,\n      build: ({\n        asset,\n        destination,\n        destinationAddress,\n        fee,\n        isAutomatic,\n        moonAsset,\n        bridgeChain,\n        moonApi,\n        sendOnlyRemoteExecution,\n        source,\n        sourceAddress,\n        sourceApi,\n        transact,\n      }) => {\n        if (!destination.wh?.name) {\n          throw new Error('Destination chain does not have a wormhole name');\n        }\n\n        if (!sourceApi) {\n          throw new Error('Source API needs to be defined');\n        }\n\n        if (!Parachain.is(source)) {\n          throw new Error('Source chain needs to be a parachain');\n        }\n\n        const { address20: computedOriginAccount } =\n          getMultilocationDerivedAddresses({\n            address: sourceAddress,\n            paraId: source.parachainId,\n            parents: 1,\n          });\n\n        const assetTransferTxs = getAssetTransferTxs({\n          transferAssetsPallet,\n          asset,\n          computedOriginAccount,\n          destination,\n          destinationAddress,\n          fee,\n          isAutomatic,\n          moonApi,\n          moonAsset,\n          bridgeChain,\n          source,\n          sourceAddress,\n          sourceApi,\n        });\n\n        const send = buildSendExtrinsic({\n          asset,\n          destination,\n          destinationAddress,\n          computedOriginAccount,\n          fee,\n          isAutomatic,\n          moonAsset,\n          bridgeChain,\n          moonApi,\n          source,\n          sourceAddress,\n          sourceApi,\n          transact,\n        });\n\n        const transactionsToSend = sendOnlyRemoteExecution\n          ? [send]\n          : [...assetTransferTxs, send];\n\n        return new ExtrinsicConfig({\n          module: 'utility',\n          func: 'batchAll',\n          getArgs: () => [transactionsToSend],\n        });\n      },\n    }),\n  };\n}\n\ninterface HelperFunctionParams extends MrlBuilderParams {\n  computedOriginAccount: string;\n  source: AnyParachain;\n  sourceApi: ApiPromise;\n}\n\nfunction getDestinationMultilocation(\n  source: AnyParachain,\n  bridgeChain: AnyParachain,\n) {\n  const isDifferentEcosystem = source.ecosystem !== bridgeChain.ecosystem;\n\n  if (isDifferentEcosystem) {\n    return {\n      parents: 2,\n      interior: {\n        X2: [\n          { GlobalConsensus: getGlobalConsensus(bridgeChain) },\n          { Parachain: bridgeChain.parachainId },\n        ],\n      },\n    };\n  }\n  return {\n    parents: 1,\n    interior: {\n      X1: { Parachain: bridgeChain.parachainId },\n    },\n  };\n}\n\nexport function buildSendExtrinsic({\n  source,\n  computedOriginAccount,\n  moonAsset,\n  bridgeChain,\n  sourceApi,\n  transact,\n}: HelperFunctionParams) {\n  if (!transact) {\n    throw new Error('Transact params are required');\n  }\n\n  const version = getExtrinsicArgumentVersion(sourceApi.tx.polkadotXcm.send);\n\n  return sourceApi.tx.polkadotXcm.send(\n    {\n      [version]: normalizeX1(\n        version,\n        getDestinationMultilocation(source, bridgeChain),\n      ),\n    },\n    {\n      [version]: [\n        {\n          WithdrawAsset: [\n            {\n              id: normalizeConcrete(\n                version,\n                normalizeX1(version, {\n                  parents: 0,\n                  interior: {\n                    X1: {\n                      PalletInstance: moonAsset.getAssetPalletInstance(),\n                    },\n                  },\n                }),\n              ),\n              fun: { Fungible: BUY_EXECUTION_FEE },\n            },\n          ],\n        },\n        {\n          BuyExecution: {\n            fees: {\n              id: normalizeConcrete(\n                version,\n                normalizeX1(version, {\n                  parents: 0,\n                  interior: {\n                    X1: {\n                      PalletInstance: moonAsset.getAssetPalletInstance(),\n                    },\n                  },\n                }),\n              ),\n              fun: { Fungible: BUY_EXECUTION_FEE },\n            },\n            weightLimit: 'Unlimited',\n          },\n        },\n        {\n          Transact: {\n            originKind: 'SovereignAccount',\n            requireWeightAtMost: {\n              refTime: transact.txWeight.refTime,\n              proofSize: transact.txWeight.proofSize,\n            },\n            call: {\n              encoded: transact.call,\n            },\n          },\n        },\n        {\n          SetAppendix: [\n            { RefundSurplus: {} },\n            {\n              DepositAsset: {\n                assets: { Wild: { AllCounted: 1 } },\n                beneficiary: normalizeX1(version, {\n                  parents: 0,\n                  interior: {\n                    X1: {\n                      AccountKey20: { key: computedOriginAccount },\n                    },\n                  },\n                }),\n              },\n            },\n          ],\n        },\n      ],\n    },\n  );\n}\n\ninterface GetAssetTransferTxsParams extends HelperFunctionParams {\n  transferAssetsPallet?: 'polkadotXcm' | 'xTokens';\n}\n\nfunction getAssetTransferTxs({\n  transferAssetsPallet = 'xTokens',\n  ...params\n}: GetAssetTransferTxsParams): SubmittableExtrinsic<\n  'promise',\n  ISubmittableResult\n>[] {\n  if (transferAssetsPallet === 'xTokens') {\n    return getAssetTransferTxsFromXtokens(params);\n  }\n  if (transferAssetsPallet === 'polkadotXcm') {\n    return getAssetTransferTxsForPolkadotXcm(params);\n  }\n  throw new Error(\n    'Invalid transferAssetsPallet for polkadotXcm().send() function',\n  );\n}\n\nexport function getAssetTransferTxsForPolkadotXcm({\n  asset,\n  computedOriginAccount,\n  moonApi,\n  moonAsset,\n  bridgeChain,\n  source,\n  sourceAddress,\n  sourceApi,\n}: HelperFunctionParams): SubmittableExtrinsic<\n  'promise',\n  ISubmittableResult\n>[] {\n  const { transferAssets } = sourceApi.tx.polkadotXcm;\n  const polkadotXcmBuilder = ExtrinsicBuilder()\n    .polkadotXcm()\n    .transferAssetsToEcosystem()\n    .X4();\n\n  const transferAssetsTx = transferAssets(\n    ...polkadotXcmBuilder\n      .build({\n        asset,\n        destination: bridgeChain,\n        destinationAddress: computedOriginAccount,\n        destinationApi: moonApi,\n        fee: AssetAmount.fromChainAsset(source.getChainAsset(moonAsset), {\n          amount: CROSS_CHAIN_FEE + BUY_EXECUTION_FEE,\n        }),\n        source: source,\n        sourceAddress,\n        sourceApi,\n      })\n      .getArgs(transferAssets),\n  );\n\n  return [transferAssetsTx];\n}\n\nfunction getAssetTransferTxsFromXtokens({\n  asset,\n  computedOriginAccount,\n  fee,\n  moonApi,\n  moonAsset,\n  bridgeChain,\n  source,\n  sourceAddress,\n  sourceApi,\n}: HelperFunctionParams): SubmittableExtrinsic<\n  'promise',\n  ISubmittableResult\n>[] {\n  const transferBuilder = ExtrinsicBuilder().xTokens().transfer();\n  const transferMulticurrenciesBuilder = ExtrinsicBuilder()\n    .xTokens()\n    .transferMultiCurrencies();\n\n  const { transfer, transferMulticurrencies } = sourceApi.tx.xTokens;\n  /**\n   * TODO here we should compare the asset with the cross chain fee asset.\n   * For example, FTM cannot pay for fees in Moonbase while AGNG can, so for FTM we have to send a transferMulticurrencies\n   * This \"if\" is a workaround, change when we implement properly the concept of cross-chain fee (different from bridgeChainFee)\n   */\n  if (asset.isSame(fee)) {\n    const assetTransferTx = transfer(\n      ...transferBuilder\n        .build({\n          asset: asset.copyWith({\n            // TODO for the moment this is only applicable to peaq, AGNG pays for fees and we have to include the cross chain fee\n            // for this we have to add a new concept in the config (Cross Chain Fee), and get the value from there\n            amount: asset.amount + 10n * CROSS_CHAIN_FEE,\n          }),\n          destination: bridgeChain,\n          destinationAddress: computedOriginAccount,\n          destinationApi: moonApi,\n          fee,\n          source: source,\n          sourceAddress,\n          sourceApi,\n        })\n        .getArgs(transfer),\n    );\n    const feeAssetTransferTx = transfer(\n      ...transferBuilder\n        .build({\n          asset: AssetAmount.fromChainAsset(source.getChainAsset(moonAsset), {\n            amount: CROSS_CHAIN_FEE + BUY_EXECUTION_FEE,\n          }),\n          destination: bridgeChain,\n          destinationAddress: computedOriginAccount,\n          destinationApi: moonApi,\n          fee,\n          source: source,\n          sourceAddress,\n          sourceApi,\n        })\n        .getArgs(transfer),\n    );\n    return [assetTransferTx, feeAssetTransferTx];\n  }\n  const multiCurrenciesTransferTx = transferMulticurrencies(\n    ...transferMulticurrenciesBuilder\n      .build({\n        asset,\n        destination: bridgeChain,\n        destinationAddress: computedOriginAccount,\n        destinationApi: moonApi,\n        fee: AssetAmount.fromChainAsset(source.getChainAsset(moonAsset), {\n          amount: CROSS_CHAIN_FEE + BUY_EXECUTION_FEE,\n        }),\n        source: source as AnyParachain,\n        sourceAddress,\n        sourceApi,\n      })\n      .getArgs(transferMulticurrencies),\n  );\n  return [multiCurrenciesTransferTx];\n}\n","export const BATCH_ABI = [\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'index',\n        type: 'uint256',\n      },\n    ],\n    name: 'SubcallFailed',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'index',\n        type: 'uint256',\n      },\n    ],\n    name: 'SubcallSucceeded',\n    type: 'event',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address[]',\n        name: 'to',\n        type: 'address[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'value',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'bytes[]',\n        name: 'callData',\n        type: 'bytes[]',\n      },\n      {\n        internalType: 'uint64[]',\n        name: 'gasLimit',\n        type: 'uint64[]',\n      },\n    ],\n    name: 'batchAll',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address[]',\n        name: 'to',\n        type: 'address[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'value',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'bytes[]',\n        name: 'callData',\n        type: 'bytes[]',\n      },\n      {\n        internalType: 'uint64[]',\n        name: 'gasLimit',\n        type: 'uint64[]',\n      },\n    ],\n    name: 'batchSome',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address[]',\n        name: 'to',\n        type: 'address[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'value',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'bytes[]',\n        name: 'callData',\n        type: 'bytes[]',\n      },\n      {\n        internalType: 'uint64[]',\n        name: 'gasLimit',\n        type: 'uint64[]',\n      },\n    ],\n    name: 'batchSomeUntilFailure',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n] as const;\n","export const XCM_UTILS_ABI = [\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct XcmUtils.Multilocation',\n        name: 'multilocation',\n        type: 'tuple',\n      },\n    ],\n    name: 'getUnitsPerSecond',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: 'unitsPerSecond',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'message',\n        type: 'bytes',\n      },\n    ],\n    name: 'weightMessage',\n    outputs: [\n      {\n        internalType: 'uint64',\n        name: 'weight',\n        type: 'uint64',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'message',\n        type: 'bytes',\n      },\n      {\n        internalType: 'uint64',\n        name: 'maxWeight',\n        type: 'uint64',\n      },\n    ],\n    name: 'xcmExecute',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct XcmUtils.Multilocation',\n        name: 'dest',\n        type: 'tuple',\n      },\n      {\n        internalType: 'bytes',\n        name: 'message',\n        type: 'bytes',\n      },\n    ],\n    name: 'xcmSend',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n] as const;\n","export const XTOKENS_ABI = [\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'currencyAddress',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct Xtokens.Multilocation',\n        name: 'destination',\n        type: 'tuple',\n      },\n      {\n        internalType: 'uint64',\n        name: 'weight',\n        type: 'uint64',\n      },\n    ],\n    name: 'transfer',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            components: [\n              {\n                internalType: 'uint8',\n                name: 'parents',\n                type: 'uint8',\n              },\n              {\n                internalType: 'bytes[]',\n                name: 'interior',\n                type: 'bytes[]',\n              },\n            ],\n            internalType: 'struct Xtokens.Multilocation',\n            name: 'location',\n            type: 'tuple',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct Xtokens.MultiAsset[]',\n        name: 'assets',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'uint32',\n        name: 'feeItem',\n        type: 'uint32',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct Xtokens.Multilocation',\n        name: 'destination',\n        type: 'tuple',\n      },\n      {\n        internalType: 'uint64',\n        name: 'weight',\n        type: 'uint64',\n      },\n    ],\n    name: 'transferMultiAssets',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'address',\n            name: 'currencyAddress',\n            type: 'address',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct Xtokens.Currency[]',\n        name: 'currencies',\n        type: 'tuple[]',\n      },\n      {\n        internalType: 'uint32',\n        name: 'feeItem',\n        type: 'uint32',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct Xtokens.Multilocation',\n        name: 'destination',\n        type: 'tuple',\n      },\n      {\n        internalType: 'uint64',\n        name: 'weight',\n        type: 'uint64',\n      },\n    ],\n    name: 'transferMultiCurrencies',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct Xtokens.Multilocation',\n        name: 'asset',\n        type: 'tuple',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct Xtokens.Multilocation',\n        name: 'destination',\n        type: 'tuple',\n      },\n      {\n        internalType: 'uint64',\n        name: 'weight',\n        type: 'uint64',\n      },\n    ],\n    name: 'transferMultiasset',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct Xtokens.Multilocation',\n        name: 'asset',\n        type: 'tuple',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'fee',\n        type: 'uint256',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct Xtokens.Multilocation',\n        name: 'destination',\n        type: 'tuple',\n      },\n      {\n        internalType: 'uint64',\n        name: 'weight',\n        type: 'uint64',\n      },\n    ],\n    name: 'transferMultiassetWithFee',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'currencyAddress',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'fee',\n        type: 'uint256',\n      },\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'parents',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes[]',\n            name: 'interior',\n            type: 'bytes[]',\n          },\n        ],\n        internalType: 'struct Xtokens.Multilocation',\n        name: 'destination',\n        type: 'tuple',\n      },\n      {\n        internalType: 'uint64',\n        name: 'weight',\n        type: 'uint64',\n      },\n    ],\n    name: 'transferWithFee',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n] as const;\n","import type { EvmParachain } from '@moonbeam-network/xcm-types';\nimport { BATCH_ABI } from './BatchContractAbi';\nimport { XCM_UTILS_ABI } from './XcmUtilsContractAbi';\nimport { XTOKENS_ABI } from './XtokensContractAbi';\n\nexport function getAbisForChain(_: EvmParachain) {\n  // TODO when we add more chains, find a way to handle Abis for the different chains, if the Abis differ\n\n  return {\n    BatchAbi: BATCH_ABI,\n    XcmUtilsAbi: XCM_UTILS_ABI,\n    XtokensAbi: XTOKENS_ABI,\n  };\n}\n","import { u8aToHex } from '@polkadot/util';\nimport { ContractConfig } from '../../../../../contract';\nimport type { MrlExecuteConfigBuilder } from '../../../../MrlBuilder.interfaces';\nimport { GMP_ABI } from './GmpAbi';\n\nconst module = 'GMP';\n\nexport const GMP_CONTRACT_ADDRESS =\n  '0x0000000000000000000000000000000000000816';\n\nexport function Gmp() {\n  return {\n    wormholeTransferERC20: (): MrlExecuteConfigBuilder => ({\n      build: ({ bytes }) => {\n        const hex = u8aToHex(bytes);\n\n        return new ContractConfig({\n          address: GMP_CONTRACT_ADDRESS,\n          abi: GMP_ABI,\n          args: [hex],\n          func: 'wormholeTransferERC20',\n          module,\n        });\n      },\n    }),\n  };\n}\n","export const GMP_ABI = [\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'vaa',\n        type: 'bytes',\n      },\n    ],\n    name: 'wormholeTransferERC20',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n] as const;\n","import { convertAddressTo32Bytes } from '@moonbeam-network/xcm-utils';\nimport type { Address } from 'viem';\nimport { ContractConfig } from '../../../../../contract';\nimport {\n  type MrlConfigBuilder,\n  Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport { wormholeFactory } from '../../wormhole';\nimport { TOKEN_BRIDGE_ABI } from './TokenBridgeAbi';\n\nconst module = 'TokenBridge';\n\nexport function TokenBridge() {\n  const provider = Provider.Wormhole;\n\n  return {\n    transferTokens: (): MrlConfigBuilder => ({\n      provider,\n      build: ({ asset, destination, destinationAddress, bridgeChain }) => {\n        const wh = wormholeFactory(bridgeChain);\n        const whDestination = wh.getChain(destination.getWormholeName()).config\n          .chainId;\n\n        const tokenAddressOnBridgeChain = bridgeChain.getChainAsset(asset)\n          .address as Address | undefined;\n\n        if (!tokenAddressOnBridgeChain) {\n          throw new Error(\n            `Asset ${asset.symbol} does not have a token address on chain ${bridgeChain.name}`,\n          );\n        }\n\n        const destinationAddress32bytes = convertAddressTo32Bytes(\n          destinationAddress,\n        ) as Address;\n        const tokenAmountOnBridgeChain = asset.convertDecimals(\n          bridgeChain.getChainAsset(asset).decimals,\n        ).amount;\n\n        const contractAddress =\n          wh.getChain('Moonbeam').config.contracts.tokenBridge;\n\n        if (!contractAddress) {\n          throw new Error(`Wormhole address not found for ${bridgeChain.name}`);\n        }\n\n        return new ContractConfig({\n          address: contractAddress,\n          abi: TOKEN_BRIDGE_ABI,\n          args: [\n            tokenAddressOnBridgeChain,\n            tokenAmountOnBridgeChain,\n            whDestination,\n            destinationAddress32bytes,\n            0n,\n            0,\n          ],\n          func: 'transferTokens',\n          module,\n        });\n      },\n    }),\n  };\n}\n","import type {\n  ChainAddress,\n  TokenId,\n  TokenTransfer,\n} from '@wormhole-foundation/sdk-connect';\nimport { Provider } from '../../../MrlBuilder.interfaces';\n\nexport enum Protocols {\n  TokenBridge = 'TokenBridge',\n  AutomaticTokenBridge = 'AutomaticTokenBridge',\n  ExecutorTokenBridge = 'ExecutorTokenBridge',\n}\n\nexport type WormholeTransferFunctions = 'tokenTransfer';\n\nexport interface WormholeFunctionArgs {\n  token: TokenId;\n  amount: bigint;\n  from: ChainAddress;\n  to: ChainAddress;\n  protocol: TokenTransfer.Protocol;\n  payload?: Uint8Array;\n}\n\nexport interface WormholeConfigConstructorParams {\n  args: WormholeFunctionArgs;\n  func: WormholeTransferFunctions;\n}\n\nexport class WormholeConfig {\n  readonly args: WormholeFunctionArgs;\n\n  readonly func: WormholeTransferFunctions;\n\n  readonly provider = Provider.Wormhole;\n\n  static is(obj: unknown): obj is WormholeConfig {\n    return obj instanceof WormholeConfig;\n  }\n\n  constructor({ args, func }: WormholeConfigConstructorParams) {\n    this.args = args;\n    this.func = func;\n  }\n}\n","import { EvmChain, EvmParachain, Parachain } from '@moonbeam-network/xcm-types';\nimport { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils';\nimport { evmToAddress } from '@polkadot/util-crypto/address';\nimport { Wormhole } from '@wormhole-foundation/sdk-connect';\nimport {\n  getExtrinsicAccount,\n  getExtrinsicArgumentVersion,\n} from '../../../../extrinsic/ExtrinsicBuilder.utils';\nimport { getGlobalConsensus } from '../../../../extrinsic/pallets/polkadotXcm/polkadotXcm.util';\nimport {\n  type MrlBuilderParams,\n  type MrlConfigBuilder,\n  Provider,\n} from '../../../MrlBuilder.interfaces';\nimport { GMP_CONTRACT_ADDRESS } from '../contract/Gmp';\nimport { Protocols, WormholeConfig } from './WormholeConfig';\nimport { wormholeFactory } from './wormholeFactory';\n\nexport function wormhole() {\n  const provider = Provider.Wormhole;\n\n  return {\n    tokenTransfer: (): MrlConfigBuilder => ({\n      provider,\n      build: ({\n        asset,\n        destination,\n        destinationAddress,\n        isAutomatic,\n        moonApi,\n        bridgeChain,\n        source,\n        sourceAddress,\n      }): WormholeConfig => {\n        const isSourceParachain = Parachain.is(source);\n        const isDestinationMoonChain = destination.isEqual(bridgeChain);\n        const isDestinationEvmChain = EvmChain.is(destination);\n        const isNativeAsset = asset.isSame(\n          isDestinationEvmChain ? bridgeChain.nativeAsset : source.nativeAsset,\n        );\n        const tokenAddress = isNativeAsset\n          ? 'native'\n          : isDestinationEvmChain\n            ? bridgeChain.getChainAsset(asset).address\n            : asset.address;\n\n        const { address20: computedOriginAccount } =\n          getMultilocationDerivedAddresses({\n            address: sourceAddress,\n            paraId: isSourceParachain ? source.parachainId : undefined,\n            parents: 1,\n          });\n\n        if (!tokenAddress) {\n          throw new Error(`Asset ${asset.key} has no address`);\n        }\n\n        const wh = wormholeFactory(source);\n        const whSource = isDestinationEvmChain\n          ? wh.getChain(bridgeChain.getWormholeName())\n          : wh.getChain(source.getWormholeName());\n        const whDestination = isDestinationEvmChain\n          ? wh.getChain(destination.getWormholeName())\n          : wh.getChain(bridgeChain.getWormholeName());\n        const whAsset = Wormhole.tokenId(whSource.chain, tokenAddress);\n        const whSourceAddress = Wormhole.chainAddress(\n          whSource.chain,\n          isDestinationEvmChain ? computedOriginAccount : sourceAddress,\n        );\n        const whDestinationAddress = Wormhole.chainAddress(\n          whDestination.chain,\n          isDestinationMoonChain || isDestinationEvmChain\n            ? destinationAddress\n            : GMP_CONTRACT_ADDRESS,\n        );\n\n        return new WormholeConfig({\n          args: {\n            token: whAsset,\n            amount: asset.amount,\n            from: whSourceAddress,\n            to: whDestinationAddress,\n            protocol: isAutomatic\n              ? Protocols.AutomaticTokenBridge\n              : Protocols.TokenBridge,\n            payload:\n              isDestinationMoonChain || isDestinationEvmChain\n                ? undefined\n                : getPayload({\n                    destination,\n                    destinationAddress,\n                    moonApi,\n                    bridgeChain,\n                  }),\n          },\n          func: 'tokenTransfer',\n        });\n      },\n    }),\n  };\n}\n\n/*\n * Extrinsic to GMP precompile\n * https://docs.moonbeam.network/builders/ethereum/precompiles/interoperability/gmp/\n */\nexport function getPayload({\n  moonApi,\n  destination,\n  destinationAddress,\n  bridgeChain,\n}: Pick<\n  MrlBuilderParams,\n  'destination' | 'destinationAddress' | 'moonApi' | 'bridgeChain'\n>): Uint8Array | undefined {\n  const destinationMultilocation = getDestinationMultilocation({\n    destination,\n    destinationAddress,\n    moonApi,\n    bridgeChain,\n  });\n\n  const action = moonApi.createType('XcmRoutingUserAction', {\n    destination: destinationMultilocation,\n  });\n  const versioned = moonApi.createType('VersionedUserAction', {\n    V1: action,\n  });\n\n  return versioned.toU8a();\n}\n\nexport function getDestinationMultilocation({\n  moonApi,\n  destination,\n  destinationAddress,\n  bridgeChain,\n}: Pick<\n  MrlBuilderParams,\n  'destination' | 'destinationAddress' | 'moonApi' | 'bridgeChain'\n>) {\n  if (!EvmParachain.isAnyParachain(destination)) {\n    throw new Error(\n      `Destination ${destination.name} is not a Parachain or EvmParachain`,\n    );\n  }\n\n  const version = getExtrinsicArgumentVersion(moonApi.tx.polkadotXcm.send);\n  const isDifferentEcosystem = destination.ecosystem !== bridgeChain.ecosystem;\n\n  const isEvmDestination = EvmParachain.is(destination);\n\n  if (isDifferentEcosystem) {\n    return moonApi.createType('XcmVersionedLocation', {\n      [version]: {\n        parents: 2,\n        interior: {\n          X3: [\n            {\n              GlobalConsensus: getGlobalConsensus(destination),\n            },\n            {\n              Parachain: destination.parachainId,\n            },\n            getExtrinsicAccount(destinationAddress),\n          ],\n        },\n      },\n    });\n  }\n\n  return moonApi.createType('XcmVersionedLocation', {\n    [version]: {\n      parents: 1,\n      interior: {\n        X2: [\n          {\n            Parachain: destination.parachainId,\n          },\n          getExtrinsicAccount(\n            isEvmDestination\n              ? evmToAddress(destinationAddress)\n              : destinationAddress,\n          ),\n        ],\n      },\n    },\n  });\n}\n","import { type AnyChain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { Wormhole } from '@wormhole-foundation/sdk-connect';\nimport { EvmPlatform } from '@wormhole-foundation/sdk-evm';\n\nexport function wormholeFactory(chain: AnyChain) {\n  return new Wormhole(\n    chain.isTestChain ? 'Testnet' : 'Mainnet',\n    [EvmPlatform],\n    EvmParachain.isAnyEvmChain(chain) && chain.wh\n      ? {\n          chains: {\n            [chain.wh.name as string]: {\n              rpc: chain.rpc,\n            },\n          },\n        }\n      : undefined,\n  );\n}\n","export const TOKEN_BRIDGE_ABI = [\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'address',\n        name: 'previousAdmin',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'address',\n        name: 'newAdmin',\n        type: 'address',\n      },\n    ],\n    name: 'AdminChanged',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'beacon',\n        type: 'address',\n      },\n    ],\n    name: 'BeaconUpgraded',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'oldContract',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'newContract',\n        type: 'address',\n      },\n    ],\n    name: 'ContractUpgraded',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'implementation',\n        type: 'address',\n      },\n    ],\n    name: 'Upgraded',\n    type: 'event',\n  },\n  {\n    inputs: [],\n    name: 'WETH',\n    outputs: [\n      {\n        internalType: 'contract IWETH',\n        name: '',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint16',\n        name: 'chainId_',\n        type: 'uint16',\n      },\n    ],\n    name: 'bridgeContracts',\n    outputs: [\n      {\n        internalType: 'bytes32',\n        name: '',\n        type: 'bytes32',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'chainId',\n    outputs: [\n      {\n        internalType: 'uint16',\n        name: '',\n        type: 'uint16',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'evmChainId',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'finality',\n    outputs: [\n      {\n        internalType: 'uint8',\n        name: '',\n        type: 'uint8',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes32',\n        name: 'hash',\n        type: 'bytes32',\n      },\n    ],\n    name: 'governanceActionIsConsumed',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'governanceChainId',\n    outputs: [\n      {\n        internalType: 'uint16',\n        name: '',\n        type: 'uint16',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'governanceContract',\n    outputs: [\n      {\n        internalType: 'bytes32',\n        name: '',\n        type: 'bytes32',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'isFork',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'impl',\n        type: 'address',\n      },\n    ],\n    name: 'isInitialized',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes32',\n        name: 'hash',\n        type: 'bytes32',\n      },\n    ],\n    name: 'isTransferCompleted',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n    ],\n    name: 'isWrappedAsset',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n    ],\n    name: 'outstandingBridged',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encodedRecoverChainId',\n        type: 'bytes',\n      },\n    ],\n    name: 'parseRecoverChainId',\n    outputs: [\n      {\n        components: [\n          {\n            internalType: 'bytes32',\n            name: 'module',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint8',\n            name: 'action',\n            type: 'uint8',\n          },\n          {\n            internalType: 'uint256',\n            name: 'evmChainId',\n            type: 'uint256',\n          },\n          {\n            internalType: 'uint16',\n            name: 'newChainId',\n            type: 'uint16',\n          },\n        ],\n        internalType: 'struct BridgeStructs.RecoverChainId',\n        name: 'rci',\n        type: 'tuple',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encoded',\n        type: 'bytes',\n      },\n    ],\n    name: 'parseRegisterChain',\n    outputs: [\n      {\n        components: [\n          {\n            internalType: 'bytes32',\n            name: 'module',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint8',\n            name: 'action',\n            type: 'uint8',\n          },\n          {\n            internalType: 'uint16',\n            name: 'chainId',\n            type: 'uint16',\n          },\n          {\n            internalType: 'uint16',\n            name: 'emitterChainID',\n            type: 'uint16',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'emitterAddress',\n            type: 'bytes32',\n          },\n        ],\n        internalType: 'struct BridgeStructs.RegisterChain',\n        name: 'chain',\n        type: 'tuple',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encoded',\n        type: 'bytes',\n      },\n    ],\n    name: 'parseUpgrade',\n    outputs: [\n      {\n        components: [\n          {\n            internalType: 'bytes32',\n            name: 'module',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint8',\n            name: 'action',\n            type: 'uint8',\n          },\n          {\n            internalType: 'uint16',\n            name: 'chainId',\n            type: 'uint16',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'newContract',\n            type: 'bytes32',\n          },\n        ],\n        internalType: 'struct BridgeStructs.UpgradeContract',\n        name: 'chain',\n        type: 'tuple',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encodedVM',\n        type: 'bytes',\n      },\n    ],\n    name: 'registerChain',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encodedVM',\n        type: 'bytes',\n      },\n    ],\n    name: 'submitRecoverChainId',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'tokenImplementation',\n    outputs: [\n      {\n        internalType: 'address',\n        name: '',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encodedVM',\n        type: 'bytes',\n      },\n    ],\n    name: 'upgrade',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'wormhole',\n    outputs: [\n      {\n        internalType: 'contract IWormhole',\n        name: '',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint16',\n        name: 'tokenChainId',\n        type: 'uint16',\n      },\n      {\n        internalType: 'bytes32',\n        name: 'tokenAddress',\n        type: 'bytes32',\n      },\n    ],\n    name: 'wrappedAsset',\n    outputs: [\n      {\n        internalType: 'address',\n        name: '',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    stateMutability: 'payable',\n    type: 'receive',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'tokenAddress',\n        type: 'address',\n      },\n      {\n        internalType: 'uint32',\n        name: 'nonce',\n        type: 'uint32',\n      },\n    ],\n    name: 'attestToken',\n    outputs: [\n      {\n        internalType: 'uint64',\n        name: 'sequence',\n        type: 'uint64',\n      },\n    ],\n    stateMutability: 'payable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint16',\n        name: 'recipientChain',\n        type: 'uint16',\n      },\n      {\n        internalType: 'bytes32',\n        name: 'recipient',\n        type: 'bytes32',\n      },\n      {\n        internalType: 'uint256',\n        name: 'arbiterFee',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint32',\n        name: 'nonce',\n        type: 'uint32',\n      },\n    ],\n    name: 'wrapAndTransferETH',\n    outputs: [\n      {\n        internalType: 'uint64',\n        name: 'sequence',\n        type: 'uint64',\n      },\n    ],\n    stateMutability: 'payable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint16',\n        name: 'recipientChain',\n        type: 'uint16',\n      },\n      {\n        internalType: 'bytes32',\n        name: 'recipient',\n        type: 'bytes32',\n      },\n      {\n        internalType: 'uint32',\n        name: 'nonce',\n        type: 'uint32',\n      },\n      {\n        internalType: 'bytes',\n        name: 'payload',\n        type: 'bytes',\n      },\n    ],\n    name: 'wrapAndTransferETHWithPayload',\n    outputs: [\n      {\n        internalType: 'uint64',\n        name: 'sequence',\n        type: 'uint64',\n      },\n    ],\n    stateMutability: 'payable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint16',\n        name: 'recipientChain',\n        type: 'uint16',\n      },\n      {\n        internalType: 'bytes32',\n        name: 'recipient',\n        type: 'bytes32',\n      },\n      {\n        internalType: 'uint256',\n        name: 'arbiterFee',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint32',\n        name: 'nonce',\n        type: 'uint32',\n      },\n    ],\n    name: 'transferTokens',\n    outputs: [\n      {\n        internalType: 'uint64',\n        name: 'sequence',\n        type: 'uint64',\n      },\n    ],\n    stateMutability: 'payable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint16',\n        name: 'recipientChain',\n        type: 'uint16',\n      },\n      {\n        internalType: 'bytes32',\n        name: 'recipient',\n        type: 'bytes32',\n      },\n      {\n        internalType: 'uint32',\n        name: 'nonce',\n        type: 'uint32',\n      },\n      {\n        internalType: 'bytes',\n        name: 'payload',\n        type: 'bytes',\n      },\n    ],\n    name: 'transferTokensWithPayload',\n    outputs: [\n      {\n        internalType: 'uint64',\n        name: 'sequence',\n        type: 'uint64',\n      },\n    ],\n    stateMutability: 'payable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encodedVm',\n        type: 'bytes',\n      },\n    ],\n    name: 'updateWrapped',\n    outputs: [\n      {\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encodedVm',\n        type: 'bytes',\n      },\n    ],\n    name: 'createWrapped',\n    outputs: [\n      {\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encodedVm',\n        type: 'bytes',\n      },\n    ],\n    name: 'completeTransferWithPayload',\n    outputs: [\n      {\n        internalType: 'bytes',\n        name: '',\n        type: 'bytes',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encodedVm',\n        type: 'bytes',\n      },\n    ],\n    name: 'completeTransferAndUnwrapETHWithPayload',\n    outputs: [\n      {\n        internalType: 'bytes',\n        name: '',\n        type: 'bytes',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encodedVm',\n        type: 'bytes',\n      },\n    ],\n    name: 'completeTransfer',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encodedVm',\n        type: 'bytes',\n      },\n    ],\n    name: 'completeTransferAndUnwrapETH',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'payloadID',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'tokenAddress',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'tokenChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'uint8',\n            name: 'decimals',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'symbol',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'name',\n            type: 'bytes32',\n          },\n        ],\n        internalType: 'struct BridgeStructs.AssetMeta',\n        name: 'meta',\n        type: 'tuple',\n      },\n    ],\n    name: 'encodeAssetMeta',\n    outputs: [\n      {\n        internalType: 'bytes',\n        name: 'encoded',\n        type: 'bytes',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'payloadID',\n            type: 'uint8',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'tokenAddress',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'tokenChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'to',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'toChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'uint256',\n            name: 'fee',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct BridgeStructs.Transfer',\n        name: 'transfer',\n        type: 'tuple',\n      },\n    ],\n    name: 'encodeTransfer',\n    outputs: [\n      {\n        internalType: 'bytes',\n        name: 'encoded',\n        type: 'bytes',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'payloadID',\n            type: 'uint8',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'tokenAddress',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'tokenChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'to',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'toChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'fromAddress',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'bytes',\n            name: 'payload',\n            type: 'bytes',\n          },\n        ],\n        internalType: 'struct BridgeStructs.TransferWithPayload',\n        name: 'transfer',\n        type: 'tuple',\n      },\n    ],\n    name: 'encodeTransferWithPayload',\n    outputs: [\n      {\n        internalType: 'bytes',\n        name: 'encoded',\n        type: 'bytes',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encoded',\n        type: 'bytes',\n      },\n    ],\n    name: 'parsePayloadID',\n    outputs: [\n      {\n        internalType: 'uint8',\n        name: 'payloadID',\n        type: 'uint8',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encoded',\n        type: 'bytes',\n      },\n    ],\n    name: 'parseAssetMeta',\n    outputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'payloadID',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'tokenAddress',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'tokenChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'uint8',\n            name: 'decimals',\n            type: 'uint8',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'symbol',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'name',\n            type: 'bytes32',\n          },\n        ],\n        internalType: 'struct BridgeStructs.AssetMeta',\n        name: 'meta',\n        type: 'tuple',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encoded',\n        type: 'bytes',\n      },\n    ],\n    name: 'parseTransfer',\n    outputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'payloadID',\n            type: 'uint8',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'tokenAddress',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'tokenChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'to',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'toChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'uint256',\n            name: 'fee',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct BridgeStructs.Transfer',\n        name: 'transfer',\n        type: 'tuple',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encoded',\n        type: 'bytes',\n      },\n    ],\n    name: 'parseTransferWithPayload',\n    outputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'payloadID',\n            type: 'uint8',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'tokenAddress',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'tokenChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'to',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'toChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'fromAddress',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'bytes',\n            name: 'payload',\n            type: 'bytes',\n          },\n        ],\n        internalType: 'struct BridgeStructs.TransferWithPayload',\n        name: 'transfer',\n        type: 'tuple',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes',\n        name: 'encoded',\n        type: 'bytes',\n      },\n    ],\n    name: '_parseTransferCommon',\n    outputs: [\n      {\n        components: [\n          {\n            internalType: 'uint8',\n            name: 'payloadID',\n            type: 'uint8',\n          },\n          {\n            internalType: 'uint256',\n            name: 'amount',\n            type: 'uint256',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'tokenAddress',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'tokenChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'bytes32',\n            name: 'to',\n            type: 'bytes32',\n          },\n          {\n            internalType: 'uint16',\n            name: 'toChain',\n            type: 'uint16',\n          },\n          {\n            internalType: 'uint256',\n            name: 'fee',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct BridgeStructs.Transfer',\n        name: 'transfer',\n        type: 'tuple',\n      },\n    ],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n] as const;\n","import { convertAddressTo32Bytes } from '@moonbeam-network/xcm-utils';\nimport type { Address } from 'viem';\nimport { ContractConfig } from '../../../../../contract';\nimport {\n  type MrlConfigBuilder,\n  Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport { wormholeFactory } from '../../wormhole';\nimport { TOKEN_BRIDGE_RELAYER_ABI } from './TokenBridgeRelayerAbi';\n\nconst module = 'TokenBridgeRelayer';\n\nexport function TokenBridgeRelayer() {\n  const provider = Provider.Wormhole;\n\n  return {\n    transferTokensWithRelay: (): MrlConfigBuilder => ({\n      provider,\n      build: ({ asset, destination, destinationAddress, bridgeChain }) => {\n        const wh = wormholeFactory(bridgeChain);\n        const whDestination = wh.getChain(destination.getWormholeName()).config\n          .chainId;\n\n        const tokenAddressOnBridgeChain = bridgeChain.getChainAsset(asset)\n          .address as Address | undefined;\n\n        if (!tokenAddressOnBridgeChain) {\n          throw new Error(\n            `Asset ${asset.symbol} does not have a token address on chain ${bridgeChain.name}`,\n          );\n        }\n\n        const destinationAddress32bytes = convertAddressTo32Bytes(\n          destinationAddress,\n        ) as Address;\n        const tokenAmountOnBridgeChain = asset.convertDecimals(\n          bridgeChain.getChainAsset(asset).decimals,\n        ).amount;\n\n        const contractAddress =\n          wh.getChain('Moonbeam').config.contracts.tokenBridgeRelayer;\n\n        if (!contractAddress) {\n          throw new Error(`Wormhole address not found for ${bridgeChain.name}`);\n        }\n\n        return new ContractConfig({\n          address: contractAddress,\n          abi: TOKEN_BRIDGE_RELAYER_ABI,\n          args: [\n            tokenAddressOnBridgeChain,\n            tokenAmountOnBridgeChain,\n            0,\n            whDestination,\n            destinationAddress32bytes,\n            0,\n          ],\n          func: 'transferTokensWithRelay',\n          module,\n        });\n      },\n    }),\n  };\n}\n","export const TOKEN_BRIDGE_RELAYER_ABI = [\n  {\n    inputs: [\n      {\n        internalType: 'uint16',\n        name: 'targetChainId',\n        type: 'uint16',\n      },\n      {\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n      {\n        internalType: 'uint8',\n        name: 'decimals',\n        type: 'uint8',\n      },\n    ],\n    name: 'calculateRelayerFee',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: 'feeInTokenDenomination',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'token',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'toNativeTokenAmount',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint16',\n        name: 'targetChain',\n        type: 'uint16',\n      },\n      {\n        internalType: 'bytes32',\n        name: 'targetRecipient',\n        type: 'bytes32',\n      },\n      {\n        internalType: 'uint32',\n        name: 'batchId',\n        type: 'uint32',\n      },\n    ],\n    name: 'transferTokensWithRelay',\n    outputs: [\n      {\n        internalType: 'uint64',\n        name: 'messageSequence',\n        type: 'uint64',\n      },\n    ],\n    stateMutability: 'payable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint256',\n        name: 'toNativeTokenAmount',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint16',\n        name: 'targetChain',\n        type: 'uint16',\n      },\n      {\n        internalType: 'bytes32',\n        name: 'targetRecipient',\n        type: 'bytes32',\n      },\n      {\n        internalType: 'uint32',\n        name: 'batchId',\n        type: 'uint32',\n      },\n    ],\n    name: 'wrapAndTransferEthWithRelay',\n    outputs: [\n      {\n        internalType: 'uint64',\n        name: 'messageSequence',\n        type: 'uint64',\n      },\n    ],\n    stateMutability: 'payable',\n    type: 'function',\n  },\n] as const;\n","import { Batch } from './Batch';\nimport { Gmp } from './Gmp';\nimport { TokenBridge } from './TokenBridge';\nimport { TokenBridgeRelayer } from './TokenBridgeRelayer';\n\nexport function contract() {\n  return { Batch, Gmp, TokenBridge, TokenBridgeRelayer };\n}\n","import { type Address, encodeFunctionData } from 'viem';\nimport { ERC20_ABI } from '../../../../../balance/Erc20Abi';\nimport type { ContractConfig } from '../../../../../types/evm/ContractConfig';\nimport { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig';\nimport { BATCH_CONTRACT_ADDRESS } from '../../../../MrlBuilder.constants';\nimport {\n  type MrlConfigBuilder,\n  Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport { contract as ContractBuilder } from '../../contract';\nimport { BATCH_CONTRACT_ABI } from './BatchContractAbi';\n\nexport function ethereumXcm() {\n  const provider = Provider.Wormhole;\n\n  return {\n    transact: (): MrlConfigBuilder => ({\n      provider,\n      build: (params) => {\n        const { asset, isAutomatic, bridgeChain, bridgeChainGasLimit } = params;\n\n        if (!bridgeChainGasLimit) {\n          throw new Error('bridgeChainGasLimit must be defined');\n        }\n\n        const tokenAddressOnBridgeChain = bridgeChain.getChainAsset(asset)\n          .address as Address | undefined;\n\n        if (!tokenAddressOnBridgeChain) {\n          throw new Error(\n            `Asset ${asset.symbol} does not have a token address on chain ${bridgeChain.name}`,\n          );\n        }\n\n        const tokenAmountOnBridgeChain = asset.convertDecimals(\n          bridgeChain.getChainAsset(asset).decimals,\n        ).amount;\n\n        const contract = (\n          isAutomatic\n            ? ContractBuilder()\n                .TokenBridgeRelayer()\n                .transferTokensWithRelay()\n                .build(params)\n            : ContractBuilder().TokenBridge().transferTokens().build(params)\n        ) as ContractConfig;\n\n        const approveTx = encodeFunctionData({\n          abi: ERC20_ABI,\n          functionName: 'approve',\n          args: [contract.address as Address, tokenAmountOnBridgeChain],\n        });\n\n        const batchAll = encodeFunctionData({\n          abi: BATCH_CONTRACT_ABI,\n          functionName: 'batchAll',\n          args: [\n            [tokenAddressOnBridgeChain, contract.address as Address],\n            [0n, 0n], // Value to send for each call\n            [approveTx, contract.encodeFunctionData()], // Call data for each call\n            [], // Gas limit for each call\n          ],\n        });\n\n        return new ExtrinsicConfig({\n          module: 'ethereumXcm',\n          func: 'transact',\n          getArgs: () => [\n            {\n              V2: {\n                gasLimit: bridgeChainGasLimit,\n                action: {\n                  Call: BATCH_CONTRACT_ADDRESS,\n                },\n                value: 0,\n                input: batchAll,\n              },\n            },\n          ],\n        });\n      },\n    }),\n  };\n}\n","export const BATCH_CONTRACT_ADDRESS =\n  '0x0000000000000000000000000000000000000808';\n","export const BATCH_CONTRACT_ABI = [\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'index',\n        type: 'uint256',\n      },\n    ],\n    name: 'SubcallFailed',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'index',\n        type: 'uint256',\n      },\n    ],\n    name: 'SubcallSucceeded',\n    type: 'event',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address[]',\n        name: 'to',\n        type: 'address[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'value',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'bytes[]',\n        name: 'callData',\n        type: 'bytes[]',\n      },\n      {\n        internalType: 'uint64[]',\n        name: 'gasLimit',\n        type: 'uint64[]',\n      },\n    ],\n    name: 'batchAll',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address[]',\n        name: 'to',\n        type: 'address[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'value',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'bytes[]',\n        name: 'callData',\n        type: 'bytes[]',\n      },\n      {\n        internalType: 'uint64[]',\n        name: 'gasLimit',\n        type: 'uint64[]',\n      },\n    ],\n    name: 'batchSome',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address[]',\n        name: 'to',\n        type: 'address[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'value',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'bytes[]',\n        name: 'callData',\n        type: 'bytes[]',\n      },\n      {\n        internalType: 'uint64[]',\n        name: 'gasLimit',\n        type: 'uint64[]',\n      },\n    ],\n    name: 'batchSomeUntilFailure',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n] as const;\n","import { ethereumXcm } from './ethereumXcm/ethereumXcm';\nimport { polkadotXcm } from './polkadotXcm/polkadotXcm';\n\nexport function extrinsic() {\n  return { ethereumXcm, polkadotXcm };\n}\n","import { contract } from './contract';\nimport { extrinsic } from './extrinsic';\nimport { wormhole as whBuilder } from './wormhole';\n\nexport * from './extrinsic/ethereumXcm/BatchContractAbi';\nexport * from './wormhole/WormholeConfig';\nexport * from './wormhole/wormholeFactory';\n\nexport function wormhole() {\n  return {\n    contract,\n    extrinsic,\n    wormhole: whBuilder,\n  };\n}\n","import { snowbridge } from './providers/snowbridge';\nimport { wormhole } from './providers/wormhole';\n\nexport function MrlBuilder() {\n  return {\n    snowbridge,\n    wormhole,\n  };\n}\n"],"mappings":";AAAA,OAAO;;;ACAP,SAAS,oBAAoB;AAE7B,SAAS,kBAAkB;AAE3B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;;;ACAvB,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,YAAA,QAAK;AACL,EAAAA,YAAA,QAAK;AACL,EAAAA,YAAA,QAAK;AACL,EAAAA,YAAA,QAAK;AACL,EAAAA,YAAA,QAAK;AALK,SAAAA;AAAA,GAAA;;;ADGL,SAAS,4BACd,MACA,QAAQ,GACI;AACZ,MAAI,CAAC,KAAM;AAEX,QAAM,EAAE,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK;AACrC,QAAM,WAAW,KAAK,KAAK,SAAS,WAAW,KAAK,SAAS,CAAC;AAC9D,QAAM,MAAM,WAAW,UAAU,UAAU,CAAC;AAE5C,MAAI,CAAC,IAAI,KAAK;AACZ;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,QAAQ,IAAI,GAAG,IAClC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IACzB,CAAC,IAAI,IAAI,IAAI;AAEjB,MAAI,SAAS,sBAAsB,GAAG;AACpC;AAAA,EACF;AAEA,MAAI,SAAS,sBAAsB,GAAG;AACpC;AAAA,EACF;AAEA,MAAI,SAAS,sBAAsB,GAAG;AACpC;AAAA,EACF;AAEA,MAAI,SAAS,sBAAsB,GAAG;AACpC;AAAA,EACF;AAEA,MAAI,SAAS,sBAAsB,GAAG;AACpC;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,wBAAwB;AAC1C;AAEO,SAAS,oBAAoB,SAAiB;AACnD,SAAO,aAAa,OAAO,IACvB;AAAA,IACE,cAAc;AAAA,MACZ,KAAK;AAAA,IACP;AAAA,EACF,IACA;AAAA,IACE,aAAa;AAAA,MACX,IAAI,SAAS,cAAc,OAAO,CAAC;AAAA,MACnC,SAAS;AAAA,IACX;AAAA,EACF;AACN;AAEO,SAAS,QAAQ,YAAiC;AACvD,SAAO;AACT;AAEO,SAAS,YACd,YACA,iBACA;AACA,MAAI,CAAC,QAAQ,UAAU,EAAG,QAAO;AAEjC,QAAM,mBAAmB,EAAE,GAAG,gBAAgB;AAC9C,QAAM,WAAW,iBAAiB;AAElC,MAAI,QAAQ,YAAY,UAAU,MAAM,CAAC,MAAM,QAAQ,SAAS,EAAE,GAAG;AACnE,aAAS,KAAK,CAAC,SAAS,EAAE;AAAA,EAC5B,WAAW,QAAQ,YAAY,UAAU,MAAM,CAAC,MAAM,QAAQ,SAAS,EAAE,GAAG;AAC1E,aAAS,KAAK,CAAC,SAAS,EAAE;AAAA,EAC5B;AAEA,SAAO;AACT;AAEO,SAAS,kBACd,YACA,iBACA;AACA,SAAO,QAAQ,UAAU,IACrB,kBACA,qBAAqB,eAAe;AAC1C;AAEO,SAAS,qBAAqB,iBAAyB;AAC5D,SAAO;AAAA,IACL,UAAU,EAAE,GAAG,gBAAgB;AAAA,EACjC;AACF;;;AE9FO,IAAM,aAAN,MAAiB;AAAA,EACb;AAAA,EAEA;AAAA,EAET,YAAY,EAAE,QAAAC,SAAQ,KAAK,GAAgC;AACzD,SAAK,SAASA;AACd,SAAK,OAAO;AAAA,EACd;AACF;;;ACFO,IAAM,uBAAN,MAAM,8BAA6B,WAAW;AAAA,EAC1C;AAAA,EAEA;AAAA,EAEA;AAAA,EAET,OAAO,GAAG,KAA2C;AACnD,WAAO,eAAe;AAAA,EACxB;AAAA,EAEA,YAAY;AAAA,IACV,OAAO,CAAC;AAAA,IACR;AAAA,IACA,YAAY;AAAA,IACZ,GAAG;AAAA,EACL,GAAiC;AAC/B,UAAM,EAAE,GAAG,MAAM,CAAC;AAElB,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,SAAK,YAAY;AAAA,EACnB;AACF;;;AC7BO,SAAS,kBAAkB;AAChC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB;AACvB,QAAMC,UAAS;AACf,SAAO;AAAA,IACL,gBAAgB,OAA8B;AAAA,MAC5C,OAAO,CAAC,EAAE,MAAM,MACd,IAAI,qBAAqB;AAAA,QACvB,QAAQA;AAAA,QACR,MAAM;AAAA,QACN,MAAM,CAAC,KAAK;AAAA;AAAA,QAEZ,WAAW,OAAO,aAChB,SAAS,gBAAgB,EAAE,eAAe,SAAS;AAAA,MACvD,CAAC;AAAA,IACL;AAAA,IACA,mBAAmB,OAA8B;AAAA,MAC/C,OAAO,CAAC,EAAE,MAAM,MACd,IAAI,qBAAqB;AAAA,QACvB,QAAQA;AAAA,QACR,MAAM;AAAA,QACN,MAAM,CAAC,KAAK;AAAA;AAAA,QAEZ,WAAW,OAAO,aAChB,SAAS,gBAAgB,EAAE,eAAe,SAAS;AAAA,MACvD,CAAC;AAAA,IACL;AAAA,IACA,UAAU,OAA8B;AAAA,MACtC,OAAO,CAAC,EAAE,MAAM,MACd,IAAI,qBAAqB;AAAA,QACvB,QAAQA;AAAA,QACR,MAAM;AAAA,QACN,MAAM,CAAC,KAAK;AAAA;AAAA,QAEZ,WAAW,OAAO,aAChB,SAAS,gBAAgB,EAAE,mBAAmB,SAAS;AAAA,MAC3D,CAAC;AAAA,IACL;AAAA,EACF;AACF;AAEA,SAAS,SAAS;AAChB,SAAO;AAAA,IACL,OAAO,OAA8B;AAAA,MACnC,OAAO,CAAC,EAAE,MAAM,MACd,IAAI,qBAAqB;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM,CAAC,KAAK;AAAA,QACZ,WAAW,OACT,aAEA,SAAS,gBAAgB,EAAE,WAAW,SAAS;AAAA,MACnD,CAAC;AAAA,IACL;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB;AACvB,SAAO;AAAA,IACL,OAAO,OAA8B;AAAA,MACnC,OAAO,CAAC,EAAE,QAAQ,MAAM;AACtB,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,cAAM,gBAAgB;AAAA,UACpB,SAAS;AAAA,UACT,UAAU;AAAA,YACR,IAAI;AAAA,cACF;AAAA,gBACE,iBAAiB;AAAA,kBACf,UAAU;AAAA,oBACR,SAAS;AAAA,kBACX;AAAA,gBACF;AAAA,cACF;AAAA,cACA,oBAAoB,OAAO;AAAA,YAC7B;AAAA,UACF;AAAA,QACF;AACA,eAAO,IAAI,qBAAqB;AAAA,UAC9B,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,MAAM,CAAC,aAAa;AAAA,UACpB,WAAW,OACT,aAEA,SAAS,gBAAgB,EAAE,WAAW,SAAS;AAAA,QACnD,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;;;ACpGA,SAAS,gBAAAC,qBAAoB;;;ACN7B,SAAmB,0BAA0B;AAWtC,IAAM,iBAAN,MAAM,wBAAuB,WAAW;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,OAAO,GAAG,KAAqC;AAC7C,WAAO,eAAe;AAAA,EACxB;AAAA,EAEA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GAAoC;AAClC,UAAM,EAAE,GAAG,MAAM,CAAC;AAElB,SAAK,UAAU;AACf,SAAK,MAAM;AACX,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,qBAAqB;AACnB,WAAO,mBAAmB;AAAA,MACxB,KAAK,KAAK;AAAA,MACV,cAAc,KAAK;AAAA,MACnB,MAAM,KAAK;AAAA,IACb,CAAC;AAAA,EACH;AACF;;;ACzCA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,iBAAAC,sBAAqB;;;ACSvB,IAAM,iBAAN,MAAM,gBAAe;AAAA,EACjB;AAAA,EACA;AAAA,EAET,OAAO,GAAG,KAAqC;AAC7C,WAAO,eAAe;AAAA,EACxB;AAAA,EAEA,YAAY,EAAE,MAAM,KAAK,GAAyB;AAChD,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;;;ACfO,IAAM,kBAAN,MAAM,yBAAwB,WAAW;AAAA;AAAA,EAE9C;AAAA,EAEA,OAAO,GAAG,KAAsC;AAC9C,WAAO,eAAe;AAAA,EACxB;AAAA,EAEA,YAAY,EAAE,SAAS,GAAG,MAAM,GAAqC;AACnE,UAAM,EAAE,GAAG,MAAM,CAAC;AAElB,SAAK,UAAU;AAAA,EACjB;AACF;;;ACfO,IAAM,sBAAN,MAAM,qBAAoB;AAAA,EACtB;AAAA;AAAA,EAGA;AAAA,EAET,OAAO,GAAG,KAA0C;AAClD,WAAO,eAAe;AAAA,EACxB;AAAA,EAEA,YAAY,EAAE,KAAK,KAAK,GAAyC;AAC/D,SAAK,MAAM;AACX,SAAK,OAAO;AAAA,EACd;AACF;;;ACyBO,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,4BAAA;AACA,EAAAA,4BAAA;AACA,EAAAA,4BAAA;AAHU,SAAAA;AAAA,GAAA;;;AC9CZ;AAAA,EAGE;AAAA,OACK;AAEP,SAAS,YAAAC,iBAAgB;AACzB,SAAS,iBAAAC,sBAAqB;;;ACP9B,SAA4B,iBAAiB;AAkBtC,SAAS,4BAA4B;AAAA,EAC1C,QAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AACb,GAAuB;AACrB,QAAM,UAAU,4BAA4B,IAAI;AAEhD,SAAO;AAAA;AAAA,IAEL;AAAA,MACE,CAAC,OAAO,GAAG,YAAY,SAAS;AAAA,QAC9B;AAAA,QACA,UAAU;AAAA,UACR,IAAI;AAAA,YACF,WAAW,YAAY;AAAA,UACzB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACE,CAAC,OAAO,GAAG,YAAY,SAAS;AAAA,QAC9B,SAAS;AAAA,QACT,UAAU;AAAA,UACR,IAAI,oBAAoB,kBAAkB;AAAA,QAC5C;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACE,CAAC,OAAO,GAAGA;AAAA,IACb;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EACF;AACF;AAEA,SAAS,oBAAoB,aAA2B;AACtD,SACE,YAAY,cAAc,UAAU,UACpC,YAAY,cAAc,UAAU;AAExC;AAEA,SAAS,sBAAsB,aAA2B;AACxD,SACE,YAAY,cAAc,UAAU,YACpC,YAAY,cAAc,UAAU;AAExC;AAEO,SAAS,mBAAmB,aAA2B;AAC5D,MAAI,oBAAoB,WAAW,GAAG;AACpC,WAAO;AAAA,EACT;AAEA,MAAI,sBAAsB,WAAW,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,WAAW,YAAY;AAAA,EACzB;AACF;AAEO,SAAS,kCAAkC;AAAA,EAChD,QAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAuB;AACrB,QAAM,UAAU,4BAA4B,IAAI;AAEhD,QAAM,kBAAkB,mBAAmB,WAAW;AAEtD,SAAO;AAAA;AAAA,IAEL;AAAA,MACE,CAAC,OAAO,GAAG,YAAY,SAAS;AAAA,QAC9B,SAAS;AAAA,QACT,UAAU;AAAA,UACR,IAAI;AAAA,YACF,EAAE,iBAAiB,gBAAgB;AAAA,YACnC;AAAA,cACE,WAAW,YAAY;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACE,CAAC,OAAO,GAAG,YAAY,SAAS;AAAA,QAC9B,SAAS;AAAA,QACT,UAAU;AAAA,UACR,IAAI,oBAAoB,kBAAkB;AAAA,QAC5C;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACE,CAAC,OAAO,GAAGA;AAAA,IACb;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EACF;AACF;AAEO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,gBAAgB,OAAO,MAAM,WAAW,CAAC;AAC/C,QAAM,mBAAmB,OAAO,IAAI,WAAW,CAAC;AAEhD,MAAI,OAAO,MAAM,aAAa,KAAK,OAAO,MAAM,gBAAgB,GAAG;AACjE,WAAO;AAAA,EACT;AAEA,SAAO,gBAAgB;AACzB;;;ADnIO,SAAS,iCACd,aACA,SACgC;AAChC,MAAI,CAAC,SAAS;AACZ,WAAO,CAAC,gBAAgB,YAAY,WAAW,CAAC;AAAA,EAClD;AACA,QAAM,MAAM,cAAc,aAAa,OAAO;AAE9C,SAAO,YAAY,cACf,CAAC,gBAAgB,YAAY,WAAW,GAAG,GAAG,IAC9C,CAAC,GAAG;AACV;AAEO,SAAS,4BACd,SACA,aAC0B;AAC1B,SAAO,CAAC,GAAG,CAAC,cAAc,aAAa,OAAO,CAAC,CAAC;AAClD;AAEO,SAAS,4BACd,SACA,aAC0B;AAC1B,QAAM,WAAW,iCAAiC,aAAa,OAAO;AACtE,SAAO,CAAC,GAAG,QAAQ;AACrB;AAEO,SAAS,qCACd,aAC0B;AAC1B,MAAI,YAAY,SAAS;AACvB,WAAO,CAAC,GAAG,CAAC,CAAC;AAAA,EACf;AAEA,SAAO,CAAC,GAAG,CAAC,gBAAgB,YAAY,WAAW,CAAC,CAAC;AACvD;AAEO,SAAS,8BACd,WACA,aACA;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,sBAAsB,WAAW,WAAW;AAAA,MAC5C,gBAAgB,YAAY,WAAW;AAAA,IACzC;AAAA,EACF;AACF;AAEO,SAAS,+BACd,WACA,OACoB;AACpB,SAAO;AAAA,IACL,CAAC,GAAG,CAAC,qBAAqB,WAAW,MAAM,uBAAuB,CAAC,CAAC,CAAC;AAAA,IACrE,MAAM;AAAA,EACR;AACF;AAEO,SAAS,6BACd,WACA,OACA,aACoB;AACpB,MAAI,CAAC,MAAM,SAAS;AAClB,UAAM,IAAI,MAAM,iCAAiC,MAAM,GAAG,EAAE;AAAA,EAC9D;AAEA,SAAO;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE,qBAAqB,WAAW,MAAM,uBAAuB,CAAC;AAAA,QAC9D,cAAc,aAAa,MAAM,OAAO;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,MAAM;AAAA,EACR;AACF;AAEO,SAAS,qCACd,WACA,OACA,aACoB;AACpB,QAAM,qBAAqB,YAAY,cAAc,KAAK;AAC1D,SAAO;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE,sBAAsB,WAAW,WAAW;AAAA,QAC5C,gBAAgB,YAAY,WAAW;AAAA,QACvC;AAAA,UACE;AAAA,UACA,mBAAmB,uBAAuB;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM;AAAA,EACR;AACF;AAEO,SAAS,4CACd,WACA,OACA,aACoB;AACpB,QAAM,qBAAqB,YAAY,cAAc,KAAK;AAE1D,MAAI,CAAC,mBAAmB,SAAS;AAC/B,UAAM,IAAI,MAAM,iCAAiC,mBAAmB,GAAG,EAAE;AAAA,EAC3E;AAEA,SAAO;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE,sBAAsB,WAAW,WAAW;AAAA,QAC5C,gBAAgB,YAAY,WAAW;AAAA,QACvC;AAAA,UACE;AAAA,UACA,mBAAmB,uBAAuB;AAAA,QAC5C;AAAA,QACA,cAAc,aAAa,mBAAmB,OAAO;AAAA,MACvD;AAAA,IACF;AAAA,IACA,MAAM;AAAA,EACR;AACF;AAKO,SAAS,wBACd,YACA,KACS;AACT,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AAEA,MAAI;AACF,UAAM,eAAe,IAAI,WAAW,mBAAmB,UAAU;AACjE,WAAO,aAAa,MAAM;AAAA,EAC5B,SAAS,OAAO;AACd,YAAQ,MAAM,iCAAiC,KAAK;AACpD,UAAM;AAAA,EACR;AACF;AAEA,SAAS,gBAAgB,QAAyB;AAChD,SAAO,OAAO,OAAO,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AACpD;AAEA,SAAS,sBACP,KACA,aACS;AACT,QAAM,kBAAkB,mBAAmB,WAAW;AAEtD,SAAO,kBAAkB,KAAK;AAAA,IAC5B,iBAAiB;AAAA,EACnB,CAAC;AACH;AAEA,SAAS,qBACP,KACA,gBACS;AACT,SAAO,kBAAkB,KAAK;AAAA,IAC5B,gBAAgB;AAAA,EAClB,CAAC;AACH;AAEA,SAAS,kBACP,KACA,UACS;AACT,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,QAAM,eAAe,IAAI,WAAW,iBAAiB,QAAQ;AAE7D,SAAO,aAAa,MAAM;AAC5B;AAEA,SAAS,cAAc,aAA2B,SAA0B;AAC1E,QAAM,cAAc,aAAa,GAAG,WAAW,IAAI,OAAO;AAC1D,SAAO,KAAK,WAAW,GAAGC;AAAA,IACxBC,eAAc,OAAO;AAAA,IACrB;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;AEpNO,IAAM,UAAU;AAAA,EACrB;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;APrcA,IAAM,yBAAyB;AAExB,SAAS,gBAAgB;AAC9B,SAAO;AAAA,IACL,wBAAwB,CACtB,qCAAqC,UACV;AAAA,MAC3B,OAAO,CAAC,EAAE,oBAAoB,OAAO,aAAa,IAAI,MAAM;AAC1D,cAAMC,UAAS;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,MAAM,CAAC,YAAY,aAAa,oBAAoBA,SAAQ,CAAC;AAAA,UAC7D,MAAM;AAAA,UACN,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,wBAAwB,CACtB,qCAAqC,WACV;AAAA,MAC3B,OAAO,CAAC,EAAE,oBAAoB,OAAO,aAAa,IAAI,MAAM;AAC1D,cAAMA,UAAS;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,MAAM;AAAA,YACJ,YAAY;AAAA,YACZC,UAASC,eAAc,kBAAkB,CAAC;AAAA,YAC1CF;AAAA,YACA;AAAA,UACF;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,uBAAuB,OAA8B;AAAA,MACnD,OAAO,CAAC,EAAE,oBAAoB,MAAM,MAAM;AACxC,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,MAAM;AAAA,YACJC,UAASC,eAAc,kBAAkB,CAAC;AAAA,YAC1C,CAAC,CAAC,MAAM,SAAS,MAAM,MAAM,CAAC;AAAA,YAC9B;AAAA,UACF;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,wBAAwB,OAAO;AAAA,MAC7B,aAAa,OAA8B;AAAA,QACzC,OAAO,CAAC,WAAW;AACjB,iBAAO,4BAA4B;AAAA,YACjC,GAAG;AAAA,YACH,sBAAsB;AAAA,cACpB,+BAA+B,OAAO,WAAW,OAAO,KAAK;AAAA,YAC/D;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,YAAY,OAA8B;AAAA,QACxC,OAAO,CAAC,WAAW;AACjB,iBAAO,4BAA4B;AAAA,YACjC,GAAG;AAAA,YACH,sBAAsB;AAAA,cACpB;AAAA,gBACE,OAAO;AAAA,gBACP,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,cAAc,OAA8B;AAAA,QAC1C,OAAO,CAAC,WAAW;AACjB,iBAAO,4BAA4B;AAAA,YACjC,GAAG;AAAA,YACH,sBAAsB;AAAA,cACpB;AAAA,gBACE,OAAO;AAAA,gBACP,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,cAAc,OAA8B;AAAA,QAC1C,OAAO,CAAC,WAAW;AACjB,iBAAO,4BAA4B;AAAA,YACjC,GAAG;AAAA,YACH,sBAAsB;AAAA;AAAA,cAEpB;AAAA,gBACE,OAAO;AAAA,gBACP,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA;AAAA,cAEA;AAAA,gBACE,OAAO;AAAA,gBACP,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IACA,uCAAuC,CACrC,qCAAqC,WACV;AAAA,MAC3B,OAAO,CAAC;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,MAAM;AACJ,cAAMF,UAAS;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,cAAM,aAAa;AAAA,UACjBA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,cAAM,kBAAkB;AAAA,UACtB;AAAA,UACA;AAAA,QACF;AAEA,cAAM,WAAW,qCAAqC,IAAI;AAE1D,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,MAAM;AAAA,YACJ,qCAAqC,WAAW;AAAA,YAChDA;AAAA;AAAA,YAEA;AAAA;AAAA,YAEA;AAAA,UACF;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,UACP,OACA,UACA,oCACsB;AACtB,MAAI,SAAS,OAAO,KAAK,GAAG;AAC1B,WAAO,CAAC,CAAC,MAAM,SAAS,MAAM,MAAM,CAAC;AAAA,EACvC;AAEA,SAAO,qCACH;AAAA,IACE,CAAC,MAAM,SAAS,MAAM,MAAM;AAAA,IAC5B,CAAC,SAAS,SAAS,SAAS,MAAM;AAAA,EACpC,IACA;AAAA,IACE,CAAC,SAAS,SAAS,SAAS,MAAM;AAAA,IAClC,CAAC,MAAM,SAAS,MAAM,MAAM;AAAA,EAC9B;AACN;AAEA,SAAS,gBACPA,SACA,oBACA,WACA;AACA,QAAM,aAAa;AAAA,IACjB,WAAW,GAAG,aAAa,QAAQ,WAAW,GAAG,WAAW;AAAA,EAC9D;AAEA,QAAM,cAAc;AAAA,IAClB,cAAc;AAAA,MACZ,QAAQ,EAAE,MAAM,EAAE,YAAYA,QAAO,OAAO,EAAE;AAAA,MAC9C,aAAa;AAAA,QACX,SAAS;AAAA,QACT,UAAU;AAAA,UACR,IAAI;AAAA,YACF;AAAA,cACE,aAAa;AAAA,gBACX,IAAIC,UAASC,eAAc,kBAAkB,CAAC;AAAA,gBAC9C,SAAS;AAAA,cACX;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,CAAC,UAAU,GAAG,CAAC,WAAW;AAAA,EAC5B;AACF;AAOA,SAAS,4BAA4B;AAAA,EACnC;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AACF,GAAsC;AACpC,SAAO,IAAI,eAAe;AAAA,IACxB,SAAS;AAAA,IACT,KAAK;AAAA,IACL,MAAM;AAAA,MACJ,8BAA8B,WAAW,WAAW;AAAA,MACpD,4BAA4B,oBAAoB,WAAW;AAAA,MAC3D;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,EACV,CAAC;AACH;;;AQhRA,SAAS,4BAA4B;AACrC,SAAS,YAAAC,iBAAgB;AACzB,SAAS,iBAAAC,gBAAe,oBAAoB;;;ACHrC,IAAM,cAAc;AAAA,EACzB;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ADjFA,IAAM,WAAW;AACjB,IAAM,2BAA2B;AAE1B,SAAS,UAAU;AACxB,SAAO;AAAA,IACL,UAAU,CAAC,SAAS,cAAqC;AAAA,MACvD,OAAO,CAAC,EAAE,oBAAoB,OAAO,YAAY,MAC/C,IAAI,eAAe;AAAA,QACjB,SAAS;AAAA,QACT,KAAK;AAAA,QACL,MAAM;AAAA,UACJ,MAAM,UACF,qBAAqB,MAAM,OAAO,IAClC,MAAM,WAAW;AAAA,UACrB,MAAM;AAAA,UACN,4BAA4B,oBAAoB,WAAW;AAAA,UAC3D;AAAA,QACF;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,CAAC;AAAA,IACL;AAAA,IACA,yBAAyB,CACvB,qCAAqC,MACrC,SAAS,cACkB;AAAA,MAC3B,OAAO,CAAC,EAAE,OAAO,aAAa,oBAAoB,IAAI,MAAM;AAC1D,cAAM,gBAAgB;AAAA,UACpB,MAAM,UACF,qBAAqB,MAAM,OAAO,IAClC,MAAM,WAAW;AAAA,UACrB,MAAM;AAAA,QACR;AAEA,cAAM,WAAW;AAAA,UACf,IAAI,UAAU,qBAAqB,IAAI,OAAO,IAAI,IAAI,WAAW;AAAA,UACjE,IAAI;AAAA,QACN;AAEA,cAAMC,UAAS,qCACX,CAAC,eAAe,QAAQ,IACxB,CAAC,UAAU,aAAa;AAC5B,cAAM,gBAAgB,qCAAqC,IAAI;AAC/D,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,MAAM;AAAA,YACJA;AAAA,YACA;AAAA,YACA,4BAA4B,oBAAoB,WAAW;AAAA,YAC3D;AAAA,UACF;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,qBAAqB,CAAC,SAAS,cAAqC;AAAA,MAClE,OAAO,CAAC,EAAE,oBAAoB,OAAO,YAAY,MAAM;AACrD,cAAM,gBACJ;AAAA,UACE;AAAA,UACA;AAAA,QACF;AAEF,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,MAAM;AAAA,YACJ,MAAM,UACF,qBAAqB,MAAM,OAAO,IAClC,MAAM,WAAW;AAAA,YACrB,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,oDACP,SACA,aAC0B;AAM1B,QAAM,cAAc;AACpB,QAAM,mBAAmB,aAAa,OAAO;AAC7C,QAAM,MAAM,KAAK,WAAW,GAAGC;AAAA,IAC7BC,eAAc,gBAAgB;AAAA,IAC9B;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,YAAY,cACR,CAAC,YAAY,YAAY,YAAY,SAAS,EAAE,CAAC,IAAI,GAAG,IACxD,CAAC,GAAG;AAAA,EACV;AACF;;;AEpHO,SAAS,kBAAkB;AAChC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACRO,IAAM,YAAY;AAAA,EACvB;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;;;AbzMO,SAAS,iBAAiB;AAC/B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,MAAM;AACpB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,QAA8B;AACrC,SAAO;AAAA,IACL,OAAO,CAAC,EAAE,OAAO,QAAQ,MAAM;AAC7B,UAAI,CAAC,MAAM,SAAS;AAClB,cAAM,IAAI,MAAM,SAAS,MAAM,GAAG,iBAAiB;AAAA,MACrD;AAEA,aAAO,IAAI,eAAe;AAAA,QACxB,SAAS,MAAM;AAAA,QACf,KAAK;AAAA,QACL,MAAM,CAAC,OAAO;AAAA,QACd,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,SAA+B;AACtC,SAAO;AAAA,IACL,OAAO,CAAC,EAAE,QAAQ,MAAM;AACtB,aAAO,IAAI,eAAe;AAAA,QACxB,MAAM;AAAA,QACN,MAAM,CAAC,EAAE,QAA4B,CAAC;AAAA,MACxC,CAAC;AAAA,IACH;AAAA,EACF;AACF;AACO,SAAS,YAAY;AAC1B,SAAO;AAAA,IACL,QAAAC;AAAA,IACA,eAAAC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAASD,UAAS;AAChB,SAAO;AAAA,IACL,SAAS,OAA6B;AAAA,MACpC,OAAO,CAAC,EAAE,SAAS,MAAM,MACvB,IAAI,qBAAqB;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO;AAAA,QACzC,WAAW,OACT,aACoB,SAAS,gBAAgB,EAAE,QAAQ,SAAS;AAAA,MACpE,CAAC;AAAA,IACL;AAAA,EACF;AACF;AAEA,SAASC,iBAAgB;AACvB,SAAO;AAAA,IACL,SAAS,OAAO;AAAA,MACd,iBAAiB,OAA6B;AAAA,QAC5C,OAAO,CAAC,EAAE,SAAS,MAAM,MAAM;AAC7B,cAAI,CAAC,MAAM,SAAS;AAClB,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,gBAAgB;AAAA,YACpB,SAAS;AAAA,YACT,UAAU;AAAA,cACR,IAAI;AAAA,gBACF,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;AAAA,gBAChD,oBAAoB,MAAM,OAAO;AAAA,cACnC;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,IAAI,qBAAqB;AAAA,YAC9B,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,MAAM,CAAC,eAAe,OAAO;AAAA,YAC7B,WAAW,OACT,aACoB,SAAS,gBAAgB,EAAE,QAAQ,SAAS;AAAA,UACpE,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,IAAI,OAA6B;AAAA,QAC/B,OAAO,CAAC,EAAE,SAAS,MAAM,MAAM;AAC7B,iBAAO,IAAI,qBAAqB;AAAA,YAC9B,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO;AAAA,YACzC,WAAW,OACT,aACoB,SAAS,gBAAgB,EAAE,QAAQ,SAAS;AAAA,UACpE,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,SAAS;AAChB,SAAO;AAAA,IACL,SAAS,OAA6B;AAAA,MACpC,OAAO,CAAC,EAAE,QAAQ,MAChB,IAAI,qBAAqB;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM,CAAC,OAAO;AAAA,QACd,WAAW,OACT,aACoB,8BAA8B,QAAQ;AAAA,MAC9D,CAAC;AAAA,IACL;AAAA,IACA,oBAAoB,OAA6B;AAAA,MAC/C,OAAO,CAAC,EAAE,SAAS,MAAM,MACvB,IAAI,qBAAqB;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM,CAAC,OAAO;AAAA,QACd,WAAW,OAAO,aAA8B;AAC9C,cAAI,SAAS,KAAK,SAAS;AACzB,mBAAO;AAAA,UACT;AAEA,gBAAM,MAAM,SAAS,KAAK,OAAO;AACjC,cAAI;AAEJ,cAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,uBAAW;AAAA,UACb;AAGA,cAAI,MAAM,QAAS,KAAa,IAAI,OAAO,GAAG;AAE5C,uBAAY,IAAY,GAAG;AAAA,UAC7B;AAEA,cAAI,CAAC,UAAU;AACb,kBAAM,IAAI,MAAM,0CAA0C;AAAA,UAC5D;AAEA,gBAAM,UAAU,SAAS;AAAA,YACvB,CAAC,CAAC,OAAO,MAAM,YAAY,MAAM,kBAAkB;AAAA,UACrD;AAEA,cAAI,CAAC,SAAS;AACZ,mBAAO;AAAA,UACT;AAEA,iBAAO,OAAO,QAAQ,CAAC,EAAE,QAAQ;AAAA,QACnC;AAAA,MACF,CAAC;AAAA,IACL;AAAA,IACA,gBAAgB,OAA6B;AAAA,MAC3C,OAAO,CAAC,EAAE,QAAQ,MAAM;AACtB,cAAM,mBAAmBC,cAAa,OAAO;AAE7C,eAAO,IAAI,qBAAqB;AAAA,UAC9B,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,MAAM,CAAC,gBAAgB;AAAA,UACvB,WAAW,OACT,aACoB,8BAA8B,QAAQ;AAAA,QAC9D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,SAAS;AAChB,SAAO;AAAA,IACL,UAAU,OAA6B;AAAA,MACrC,OAAO,CAAC,EAAE,SAAS,MAAM,MACvB,IAAI,qBAAqB;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM,CAAC,SAAS,MAAM,kBAAkB,CAAC;AAAA,QACzC,WAAW,OAAO;AAAA,UAChB;AAAA,UACA;AAAA,QACF,MACE,OAAO,KAAK,IAAI,MAAM,EAAE,SAAS,CAAC;AAAA,MACtC,CAAC;AAAA,IACL;AAAA,EACF;AACF;AAEA,eAAsB,8BACpB,UACiB;AACjB,QAAM,UAAU,SAAS;AAGzB,QAAM,OAAO,OAAO,QAAQ,KAAK,SAAS,CAAC;AAC3C,QAAM,SAAS,QAAQ,cAAc,QAAQ;AAC7C,QAAM,sBAAsB,OAAO,OAAO,IAAI,QAAQ,QAAQ,EAAE,SAAS,CAAC;AAC1E,QAAM,SAAS,sBAAsB,KAAK,KAAK;AAE/C,SAAO,OAAO;AAChB;;;AchOA,IAAM,SAAS;AAER,SAAS,aAAa;AAC3B,SAAO;AAAA,IACL,aAAa,OAA+B;AAAA,MAC1C,OAAO,CAAC,EAAE,oBAAoB,OAAO,YAAY,MAC/C,IAAI,gBAAgB;AAAA,QAClB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,SAAS,MAAM;AAAA,UACb,MAAM,WAAW;AAAA,UACjB,MAAM;AAAA,UACN;AAAA,YACE,SAAS;AAAA,YACT,UAAU;AAAA,cACR,IAAI;AAAA,gBACF;AAAA,kBACE,WAAW,YAAY;AAAA,gBACzB;AAAA,gBACA,oBAAoB,kBAAkB;AAAA,cACxC;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACL;AAAA,IACA,aAAa,OAA+B;AAAA,MAC1C,OAAO,CAAC,EAAE,oBAAoB,SAAS,OAAO,aAAa,IAAI,MAC7D,IAAI,gBAAgB;AAAA,QAClB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,SAAS,MAAM;AACb,gBAAM,mBACJ,MAAM,SAAS,IAAI,SAAS,KAAK,MAAM,SAAS,IAAI,SAAS;AAE/D,iBAAO;AAAA,YACL;AAAA,cACE,MAAM,WAAW;AAAA,cACjB,MAAM,OAAO,GAAG,IAAI,mBAAmB,MAAM;AAAA,YAC/C;AAAA,YACA,CAAC,IAAI,WAAW,GAAG,IAAI,MAAM;AAAA,YAC7B;AAAA,cACE,SAAS;AAAA,cACT,UAAU;AAAA,gBACR,IAAI;AAAA,kBACF;AAAA,oBACE,WAAW,YAAY;AAAA,kBACzB;AAAA,kBACA,oBAAoB,OAAO;AAAA,gBAC7B;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACL;AAAA,EACF;AACF;;;ACrDA,IAAMC,UAAS;AAER,SAAS,cAAc;AAC5B,SAAO;AAAA,IACL,8BAA8B,MAAM;AAClC,YAAM,OAAO;AAEb,aAAO;AAAA,QACL,MAAM,OAA+B;AAAA,UACnC,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAC7D,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,oBACZ,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN;AAAA,oBACE,IAAI;AAAA,sBACF;AAAA,sBACA,YAAY,SAAS;AAAA,wBACnB,SAAS;AAAA,wBACT,UAAU;AAAA,0BACR,IAAI;AAAA,4BACF,gBACE,OAAO,MAAM,uBAAuB;AAAA,0BACxC;AAAA,wBACF;AAAA,sBACF,CAAC;AAAA,oBACH;AAAA,oBACA,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,mBAAmB,CAAC,OAAO,MAAM,OAAO,OAAO,GAAG;AACxD,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,oBAAMC,UAAS;AAAA,gBACb;AAAA,kBACE,IAAI,kBAAkB,SAAS;AAAA,oBAC7B,SAAS;AAAA,oBACT,UAAU;AAAA,sBACR,IAAI;AAAA,wBACF;AAAA,0BACE,gBACE,OAAO,MAAM,uBAAuB;AAAA,wBACxC;AAAA,wBACA;AAAA,0BACE,cAAc,OAAO,MAAM,WAAW;AAAA,wBACxC;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF,CAAC;AAAA,kBACD,KAAK;AAAA,oBACH,UAAU,OAAO,MAAM;AAAA,kBACzB;AAAA,gBACF;AAAA,cACF;AAEA,oBAAM,wBACJ,2BAA2B,MAAM;AAEnC,kBAAI,kBAAkB;AACpB,sBAAM,WAAW;AAAA,kBACf,IAAI,kBAAkB,SAAS;AAAA,oBAC7B,SAAS;AAAA,oBACT,UAAU;AAAA,sBACR,IAAI;AAAA,wBACF;AAAA,0BACE,gBAAgB,OAAO,IAAI,uBAAuB;AAAA,wBACpD;AAAA,wBACA;AAAA,0BACE,cAAc,OAAO,IAAI,WAAW;AAAA,wBACtC;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF,CAAC;AAAA,kBACD,KAAK;AAAA,oBACH,UAAU,OAAO,IAAI;AAAA,kBACvB;AAAA,gBACF;AAEA,oBAAI,uBAAuB;AACzB,kBAAAA,QAAO,QAAQ,QAAQ;AAAA,gBACzB,OAAO;AACL,kBAAAA,QAAO,KAAK,QAAQ;AAAA,gBACtB;AAAA,cACF;AAEA,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAAA;AAAA,gBACA,UAAU,oBAAoB,CAAC,wBAAwB,IAAI;AAAA,cAC7D,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,kBAAkB,OAA+B;AAAA,UAC/C,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQD;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,oBAAM,qBAAqB,OAAO,YAAY;AAAA,gBAC5C,OAAO;AAAA,cACT;AAEA,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,WAAW,OAAO,YAAY;AAAA,0BAChC;AAAA,0BACA;AAAA,4BACE,gBACE,mBAAmB,uBAAuB;AAAA,0BAC9C;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,8BAA8B,MAAM;AAClC,YAAM,OAAO;AAEb,aAAO;AAAA,QACL,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,WAAW,OAAO,YAAY;AAAA,0BAChC;AAAA,0BACA;AAAA,4BACE,gBACE,OAAO,MAAM,uBAAuB;AAAA,0BACxC;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,MAAM;AACpB,YAAM,OAAO;AAEb,aAAO;AAAA,QACL,MAAM,CAAC,UAAU,OAA+B;AAAA,UAC9C,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B;AAAA,sBACA,UAAU;AAAA,oBACZ,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,cAAc,OAAO,MAAM,WAAW;AAAA,0BACxC;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,cAAc,OAA+B;AAAA,UAC3C,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,oBAAM,mBAAmB,CAAC,OAAO,MAAM,OAAO,OAAO,GAAG;AAExD,oBAAMC,UAAS;AAAA,gBACb;AAAA,kBACE,IAAI;AAAA,oBACF;AAAA,oBACA,YAAY,SAAS;AAAA,sBACnB,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF,YAAY,OAAO,MAAM,cAAc;AAAA,wBACzC;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,kBACH;AAAA,kBACA,KAAK;AAAA,oBACH,UAAU,OAAO,MAAM;AAAA,kBACzB;AAAA,gBACF;AAAA,cACF;AAEA,kBAAI,kBAAkB;AACpB,sBAAM,WAAW;AAAA,kBACf,IAAI;AAAA,oBACF;AAAA,oBACA,YAAY,SAAS;AAAA,sBACnB,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF,YAAY,OAAO,IAAI,cAAc;AAAA,wBACvC;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,kBACH;AAAA,kBACA,KAAK;AAAA,oBACH,UAAU,OAAO,IAAI;AAAA,kBACvB;AAAA,gBACF;AAEA,gBAAAA,QAAO,QAAQ,QAAQ;AAAA,cACzB;AAEA,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAAA;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQD;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAG7D,oBAAM,qBAAqB,OAAO,YAAY;AAAA,gBAC5C,OAAO;AAAA,cACT;AAEA,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,WAAW,OAAO,YAAY;AAAA,0BAChC;AAAA,0BACA;AAAA,4BACE,gBACE,mBAAmB,uBAAuB;AAAA,0BAC9C;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,oBAAM,qBAAqB,OAAO,YAAY;AAAA,gBAC5C,OAAO;AAAA,cACT;AAEA,oBAAM,wBAAwB,OAAO,YAAY;AAAA,gBAC/C,OAAO;AAAA,cACT;AAEA,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,WAAW,OAAO,YAAY;AAAA,0BAChC;AAAA,0BACA;AAAA,4BACE,gBACE,sBAAsB,uBAAuB;AAAA,0BACjD;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,IAAI;AAAA,oBACvB;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,WAAW,OAAO,YAAY;AAAA,0BAChC;AAAA,0BACA;AAAA,4BACE,gBACE,mBAAmB,uBAAuB;AAAA,0BAC9C;AAAA,0BACA;AAAA,4BACE,cAAc;AAAA,8BACZ,KAAK,mBAAmB;AAAA,4BAC1B;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,cAAc,OAA+B;AAAA,UAC3C,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,gBACE,OAAO,MAAM,uBAAuB;AAAA,0BACxC;AAAA,0BACA;AAAA,4BACE,cAAc,OAAO,MAAM,WAAW;AAAA,0BACxC;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA;AAAA,kBAEA;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,oBACZ,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,IAAI;AAAA,oBACvB;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA,UAAU;AAAA,cACZ,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,gCAAgC,MAAM;AACpC,YAAM,OAAO;AACb,aAAO;AAAA,QACL,MAAM,CAAC,UAAU,OAA+B;AAAA,UAC9C,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,qBAAO;AAAA,gBACL;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT,SAAS;AAAA,oBACT,UAAU;AAAA,sBACR,IAAI;AAAA,wBACF;AAAA,0BACE,WAAW,OAAO,YAAY;AAAA,wBAChC;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT;AAAA,sBACE,IAAI;AAAA,wBACF;AAAA,wBACA,UAAU;AAAA,sBACZ;AAAA,sBACA,KAAK;AAAA,wBACH,UAAU,OAAO,MAAM;AAAA,sBACzB;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA;AAAA,gBACA;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT;AAAA,oBACA,UAAU;AAAA,kBACZ;AAAA,gBACF;AAAA,gBACA;AAAA,gBACA;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT;AAAA,sBACE,cAAc;AAAA,wBACZ,QAAQ;AAAA,0BACN,MAAM,EAAE,YAAY,EAAE;AAAA,wBACxB;AAAA,wBACA,aAAa;AAAA,0BACX,SAAS;AAAA,0BACT,UAAU;AAAA,4BACR,IAAI;AAAA,8BACF,oBAAoB,OAAO,kBAAkB;AAAA,4BAC/C;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,IAAI,CAAC,UAAU,OAA+B;AAAA,UAC5C,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,oBAAM,cAAc,OAAO,MAAM,OAAO,OAAO,GAAG;AAElD,oBAAM,wBACJ,2BAA2B,MAAM;AAEnC,oBAAM,QAAQ;AAAA,gBACZ,SAAS;AAAA,gBACT,UAAU;AAAA,kBACR,IAAI;AAAA,oBACF;AAAA,sBACE,gBAAgB,OAAO,MAAM,uBAAuB;AAAA,oBACtD;AAAA,oBACA;AAAA,sBACE,cAAc,OAAO,MAAM,WAAW;AAAA,oBACxC;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAEA,oBAAM,kBAAkB;AAAA,gBACtB,IAAI;AAAA,gBACJ,KAAK,EAAE,UAAU,OAAO,MAAM,OAAO;AAAA,cACvC;AAEA,oBAAM,WAAW;AAAA,gBACf;AAAA,gBACA,UAAU;AAAA,cACZ;AAEA,oBAAM,qBAAqB;AAAA,gBACzB,IAAI;AAAA,gBACJ,KAAK,EAAE,UAAU,OAAO,IAAI,OAAO;AAAA,cACrC;AAEA,oBAAMC,UAAS,cACX,CAAC,eAAe,IAChB,wBACE,CAAC,oBAAoB,eAAe,IACpC,CAAC,iBAAiB,kBAAkB;AAE1C,qBAAO;AAAA;AAAA,gBAEL;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT,SAAS;AAAA,oBACT,UAAU;AAAA,sBACR,IAAI;AAAA,wBACF;AAAA,0BACE,WAAW,OAAO,YAAY;AAAA,wBAChC;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA;AAAA,gBAEA;AAAA,kBACE,CAAC,OAAO,GAAGA;AAAA,gBACb;AAAA;AAAA,gBAEA;AAAA;AAAA,gBAEA;AAAA,kBACE,CAAC,OAAO,GAAG,cAAc,QAAQ;AAAA,gBACnC;AAAA;AAAA,gBAEA;AAAA;AAAA,gBAEA;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT;AAAA,sBACE,cAAc;AAAA,wBACZ,QAAQ;AAAA,0BACN,MAAM,EAAE,YAAY,cAAc,IAAI,EAAE;AAAA,wBAC1C;AAAA,wBACA,aAAa;AAAA,0BACX,SAAS;AAAA,0BACT,UAAU;AAAA,4BACR,IAAI;AAAA,8BACF,oBAAoB,OAAO,kBAAkB;AAAA,4BAC/C;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA;AAAA,gBAEA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL;AAAA;AAAA,QAEA,yBAAyB,OAA+B;AAAA,UACtD,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQD;AAAA,YACR;AAAA,YAEA,SAAS,CAAC,sBAAsB;AAC9B,kBAAI,CAAC,OAAO,MAAM,SAAS;AACzB,sBAAM,IAAI;AAAA,kBACR;AAAA,gBACF;AAAA,cACF;AAEA,oBAAM,UAAU,4BAA4B,iBAAiB;AAC7D,qBAAO;AAAA,gBACL;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT,SAAS;AAAA,oBACT,UAAU;AAAA,sBACR,IAAI;AAAA,wBACF;AAAA,0BACE,WAAW,OAAO,YAAY;AAAA,wBAChC;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT;AAAA,sBACE,IAAI,kBAAkB,SAAS;AAAA,wBAC7B,SAAS;AAAA,wBACT,UAAU;AAAA,0BACR,IAAI;AAAA,4BACF,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;AAAA,4BAChD,oBAAoB,OAAO,MAAM,OAAO;AAAA,0BAC1C;AAAA,wBACF;AAAA,sBACF,CAAC;AAAA,sBACD,KAAK,EAAE,UAAU,OAAO,MAAM,OAAO;AAAA,oBACvC;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA;AAAA,gBACA;AAAA,kBACE,CAAC,OAAO,GAAG,kBAAkB,SAAS;AAAA,oBACpC,SAAS;AAAA,oBACT,UAAU;AAAA,sBACR,IAAI;AAAA,wBACF,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;AAAA,wBAChD,oBAAoB,OAAO,MAAM,OAAO;AAAA,sBAC1C;AAAA,oBACF;AAAA,kBACF,CAAC;AAAA,gBACH;AAAA,gBACA;AAAA,gBACA;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT;AAAA,sBACE,cAAc;AAAA,wBACZ,QAAQ;AAAA,0BACN,MAAM,EAAE,YAAY,EAAE;AAAA,wBACxB;AAAA,wBACA,aAAa,YAAY,SAAS;AAAA,0BAChC,SAAS;AAAA,0BACT,UAAU;AAAA,4BACR,IAAI;AAAA,8BACF,OAAO;AAAA,4BACT;AAAA,0BACF;AAAA,wBACF,CAAC;AAAA,sBACH;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,2BAA2B,MAAM;AAC/B,YAAM,OAAO;AAEb,aAAO;AAAA,QACL,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,WAAW;AACjB,mBAAO,IAAI,gBAAgB;AAAA,cACzB,QAAQA;AAAA,cACR;AAAA,cACA,SAAS,CAAC,sBAAsB;AAC9B,sBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,sBAAMC,UAAS;AAAA,kBACb;AAAA,oBACE,IAAI;AAAA,sBACF;AAAA,sBACA,YAAY,SAAS;AAAA,wBACnB,SAAS;AAAA,wBACT,UAAU;AAAA,0BACR,IAAI;AAAA,4BACF,gBACE,OAAO,MAAM,uBAAuB;AAAA,0BACxC;AAAA,wBACF;AAAA,sBACF,CAAC;AAAA,oBACH;AAAA,oBACA,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAEA,uBAAO,kCAAkC;AAAA,kBACvC,GAAG;AAAA,kBACH,MAAM;AAAA,kBACN,QAAAA;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,WAAW;AACjB,mBAAO,IAAI,gBAAgB;AAAA,cACzB,QAAQD;AAAA,cACR;AAAA,cACA,SAAS,CAAC,sBAAsB;AAC9B,sBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,sBAAMC,UAAS;AAAA,kBACb;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,gBACE,OAAO,MAAM,uBAAuB;AAAA,0BACxC;AAAA,0BACA;AAAA,4BACE,cAAc;AAAA,8BACZ,KAAK,OAAO,MAAM;AAAA,4BACpB;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAEA,uBAAO,kCAAkC;AAAA,kBACvC,GAAG;AAAA,kBACH,MAAM;AAAA,kBACN,QAAAA;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,WAAW;AACjB,kBAAM,qBAAqB,OAAO,YAAY;AAAA,cAC5C,OAAO;AAAA,YACT;AACA,mBAAO,IAAI,gBAAgB;AAAA,cACzB,QAAQD;AAAA,cACR;AAAA,cACA,SAAS,CAAC,sBAAsB;AAC9B,sBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,sBAAMC,UAAS;AAAA,kBACb;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,iBAAiB;AAAA,8BACf,OAAO;AAAA,4BACT;AAAA,0BACF;AAAA,0BACA;AAAA,4BACE,WAAW,OAAO,YAAY;AAAA,0BAChC;AAAA,0BACA;AAAA,4BACE,gBACE,mBAAmB,uBAAuB;AAAA,0BAC9C;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAEA,uBAAO,kCAAkC;AAAA,kBACvC,GAAG;AAAA,kBACH,MAAM;AAAA,kBACN,QAAAA;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,WAAW;AACjB,mBAAO,IAAI,gBAAgB;AAAA,cACzB,QAAQD;AAAA,cACR;AAAA,cACA,SAAS,CAAC,sBAAsB;AAC9B,sBAAM,UAAU,4BAA4B,iBAAiB;AAE7D,sBAAM,wBAAwB,OAAO,YAAY;AAAA,kBAC/C,OAAO;AAAA,gBACT;AAEA,sBAAM,qBAAqB,OAAO,YAAY;AAAA,kBAC5C,OAAO;AAAA,gBACT;AAEA,sBAAM,kBAAkB,mBAAmB,OAAO,WAAW;AAE7D,sBAAMC,UAAS;AAAA,kBACb;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,iBAAiB;AAAA,0BACnB;AAAA,0BACA;AAAA,4BACE,WAAW,OAAO,YAAY;AAAA,0BAChC;AAAA,0BACA;AAAA,4BACE,gBACE,sBAAsB,uBAAuB;AAAA,0BACjD;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,IAAI;AAAA,oBACvB;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,iBAAiB;AAAA,0BACnB;AAAA,0BACA;AAAA,4BACE,WAAW,OAAO,YAAY;AAAA,0BAChC;AAAA,0BACA;AAAA,4BACE,gBACE,mBAAmB,uBAAuB;AAAA,0BAC9C;AAAA,0BACA;AAAA,4BACE,cAAc;AAAA,8BACZ,KAAK,mBAAmB;AAAA,4BAC1B;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAEA,uBAAO,kCAAkC;AAAA,kBACvC,GAAG;AAAA,kBACH,MAAM;AAAA,kBACN,QAAAA;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACp8BA,IAAMC,UAAS;AAER,SAAS,YAAY;AAC1B,SAAO;AAAA,IACL,8BAA8B,CAAC,UAAmB,MAAM;AACtD,YAAM,OAAO;AAEb,aAAO;AAAA,QACL,MAAM,OAA+B;AAAA,UACnC,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,CAAC,sBAAsB;AAC9B,oBAAM,UAAU,4BAA4B,iBAAiB;AAC7D,qBAAO,4BAA4B;AAAA,gBACjC,GAAG;AAAA,gBACH;AAAA,gBACA,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN;AAAA,oBACE,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,oBACZ,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,OAAO,MAAM;AAAA,oBACzB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,gCAAgC,MAAM;AACpC,YAAM,OAAO;AAEb,aAAO;AAAA,QACL,MAAM,OAA+B;AAAA,UACnC,OAAO,CAAC,WACN,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,MAAM;AACb,oBAAM;AACN,qBAAO;AAAA,gBACL;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT,SAAS;AAAA,oBACT,UAAU;AAAA,sBACR,IAAI;AAAA,wBACF;AAAA,0BACE,WAAW,OAAO,YAAY;AAAA,wBAChC;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT;AAAA,sBACE,IAAI;AAAA,wBACF,SAAS;AAAA,wBACT,UAAU;AAAA,sBACZ;AAAA,sBACA,KAAK;AAAA,wBACH,UAAU,OAAO,MAAM;AAAA,sBACzB;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA;AAAA,gBACA;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT,SAAS;AAAA,oBACT,UAAU;AAAA,kBACZ;AAAA,gBACF;AAAA,gBACA;AAAA,gBACA;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT;AAAA,sBACE,cAAc;AAAA,wBACZ,QAAQ;AAAA,0BACN,MAAM,EAAE,YAAY,EAAE;AAAA,wBACxB;AAAA,wBACA,aAAa;AAAA,0BACX,SAAS;AAAA,0BACT,UAAU;AAAA,4BACR,IAAI;AAAA,8BACF,oBAAoB,OAAO,kBAAkB;AAAA,4BAC/C;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACjHO,SAAS,YAAgC;AAC9C,SAAO;AACT;AAEO,SAAS,eACd,SACA,SACA,aACA;AACA,SAAO;AAAA,IACL,CAAC,OAAO,GAAG;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,QACR,IAAI;AAAA,UACF;AAAA,YACE,WAAW,YAAY;AAAA,UACzB;AAAA,UACA,oBAAoB,OAAO;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AClBA,IAAMC,UAAS;AAER,SAAS,UAAU;AACxB,SAAO;AAAA,IACL,UAAU,OAA+B;AAAA,MACvC,OAAO,CAAC,EAAE,oBAAoB,OAAO,YAAY,MAC/C,IAAI,gBAAgB;AAAA,QAClB,QAAQA;AAAA,QACR,MAAM;AAAA,QACN,SAAS,CAAC,SAAS;AACjB,gBAAM,YAAY;AAClB,gBAAM,UAAU,4BAA4B,MAAM,SAAS;AAE3D,iBAAO;AAAA,YACL,MAAM,WAAW;AAAA,YACjB,MAAM;AAAA,YACN,eAAe,SAAS,oBAAoB,WAAW;AAAA,YACvD,UAAU;AAAA,UACZ;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACL;AAAA,IACA,oBAAoB,CAAC,sBAA8B;AACjD,YAAM,WAAW;AACjB,YAAM,YAAY;AAElB,aAAO;AAAA,QACL,MAAM,OAA+B;AAAA,UACnC,OAAO,CAAC,EAAE,oBAAoB,SAAS,OAAO,YAAY,MACxD,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR,MAAM;AAAA,YACN,SAAS,CAAC,SAAS;AACjB,oBAAM,UAAU,4BAA4B,MAAM,SAAS;AAE3D,qBAAO;AAAA,gBACL;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,oBACZ,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,MAAM;AAAA,oBAClB;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA,eAAe,SAAS,SAAS,WAAW;AAAA,gBAC5C,UAAU;AAAA,cACZ;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,EAAE,oBAAoB,SAAS,OAAO,YAAY,MACxD,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR,MAAM;AAAA,YACN,SAAS,CAAC,SAAS;AACjB,oBAAM,UAAU,4BAA4B,MAAM,SAAS;AAE3D,qBAAO;AAAA,gBACL;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT,IAAI;AAAA,sBACF;AAAA,sBACA,YAAY,SAAS;AAAA,wBACnB,SAAS;AAAA,wBACT,UAAU;AAAA,0BACR,IAAI;AAAA,4BACF,WAAW;AAAA,0BACb;AAAA,wBACF;AAAA,sBACF,CAAC;AAAA,oBACH;AAAA,oBACA,KAAK;AAAA,sBACH,UAAU,MAAM;AAAA,oBAClB;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA,eAAe,SAAS,SAAS,WAAW;AAAA,gBAC5C,UAAU;AAAA,cACZ;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,EAAE,oBAAoB,SAAS,OAAO,YAAY,MACxD,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR,MAAM;AAAA,YACN,SAAS,CAAC,SAAS;AACjB,oBAAM,UAAU,4BAA4B,MAAM,SAAS;AAE3D,qBAAO;AAAA,gBACL;AAAA,kBACE,CAAC,OAAO,GAAG;AAAA,oBACT,IAAI,kBAAkB,SAAS;AAAA,sBAC7B,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,WAAW;AAAA,0BACb;AAAA,0BACA;AAAA,4BACE,YAAY,MAAM,WAAW;AAAA,0BAC/B;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,oBACD,KAAK;AAAA,sBACH,UAAU,MAAM;AAAA,oBAClB;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA,eAAe,SAAS,SAAS,WAAW;AAAA,gBAC5C,UAAU;AAAA,cACZ;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,yBAAyB,OAA+B;AAAA,MACtD,OAAO,CAAC,EAAE,oBAAoB,SAAS,OAAO,aAAa,IAAI,MAC7D,IAAI,gBAAgB;AAAA,QAClB,QAAQA;AAAA,QACR,MAAM;AAAA,QACN,SAAS,MAAM;AAAA,UACb;AAAA,YACE,CAAC,MAAM,WAAW,GAAG,MAAM,MAAM;AAAA,YACjC,CAAC,IAAI,WAAW,GAAG,IAAI,MAAM;AAAA,UAC/B;AAAA,UACA;AAAA,UACA,8BAA8B,SAAS,WAAW;AAAA,UAClD,UAAU;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACL;AAAA,EACF;AACF;;;ACpJA,IAAMC,UAAS;AAER,SAAS,YAAY;AAC1B,SAAO;AAAA,IACL,UAAU,MAAM;AACd,YAAM,SAAS;AAEf,aAAO;AAAA,QACL,MAAM,OAA+B;AAAA,UACnC,OAAO,CAAC,EAAE,oBAAoB,SAAS,OAAO,YAAY,MACxD,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR,MAAM;AAAA,YACN,SAAS,MAAM;AAAA,cACb;AAAA,gBACE,IAAI;AAAA,kBACF,UAAU;AAAA,oBACR,SAAS;AAAA,oBACT,UAAU;AAAA,kBACZ;AAAA,gBACF;AAAA,gBACA,KAAK;AAAA,kBACH,UAAU,MAAM;AAAA,gBAClB;AAAA,cACF;AAAA,cACA;AAAA,gBACE,SAAS;AAAA,gBACT,UAAU;AAAA,kBACR,IAAI;AAAA,oBACF;AAAA,sBACE,WAAW,YAAY;AAAA,oBACzB;AAAA,oBACA,oBAAoB,OAAO;AAAA,kBAC7B;AAAA,gBACF;AAAA,cACF;AAAA,cACA;AAAA,gBACE,SAAS;AAAA,gBACT,WAAW;AAAA,cACb;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL;AAAA,QACA,IAAI,OAA+B;AAAA,UACjC,OAAO,CAAC,EAAE,oBAAoB,OAAO,YAAY,MAC/C,IAAI,gBAAgB;AAAA,YAClB,QAAQA;AAAA,YACR,MAAM;AAAA,YACN,SAAS,MAAM;AAAA,cACb;AAAA,gBACE,IAAI;AAAA,kBACF,UAAU;AAAA,oBACR,SAAS;AAAA,oBACT,UAAU;AAAA,sBACR,IAAI;AAAA,wBACF;AAAA,0BACE,WAAW,YAAY;AAAA,wBACzB;AAAA,wBACA;AAAA,0BACE,gBAAgB,MAAM,uBAAuB;AAAA,wBAC/C;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA,KAAK;AAAA,kBACH,UAAU,MAAM,UAAU;AAAA,gBAC5B;AAAA,cACF;AAAA,cACA;AAAA,gBACE,SAAS;AAAA,gBACT,UAAU;AAAA,kBACR,IAAI;AAAA,oBACF;AAAA,sBACE,WAAW,YAAY;AAAA,oBACzB;AAAA,oBACA,oBAAoB,kBAAkB;AAAA,kBACxC;AAAA,gBACF;AAAA,cACF;AAAA,cACA;AAAA,gBACE,SAAS;AAAA,gBACT,WAAW;AAAA,cACb;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACxFO,SAAS,mBAAmB;AACjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACdA,SAAS,UAAU,gBAAAC,qBAAoB;;;ACAhC,IAAM,cAAc;AAAA,EACzB;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAChE,EAAE,cAAc,WAAW,MAAM,iBAAiB,MAAM,UAAU;AAAA,MAClE,EAAE,cAAc,UAAU,MAAM,mBAAmB,MAAM,SAAS;AAAA,MAClE,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU;AAAA,MACrE,EAAE,cAAc,SAAS,MAAM,wBAAwB,MAAM,QAAQ;AAAA,MACrE,EAAE,cAAc,WAAW,MAAM,qBAAqB,MAAM,UAAU;AAAA,IACxE;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,uBAAuB,MAAM,QAAQ;AAAA,EACzD,EAAE,QAAQ,CAAC,GAAG,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACvD,EAAE,QAAQ,CAAC,GAAG,MAAM,kCAAkC,MAAM,QAAQ;AAAA,EACpE,EAAE,QAAQ,CAAC,GAAG,MAAM,kCAAkC,MAAM,QAAQ;AAAA,EACpE,EAAE,QAAQ,CAAC,GAAG,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC3D,EAAE,QAAQ,CAAC,GAAG,MAAM,uBAAuB,MAAM,QAAQ;AAAA,EACzD,EAAE,QAAQ,CAAC,GAAG,MAAM,YAAY,MAAM,QAAQ;AAAA,EAC9C;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU;AAAA,MACjE,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU;AAAA,MACrE,EAAE,cAAc,WAAW,MAAM,uBAAuB,MAAM,UAAU;AAAA,MACxE,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAChE,EAAE,cAAc,SAAS,MAAM,cAAc,MAAM,QAAQ;AAAA,IAC7D;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU;AAAA,MAC7D,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU;AAAA,MACjE,EAAE,cAAc,WAAW,MAAM,oBAAoB,MAAM,UAAU;AAAA,MACrE,EAAE,cAAc,WAAW,MAAM,uBAAuB,MAAM,UAAU;AAAA,MACxE,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAChE,EAAE,cAAc,UAAU,MAAM,eAAe,MAAM,SAAS;AAAA,IAChE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,mBAAmB,MAAM,QAAQ;AAAA,EACrD,EAAE,QAAQ,CAAC,GAAG,MAAM,gCAAgC,MAAM,QAAQ;AAAA,EAClE,EAAE,QAAQ,CAAC,GAAG,MAAM,wBAAwB,MAAM,QAAQ;AAAA,EAC1D,EAAE,QAAQ,CAAC,GAAG,MAAM,mBAAmB,MAAM,QAAQ;AAAA,EACrD,EAAE,QAAQ,CAAC,GAAG,MAAM,4BAA4B,MAAM,QAAQ;AAAA,EAC9D,EAAE,QAAQ,CAAC,GAAG,MAAM,mBAAmB,MAAM,QAAQ;AAAA,EACrD,EAAE,QAAQ,CAAC,GAAG,MAAM,gBAAgB,MAAM,QAAQ;AAAA,EAClD,EAAE,QAAQ,CAAC,GAAG,MAAM,gBAAgB,MAAM,QAAQ;AAAA,EAClD,EAAE,QAAQ,CAAC,GAAG,MAAM,oBAAoB,MAAM,QAAQ;AAAA,EACtD,EAAE,QAAQ,CAAC,GAAG,MAAM,wBAAwB,MAAM,QAAQ;AAAA,EAC1D,EAAE,QAAQ,CAAC,GAAG,MAAM,gBAAgB,MAAM,QAAQ;AAAA,EAClD,EAAE,QAAQ,CAAC,GAAG,MAAM,yCAAyC,MAAM,QAAQ;AAAA,EAC3E,EAAE,QAAQ,CAAC,GAAG,MAAM,qCAAqC,MAAM,QAAQ;AAAA,EACvE;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,KAAK,MAAM,UAAU;AAAA,MACtD,EAAE,cAAc,WAAW,MAAM,KAAK,MAAM,UAAU;AAAA,IACxD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,KAAK,MAAM,UAAU;AAAA,MACtD,EAAE,cAAc,WAAW,MAAM,KAAK,MAAM,UAAU;AAAA,MACtD,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,IAClE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,KAAK,MAAM,UAAU,CAAC;AAAA,IAChE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,KAAK,MAAM,UAAU,CAAC;AAAA,IAChE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,KAAK,MAAM,UAAU,CAAC;AAAA,IAChE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,QAAQ,CAAC,GAAG,MAAM,sBAAsB,MAAM,QAAQ;AAAA,EACxD,EAAE,QAAQ,CAAC,GAAG,MAAM,gBAAgB,MAAM,QAAQ;AAAA,EAClD;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,QAAQ,MAAM,WAAW,MAAM,OAAO;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,SAAS,MAAM,WAAW,MAAM,QAAQ;AAAA,IAC1E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,MACxE;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,SAAS,MAAM,WAAW,MAAM,QAAQ;AAAA,IAC1E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,aAAa,MAAM,QAAQ,MAAM,QAAQ;AAAA,UACzD,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,QACvD;AAAA,QACA,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,SAAS,MAAM,SAAS,MAAM,QAAQ;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,IAC1E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,SAAS,MAAM,SAAS,MAAM,QAAQ;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,IAC1E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,SAAS,MAAM,SAAS,MAAM,QAAQ;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,EAAE,SAAS,OAAO,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,IAC1E;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IAC1E,MAAM;AAAA,IACN,SAAS;AAAA,MACP,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS;AAAA,MACnD,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS;AAAA,IACrD;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,UAAU,CAAC;AAAA,IAC1E,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,sBAAsB,MAAM,IAAI,MAAM,QAAQ,CAAC;AAAA,IACzE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,sBAAsB,MAAM,IAAI,MAAM,QAAQ,CAAC;AAAA,IACzE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU;AAAA,MACrD,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU;AAAA,IACvD;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,UAAU,MAAM,oBAAoB,MAAM,SAAS;AAAA,MACnE,EAAE,cAAc,WAAW,MAAM,kBAAkB,MAAM,UAAU;AAAA,IACrE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,IACpE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,aAAa,MAAM,QAAQ,MAAM,YAAY;AAAA,MAC7D,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,IAC1D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,UAAU,MAAM,oBAAoB,MAAM,SAAS;AAAA,MACnE;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,aAAa,MAAM,QAAQ,MAAM,QAAQ;AAAA,UACzD,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,QACvD;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,kBAAkB,MAAM,UAAU;AAAA,MACnE,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,IAC7D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,UAAU;AAAA,UAChE,EAAE,cAAc,UAAU,MAAM,SAAS,MAAM,SAAS;AAAA,UACxD,EAAE,cAAc,gBAAgB,MAAM,WAAW,MAAM,QAAQ;AAAA,UAC/D,EAAE,cAAc,SAAS,MAAM,UAAU,MAAM,QAAQ;AAAA,UACvD,EAAE,cAAc,UAAU,MAAM,kBAAkB,MAAM,SAAS;AAAA,UACjE,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU;AAAA,UACjE,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,UAC3D,EAAE,cAAc,WAAW,MAAM,MAAM,MAAM,UAAU;AAAA,QACzD;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,YAAY;AAAA,MAClE;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV,EAAE,cAAc,SAAS,MAAM,WAAW,MAAM,QAAQ;AAAA,cACxD,EAAE,cAAc,UAAU,MAAM,gBAAgB,MAAM,SAAS;AAAA,cAC/D,EAAE,cAAc,WAAW,MAAM,cAAc,MAAM,UAAU;AAAA,cAC/D;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,aAAa,MAAM,aAAa,MAAM,YAAY;AAAA,UAClE;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,cAAc,WAAW,MAAM,kBAAkB,MAAM,UAAU;AAAA,QACrE;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IACtE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,WAAW,MAAM,YAAY,MAAM,UAAU,CAAC;AAAA,IACvE,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC/D,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ADvwBO,SAAS,UAAU;AACxB,SAAO;AAAA,IACL,oBAA8C;AAC5C,aAAO;AAAA,QACL,OAAO,CAAC,EAAE,OAAO,aAAa,QAAQ,eAAe,MAAM;AACzD,cAAI,CAAC,MAAM,SAAS;AAClB,kBAAM,IAAI,MAAM,SAAS,MAAM,GAAG,iBAAiB;AAAA,UACrD;AAEA,cAAI,CAAC,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,WAAW,SAAS;AACtD,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAEA,cAAI,CAACC,cAAa,eAAe,WAAW,GAAG;AAC7C,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,IAAI,eAAe;AAAA,YACxB,SAAS,OAAO,UAAU;AAAA,YAC1B,KAAK;AAAA,YACL,MAAM;AAAA,cACJ,MAAM;AAAA,cACN,YAAY;AAAA,cACZ,eAAe;AAAA,YACjB;AAAA,YACA,MAAM;AAAA,YACN,QAAQ;AAAA,UACV,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AErCO,SAAS,mBAAmB;AACjC,SAAO;AAAA,IACL,cAAc,OAAO;AAAA,MACnB,kBAAkB,OAAiC;AAAA,QACjD,OAAO,CAAC,EAAE,SAAS,SAAS,SAAS,MAAM;AACzC,gBAAM,OAAO;AAAA,YACX;AAAA,cACE,kBAAkB;AAAA,gBAChB,SAAS,SAAS,WAAW;AAAA,gBAC7B,WAAW;AAAA,gBACX,QAAQ,SAAS;AAAA,cACnB;AAAA,YACF;AAAA,YACA;AAAA,UACF;AACA,iBAAO,IAAI,qBAAqB;AAAA,YAC9B,QAAQ;AAAA,YACR,MAAM;AAAA,YACN;AAAA,YACA,WAAW;AAAA,YACX,WAAW,OAAO,SAIhB,KAAK,MAAM,SAAS,IAAI,KAAK,OAAO,SAAS;AAAA,UACjD,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,cAAc,OAAiC;AAAA,QAC7C,OAAO,CAAC,EAAE,SAAS,SAAS,YAAY,MAAM;AAC5C,gBAAM,qBAAqB,UACvB,YAAY,cAAc,OAAO,IACjC;AAEJ,gBAAM,OAAO;AAAA,YACX;AAAA,cACE,cAAc;AAAA,gBACZ,SACE;AAAA;AAAA,gBACF,eAAe;AAAA,kBACb,SAAS,oBAAoB;AAAA,kBAC7B,WAAW;AAAA,kBACX,QAAQ,SAAS;AAAA,gBACnB;AAAA,cACF;AAAA,YACF;AAAA,YACA;AAAA,UACF;AACA,iBAAO,IAAI,qBAAqB;AAAA,YAC9B,QAAQ;AAAA,YACR,MAAM;AAAA,YACN;AAAA,YACA,WAAW;AAAA,YACX,WAAW,OAAO,SAIhB,KAAK,MAAM,SAAS,IAAI,KAAK,OAAO,SAAS;AAAA,UACjD,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACnEA,SAAwB,gBAAAC,qBAAoB;AAC5C,SAAS,gBAAAC,qBAAoB;AAQ7B,SAAS,YAAAC,iBAAgB;AACzB,SAAS,iBAAAC,sBAAqB;AAI9B,IAAM,iBAAiB,MAAM;AAC7B,IAAM,qBACJ;AAEK,IAAM;AAEb,SAASC,WAAU;AACjB,SAAO;AACT;AAEO,SAAS,4BAA4B,YAAsB;AAChE,SAAO;AAAA,IACL,eAAe,WAAW,IAAI,CAAC,eAAe;AAAA,MAC5C,IAAI,EAAE,GAAG,UAAU;AAAA,MACnB,KAAK;AAAA,QACH,UAAU;AAAA,MACZ;AAAA,IACF,EAAE;AAAA,EACJ;AACF;AAEO,SAAS,8BAA8B,QAAmB;AAC/D,MAAI,CAACC,cAAa,eAAe,MAAM,GAAG;AACxC,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AAEA,SAAO;AAAA,IACL,iBAAiB;AAAA,MACf,iBAAiB,mBAAmB,MAAM;AAAA,IAC5C;AAAA,EACF;AACF;AAEO,SAAS,4BAA4B,QAAmB;AAC7D,MAAI,CAACA,cAAa,eAAe,MAAM,GAAG;AACxC,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AAEA,SAAO;AAAA,IACL,eAAe;AAAA,MACb,IAAI;AAAA,QACF;AAAA,UACE,WAAW,OAAO;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,oCAAoC,YAAsB;AACxE,SAAO;AAAA,IACL,uBAAuB,WAAW,IAAI,CAAC,eAAe;AAAA,MACpD,IAAI,EAAE,GAAG,UAAU;AAAA,MACnB,KAAK;AAAA,QACH,UAAU;AAAA,MACZ;AAAA,IACF,EAAE;AAAA,EACJ;AACF;AAEO,SAAS,4BAA4B;AAC1C,SAAO;AAAA,IACL,aAAa;AAAA,EACf;AACF;AAEO,SAAS,2BAA2B,WAAmB;AAG5D,SAAO;AAAA,IACL,cAAc;AAAA,MACZ,MAAM;AAAA,QACJ,IAAI;AAAA,UACF,GAAG;AAAA,QACL;AAAA,QACA,KAAK;AAAA,UACH,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,MACA,cAAc;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,2BAA2B,SAAiBC,SAAkB;AAC5E,QAAM,aAAa;AAAA,IACjB,CAACC,cAAa,OAAO,IAAI,iBAAiB,aAAa,GAAG;AAAA,MACxD,KAAKA,cAAa,OAAO,IAAI,UAAUC,UAASC,eAAc,OAAO,CAAC;AAAA,MACtE,SAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cAAc;AAAA,MACZ,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,YAAYH,QAAO;AAAA,QACrB;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX,UAAU;AAAA,UACR,IAAIF,SAAQ,IAAI,CAAC,UAAU,IAAI;AAAA,QACjC;AAAA,QACA,SAAS;AAAA,MACX;AAAA,MACA,YAAY;AAAA,IACd;AAAA,EACF;AACF;AAEO,SAAS,yBAAyB;AACvC,SAAO;AAAA,IACL,UAAU;AAAA,EACZ;AACF;AAEA,eAAsB,iCACpB,KACA,cACA,kBACA;AACA,QAAM,oBAAoB,MAAM,IAAI,KAAK,cAAc,eAErD;AAAA,IACA,CAAC,kBAAkB,GAAG;AAAA,EACxB,CAAC;AACD,MAAI,CAAC,kBAAkB,MAAM;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,kBAAkB;AAEtC,QAAM,wBACJ,MAAM,IAAI,KAAK,cAAc,sBAE3B,aAAa;AAAA,IACb,CAAC,kBAAkB,GAAG;AAAA,MACpB,GAAG;AAAA,IACL;AAAA,EACF,CAAC;AAIH,MAAI,CAAC,sBAAsB,MAAM;AAC/B,YAAQ;AAAA,MACN;AAAA,IACF;AAEA,UAAM,0BACJ,MAAM,IAAI,KAAK,cAAc,sBAE3B,aAAa;AAAA,MACb,cAAc,GAAG;AAAA,QACf,GAAG;AAAA,MACL;AAAA,IACF,CAAC;AAEH,QAAI,CAAC,wBAAwB,MAAM;AACjC,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO,wBAAwB,KAAK,SAAS;AAAA,EAC/C;AACA,SAAO,sBAAsB,KAAK,SAAS;AAC7C;;;ACtLA,SAAS,iBAAiB;AAQnB,SAAS,sBAAsB;AACpC,SAAO;AAAA,IACL,UAAU,CAAC,UAAU,OAAO;AAAA,MAC1B;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,IAEA,kBAAkB,CAAC,WAA+B;AAAA,MAChD,UAAU;AAAA,QACR,IAAI;AAAA,UACF;AAAA,YACE,gBAAgB,MAAM,uBAAuB;AAAA,UAC/C;AAAA,UACA;AAAA,YACE,cAAc;AAAA,cACZ,KAAK,MAAM;AAAA,cACX,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IAEA,kBAAkB,CAAC,WAA+B;AAAA,MAChD,UAAU;AAAA,QACR,IAAI,CAAC,EAAE,cAAc,MAAM,WAAW,EAAE,CAAC;AAAA,MAC3C;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IAEA,qBAAqB,CAAC,WAA+B;AAAA,MACnD,UAAU;AAAA,QACR,IAAI;AAAA,UACF,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;AAAA,UAChD,EAAE,cAAc,EAAE,KAAK,MAAM,SAAS,SAAS,KAAK,EAAE;AAAA,QACxD;AAAA,MACF;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IAEA,oBAAoB,CAAC,UAA8B;AACjD,aAAO;AAAA,QACL,UAAU;AAAA,UACR,IAAI;AAAA,YACF;AAAA,cACE,gBAAgB,MAAM,uBAAuB;AAAA,YAC/C;AAAA,UACF;AAAA,QACF;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IAEA,mCAAmC,CAAC,UAA8B;AAChE,aAAO;AAAA,QACL,UAAU;AAAA,UACR,IAAI;AAAA,YACF;AAAA,cACE,gBAAgB,MAAM,uBAAuB;AAAA,YAC/C;AAAA,YACA,EAAE,cAAc,MAAM,WAAW,EAAE;AAAA,UACrC;AAAA,QACF;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IAEA,YAAY,OAAO;AAAA,MACjB,cAAc,CAAC,QAAkB,UAAsB;AACrD,YAAI,EAAE,kBAAkB,YAAY;AAClC,gBAAM,IAAI;AAAA,YACR,SAAS,OAAO,IAAI;AAAA,UACtB;AAAA,QACF;AAEA,cAAM,cAAc,OAAO,cAAc,KAAK;AAE9C,eAAO;AAAA,UACL,UAAU;AAAA,YACR,IAAI;AAAA,cACF,EAAE,WAAW,OAAO,YAAY;AAAA,cAChC,EAAE,gBAAgB,YAAY,uBAAuB,EAAE;AAAA,cACvD,EAAE,cAAc,EAAE,KAAK,YAAY,SAAS,SAAS,KAAK,EAAE;AAAA,YAC9D;AAAA,UACF;AAAA,UACA,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MAEA,gBAAgB,CAAC,QAAkB,UAA8B;AAC/D,YAAI,EAAE,kBAAkB,YAAY;AAClC,gBAAM,IAAI;AAAA,YACR,SAAS,OAAO,IAAI;AAAA,UACtB;AAAA,QACF;AAEA,cAAM,cAAc,OAAO,cAAc,KAAK;AAE9C,eAAO;AAAA,UACL,UAAU;AAAA,YACR,IAAI;AAAA,cACF,EAAE,WAAW,OAAO,YAAY;AAAA,cAChC;AAAA,gBACE,gBAAgB,YAAY,uBAAuB;AAAA,cACrD;AAAA,YACF;AAAA,UACF;AAAA,UACA,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MAEA,+BAA+B,CAC7B,QACA,UACW;AACX,YAAI,EAAE,kBAAkB,YAAY;AAClC,gBAAM,IAAI;AAAA,YACR,SAAS,OAAO,IAAI;AAAA,UACtB;AAAA,QACF;AAEA,cAAM,cAAc,OAAO,cAAc,KAAK;AAE9C,eAAO;AAAA,UACL,UAAU;AAAA,YACR,IAAI;AAAA,cACF,EAAE,WAAW,OAAO,YAAY;AAAA,cAChC,EAAE,gBAAgB,YAAY,uBAAuB,EAAE;AAAA,cACvD,EAAE,cAAc,YAAY,WAAW,EAAE;AAAA,YAC3C;AAAA,UACF;AAAA,UACA,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB;AACpC,SAAO;AAAA,IACL,2BAA2B,OAAO,OAAmB,QAAoB;AACvE,YAAM,SAAS,MAAM,IAAI,MAAM,cAAc;AAAA,QAC3C,MAAM,qBAAqB;AAAA,MAC7B;AAEA,UAAI,CAAC,UAAU,OAAO,SAAS;AAC7B,cAAM,IAAI,MAAM,+BAA+B,MAAM,UAAU,CAAC,EAAE;AAAA,MACpE;AAEA,aAAO,OAAO,OAAO;AAAA,IACvB;AAAA,IACA,aAAa,OAAO,OAAmB,QAAoB;AACzD,UAAI,CAAC,MAAM,qBAAqB,GAAG;AACjC,cAAM,IAAI;AAAA,UACR,0CAA0C,MAAM,UAAU,CAAC;AAAA,QAC7D;AAAA,MACF;AAEA,YAAM,qBAAqB,MAAM,IAAI,MAAM,cAAc,YAEvD,MAAM,qBAAqB,CAAC;AAE9B,UACE,CAAC,sBACD,mBAAmB,UACnB,mBAAmB,WACnB,CAAC,mBAAmB,OAAO,EAAE,OAC7B;AACA,cAAM,yBACJ,MAAM,IAAI,MAAM,kBAAkB,WAEhC,MAAM,qBAAqB,CAAC;AAEhC,YACE,CAAC,0BACD,uBAAuB,WACvB,uBAAuB,QACvB;AACA,gBAAM,IAAI,MAAM,iCAAiC,MAAM,UAAU,CAAC,EAAE;AAAA,QACtE;AAEA,eAAO,uBAAuB,gBAAgB,EAAE,OAAO;AAAA,MACzD;AAEA,aAAO;AAAA,QACL;AAAA,QACA,mBAAmB,gBAAgB,EAAE,MAAM,OAAO;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AACF;;;ACtLA,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyD;AACvD,QAAM,EAAE,OAAO,eAAe,SAAS,IAAI;AAC3C,QAAM,sBAAsB,MAAM,qBAAqB,MAAM;AAE7D,QAAMM,UAAS,CAAC,mBAAmB;AAEnC,MAAI,aAAa,iBAAiB,2BAA2B;AAC3D,UAAM,2BAA2B,MAAM,0BAA0B,MAAM;AAEvE,QAAI,QAAQ,oCAAoC;AAC9C,MAAAA,QAAO,QAAQ,wBAAwB;AAAA,IACzC,OAAO;AACL,MAAAA,QAAO,KAAK,wBAAwB;AAAA,IACtC;AAAA,EACF;AAEA,SAAO,CAACA,SAAQ,mBAAmB;AACrC;AAWO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA,QAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,eAAe;AAAA,IACnB,sBACI,4BAA4BA,OAAM,IAClC,oCAAoCA,OAAM;AAAA,IAC9C,0BAA0B;AAAA,IAC1B,2BAA2B,mBAAmB;AAAA,IAC9C,2BAA2B,SAASA,OAAM;AAAA,IAC1C,uBAAuB;AAAA,EACzB;AAEA,MAAI,mBAAmB;AACrB,WAAO;AAAA,MACL,8BAA8B,MAAM;AAAA,MACpC,4BAA4B,MAAM;AAAA,MAClC,GAAG;AAAA,IACL;AAAA,EACF;AAEA,SAAO;AACT;;;AChEO,SAAS,gBAAgB;AAC9B,QAAM,eAAe;AAAA,IACnB,UAAU,CAAC,YACT,oBAAoB;AAAA,MAClB,sBAAsB,MACpB,oBAAoB,EAAE,SAAS,QAAQ,OAAO;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,IAEH,yBAAyB,CAAC,YACxB,oBAAoB;AAAA,MAClB,sBAAsB,MAAM,oBAAoB,EAAE,SAAS;AAAA,MAC3D,2BAA2B,CAAC,EAAE,MAAM,MAClC,oBAAoB,EAAE,kCAAkC,KAAK;AAAA,MAC/D;AAAA,IACF,CAAC;AAAA,IAEH,mCAAmC,CAAC,YAClC,oBAAoB;AAAA,MAClB,sBAAsB,CAAC,EAAE,SAAS,MAChC,oBAAoB,EAAE,kCAAkC,QAAQ;AAAA,MAClE;AAAA,IACF,CAAC;AAAA,IAEH,+BAA+B,CAAC,YAC9B,oBAAoB;AAAA,MAClB,sBAAsB,MAAM,oBAAoB,EAAE,SAAS;AAAA,MAC3D,2BAA2B,CAAC,EAAE,QAAQ,MAAM,MAC1C,oBAAoB,EACjB,WAAW,EACX,8BAA8B,QAAQ,KAAK;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,IAEH,kBAAkB,CAAC,YACjB,oBAAoB;AAAA,MAClB,sBAAsB,CAAC,EAAE,SAAS,MAChC,oBAAoB,EAAE,iBAAiB,QAAQ;AAAA,MACjD;AAAA,IACF,CAAC;AAAA,IAEH,oBAAoB,CAAC,YACnB,oBAAoB;AAAA,MAClB,sBAAsB,CAAC,EAAE,SAAS,MAChC,oBAAoB,EAAE,mBAAmB,QAAQ;AAAA,MACnD;AAAA,IACF,CAAC;AAAA,IAEH,mCAAmC,CAAC,YAClC,oBAAoB;AAAA,MAClB,sBAAsB,CAAC,EAAE,SAAS,MAChC,oBAAoB,EAAE,mBAAmB,QAAQ;AAAA,MACnD,2BAA2B,CAAC,EAAE,MAAM,MAClC,oBAAoB,EAAE,iBAAiB,KAAK;AAAA,MAC9C;AAAA,IACF,CAAC;AAAA,IAEH,qBAAqB,CAAC,YACpB,oBAAoB;AAAA,MAClB,sBAAsB,CAAC,EAAE,SAAS,MAChC,oBAAoB,EAAE,oBAAoB,QAAQ;AAAA,MACpD;AAAA,IACF,CAAC;AAAA,EACL;AAEA,QAAM,gBAAgB;AAAA,IACpB,wBAAwB,CAAC,YACvB,oBAAoB;AAAA,MAClB,sBAAsB,CAAC,EAAE,QAAQ,MAAM,MACrC,oBAAoB,EAAE,WAAW,EAAE,aAAa,QAAQ,KAAK;AAAA,MAC/D;AAAA,IACF,CAAC;AAAA,IAEH,0BAA0B,CAAC,YACzB,oBAAoB;AAAA,MAClB,sBAAsB,CAAC,EAAE,QAAQ,SAAS,MACxC,oBAAoB,EAAE,WAAW,EAAE,eAAe,QAAQ,QAAQ;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACL;AAEA,QAAM,eAAe;AAAA,IACnB,2BAA2B,CAAC,YAC1B,oBAAoB;AAAA,MAClB,sBAAsB,OAAO,EAAE,UAAU,IAAI,MAAM;AACjD,eAAO,MAAM,oBAAoB,EAAE;AAAA,UACjC;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,kBAAkB,CAAC,YACjB,oBAAoB;AAAA,MAClB,sBAAsB,OAAO,EAAE,UAAU,IAAI,MAAM;AACjD,eAAO,MAAM,oBAAoB,EAAE,YAAY,UAAU,GAAG;AAAA,MAC9D;AAAA,MACA,2BAA2B,OAAO,EAAE,OAAO,IAAI,MAAM;AACnD,eAAO,MAAM,oBAAoB,EAAE,YAAY,OAAO,GAAG;AAAA,MAC3D;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACL;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;AAQA,IAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,OAAmD;AAAA,EACjD,OAAO,CAAC,WAAmC;AACzC,WAAO,IAAI,oBAAoB;AAAA,MAC7B,KAAK,OAAO;AAAA,MACZ,MAAM,YAA6B;AACjC,cAAM,CAACC,SAAQ,mBAAmB,IAAI,MAAM,mBAAmB;AAAA,UAC7D;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAED,cAAM,eAAe,gBAAgB;AAAA,UACnC,qBAAqB,QAAQ;AAAA,UAC7B,QAAAA;AAAA,UACA;AAAA,UACA,SAAS,OAAO;AAAA,UAChB,QAAQ,OAAO;AAAA,UACf,mBAAmB,QAAQ;AAAA,QAC7B,CAAC;AAED,eAAO;AAAA,UACL,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AChKO,SAAS,aAAa;AAC3B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACAA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,iBAAAC,sBAAqB;;;ACV9B,SAAS,YAAAC,iBAAgB;AACzB,SAAS,iBAAAC,sBAAqB;AAMvB,IAAM,sBACX,CACE,SACA,QACA,kBACA,uBAEF,CAAC,QAAQ,kBAAkB;AACzB,QAAM,uBAAuBD,UAASC,eAAc,aAAa,CAAC;AAClE,QAAM,UAAU,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AAExD,QAAM,QAAQ,OAAO,KAAK,CAACC,WAAU;AACnC,QACEA,OAAM,MAAM,YAAY,WACxB,CAAC,QAAQ,SAASA,OAAM,MAAM,MAAM,GACpC;AACA,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,UAAU,iBAAiBA,MAAK;AACtC,aAAO,YAAY;AAAA,IACrB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,MAAI,CAAC,OAAO;AACV,WAAO,EAAE,SAAS,MAAM;AAAA,EAC1B;AAEA,MAAI;AACF,UAAM,YAAY,mBAAmB,OAAO,MAAM;AAClD,WAAO,EAAE,SAAS,MAAM,WAAW,MAAM;AAAA,EAC3C,QAAQ;AACN,WAAO,EAAE,SAAS,MAAM,MAAM;AAAA,EAChC;AACF;AAEK,IAAM,2BACX,CACE,SACA,QACA,gBACA,iBAEF,CAAC,QAAQ,cAAc;AACrB,QAAM,UAAU,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AAExD,QAAM,QAAQ,OAAO,KAAK,CAACA,WAAU;AACnC,QACEA,OAAM,MAAM,YAAY,WACxB,CAAC,QAAQ,SAASA,OAAM,MAAM,MAAM,GACpC;AACA,aAAO;AAAA,IACT;AAEA,WAAO,eAAeA,QAAO,SAAS;AAAA,EACxC,CAAC;AAED,MAAI,CAAC,OAAO;AACV,WAAO,EAAE,SAAS,OAAO,SAAS,MAAM;AAAA,EAC1C;AAEA,QAAM,UAAU,aAAa,KAAK;AAClC,SAAO,EAAE,SAAS,MAAM,SAAS,MAAM;AACzC;;;AD3BK,SAAS,aAAa;AAC3B,SAAO;AAAA,IACL,cACE,MACA,CAAC,UAA+B;AAC9B,YAAM,YAAY,MAAM,MAAM;AAC9B,YAAM,WAAW,UAAU,OAAO,SAAS,KAAK,CAAC;AAEjD,UAAI,SAAS,eAAe;AAC1B,eAAO,SAAS,cAAc,GAAG,MAAM;AAAA,MACzC,WAAW,SAAS,gBAAgB;AAClC,eAAO,SAAS,eAAe,IAAI,SAAS;AAAA,MAC9C,OAAO;AACL,cAAM,IAAI,MAAM,0BAA0B;AAAA,MAC5C;AAAA,IACF;AAAA,IAEF,kBACE,MACA,CAAC,UAA+B;AAC9B,YAAM,YAAY,MAAM,MAAM;AAC9B,aAAOC,UAASC,eAAc,UAAU,OAAO,SAAS,CAAC,CAAC;AAAA,IAC5D;AAAA,EACJ;AACF;AAEO,SAAS,eAAe;AAC7B,SAAO;AAAA,IACL,cACE,MACA,CAAC,UAA+B;AAC9B,YAAM,YAAY,MAAM,MAAM;AAC9B,aAAO,UAAU,UAAU,MAAM;AAAA,IACnC;AAAA,IAEF,eACE,MACA,CAAC,QAAqB,WAAmC;AACvD,YAAM,YAAY,QAAQ;AAAA,QACxB,CAAC,UACC,MAAM,MAAM,YAAY,eACxB,MAAM,MAAM,WAAW;AAAA,MAC3B;AAEA,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,iCAAiC;AAAA,MACnD;AAEA,YAAM,YAAY,UAAU,MAAM;AAClC,aAAO,UAAU,YAAY,MAAM;AAAA,IACrC;AAAA,EACJ;AACF;AAEO,SAAS,iBAAiB;AAC/B,SAAO;AAAA,IACL,oBACE,MACA,CAAC,OAAoB,cAAgC;AACnD,UAAI,CAAC,UAAW,QAAO;AAEvB,UAAI;AACF,cAAM,YAAY,MAAM,MACrB;AACH,eAAO,UAAU,GAAG,SAAS,MAAM;AAAA,MACrC,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEF,mBACE,MACA,CAAC,OAAoB,cAAgC;AACnD,UAAI,CAAC,UAAW,QAAO;AAEvB,UAAI;AACF,cAAM,YAAY,MAAM,MAAM;AAC9B,eAAO,UAAU,YAAY,SAAS,MAAM;AAAA,MAC9C,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEF,sBACE,MACA,CAAC,UAA+B;AAC9B,YAAM,YAAY,MAAM,MAAM;AAC9B,aAAO,UAAU,WAAW,MAAM;AAAA,IACpC;AAAA,IAEF,OAAO,MAAM,MAAe;AAAA;AAAA,EAC9B;AACF;AAEO,SAAS,eAAe;AAC7B,SAAO;AAAA,IACL,2BACE,MACA,CAAC,UAAgC;AAC/B,UAAI;AACF,cAAM,YAAY,MAAM,MACrB;AACH,eAAO,UAAU,QAAQ;AAAA,MAC3B,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEF,oBACE,MACA,CAAC,UAAgC;AAC/B,aAAO,MAAM,MAAM,WAAW;AAAA,IAChC;AAAA,IAEF,YAAY,MAAM,MAAe;AAAA;AAAA,EACnC;AACF;AAEA,SAAS,cAAc;AACrB,SAAO;AAAA,IACL,WAAW,MACT;AAAA,MACE;AAAA,MACA;AAAA,MACA,WAAW,EAAE,aAAa;AAAA,MAC1B,aAAa,EAAE,aAAa;AAAA,IAC9B;AAAA,IAEF,aAAa,MACX;AAAA,MACE;AAAA,MACA;AAAA,MACA,WAAW,EAAE,aAAa;AAAA,MAC1B,aAAa,EAAE,aAAa;AAAA,IAC9B;AAAA,IAEF,yBAAyB,MACvB;AAAA,MACE;AAAA,MACA;AAAA,MACA,WAAW,EAAE,aAAa;AAAA,MAC1B,aAAa,EAAE,cAAc;AAAA,IAC/B;AAAA,IAEF,SAAS,MACP;AAAA,MACE;AAAA,MACA,CAAC,0BAA0B,mBAAmB;AAAA,MAC9C,WAAW,EAAE,iBAAiB;AAAA,MAC9B,aAAa,EAAE,cAAc;AAAA,IAC/B;AAAA,IAEF,gBAAgB,MAAqB,CAAC,WAAW;AAC/C,YAAM,QAAQ,OAAO;AAAA,QACnB,CAACC,WACCA,OAAM,MAAM,YAAY,oBACxBA,OAAM,MAAM,WAAW;AAAA,MAC3B;AAEA,aAAO,QAAQ,EAAE,SAAS,MAAM,MAAM,IAAI,EAAE,SAAS,MAAM;AAAA,IAC7D;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB;AAC1B,SAAO;AAAA,IACL,cAAc,MACZ;AAAA,MACE;AAAA,MACA;AAAA,MACA,eAAe,EAAE,mBAAmB;AAAA,MACpC,aAAa,EAAE,0BAA0B;AAAA,IAC3C;AAAA,IAEF,WAAW,MAA0B,CAAC,QAAQ,cAAc;AAE1D,YAAM,mBAAmB,eAAe,EAAE,kBAAkB;AAE5D,YAAM,eAAe,OAAO,KAAK,CAAC,UAAU;AAC1C,YACE,MAAM,MAAM,YAAY,eACxB,MAAM,MAAM,WAAW,WACvB;AACA,iBAAO;AAAA,QACT;AAEA,eAAO,iBAAiB,OAAO,SAAS;AAAA,MAC1C,CAAC;AAED,YAAM,YAAY,OAAO,KAAK,CAAC,UAAU;AACvC,YACE,MAAM,MAAM,YAAY,eACxB,MAAM,MAAM,WAAW,QACvB;AACA,iBAAO;AAAA,QACT;AAEA,eAAO,iBAAiB,OAAO,SAAS;AAAA,MAC1C,CAAC;AAED,UAAI,CAAC,gBAAgB,CAAC,WAAW;AAC/B,eAAO,EAAE,SAAS,OAAO,SAAS,MAAM;AAAA,MAC1C;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,CAAC,CAAC;AAAA,QACX,OAAO,gBAAgB;AAAA,MACzB;AAAA,IACF;AAAA,IAEA,gBAAgB,MACd;AAAA,MACE;AAAA,MACA;AAAA;AAAA,MAEA,eAAe,EAAE,MAAM;AAAA,MACvB,aAAa,EAAE,WAAW;AAAA,IAC5B;AAAA,IAEF,aAAa,MACX;AAAA,MACE;AAAA,MACA;AAAA,MACA,eAAe,EAAE,MAAM;AAAA,MACvB,aAAa,EAAE,WAAW;AAAA,IAC5B;AAAA,EACJ;AACF;AAEO,SAAS,eAAmC;AACjD,SAAO;AAAA,IACL,WAAW,OAAO;AAAA,MAChB,cAAc,OAAO;AAAA,QACnB,aAAa,YAAY,EAAE,UAAU;AAAA,QACrC,kBAAkB,iBAAiB,EAAE,aAAa;AAAA,MACpD;AAAA,IACF;AAAA,IAEA,aAAa,OAAO;AAAA,MAClB,cAAc,OAAO;AAAA,QACnB,aAAa,YAAY,EAAE,YAAY;AAAA,QACvC,kBAAkB,iBAAiB,EAAE,aAAa;AAAA,MACpD;AAAA,MACA,YAAY,OAAO;AAAA,QACjB,aAAa,YAAY,EAAE,wBAAwB;AAAA,QACnD,kBAAkB,iBAAiB,EAAE,aAAa;AAAA,MACpD;AAAA,MACA,WAAW,OAAO;AAAA,QAChB,aAAa,YAAY,EAAE,wBAAwB;AAAA,QACnD,kBAAkB,iBAAiB,EAAE,UAAU;AAAA,MACjD;AAAA,IACF;AAAA,IAEA,SAAS,OAAO;AAAA,MACd,cAAc,OAAO;AAAA,QACnB,aAAa,YAAY,EAAE,QAAQ;AAAA,QACnC,kBAAkB,iBAAiB,EAAE,aAAa;AAAA,MACpD;AAAA,MACA,aAAa,OAAO;AAAA,QAClB,aAAa,YAAY,EAAE,QAAQ;AAAA,QACnC,kBAAkB,iBAAiB,EAAE,YAAY;AAAA,MACnD;AAAA,IACF;AAAA,IAEA,gBAAgB,OAAO;AAAA,MACrB,gBAAgB,OAAO;AAAA,QACrB,aAAa,YAAY,EAAE,eAAe;AAAA,QAC1C,kBAAkB,iBAAiB,EAAE,eAAe;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;;;AE7TO,SAAS,oBAAoB;AAClC,SAAO;AAAA,IACL;AAAA,EACF;AACF;;;ACNA;AAAA,EAGE,gBAAAC;AAAA,OACK;;;ACUA,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,UAAA,gBAAa;AACb,EAAAA,UAAA,cAAW;AAFD,SAAAA;AAAA,GAAA;;;ACML,IAAM,mBAAN,MAAM,kBAAiB;AAAA,EACnB;AAAA,EAEA;AAAA,EAEA;AAAA,EAET,OAAO,GAAG,KAAuC;AAC/C,WAAO,eAAe;AAAA,EACxB;AAAA,EAEA,YAAY,EAAE,MAAM,KAAK,GAAsC;AAC7D,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;;;AFxBO,SAAS,UAAU;AACxB,QAAM;AAEN,SAAO;AAAA,IACL,WAAW,OAAyB;AAAA,MAClC;AAAA,MACA,OAAO,CAAC;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,MACE;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACJ;AAAA,IACA,qBAAqB,OAAyB;AAAA,MAC5C;AAAA,MACA,OAAO,CAAC;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,MAAM;AACJ,cAAM,mBAAmB,eAAe,CAAC,YAAY,OAAO,KAAK;AAEjE,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,cACP,OACA,aACA,aACA,oBACA,gBACA,mBAAmB,OACD;AAClB,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AAEA,MAAI,CAAC,gBAAgB;AACnB,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAEA,MAAI,CAACC,cAAa,eAAe,WAAW,GAAG;AAC7C,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,mBAAmB,CAAC,MAAM,OAAO,WAAW;AAElD,QAAM,QACJ,oBAAoB,mBAChB,YAAY,SACZ,MAAM,SAAS,YAAY;AAEjC,SAAO,IAAI,iBAAiB;AAAA,IAC1B,MAAM;AAAA,MACJ,cAAc,MAAM;AAAA,MACpB;AAAA,MACA,mBAAmB,YAAY;AAAA,MAC/B,QAAQ,MAAM;AAAA,MACd,iBAAiB,YAAY;AAAA,MAC7B,gBAAgB,eAAe;AAAA,MAC/B;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM;AAAA,EACR,CAAC;AACH;;;AGhGO,SAAS,WAAW;AACzB,SAAO,EAAE,QAAQ;AACnB;;;ACEA,IAAMC,UAAS;AAER,SAAS,yBAAyB;AACvC,SAAO;AAAA,IACL,qBAAqB,MAAwB;AAC3C,YAAM,OAAO;AACb,YAAM;AAEN,aAAO;AAAA,QACL;AAAA,QACA,OAAO,CAAC,EAAE,OAAO,mBAAmB,MAAM;AACxC,iBAAO,IAAI,gBAAgB;AAAA,YACzB,QAAQA;AAAA,YACR;AAAA,YACA,SAAS,MAAM,CAAC,MAAM,QAAQ,kBAAkB;AAAA,UAClD,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC1BA,SAAS,YAAAC,iBAAgB;AASzB,IAAMC,UAAS;AAER,SAASC,eAAc;AAC5B,SAAO;AAAA,IACL,gCAAgC,MAAM;AACpC,YAAM,OAAO;AACb,YAAM;AAEN,aAAO;AAAA,QACL,cAAc,OAAyB;AAAA,UACrC;AAAA,UACA,OAAO,CAAC,EAAE,OAAO,aAAa,oBAAoB,YAAY,MAAM;AAClE,gBAAI,CAACC,UAAS,GAAG,WAAW,GAAG;AAC7B,oBAAM,IAAI;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AAEA,gBAAI,CAAC,aAAa;AAChB,oBAAM,IAAI;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AAEA,kBAAM,oBAAqB,YAAY,SAAS,OAAQ;AAExD,mBAAO,IAAI,gBAAgB;AAAA,cACzB,QAAQF;AAAA,cACR;AAAA,cACA,SAAS,CAAC,sBAAsB;AAC9B,sBAAM,UAAU,4BAA4B,iBAAiB;AAC7D,sBAAM,OAAO;AAAA,kBACX,CAAC,OAAO,GAAG;AAAA,oBACT,SAAS;AAAA,oBACT,UAAU;AAAA,kBACZ;AAAA,gBACF;AAEA,sBAAMG,UAAS;AAAA,kBACb,CAAC,OAAO,GAAG;AAAA,oBACT;AAAA,sBACE,IAAI;AAAA,wBACF,SAAS;AAAA,wBACT,UAAU;AAAA,sBACZ;AAAA,sBACA,KAAK,EAAE,UAAU,kBAAkB;AAAA,oBACrC;AAAA,oBACA;AAAA,sBACE,IAAI;AAAA,wBACF,SAAS;AAAA,wBACT,UAAU;AAAA,0BACR,IAAI;AAAA,4BACF;AAAA,8BACE,iBAAiB;AAAA,gCACf,UAAU,EAAE,SAAS,YAAY,GAAG;AAAA,8BACtC;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,sBACA,KAAK,EAAE,UAAU,MAAM,OAAO;AAAA,oBAChC;AAAA,kBACF;AAAA,gBACF;AACA,sBAAM;AACN,sBAAM,eAAe;AAAA,kBACnB,CAAC,OAAO,GAAG;AAAA,oBACT,SAAS;AAAA,oBACT,UAAU;AAAA,kBACZ;AAAA,gBACF;AACA,sBAAM;AACN,sBAAM,kBAAkB;AAAA,kBACtB,CAAC,OAAO,GAAG;AAAA,oBACT;AAAA,sBACE,yBAAyB;AAAA,wBACvB,QAAQ;AAAA,0BACN,UAAU;AAAA,4BACR;AAAA,8BACE,IAAI;AAAA,gCACF,SAAS;AAAA,gCACT,UAAU;AAAA,kCACR,IAAI;AAAA,oCACF;AAAA,sCACE,iBAAiB;AAAA,wCACf,UAAU,EAAE,SAAS,YAAY,GAAG;AAAA,sCACtC;AAAA,oCACF;AAAA,kCACF;AAAA,gCACF;AAAA,8BACF;AAAA,8BACA,KAAK,EAAE,UAAU,MAAM,OAAO;AAAA,4BAChC;AAAA,0BACF;AAAA,wBACF;AAAA,wBACA,SAAS;AAAA,0BACP,SAAS;AAAA,0BACT,UAAU;AAAA,4BACR,IAAI;AAAA,8BACF;AAAA,gCACE,iBAAiB;AAAA,kCACf,UAAU,EAAE,SAAS,YAAY,GAAG;AAAA,gCACtC;AAAA,8BACF;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AAAA,wBACA,KAAK;AAAA,0BACH;AAAA,4BACE,cAAc;AAAA,8BACZ,QAAQ;AAAA,gCACN,UAAU;AAAA,kCACR;AAAA,oCACE,IAAI;AAAA,sCACF,SAAS;AAAA,sCACT,UAAU;AAAA,oCACZ;AAAA,oCACA,KAAK,EAAE,UAAU,MAAM,OAAO;AAAA,kCAChC;AAAA,gCACF;AAAA,8BACF;AAAA,8BACA,aAAa;AAAA,gCACX,SAAS;AAAA,gCACT,UAAU;AAAA,kCACR,IAAI;AAAA,oCACF;AAAA,sCACE,cAAc;AAAA,wCACZ,SAAS;AAAA,0CACP,UAAU,EAAE,SAAS,YAAY,GAAG;AAAA,wCACtC;AAAA,wCACA,KAAK;AAAA,sCACP;AAAA,oCACF;AAAA,kCACF;AAAA,gCACF;AAAA,8BACF;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAEA,uBAAO;AAAA,kBACL;AAAA,kBACAA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACzKA,SAAS,YAAAC,iBAAgB;;;ACWlB,SAAS,uBAAuB;AAAA,EACrC,QAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAC/B,QAAM,UAAU,4BAA4B,IAAI;AAEhD,QAAM,OAAO;AAAA,IACX,CAAC,OAAO,GAAG;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,QACR,IAAI;AAAA,UACF;AAAA,YACE,iBAAiB;AAAA,cACf,UAAU,EAAE,SAAS,YAAY,GAAG;AAAA,YACtC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc;AAAA,IAClB,CAAC,OAAO,GAAG;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,QACR,IAAI;AAAA,UACF;AAAA,YACE,cAAc;AAAA,cACZ,SAAS,EAAE,UAAU,EAAE,SAAS,YAAY,GAAG,EAAE;AAAA,cACjD,KAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY;AAAA,IAChB,CAAC,OAAO,GAAGA;AAAA,EACb;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,EACF;AACF;;;ADrDA,IAAMC,UAAS;AAER,SAASC,aAAY;AAC1B,SAAO;AAAA,IACL,gBAAgB,MAAM;AACpB,YAAM,OAAO;AACb,YAAM;AAEN,aAAO;AAAA,QACL,iBAAiB,OAAyB;AAAA,UACxC;AAAA,UACA,OAAO,CAAC,EAAE,OAAO,aAAa,mBAAmB,MAAM;AACrD,gBAAI,CAACC,UAAS,GAAG,WAAW,GAAG;AAC7B,oBAAM,IAAI;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AAEA,mBAAO,IAAI,gBAAgB;AAAA,cACzB,QAAQF;AAAA,cACR;AAAA,cACA,SAAS,CAAC,sBAAsB;AAC9B,sBAAMG,UAAS;AAAA,kBACb;AAAA,oBACE,IAAI;AAAA,sBACF,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,iBAAiB;AAAA,8BACf,UAAU,EAAE,SAAS,YAAY,GAAG;AAAA,4BACtC;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,oBACA,KAAK,EAAE,UAAU,MAAM,OAAO;AAAA,kBAChC;AAAA,gBACF;AAEA,uBAAO,uBAAuB;AAAA,kBAC5B,QAAAA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,MAAM;AAAA,gBACR,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QACA,sBAAsB,OAAyB;AAAA,UAC7C;AAAA,UACA,OAAO,CAAC,EAAE,OAAO,aAAa,mBAAmB,MAAM;AACrD,gBAAI,CAACD,UAAS,GAAG,WAAW,GAAG;AAC7B,oBAAM,IAAI;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AAEA,kBAAM,qBAAqB,YAAY,cAAc,KAAK;AAE1D,mBAAO,IAAI,gBAAgB;AAAA,cACzB,QAAQF;AAAA,cACR;AAAA,cACA,SAAS,CAAC,sBAAsB;AAC9B,sBAAMG,UAAS;AAAA,kBACb;AAAA,oBACE,IAAI;AAAA,sBACF,SAAS;AAAA,sBACT,UAAU;AAAA,wBACR,IAAI;AAAA,0BACF;AAAA,4BACE,iBAAiB;AAAA,8BACf,UAAU,EAAE,SAAS,YAAY,GAAG;AAAA,4BACtC;AAAA,0BACF;AAAA,0BACA;AAAA,4BACE,cAAc;AAAA,8BACZ,SAAS;AAAA,gCACP,UAAU,EAAE,SAAS,YAAY,GAAG;AAAA,8BACtC;AAAA,8BACA,KAAK,mBAAmB;AAAA,4BAC1B;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,oBACA,KAAK,EAAE,UAAU,MAAM,OAAO;AAAA,kBAChC;AAAA,gBACF;AAEA,uBAAO,uBAAuB;AAAA,kBAC5B,QAAAA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,MAAM;AAAA,gBACR,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AE5GO,SAAS,YAAY;AAC1B,SAAO,EAAE,wBAAwB,WAAAC,YAAW,aAAAC,aAAY;AAC1D;;;ACDO,SAAS,aAAa;AAC3B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACVA;AAAA,EAKE,gBAAAC;AAAA,OAEK;AAEP,SAAS,oCAAAC,yCAAwC;AAEjD,SAAS,gBAAAC,qBAAoB;AAC7B,SAAiC,sBAAAC,qBAAoB,iBAAiB;;;ACZtE;AAAA,EAEE;AAAA,EACA,aAAAC;AAAA,OACK;AACP,SAAS,wCAAwC;AAmBjD,IAAM,oBAAoB;AACnB,IAAM,kBAAkB;AAExB,SAASC,eAAc;AAC5B,QAAM;AAEN,SAAO;AAAA,IACL,MAAM,CACJ,0BACsB;AAAA,MACtB;AAAA,MACA,OAAO,CAAC;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,MAAM;AACJ,YAAI,CAAC,YAAY,IAAI,MAAM;AACzB,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACnE;AAEA,YAAI,CAAC,WAAW;AACd,gBAAM,IAAI,MAAM,gCAAgC;AAAA,QAClD;AAEA,YAAI,CAACC,WAAU,GAAG,MAAM,GAAG;AACzB,gBAAM,IAAI,MAAM,sCAAsC;AAAA,QACxD;AAEA,cAAM,EAAE,WAAW,sBAAsB,IACvC,iCAAiC;AAAA,UAC/B,SAAS;AAAA,UACT,QAAQ,OAAO;AAAA,UACf,SAAS;AAAA,QACX,CAAC;AAEH,cAAM,mBAAmB,oBAAoB;AAAA,UAC3C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAED,cAAM,OAAO,mBAAmB;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAED,cAAM,qBAAqB,0BACvB,CAAC,IAAI,IACL,CAAC,GAAG,kBAAkB,IAAI;AAE9B,eAAO,IAAI,gBAAgB;AAAA,UACzB,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,SAAS,MAAM,CAAC,kBAAkB;AAAA,QACpC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAQA,SAASC,6BACP,QACA,aACA;AACA,QAAM,uBAAuB,OAAO,cAAc,YAAY;AAE9D,MAAI,sBAAsB;AACxB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,QACR,IAAI;AAAA,UACF,EAAE,iBAAiB,mBAAmB,WAAW,EAAE;AAAA,UACnD,EAAE,WAAW,YAAY,YAAY;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,UAAU;AAAA,MACR,IAAI,EAAE,WAAW,YAAY,YAAY;AAAA,IAC3C;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AAEA,QAAM,UAAU,4BAA4B,UAAU,GAAG,YAAY,IAAI;AAEzE,SAAO,UAAU,GAAG,YAAY;AAAA,IAC9B;AAAA,MACE,CAAC,OAAO,GAAG;AAAA,QACT;AAAA,QACAA,6BAA4B,QAAQ,WAAW;AAAA,MACjD;AAAA,IACF;AAAA,IACA;AAAA,MACE,CAAC,OAAO,GAAG;AAAA,QACT;AAAA,UACE,eAAe;AAAA,YACb;AAAA,cACE,IAAI;AAAA,gBACF;AAAA,gBACA,YAAY,SAAS;AAAA,kBACnB,SAAS;AAAA,kBACT,UAAU;AAAA,oBACR,IAAI;AAAA,sBACF,gBAAgB,UAAU,uBAAuB;AAAA,oBACnD;AAAA,kBACF;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,cACA,KAAK,EAAE,UAAU,kBAAkB;AAAA,YACrC;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,cAAc;AAAA,YACZ,MAAM;AAAA,cACJ,IAAI;AAAA,gBACF;AAAA,gBACA,YAAY,SAAS;AAAA,kBACnB,SAAS;AAAA,kBACT,UAAU;AAAA,oBACR,IAAI;AAAA,sBACF,gBAAgB,UAAU,uBAAuB;AAAA,oBACnD;AAAA,kBACF;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,cACA,KAAK,EAAE,UAAU,kBAAkB;AAAA,YACrC;AAAA,YACA,aAAa;AAAA,UACf;AAAA,QACF;AAAA,QACA;AAAA,UACE,UAAU;AAAA,YACR,YAAY;AAAA,YACZ,qBAAqB;AAAA,cACnB,SAAS,SAAS,SAAS;AAAA,cAC3B,WAAW,SAAS,SAAS;AAAA,YAC/B;AAAA,YACA,MAAM;AAAA,cACJ,SAAS,SAAS;AAAA,YACpB;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,aAAa;AAAA,YACX,EAAE,eAAe,CAAC,EAAE;AAAA,YACpB;AAAA,cACE,cAAc;AAAA,gBACZ,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;AAAA,gBAClC,aAAa,YAAY,SAAS;AAAA,kBAChC,SAAS;AAAA,kBACT,UAAU;AAAA,oBACR,IAAI;AAAA,sBACF,cAAc,EAAE,KAAK,sBAAsB;AAAA,oBAC7C;AAAA,kBACF;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAMA,SAAS,oBAAoB;AAAA,EAC3B,uBAAuB;AAAA,EACvB,GAAG;AACL,GAGI;AACF,MAAI,yBAAyB,WAAW;AACtC,WAAO,+BAA+B,MAAM;AAAA,EAC9C;AACA,MAAI,yBAAyB,eAAe;AAC1C,WAAO,kCAAkC,MAAM;AAAA,EACjD;AACA,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAEO,SAAS,kCAAkC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGI;AACF,QAAM,EAAE,eAAe,IAAI,UAAU,GAAG;AACxC,QAAM,qBAAqB,iBAAiB,EACzC,YAAY,EACZ,0BAA0B,EAC1B,GAAG;AAEN,QAAM,mBAAmB;AAAA,IACvB,GAAG,mBACA,MAAM;AAAA,MACL;AAAA,MACA,aAAa;AAAA,MACb,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,KAAK,YAAY,eAAe,OAAO,cAAc,SAAS,GAAG;AAAA,QAC/D,QAAQ,kBAAkB;AAAA,MAC5B,CAAC;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC,EACA,QAAQ,cAAc;AAAA,EAC3B;AAEA,SAAO,CAAC,gBAAgB;AAC1B;AAEA,SAAS,+BAA+B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGI;AACF,QAAM,kBAAkB,iBAAiB,EAAE,QAAQ,EAAE,SAAS;AAC9D,QAAM,iCAAiC,iBAAiB,EACrD,QAAQ,EACR,wBAAwB;AAE3B,QAAM,EAAE,UAAU,wBAAwB,IAAI,UAAU,GAAG;AAM3D,MAAI,MAAM,OAAO,GAAG,GAAG;AACrB,UAAM,kBAAkB;AAAA,MACtB,GAAG,gBACA,MAAM;AAAA,QACL,OAAO,MAAM,SAAS;AAAA;AAAA;AAAA,UAGpB,QAAQ,MAAM,SAAS,MAAM;AAAA,QAC/B,CAAC;AAAA,QACD,aAAa;AAAA,QACb,oBAAoB;AAAA,QACpB,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,EACA,QAAQ,QAAQ;AAAA,IACrB;AACA,UAAM,qBAAqB;AAAA,MACzB,GAAG,gBACA,MAAM;AAAA,QACL,OAAO,YAAY,eAAe,OAAO,cAAc,SAAS,GAAG;AAAA,UACjE,QAAQ,kBAAkB;AAAA,QAC5B,CAAC;AAAA,QACD,aAAa;AAAA,QACb,oBAAoB;AAAA,QACpB,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,EACA,QAAQ,QAAQ;AAAA,IACrB;AACA,WAAO,CAAC,iBAAiB,kBAAkB;AAAA,EAC7C;AACA,QAAM,4BAA4B;AAAA,IAChC,GAAG,+BACA,MAAM;AAAA,MACL;AAAA,MACA,aAAa;AAAA,MACb,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,KAAK,YAAY,eAAe,OAAO,cAAc,SAAS,GAAG;AAAA,QAC/D,QAAQ,kBAAkB;AAAA,MAC5B,CAAC;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC,EACA,QAAQ,uBAAuB;AAAA,EACpC;AACA,SAAO,CAAC,yBAAyB;AACnC;;;AC7XO,IAAM,YAAY;AAAA,EACvB;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AC/GO,IAAM,gBAAgB;AAAA,EAC3B;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ACnGO,IAAMC,eAAc;AAAA,EACzB;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AClTO,SAAS,gBAAgB,GAAiB;AAG/C,SAAO;AAAA,IACL,UAAU;AAAA,IACV,aAAa;AAAA,IACb,YAAYC;AAAA,EACd;AACF;;;ALgBA,IAAM,SAAS;AAER,SAAS,QAAQ;AACtB,QAAM;AAEN,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,oCAAoC,OAAyB;AAAA,MAC3D;AAAA,MACA,OAAO,CAAC,WAAW;AACjB,cAAM,EAAE,QAAQ,eAAe,UAAU,IAAI;AAE7C,YAAI,CAACC,cAAa,GAAG,MAAM,GAAG;AAC5B,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AAEA,YAAI,CAAC,WAAW;AACd,gBAAM,IAAI,MAAM,gCAAgC;AAAA,QAClD;AAEA,YACE,CAAC,OAAO,WAAW,WACnB,CAAC,OAAO,WAAW,YACnB,CAAC,OAAO,WAAW,OACnB;AACA,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,cAAM,mBAAmBC,cAAa,aAAa;AACnD,cAAM,EAAE,WAAW,sBAAsB,IACvCC,kCAAiC;AAAA,UAC/B,SAAS;AAAA,UACT,QAAQ,OAAO;AAAA,UACf,SAAS;AAAA,QACX,CAAC;AAEH,cAAM,oBAAoBC,iBAAgB;AAAA,UACxC,OAAO,OAAO;AAAA,UACd,aAAa,OAAO;AAAA,UACpB,oBAAoB,OAAO;AAAA,UAC3B;AAAA,UACA,KAAK,OAAO;AAAA,UACZ,aAAa,OAAO;AAAA,UACpB,WAAW,OAAO;AAAA,UAClB,aAAa,OAAO;AAAA,UACpB,SAAS,OAAO;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU,OAAO;AAAA,QACnB,CAAC;AAGD,cAAM,EAAE,UAAU,aAAa,WAAW,IAAI,gBAAgB,MAAM;AACpE,cAAM,EAAE,+BAA+B,IAAI;AAAA,UACzC,OAAO;AAAA,UACP;AAAA,QACF;AAEA,cAAM,EAAE,YAAY,QAAQ,IAAI,cAAc;AAAA,UAC5C;AAAA,UACA,WAAW,OAAO;AAAA,UAClB,OAAO,OAAO;AAAA,QAChB,CAAC;AAED,cAAM,sBAAsBC,oBAAmB;AAAA,UAC7C,KAAK;AAAA,UACL,cAAc;AAAA,UACd,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF,CAAC;AAED,cAAM,gBAAgB,mBAAmB;AAAA,UACvC,KAAK;AAAA,UACL,aAAa;AAAA,YACX,OAAO;AAAA,YACP;AAAA,UACF,EAAE;AAAA,UACF;AAAA,QACF,CAAC;AAED,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS,OAAO,UAAU;AAAA,UAC1B,KAAK;AAAA,UACL,MAAM;AAAA,YACJ,CAAC,OAAO,UAAU,SAAS,OAAO,UAAU,QAAQ;AAAA,YACpD,CAAC;AAAA,YACD,CAAC,qBAAqB,aAAa;AAAA,YACnC,CAAC;AAAA,UACH;AAAA,UACA,MAAM;AAAA,UACN;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,0CAA0C,OAAyB;AAAA,MACjE;AAAA,MACA,OAAO,CAAC,WAAW;AACjB,cAAM,EAAE,QAAQ,eAAe,UAAU,IAAI;AAE7C,YAAI,CAACJ,cAAa,GAAG,MAAM,GAAG;AAC5B,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AAEA,YAAI,CAAC,WAAW;AACd,gBAAM,IAAI,MAAM,gCAAgC;AAAA,QAClD;AAEA,YAAI,CAAC,OAAO,gBAAgB;AAC1B,gBAAM,IAAI,MAAM,8BAA8B;AAAA,QAChD;AAEA,YACE,CAAC,OAAO,WAAW,YACnB,CAAC,OAAO,WAAW,SACnB,CAAC,OAAO,WAAW,eACnB;AACA,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,cAAM,EAAE,WAAW,sBAAsB,IACvCE,kCAAiC;AAAA,UAC/B,SAAS;AAAA,UACT,QAAQ,OAAO;AAAA,UACf,SAAS;AAAA;AAAA,QACX,CAAC;AAEH,cAAM,oBAAoBC,iBAAgB;AAAA,UACxC,OAAO,OAAO;AAAA,UACd,aAAa,OAAO;AAAA,UACpB,oBAAoB,OAAO;AAAA,UAC3B;AAAA,UACA,KAAK,OAAO;AAAA,UACZ,aAAa,OAAO;AAAA,UACpB,WAAW,OAAO;AAAA,UAClB,aAAa,OAAO;AAAA,UACpB,SAAS,OAAO;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU,OAAO;AAAA,QACnB,CAAC;AAED,cAAM,EAAE,UAAU,YAAY,IAAI,gBAAgB,MAAM;AAExD,cAAM,qBAAqB,gBAAgB,EACxC,cAAc,EACd,uBAAuB,EACvB,aAAa,EACb,MAAM;AAAA,UACL;AAAA,UACA,OAAO,OAAO;AAAA,UACd,KAAK,OAAO;AAAA,UACZ,aAAa,OAAO;AAAA,UACpB,oBAAoB;AAAA,UACpB;AAAA,UACA;AAAA,QACF,CAAC;AAEH,cAAM,yBAAyB,mBAAmB,mBAAmB;AAErE,cAAM,6BAA6B;AAAA,UACjC;AAAA,UACA,OAAO;AAAA,QACT;AAEA,cAAM,gBAAgB,mBAAmB;AAAA,UACvC,KAAK;AAAA,UACL,aAAa;AAAA,YACX,SAAS,2BAA2B,CAAC;AAAA,YACrC,UAAU,2BAA2B,CAAC;AAAA,UACxC;AAAA,UACA;AAAA,QACF,CAAC;AAED,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS,OAAO,UAAU;AAAA,UAC1B,KAAK;AAAA,UACL,MAAM;AAAA,YACJ,CAAC,OAAO,UAAU,eAAe,OAAO,UAAU,QAAQ;AAAA,YAC1D,CAAC;AAAA,YACD,CAAC,wBAAwB,aAAa;AAAA,YACtC,CAAC;AAAA,UACH;AAAA,UACA,MAAM;AAAA,UACN;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAKA,SAASA,iBAAgB,QAcd;AACT,QAAM,OAAO,mBAAmB,MAAM;AACtC,SAAO,KAAK,KAAK,CAAC,EAAE,MAAM;AAC5B;AAKA,SAAS,mBAAmB,QAIjB;AACT,SAAOC,oBAAmB;AAAA,IACxB,KAAK,OAAO;AAAA,IACZ,cAAc;AAAA,IACd,MAAM,CAAC,OAAO,aAAa,OAAO,iBAAiB;AAAA,EACrD,CAAC;AACH;AAEA,SAAS,oBACP,aACA,uBACA;AACA,QAAM,uBAAuB;AAAA,IAC3B,SAAS;AAAA,IACT,UAAU,iCAAiC,WAAW;AAAA,EACxD;AAEA,QAAM,iCAAiC;AAAA,IACrC,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAQA,SAAS,cAAc,EAAE,QAAQ,WAAW,MAAM,GAAwB;AACxE,QAAM,aAAa;AAAA,IACjB;AAAA,MACE,iBAAiB,OAAO,cAAc,SAAS,EAAE;AAAA,MACjD,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,iBAAiB,MAAM;AAAA,MACvB,QAAQ,MAAM;AAAA,IAChB;AAAA,EACF;AACA,QAAM,UAAU;AAChB,SAAO,EAAE,YAAY,QAAQ;AAC/B;;;AMvTA,SAAS,YAAAC,iBAAgB;;;ACAlB,IAAM,UAAU;AAAA,EACrB;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ADTA,IAAMC,UAAS;AAER,IAAM,uBACX;AAEK,SAAS,MAAM;AACpB,SAAO;AAAA,IACL,uBAAuB,OAAgC;AAAA,MACrD,OAAO,CAAC,EAAE,MAAM,MAAM;AACpB,cAAM,MAAMC,UAAS,KAAK;AAE1B,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,MAAM,CAAC,GAAG;AAAA,UACV,MAAM;AAAA,UACN,QAAAD;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;;;AE1BA,SAAS,+BAA+B;;;ACOjC,IAAK,YAAL,kBAAKE,eAAL;AACL,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,yBAAsB;AAHZ,SAAAA;AAAA,GAAA;AAsBL,IAAM,iBAAN,MAAM,gBAAe;AAAA,EACjB;AAAA,EAEA;AAAA,EAEA;AAAA,EAET,OAAO,GAAG,KAAqC;AAC7C,WAAO,eAAe;AAAA,EACxB;AAAA,EAEA,YAAY,EAAE,MAAM,KAAK,GAAoC;AAC3D,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;;;AC5CA,SAAS,YAAAC,WAAU,gBAAAC,eAAc,aAAAC,kBAAiB;AAClD,SAAS,oCAAAC,yCAAwC;AACjD,SAAS,gBAAAC,qBAAoB;AAC7B,SAAS,YAAAC,iBAAgB;;;ACHzB,SAAwB,gBAAAC,qBAAoB;AAC5C,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAErB,SAAS,gBAAgB,OAAiB;AAC/C,SAAO,IAAI;AAAA,IACT,MAAM,cAAc,YAAY;AAAA,IAChC,CAAC,WAAW;AAAA,IACZA,cAAa,cAAc,KAAK,KAAK,MAAM,KACvC;AAAA,MACE,QAAQ;AAAA,QACN,CAAC,MAAM,GAAG,IAAc,GAAG;AAAA,UACzB,KAAK,MAAM;AAAA,QACb;AAAA,MACF;AAAA,IACF,IACA;AAAA,EACN;AACF;;;ADAO,SAAS,WAAW;AACzB,QAAM;AAEN,SAAO;AAAA,IACL,eAAe,OAAyB;AAAA,MACtC;AAAA,MACA,OAAO,CAAC;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,MAAsB;AACpB,cAAM,oBAAoBC,WAAU,GAAG,MAAM;AAC7C,cAAM,yBAAyB,YAAY,QAAQ,WAAW;AAC9D,cAAM,wBAAwBC,UAAS,GAAG,WAAW;AACrD,cAAM,gBAAgB,MAAM;AAAA,UAC1B,wBAAwB,YAAY,cAAc,OAAO;AAAA,QAC3D;AACA,cAAM,eAAe,gBACjB,WACA,wBACE,YAAY,cAAc,KAAK,EAAE,UACjC,MAAM;AAEZ,cAAM,EAAE,WAAW,sBAAsB,IACvCC,kCAAiC;AAAA,UAC/B,SAAS;AAAA,UACT,QAAQ,oBAAoB,OAAO,cAAc;AAAA,UACjD,SAAS;AAAA,QACX,CAAC;AAEH,YAAI,CAAC,cAAc;AACjB,gBAAM,IAAI,MAAM,SAAS,MAAM,GAAG,iBAAiB;AAAA,QACrD;AAEA,cAAM,KAAK,gBAAgB,MAAM;AACjC,cAAM,WAAW,wBACb,GAAG,SAAS,YAAY,gBAAgB,CAAC,IACzC,GAAG,SAAS,OAAO,gBAAgB,CAAC;AACxC,cAAM,gBAAgB,wBAClB,GAAG,SAAS,YAAY,gBAAgB,CAAC,IACzC,GAAG,SAAS,YAAY,gBAAgB,CAAC;AAC7C,cAAM,UAAUC,UAAS,QAAQ,SAAS,OAAO,YAAY;AAC7D,cAAM,kBAAkBA,UAAS;AAAA,UAC/B,SAAS;AAAA,UACT,wBAAwB,wBAAwB;AAAA,QAClD;AACA,cAAM,uBAAuBA,UAAS;AAAA,UACpC,cAAc;AAAA,UACd,0BAA0B,wBACtB,qBACA;AAAA,QACN;AAEA,eAAO,IAAI,eAAe;AAAA,UACxB,MAAM;AAAA,YACJ,OAAO;AAAA,YACP,QAAQ,MAAM;AAAA,YACd,MAAM;AAAA,YACN,IAAI;AAAA,YACJ,UAAU;AAAA,YAGV,SACE,0BAA0B,wBACtB,SACA,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACT;AAAA,UACA,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAMO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAG2B;AACzB,QAAM,2BAA2BC,6BAA4B;AAAA,IAC3D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,SAAS,QAAQ,WAAW,wBAAwB;AAAA,IACxD,aAAa;AAAA,EACf,CAAC;AACD,QAAM,YAAY,QAAQ,WAAW,uBAAuB;AAAA,IAC1D,IAAI;AAAA,EACN,CAAC;AAED,SAAO,UAAU,MAAM;AACzB;AAEO,SAASA,6BAA4B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGG;AACD,MAAI,CAACC,cAAa,eAAe,WAAW,GAAG;AAC7C,UAAM,IAAI;AAAA,MACR,eAAe,YAAY,IAAI;AAAA,IACjC;AAAA,EACF;AAEA,QAAM,UAAU,4BAA4B,QAAQ,GAAG,YAAY,IAAI;AACvE,QAAM,uBAAuB,YAAY,cAAc,YAAY;AAEnE,QAAM,mBAAmBA,cAAa,GAAG,WAAW;AAEpD,MAAI,sBAAsB;AACxB,WAAO,QAAQ,WAAW,wBAAwB;AAAA,MAChD,CAAC,OAAO,GAAG;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,UACR,IAAI;AAAA,YACF;AAAA,cACE,iBAAiB,mBAAmB,WAAW;AAAA,YACjD;AAAA,YACA;AAAA,cACE,WAAW,YAAY;AAAA,YACzB;AAAA,YACA,oBAAoB,kBAAkB;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,QAAQ,WAAW,wBAAwB;AAAA,IAChD,CAAC,OAAO,GAAG;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,QACR,IAAI;AAAA,UACF;AAAA,YACE,WAAW,YAAY;AAAA,UACzB;AAAA,UACA;AAAA,YACE,mBACIC,cAAa,kBAAkB,IAC/B;AAAA,UACN;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AE5LO,IAAM,mBAAmB;AAAA,EAC9B;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AJtpCA,IAAMC,UAAS;AAER,SAAS,cAAc;AAC5B,QAAM;AAEN,SAAO;AAAA,IACL,gBAAgB,OAAyB;AAAA,MACvC;AAAA,MACA,OAAO,CAAC,EAAE,OAAO,aAAa,oBAAoB,YAAY,MAAM;AAClE,cAAM,KAAK,gBAAgB,WAAW;AACtC,cAAM,gBAAgB,GAAG,SAAS,YAAY,gBAAgB,CAAC,EAAE,OAC9D;AAEH,cAAM,4BAA4B,YAAY,cAAc,KAAK,EAC9D;AAEH,YAAI,CAAC,2BAA2B;AAC9B,gBAAM,IAAI;AAAA,YACR,SAAS,MAAM,MAAM,2CAA2C,YAAY,IAAI;AAAA,UAClF;AAAA,QACF;AAEA,cAAM,4BAA4B;AAAA,UAChC;AAAA,QACF;AACA,cAAM,2BAA2B,MAAM;AAAA,UACrC,YAAY,cAAc,KAAK,EAAE;AAAA,QACnC,EAAE;AAEF,cAAM,kBACJ,GAAG,SAAS,UAAU,EAAE,OAAO,UAAU;AAE3C,YAAI,CAAC,iBAAiB;AACpB,gBAAM,IAAI,MAAM,kCAAkC,YAAY,IAAI,EAAE;AAAA,QACtE;AAEA,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,MAAM;AAAA,UACN,QAAAA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;;;AK/DA,SAAS,2BAAAC,gCAA+B;;;ACAjC,IAAM,2BAA2B;AAAA,EACtC;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;ADlGA,IAAMC,UAAS;AAER,SAAS,qBAAqB;AACnC,QAAM;AAEN,SAAO;AAAA,IACL,yBAAyB,OAAyB;AAAA,MAChD;AAAA,MACA,OAAO,CAAC,EAAE,OAAO,aAAa,oBAAoB,YAAY,MAAM;AAClE,cAAM,KAAK,gBAAgB,WAAW;AACtC,cAAM,gBAAgB,GAAG,SAAS,YAAY,gBAAgB,CAAC,EAAE,OAC9D;AAEH,cAAM,4BAA4B,YAAY,cAAc,KAAK,EAC9D;AAEH,YAAI,CAAC,2BAA2B;AAC9B,gBAAM,IAAI;AAAA,YACR,SAAS,MAAM,MAAM,2CAA2C,YAAY,IAAI;AAAA,UAClF;AAAA,QACF;AAEA,cAAM,4BAA4BC;AAAA,UAChC;AAAA,QACF;AACA,cAAM,2BAA2B,MAAM;AAAA,UACrC,YAAY,cAAc,KAAK,EAAE;AAAA,QACnC,EAAE;AAEF,cAAM,kBACJ,GAAG,SAAS,UAAU,EAAE,OAAO,UAAU;AAE3C,YAAI,CAAC,iBAAiB;AACpB,gBAAM,IAAI,MAAM,kCAAkC,YAAY,IAAI,EAAE;AAAA,QACtE;AAEA,eAAO,IAAI,eAAe;AAAA,UACxB,SAAS;AAAA,UACT,KAAK;AAAA,UACL,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,MAAM;AAAA,UACN,QAAAD;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;;;AE1DO,SAASE,YAAW;AACzB,SAAO,EAAE,OAAO,KAAK,aAAa,mBAAmB;AACvD;;;ACPA,SAAuB,sBAAAC,2BAA0B;;;ACA1C,IAAM,yBACX;;;ACDK,IAAM,qBAAqB;AAAA,EAChC;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;;;AFnGO,SAAS,cAAc;AAC5B,QAAM;AAEN,SAAO;AAAA,IACL,UAAU,OAAyB;AAAA,MACjC;AAAA,MACA,OAAO,CAAC,WAAW;AACjB,cAAM,EAAE,OAAO,aAAa,aAAa,oBAAoB,IAAI;AAEjE,YAAI,CAAC,qBAAqB;AACxB,gBAAM,IAAI,MAAM,qCAAqC;AAAA,QACvD;AAEA,cAAM,4BAA4B,YAAY,cAAc,KAAK,EAC9D;AAEH,YAAI,CAAC,2BAA2B;AAC9B,gBAAM,IAAI;AAAA,YACR,SAAS,MAAM,MAAM,2CAA2C,YAAY,IAAI;AAAA,UAClF;AAAA,QACF;AAEA,cAAM,2BAA2B,MAAM;AAAA,UACrC,YAAY,cAAc,KAAK,EAAE;AAAA,QACnC,EAAE;AAEF,cAAMC,YACJ,cACIA,UAAgB,EACb,mBAAmB,EACnB,wBAAwB,EACxB,MAAM,MAAM,IACfA,UAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,MAAM;AAGnE,cAAM,YAAYC,oBAAmB;AAAA,UACnC,KAAK;AAAA,UACL,cAAc;AAAA,UACd,MAAM,CAACD,UAAS,SAAoB,wBAAwB;AAAA,QAC9D,CAAC;AAED,cAAM,WAAWC,oBAAmB;AAAA,UAClC,KAAK;AAAA,UACL,cAAc;AAAA,UACd,MAAM;AAAA,YACJ,CAAC,2BAA2BD,UAAS,OAAkB;AAAA,YACvD,CAAC,IAAI,EAAE;AAAA;AAAA,YACP,CAAC,WAAWA,UAAS,mBAAmB,CAAC;AAAA;AAAA,YACzC,CAAC;AAAA;AAAA,UACH;AAAA,QACF,CAAC;AAED,eAAO,IAAI,gBAAgB;AAAA,UACzB,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,SAAS,MAAM;AAAA,YACb;AAAA,cACE,IAAI;AAAA,gBACF,UAAU;AAAA,gBACV,QAAQ;AAAA,kBACN,MAAM;AAAA,gBACR;AAAA,gBACA,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;;;AGhFO,SAASE,aAAY;AAC1B,SAAO,EAAE,aAAa,aAAAC,aAAY;AACpC;;;ACGO,SAASC,YAAW;AACzB,SAAO;AAAA,IACL,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA;AAAA,EACF;AACF;;;ACXO,SAAS,aAAa;AAC3B,SAAO;AAAA,IACL;AAAA,IACA,UAAAC;AAAA,EACF;AACF;","names":["XcmVersion","module","pallet","evmToAddress","u8aToHex","decodeAddress","TransferType","u8aToHex","decodeAddress","assets","u8aToHex","decodeAddress","assets","u8aToHex","decodeAddress","u8aToHex","decodeAddress","assets","u8aToHex","decodeAddress","assets","foreignAssets","evmToAddress","pallet","assets","pallet","pallet","pallet","EvmParachain","EvmParachain","EvmParachain","isEthAddress","u8aToHex","decodeAddress","isXcmV4","EvmParachain","assets","isEthAddress","u8aToHex","decodeAddress","assets","assets","u8aToHex","decodeAddress","u8aToHex","decodeAddress","event","u8aToHex","decodeAddress","event","EvmParachain","Provider","EvmParachain","pallet","EvmChain","pallet","polkadotXcm","EvmChain","assets","EvmChain","assets","pallet","xcmPallet","EvmChain","assets","xcmPallet","polkadotXcm","EvmParachain","getMultilocationDerivedAddresses","evmToAddress","encodeFunctionData","Parachain","polkadotXcm","Parachain","getDestinationMultilocation","XTOKENS_ABI","XTOKENS_ABI","EvmParachain","evmToAddress","getMultilocationDerivedAddresses","buildXcmMessage","encodeFunctionData","u8aToHex","module","u8aToHex","Protocols","EvmChain","EvmParachain","Parachain","getMultilocationDerivedAddresses","evmToAddress","Wormhole","EvmParachain","Parachain","EvmChain","getMultilocationDerivedAddresses","Wormhole","getDestinationMultilocation","EvmParachain","evmToAddress","module","convertAddressTo32Bytes","module","convertAddressTo32Bytes","contract","encodeFunctionData","contract","encodeFunctionData","extrinsic","polkadotXcm","wormhole","contract","extrinsic","wormhole"]}