{"version":3,"sources":["../src/zeta.ts","../src/cpmm/cpmm.ts","../../cpmm/artifacts/ts/index.ts","../../cpmm/artifacts/ts/DexAccount.ts","../../cpmm/artifacts/dex/DexAccount.ral.json","../../cpmm/artifacts/ts/contracts.ts","../../cpmm/artifacts/ts/ExampleOracleSimple.ts","../../cpmm/artifacts/examples/ExampleOracleSimple.ral.json","../../cpmm/artifacts/ts/FeeCollectorFactoryImpl.ts","../../cpmm/artifacts/examples/FeeCollectorFactoryImpl.ral.json","../../cpmm/artifacts/ts/FeeCollectorPerTokenPairImpl.ts","../../cpmm/artifacts/examples/FeeCollectorPerTokenPairImpl.ral.json","../../cpmm/artifacts/ts/FullMathTest.ts","../../cpmm/artifacts/examples/FullMathTest.ral.json","../../cpmm/artifacts/ts/MathTest.ts","../../cpmm/artifacts/test/MathTest.ral.json","../../cpmm/artifacts/ts/Router.ts","../../cpmm/artifacts/dex/Router.ral.json","../../cpmm/artifacts/ts/TestToken.ts","../../cpmm/artifacts/test/TestToken.ral.json","../../cpmm/artifacts/ts/TokenPair.ts","../../cpmm/artifacts/dex/TokenPair.ral.json","../../cpmm/artifacts/ts/TokenPairFactory.ts","../../cpmm/artifacts/dex/TokenPairFactory.ral.json","../../cpmm/artifacts/ts/scripts.ts","../../cpmm/artifacts/scripts/AddLiquidity.ral.json","../../cpmm/artifacts/scripts/Burn.ral.json","../../cpmm/artifacts/scripts/CollectFee.ral.json","../../cpmm/artifacts/scripts/CreatePair.ral.json","../../cpmm/artifacts/scripts/CreatePairAndAddLiquidity.ral.json","../../cpmm/artifacts/scripts/EnableFeeCollector.ral.json","../../cpmm/artifacts/test/GetToken.ral.json","../../cpmm/artifacts/scripts/Mint.ral.json","../../cpmm/artifacts/scripts/RemoveLiquidity.ral.json","../../cpmm/artifacts/scripts/SetFeeCollectorFactory.ral.json","../../cpmm/artifacts/scripts/Swap.ral.json","../../cpmm/artifacts/scripts/SwapMaxIn.ral.json","../../cpmm/artifacts/scripts/SwapMinOut.ral.json","../../cpmm/deployments/.deployments.testnet.json","../../cpmm/deployments/.deployments.devnet.json","../../cpmm/artifacts/ts/deployments.ts","../src/common/utils.ts","../src/cpmm/constants.ts","../src/common/error.ts","../src/common/logger.ts","../src/moduleBase.ts","../../../node_modules/bignumber.js/bignumber.mjs","../src/common/math.ts","../src/common/constants.ts","../src/common/types.ts","../src/clmm/clmm.ts","../../clmm/artifacts/ts/index.ts","../../clmm/artifacts/ts/BitmapWord.ts","../../clmm/artifacts/BitmapWord.ral.json","../../clmm/artifacts/ts/contracts.ts","../../clmm/artifacts/ts/types.ts","../../clmm/artifacts/structs.ral.json","../../clmm/artifacts/ts/BitmapWordDeployer.ts","../../clmm/artifacts/BitmapWordDeployer.ral.json","../../clmm/artifacts/ts/DexAccount.ts","../../clmm/artifacts/DexAccount.ral.json","../../clmm/artifacts/ts/LiquidityAmountsTest.ts","../../clmm/artifacts/LiquidityAmountsTest.ral.json","../../clmm/artifacts/ts/LiquidityManagmentTest.ts","../../clmm/artifacts/LiquidityManagmentTest.ral.json","../../clmm/artifacts/ts/Pool.ts","../../clmm/artifacts/Pool.ral.json","../../clmm/artifacts/ts/PoolConfig.ts","../../clmm/artifacts/PoolConfig.ral.json","../../clmm/artifacts/ts/PoolFactory.ts","../../clmm/artifacts/PoolFactory.ral.json","../../clmm/artifacts/ts/PoolUser.ts","../../clmm/artifacts/PoolUser.ral.json","../../clmm/artifacts/ts/Position.ts","../../clmm/artifacts/Position.ral.json","../../clmm/artifacts/ts/PositionManager.ts","../../clmm/artifacts/PositionManager.ral.json","../../clmm/artifacts/ts/TestToken.ts","../../clmm/artifacts/TestToken.ral.json","../../clmm/artifacts/ts/Tick.ts","../../clmm/artifacts/Tick.ral.json","../../clmm/artifacts/ts/TickBitmapTest.ts","../../clmm/artifacts/TickBitmapTest.ral.json","../../clmm/artifacts/ts/scripts.ts","../../clmm/artifacts/CreateConfig.ral.json","../../clmm/artifacts/CreateLiquidPool.ral.json","../../clmm/artifacts/PoolRouterDemo.ral.json","../../clmm/artifacts/SwapWithoutAccount.ral.json","../../clmm/deployments/.deployments.testnet.json","../../clmm/deployments/.deployments.devnet.json","../../clmm/artifacts/ts/deployments.ts","../src/clmm/pool.ts","../../clmm/artifacts/ts/constants.ts","../src/clmm/constants.ts","../src/clmm/tick.ts","../src/clmm/liquidity.ts","../src/common/numeric.ts","../src/token/token.ts","../src/staking/staking.ts","../../staking/artifacts/ts/index.ts","../../staking/artifacts/ts/AlphUnstakeVault.ts","../../staking/artifacts/AlphUnstakeVault.ral.json","../../staking/artifacts/ts/contracts.ts","../../staking/artifacts/ts/types.ts","../../staking/artifacts/structs.ral.json","../../staking/artifacts/ts/FullMathTest.ts","../../staking/artifacts/utils/FullMathTest.ral.json","../../staking/artifacts/ts/GovernanceDemo.ts","../../staking/artifacts/examples/GovernanceDemo.ral.json","../../staking/artifacts/ts/RewardSharingVault.ts","../../staking/artifacts/examples/RewardSharingVault.ral.json","../../staking/artifacts/ts/TestDynamicArrayByteVec32.ts","../../staking/artifacts/utils/TestDynamicArrayByteVec32.ral.json","../../staking/artifacts/ts/TestDynamicSortedArrayForU256.ts","../../staking/artifacts/utils/TestDynamicSortedArrayForU256.ral.json","../../staking/artifacts/ts/TestMerkleProof.ts","../../staking/artifacts/utils/TestMerkleProof.ral.json","../../staking/artifacts/ts/XAlphStakeVault.ts","../../staking/artifacts/XAlphStakeVault.ral.json","../../staking/artifacts/ts/XAlphToken.ts","../../staking/artifacts/XAlphToken.ral.json","../../staking/artifacts/ts/scripts.ts","../../staking/artifacts/AlphStakeAndLock.ral.json","../../staking/artifacts/XAlphUnlockAndStartUnstake.ral.json","../../staking/deployments/.deployments.testnet.json","../../staking/deployments/.deployments.devnet.json","../../staking/artifacts/ts/deployments.ts","../src/staking/utils.ts","../src/staking/settings.ts","../src/clmm/types.ts"],"sourcesContent":["import type { SignerProvider, Account } from '@alephium/web3';\nimport { NodeProvider, ExplorerProvider, web3 } from '@alephium/web3';\nimport { CpmmModule } from './cpmm/cpmm';\nimport type { Network, ZetaLoadParams } from './common/types';\nimport { defaultNetworks } from './common/types';\nimport { ClmmModule } from './clmm/clmm';\nimport { TokenModule } from './token/token';\nimport { StakingModule } from './staking/staking';\n\nexport class Zeta {\n  public cpmm: CpmmModule;\n  public clmm: ClmmModule;\n  public token: TokenModule;\n  public staking: StakingModule;\n\n  private _nodeProvider: NodeProvider;\n  private _explorerProvider: ExplorerProvider;\n  private _tokenListUrl: string;\n  private _signer?: SignerProvider;\n  private _account?: Account;\n  private _network: Network;\n\n  constructor(params: ZetaLoadParams) {\n    const network = defaultNetworks.find((n) => n.id === params.networkId);\n    if (!network) {\n      throw new Error(`Network ${params.networkId} not found`);\n    }\n\n    const overrides = params.networkOverrides ?? {};\n    const networkConfig: Network = { ...network, ...overrides };\n\n    this._network = networkConfig;\n    this._nodeProvider = new NodeProvider(this._network.nodeUrl, this._network.nodeApiKey);\n    this._explorerProvider = new ExplorerProvider(this._network.explorerApiUrl);\n    this._tokenListUrl = this._network.tokenListUrl;\n    this._signer = params.signer;\n\n    // Initialize modules\n    this.cpmm = new CpmmModule(this);\n    this.clmm = new ClmmModule(this);\n    this.token = new TokenModule(this);\n    this.staking = new StakingModule(this);\n  }\n\n  static load(config: ZetaLoadParams): Zeta {\n    return new Zeta(config);\n  }\n\n  public set signer(signer: SignerProvider) {\n    this._signer = signer;\n  }\n\n  public set account(account: Account) {\n    this._account = account;\n  }\n\n  get signer(): SignerProvider {\n    if (!this._signer) {\n      throw new Error('Signer not set');\n    }\n    return this._signer;\n  }\n\n  get account(): Account {\n    if (!this._account) {\n      throw new Error('Account not set');\n    }\n    return this._account;\n  }\n\n  public clearSigner() {\n    this._signer = undefined;\n  }\n\n  public clearAccount() {\n    this._account = undefined;\n  }\n\n  get nodeProvider(): NodeProvider {\n    return this._nodeProvider;\n  }\n\n  get explorerProvider(): ExplorerProvider {\n    return this._explorerProvider;\n  }\n\n  get network(): Network {\n    return this._network;\n  }\n\n  get tokenListUrl(): string {\n    return this._tokenListUrl;\n  }\n\n  public setCurrentProviders(): void {\n    if (!this._nodeProvider) {\n      throw new Error('Node provider not set');\n    }\n    if (!this._explorerProvider) {\n      throw new Error('Explorer provider not set');\n    }\n    web3.setCurrentNodeProvider(this._nodeProvider);\n    web3.setCurrentExplorerProvider(this._explorerProvider);\n  }\n}\n","import type { ExecuteScriptResult } from '@alephium/web3';\nimport {\n  DUST_AMOUNT,\n  addressFromContractId,\n  subContractId,\n  ALPH_TOKEN_ID,\n  ONE_ALPH,\n  prettifyTokenAmount,\n} from '@alephium/web3';\nimport {\n  TokenPair as TokenPairContract,\n  SwapMaxIn,\n  SwapMinOut,\n  AddLiquidity,\n  RemoveLiquidity,\n  CreatePair,\n  CreatePairAndAddLiquidity,\n} from 'cpmm/artifacts/ts';\nimport { loadDeployments } from 'cpmm/artifacts/ts/deployments';\nimport type { CpmmPoolContractState } from './types';\nimport { sortTokens } from '../common/utils';\nimport { MAX_PRICE_IMPACT } from './constants';\nimport {\n  InsufficientBalanceError,\n  PriceImpactTooHighError,\n  PoolNotFoundError,\n} from '../common/error';\nimport type {\n  SwapParams,\n  SwapDetails,\n  AddLiquidityParams,\n  AddLiquidityDetails,\n  RemoveLiquidityParams,\n  RemoveLiquidityDetails,\n  ClaimableAmounts,\n  CreatePoolParams,\n  ComputeSwapParams,\n  ComputeLiquidityParams,\n  CpmmConfig,\n} from './types';\nimport type { Zeta } from '../zeta';\nimport ModuleBase from '../moduleBase';\nimport BigNumber from 'bignumber.js';\nimport { MathUtil } from '../common/math';\nimport { MINIMUM_LIQUIDITY } from './constants';\nimport { BPS } from '../common/constants';\nimport { InsufficientLiquidityError } from '../common/error';\n\nexport class CpmmModule extends ModuleBase {\n  private config: CpmmConfig;\n\n  constructor(scope: Zeta) {\n    super({ scope, moduleName: 'CpmmModule' });\n\n    this.config = this.getCpmmConfig();\n    this.scope = scope;\n  }\n\n  getPoolId(tokenA: string, tokenB: string): string {\n    const [token0Id, token1Id] = sortTokens(tokenA, tokenB);\n    const path = token0Id + token1Id;\n    return subContractId(this.config.factoryId, path, this.config.groupIndex);\n  }\n\n  getPoolAddress(tokenA: string, tokenB: string): string {\n    return addressFromContractId(this.getPoolId(tokenA, tokenB));\n  }\n\n  async getPoolState(tokenA: string, tokenB: string): Promise<CpmmPoolContractState> {\n    const [token0Id, token1Id] = sortTokens(tokenA, tokenB);\n    const token0Info = await this.scope.token.getTokenById(token0Id);\n    const token1Info = await this.scope.token.getTokenById(token1Id);\n\n    const poolId = this.getPoolId(tokenA, tokenB);\n    const contractAddress = addressFromContractId(poolId);\n    const pool = TokenPairContract.at(contractAddress);\n\n    try {\n      const state = await pool.fetchState();\n      return {\n        poolId,\n        reserve0: state.fields.reserve0,\n        reserve1: state.fields.reserve1,\n        token0Info,\n        token1Info,\n        totalSupply: state.fields.totalSupply,\n        dexAccount: state.fields.dexAccount0,\n      };\n    } catch (error) {\n      if (error instanceof Error && error.message.includes('not found')) {\n        throw new PoolNotFoundError(poolId);\n      }\n      this.logAndThrowError(`Failed to fetch pool state on ${poolId}`, error);\n    }\n  }\n\n  async poolExists(tokenA: string, tokenB: string): Promise<boolean> {\n    const address = this.getPoolAddress(tokenA, tokenB);\n\n    return this.scope.nodeProvider.addresses\n      .getAddressesAddressGroup(address)\n      .then((_) => true)\n      .catch((e: any) => {\n        if (e instanceof Error && e.message.indexOf('Group not found') !== -1) {\n          return false;\n        }\n        throw e;\n      });\n  }\n\n  async swap(params: SwapParams, balances?: Map<string, bigint>): Promise<ExecuteScriptResult> {\n    if (!this.scope.signer) {\n      throw new Error('Signer is required for swap operation');\n    }\n\n    const poolState = await this.getPoolState(params.tokenIn.id, params.tokenOut.id);\n    const swapDetails = CpmmModule.computeSwapAmount({\n      state: poolState,\n      tokenIn: params.tokenIn,\n      tokenOut: params.tokenOut,\n      amountIn: params.amountIn,\n      amountOut: params.amountOut,\n      slippage: params.slippage,\n    });\n\n    if (swapDetails.priceImpact >= MAX_PRICE_IMPACT) {\n      throw new PriceImpactTooHighError(swapDetails.priceImpact, MAX_PRICE_IMPACT);\n    }\n\n    if (balances) {\n      const available = balances.get(swapDetails.tokenInInfo.id) ?? 0n;\n      if (available < swapDetails.tokenInAmount) {\n        throw new InsufficientBalanceError(\n          swapDetails.tokenInInfo.symbol,\n          prettifyTokenAmount(swapDetails.tokenInAmount, swapDetails.tokenInInfo.decimals) ??\n            `${swapDetails.tokenInAmount}`,\n          prettifyTokenAmount(available, swapDetails.tokenInInfo.decimals) ?? `${available}`,\n        );\n      }\n    }\n\n    const ttl = params.ttl ?? 60;\n\n    if (swapDetails.swapType === 'ExactIn') {\n      let attoAlphAmount = this.getExtraAlphAmount(\n        swapDetails.state.token0Info.id,\n        swapDetails.state.token1Info.id,\n      );\n      const tokens: Array<{ id: string; amount: bigint }> = [];\n\n      if (swapDetails.tokenInInfo.id === ALPH_TOKEN_ID) {\n        attoAlphAmount += swapDetails.tokenInAmount;\n      } else {\n        tokens.push({ id: swapDetails.tokenInInfo.id, amount: swapDetails.tokenInAmount });\n      }\n\n      const result = await SwapMinOut.execute({\n        signer: this.scope.signer,\n        initialFields: {\n          dexAccount: poolState.dexAccount,\n          sender: params.sender,\n          router: this.config.routerId,\n          pair: swapDetails.state.poolId,\n          tokenInId: swapDetails.tokenInInfo.id,\n          amountIn: swapDetails.tokenInAmount,\n          amountOutMin: swapDetails.minimalTokenOutAmount!,\n          deadline: deadline(ttl),\n        },\n        attoAlphAmount,\n        tokens,\n      });\n      return result;\n    } else {\n      let attoAlphAmount = this.getExtraAlphAmount(\n        swapDetails.state.token0Info.id,\n        swapDetails.state.token1Info.id,\n      );\n      const tokens: Array<{ id: string; amount: bigint }> = [];\n\n      if (swapDetails.tokenInInfo.id === ALPH_TOKEN_ID) {\n        attoAlphAmount += swapDetails.maximalTokenInAmount!;\n      } else {\n        tokens.push({ id: swapDetails.tokenInInfo.id, amount: swapDetails.maximalTokenInAmount! });\n      }\n      const result = await SwapMaxIn.execute({\n        signer: this.scope.signer,\n        initialFields: {\n          dexAccount: poolState.dexAccount,\n          sender: params.sender,\n          router: this.config.routerId,\n          pair: swapDetails.state.poolId,\n          tokenInId: swapDetails.tokenInInfo.id,\n          amountInMax: swapDetails.maximalTokenInAmount!,\n          amountOut: swapDetails.tokenOutAmount,\n          deadline: deadline(ttl),\n        },\n        attoAlphAmount,\n        tokens,\n      });\n      return result;\n    }\n  }\n\n  async addLiquidity(\n    params: AddLiquidityParams,\n    balances?: Map<string, bigint>,\n  ): Promise<ExecuteScriptResult> {\n    if (!this.scope.signer) {\n      throw new Error('Signer is required for addLiquidity operation');\n    }\n\n    const { cpmmPoolState, tokenA, tokenB, amountA, amountB, slippage, sender, ttl = 60 } = params;\n\n    if (amountA === 0n || amountB === 0n) {\n      throw new Error('The input amount must be greater than 0');\n    }\n\n    if (balances) {\n      const tokenAAvailable = balances.get(tokenA.id) ?? 0n;\n      if (tokenAAvailable < amountA) {\n        throw new InsufficientBalanceError(\n          tokenA.symbol,\n          prettifyTokenAmount(amountA, tokenA.decimals) ?? `${amountA}`,\n          prettifyTokenAmount(tokenAAvailable, tokenA.decimals) ?? `${tokenAAvailable}`,\n        );\n      }\n\n      const tokenBAvailable = balances.get(tokenB.id) ?? 0n;\n      if (tokenBAvailable < amountB) {\n        throw new InsufficientBalanceError(\n          tokenB.symbol,\n          prettifyTokenAmount(amountB, tokenB.decimals) ?? `${amountB}`,\n          prettifyTokenAmount(tokenBAvailable, tokenB.decimals) ?? `${tokenBAvailable}`,\n        );\n      }\n    }\n\n    const isInitial = cpmmPoolState.reserve0 === 0n && cpmmPoolState.reserve1 === 0n;\n    const amountAMin = isInitial ? amountA : CpmmModule.minimalAmount(amountA, slippage);\n    const amountBMin = isInitial ? amountB : CpmmModule.minimalAmount(amountB, slippage);\n\n    const [amount0Desired, amount1Desired, amount0Min, amount1Min] =\n      tokenA.id === cpmmPoolState.token0Info.id\n        ? [amountA, amountB, amountAMin, amountBMin]\n        : [amountB, amountA, amountBMin, amountAMin];\n\n    // Calculate ALPH amounts properly\n    const extraAlph = this.getExtraAlphAmount(tokenA.id, tokenB.id);\n    let attoAlphAmount = extraAlph + DUST_AMOUNT;\n    const tokens: Array<{ id: string; amount: bigint }> = [];\n\n    // Handle ALPH token properly - don't double count it\n    if (tokenA.id === ALPH_TOKEN_ID) {\n      attoAlphAmount += amountA;\n      tokens.push({ id: tokenB.id, amount: amountB });\n    } else if (tokenB.id === ALPH_TOKEN_ID) {\n      attoAlphAmount += amountB;\n      tokens.push({ id: tokenA.id, amount: amountA });\n    } else {\n      tokens.push({ id: tokenA.id, amount: amountA }, { id: tokenB.id, amount: amountB });\n    }\n\n    const result = await AddLiquidity.execute({\n      signer: this.scope.signer,\n      initialFields: {\n        sender,\n        router: this.config.routerId,\n        pair: cpmmPoolState.poolId,\n        amount0Desired,\n        amount1Desired,\n        amount0Min,\n        amount1Min,\n        deadline: deadline(ttl),\n      },\n      attoAlphAmount,\n      tokens,\n    });\n    return result;\n  }\n\n  async removeLiquidity(params: RemoveLiquidityParams): Promise<ExecuteScriptResult> {\n    if (!this.scope.signer) {\n      throw new Error('Signer is required for removeLiquidity operation');\n    }\n\n    const { state, liquidity, totalLiquidityAmount, slippage, sender, ttl = 60 } = params;\n    const ownedLiquidity = totalLiquidityAmount ?? state.totalSupply;\n    const details = CpmmModule.computeRemoveLiquidityAmounts(state, ownedLiquidity, liquidity);\n\n    const amount0Min = CpmmModule.minimalAmount(details.amount0, slippage);\n    const amount1Min = CpmmModule.minimalAmount(details.amount1, slippage);\n\n    const result = await RemoveLiquidity.execute({\n      signer: this.scope.signer,\n      initialFields: {\n        sender,\n        router: this.config.routerId,\n        pairId: state.poolId,\n        liquidity,\n        amount0Min,\n        amount1Min,\n        deadline: deadline(ttl),\n      },\n      attoAlphAmount:\n        this.getExtraAlphAmount(state.token0Info.id, state.token1Info.id) + DUST_AMOUNT,\n      tokens: [{ id: state.poolId, amount: liquidity }],\n    });\n    return result;\n  }\n\n  async computeClaimableAmounts(\n    tokenAId: string,\n    tokenBId: string,\n    liquidityBalance: bigint,\n  ): Promise<ClaimableAmounts> {\n    const state = await this.getPoolState(tokenAId, tokenBId);\n    const details = CpmmModule.computeClaimableAmounts(state, liquidityBalance);\n    return {\n      token0: details.token0,\n      amount0: details.amount0,\n      token1: details.token1,\n      amount1: details.amount1,\n    };\n  }\n\n  async createPool(params: CreatePoolParams): Promise<ExecuteScriptResult & { poolId: string }> {\n    if (!this.scope.signer) {\n      throw new Error('Signer is required for createPool operation');\n    }\n\n    const { tokenA, tokenB, sender, tokenAAmount, tokenBAmount } = params;\n    const poolId = this.getPoolId(tokenA.id, tokenB.id);\n\n    if (tokenAAmount !== undefined && tokenBAmount !== undefined) {\n      const [token0Id, token1Id] = sortTokens(tokenA.id, tokenB.id);\n      const [amount0, amount1] =\n        token0Id === tokenA.id ? [tokenAAmount, tokenBAmount] : [tokenBAmount, tokenAAmount];\n      const result = await CreatePairAndAddLiquidity.execute({\n        signer: this.scope.signer,\n        initialFields: {\n          payer: sender,\n          factory: this.config.factoryId,\n          alphAmount: ONE_ALPH,\n          token0Id,\n          token1Id,\n          amount0,\n          amount1,\n        },\n        attoAlphAmount: ONE_ALPH + this.getExtraAlphAmount(tokenA.id, tokenB.id),\n        tokens: [\n          { id: token0Id, amount: amount0 },\n          { id: token1Id, amount: amount1 },\n        ],\n      });\n      return { ...result, poolId };\n    }\n\n    const result = await CreatePair.execute({\n      signer: this.scope.signer,\n      initialFields: {\n        payer: sender,\n        factory: this.config.factoryId,\n        alphAmount: ONE_ALPH,\n        tokenAId: tokenA.id,\n        tokenBId: tokenB.id,\n      },\n      attoAlphAmount: ONE_ALPH + this.getExtraAlphAmount(tokenA.id, tokenB.id),\n      tokens: [\n        { id: tokenA.id, amount: 1n },\n        { id: tokenB.id, amount: 1n },\n      ],\n    });\n    return { ...result, poolId };\n  }\n\n  getCpmmConfig(): CpmmConfig {\n    const networkId = this.scope.network.id;\n    try {\n      const deployments = loadDeployments(networkId);\n      return {\n        groupIndex: deployments.contracts.Router.contractInstance.groupIndex,\n        factoryId: deployments.contracts.TokenPairFactory.contractInstance.contractId,\n        routerId: deployments.contracts.Router.contractInstance.contractId,\n      };\n    } catch (error) {\n      this.logAndThrowError(`Failed to load deployments on ${networkId}`, error);\n    }\n  }\n\n  static computeSwapAmount(params: ComputeSwapParams): SwapDetails {\n    const { state, tokenIn, tokenOut, amountIn, amountOut, slippage } = params;\n\n    let swapType: 'ExactIn' | 'ExactOut';\n    let tokenInAmount: bigint;\n    let tokenOutAmount: bigint;\n\n    if (amountIn !== undefined) {\n      swapType = 'ExactIn';\n      tokenInAmount = amountIn;\n      tokenOutAmount = CpmmModule.getAmountOut(state, tokenIn.id, amountIn);\n    } else if (amountOut !== undefined) {\n      swapType = 'ExactOut';\n      tokenInAmount = CpmmModule.getAmountIn(state, tokenOut.id, amountOut);\n      tokenOutAmount = amountOut;\n    } else {\n      throw new Error('Either amountIn or amountOut must be specified');\n    }\n\n    const priceImpact = this.calcPriceImpact(\n      state.reserve0,\n      state.reserve1,\n      tokenIn.id,\n      state.token0Info.id,\n      tokenInAmount,\n      tokenOutAmount,\n    );\n\n    return {\n      swapType,\n      state,\n      tokenInInfo: tokenIn,\n      tokenOutInfo: tokenOut,\n      tokenInAmount,\n      tokenOutAmount,\n      priceImpact,\n      minimalTokenOutAmount:\n        swapType === 'ExactIn' ? this.minimalAmount(tokenOutAmount, slippage) : undefined,\n      maximalTokenInAmount:\n        swapType === 'ExactOut' ? this.maximalAmount(tokenInAmount, slippage) : undefined,\n    };\n  }\n\n  static computeLiquidityAmounts(params: ComputeLiquidityParams): AddLiquidityDetails {\n    const { state, tokenA, tokenB, amountA, amountB, inputType = 'TokenA' } = params;\n\n    if (!state) {\n      // Initial liquidity\n      if (!amountA || !amountB) {\n        throw new Error('Both amountA and amountB are required for initial liquidity');\n      }\n      return this.getInitLiquidityDetails(tokenA.id, tokenB.id, amountA, amountB);\n    }\n\n    // Adding to existing pool\n    const inputTokenId = inputType === 'TokenA' ? tokenA.id : tokenB.id;\n    const inputAmount = inputType === 'TokenA' ? amountA : amountB;\n\n    if (!inputAmount) {\n      throw new Error(`Amount for ${inputType} is required`);\n    }\n\n    return this.getLiquidityDetails(state, inputTokenId, inputAmount, inputType);\n  }\n\n  static computeRemoveLiquidityAmounts(\n    state: CpmmPoolContractState,\n    totalLiquidity: bigint,\n    liquidityToRemove: bigint,\n  ): RemoveLiquidityDetails {\n    if (liquidityToRemove > totalLiquidity) {\n      throw new Error('Liquidity exceeds total liquidity amount');\n    }\n\n    const amount0 = (liquidityToRemove * state.reserve0) / state.totalSupply;\n    const amount1 = (liquidityToRemove * state.reserve1) / state.totalSupply;\n    const remainShareAmount = totalLiquidity - liquidityToRemove;\n    const remainPoolLiquidity = state.totalSupply - liquidityToRemove;\n    const remainSharePercentage = BigNumber((100n * remainShareAmount).toString())\n      .div(BigNumber(remainPoolLiquidity.toString()))\n      .toFixed(5);\n\n    return {\n      state: state,\n      token0: state.token0Info,\n      amount0,\n      token1: state.token1Info,\n      amount1,\n      remainShareAmount,\n      remainSharePercentage: parseFloat(remainSharePercentage),\n    };\n  }\n\n  static computeClaimableAmounts(\n    state: CpmmPoolContractState,\n    liquidityBalance: bigint,\n  ): RemoveLiquidityDetails {\n    return this.computeRemoveLiquidityAmounts(state, liquidityBalance, liquidityBalance);\n  }\n\n  static minimalAmount(amount: bigint, slippage: bigint): bigint {\n    this.assertSlippageInRange(slippage);\n    return (amount * BPS) / (BPS + slippage);\n  }\n\n  static maximalAmount(amount: bigint, slippage: bigint): bigint {\n    this.assertSlippageInRange(slippage);\n    return (amount * (BPS + slippage) + (BPS - 1n)) / BPS;\n  }\n\n  private static assertSlippageInRange(slippage: bigint): void {\n    if (slippage < 0n || slippage >= BPS) {\n      throw new Error(`Slippage must satisfy 0 <= slippage < ${BPS}, received ${slippage}`);\n    }\n  }\n\n  static calcPriceImpact(\n    reserve0: bigint,\n    reserve1: bigint,\n    tokenInId: string,\n    token0Id: string,\n    amountIn: bigint,\n    amountOut: bigint,\n  ): number {\n    const [reserveIn, reserveOut] =\n      token0Id === tokenInId ? [reserve0, reserve1] : [reserve1, reserve0];\n    const numerator =\n      (reserveOut * (reserveIn + amountIn) - (reserveOut - amountOut) * reserveIn) * 100n;\n    const denumerator = reserveIn * (reserveOut - amountOut);\n    const impact = new BigNumber(numerator.toString())\n      .div(new BigNumber(denumerator.toString()))\n      .toFixed();\n    return parseFloat(impact);\n  }\n\n  static getLiquidityDetails(\n    state: CpmmPoolContractState,\n    inputTokenId: string,\n    inputAmount: bigint,\n    inputType: 'TokenA' | 'TokenB', // First or second token in the token input box\n  ): {\n    state: CpmmPoolContractState;\n    tokenAId: string;\n    tokenBId: string;\n    amountA: bigint;\n    amountB: bigint;\n    shareAmount: bigint;\n    sharePercentage: number;\n  } {\n    const isInputToken0 = inputTokenId === state.token0Info.id;\n    const [reserveA, reserveB] = isInputToken0\n      ? [state.reserve0, state.reserve1]\n      : [state.reserve1, state.reserve0];\n\n    const outputAmount = (inputAmount * reserveB) / reserveA;\n    const liquidityA = (inputAmount * state.totalSupply) / reserveA;\n    const liquidityB = (outputAmount * state.totalSupply) / reserveB;\n    const liquidity = liquidityA < liquidityB ? liquidityA : liquidityB;\n    const totalSupply = state.totalSupply + liquidity;\n    const percentage = BigNumber((100n * liquidity).toString())\n      .div(BigNumber(totalSupply.toString()))\n      .toFixed(5);\n    const sharePercentage = parseFloat(percentage);\n    const outputTokenId = isInputToken0 ? state.token1Info.id : state.token0Info.id;\n\n    const [tokenAId, tokenBId] =\n      inputType === 'TokenA' ? [inputTokenId, outputTokenId] : [outputTokenId, inputTokenId];\n    const [amountA, amountB] =\n      inputType === 'TokenA' ? [inputAmount, outputAmount] : [outputAmount, inputAmount];\n    return { state, tokenAId, tokenBId, amountA, amountB, shareAmount: liquidity, sharePercentage };\n  }\n\n  static getAmountIn(state: CpmmPoolContractState, tokenOutId: string, amountOut: bigint): bigint {\n    const [tokenOutInfo, reserveIn, reserveOut] =\n      tokenOutId === state.token0Info.id\n        ? [state.token0Info, state.reserve1, state.reserve0]\n        : [state.token1Info, state.reserve0, state.reserve1];\n\n    if (amountOut >= reserveOut) {\n      throw new InsufficientLiquidityError(\n        `Amount must be less than reserve, amount: ${prettifyTokenAmount(amountOut, tokenOutInfo.decimals)}, reserve: ${prettifyTokenAmount(reserveOut, tokenOutInfo.decimals)}`,\n      );\n    }\n    const numerator = reserveIn * amountOut * 1000n;\n    const denominator = (reserveOut - amountOut) * 997n;\n    return numerator / denominator + 1n;\n  }\n\n  static getAmountOut(state: CpmmPoolContractState, tokenInId: string, amountIn: bigint): bigint {\n    if (tokenInId === state.token0Info.id) {\n      return this._getAmountOut(amountIn, state.reserve0, state.reserve1);\n    } else {\n      return this._getAmountOut(amountIn, state.reserve1, state.reserve0);\n    }\n  }\n\n  static getInitLiquidityDetails(\n    tokenAId: string,\n    tokenBId: string,\n    amountA: bigint,\n    amountB: bigint,\n  ): {\n    tokenAId: string;\n    tokenBId: string;\n    amountA: bigint;\n    amountB: bigint;\n    shareAmount: bigint;\n    sharePercentage: number;\n  } {\n    const liquidity = MathUtil.sqrt(amountA * amountB);\n    if (liquidity <= MINIMUM_LIQUIDITY) {\n      throw new InsufficientLiquidityError('Insufficient initial liquidity');\n    }\n    return {\n      tokenAId,\n      tokenBId,\n      amountA,\n      amountB,\n      shareAmount: liquidity - MINIMUM_LIQUIDITY,\n      sharePercentage: 100,\n    };\n  }\n\n  private static _getAmountOut(amountIn: bigint, reserveIn: bigint, reserveOut: bigint): bigint {\n    const amountInExcludeFee = 997n * amountIn;\n    const numerator = amountInExcludeFee * reserveOut;\n    const denominator = amountInExcludeFee + 1000n * reserveIn;\n    return numerator / denominator;\n  }\n\n  // TODO: This might not be needed\n  private getExtraAlphAmount(tokenAId: string, tokenBId: string): bigint {\n    if (tokenAId === ALPH_TOKEN_ID || tokenBId === ALPH_TOKEN_ID) {\n      return DUST_AMOUNT * 2n;\n    }\n    return DUST_AMOUNT * 3n;\n  }\n}\n\nfunction deadline(ttlInMinutes: number): bigint {\n  return BigInt(Date.now() + ttlInMinutes * 60 * 1000);\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nexport * from \"./DexAccount\";\nexport * from \"./ExampleOracleSimple\";\nexport * from \"./FeeCollectorFactoryImpl\";\nexport * from \"./FeeCollectorPerTokenPairImpl\";\nexport * from \"./FullMathTest\";\nexport * from \"./MathTest\";\nexport * from \"./Router\";\nexport * from \"./TestToken\";\nexport * from \"./TokenPair\";\nexport * from \"./TokenPairFactory\";\nexport * from \"./contracts\";\nexport * from \"./scripts\";\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as DexAccountContractJson } from \"../dex/DexAccount.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\n\n// Custom types for the contract\nexport namespace DexAccountTypes {\n  export type Fields = {\n    parents: [HexString, HexString];\n    owner: Address;\n    refferer: Address;\n    counter: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    deposit: {\n      params: CallContractParams<{\n        payer: Address;\n        tokenId: HexString;\n        amount: bigint;\n        path: HexString;\n        at: bigint;\n      }>;\n      result: CallContractResult<null>;\n    };\n    createAccount: {\n      params: CallContractParams<{ ref: Address }>;\n      result: CallContractResult<null>;\n    };\n    asRef: {\n      params: CallContractParams<{ defaultRef: Address }>;\n      result: CallContractResult<Address>;\n    };\n    updateCounter: {\n      params: CallContractParams<{ newCounter: bigint }>;\n      result: CallContractResult<null>;\n    };\n    setParents: {\n      params: CallContractParams<{ newParents: [HexString, HexString] }>;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    deposit: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        tokenId: HexString;\n        amount: bigint;\n        path: HexString;\n        at: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    createAccount: {\n      params: SignExecuteContractMethodParams<{ ref: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    asRef: {\n      params: SignExecuteContractMethodParams<{ defaultRef: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    updateCounter: {\n      params: SignExecuteContractMethodParams<{ newCounter: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    setParents: {\n      params: SignExecuteContractMethodParams<{\n        newParents: [HexString, HexString];\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  DexAccountInstance,\n  DexAccountTypes.Fields\n> {\n  encodeFields(fields: DexAccountTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      []\n    );\n  }\n\n  at(address: string): DexAccountInstance {\n    return new DexAccountInstance(address);\n  }\n\n  tests = {\n    deposit: async (\n      params: TestContractParamsWithoutMaps<\n        DexAccountTypes.Fields,\n        {\n          payer: Address;\n          tokenId: HexString;\n          amount: bigint;\n          path: HexString;\n          at: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"deposit\", params, getContractByCodeHash);\n    },\n    createAccount: async (\n      params: TestContractParamsWithoutMaps<\n        DexAccountTypes.Fields,\n        { ref: Address }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"createAccount\", params, getContractByCodeHash);\n    },\n    asRef: async (\n      params: TestContractParamsWithoutMaps<\n        DexAccountTypes.Fields,\n        { defaultRef: Address }\n      >\n    ): Promise<TestContractResultWithoutMaps<Address>> => {\n      return testMethod(this, \"asRef\", params, getContractByCodeHash);\n    },\n    updateCounter: async (\n      params: TestContractParamsWithoutMaps<\n        DexAccountTypes.Fields,\n        { newCounter: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"updateCounter\", params, getContractByCodeHash);\n    },\n    setParents: async (\n      params: TestContractParamsWithoutMaps<\n        DexAccountTypes.Fields,\n        { newParents: [HexString, HexString] }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"setParents\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: DexAccountTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const DexAccount = new Factory(\n  Contract.fromJson(\n    DexAccountContractJson,\n    \"\",\n    \"66c27c91033d54a2d3edc97dbc36b35022274ddd8a7b84b724631ac37586ed48\",\n    []\n  )\n);\nregisterContract(DexAccount);\n\n// Use this class to interact with the blockchain\nexport class DexAccountInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<DexAccountTypes.State> {\n    return fetchContractState(DexAccount, this);\n  }\n\n  view = {\n    deposit: async (\n      params: DexAccountTypes.CallMethodParams<\"deposit\">\n    ): Promise<DexAccountTypes.CallMethodResult<\"deposit\">> => {\n      return callMethod(\n        DexAccount,\n        this,\n        \"deposit\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    createAccount: async (\n      params: DexAccountTypes.CallMethodParams<\"createAccount\">\n    ): Promise<DexAccountTypes.CallMethodResult<\"createAccount\">> => {\n      return callMethod(\n        DexAccount,\n        this,\n        \"createAccount\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    asRef: async (\n      params: DexAccountTypes.CallMethodParams<\"asRef\">\n    ): Promise<DexAccountTypes.CallMethodResult<\"asRef\">> => {\n      return callMethod(\n        DexAccount,\n        this,\n        \"asRef\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateCounter: async (\n      params: DexAccountTypes.CallMethodParams<\"updateCounter\">\n    ): Promise<DexAccountTypes.CallMethodResult<\"updateCounter\">> => {\n      return callMethod(\n        DexAccount,\n        this,\n        \"updateCounter\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    setParents: async (\n      params: DexAccountTypes.CallMethodParams<\"setParents\">\n    ): Promise<DexAccountTypes.CallMethodResult<\"setParents\">> => {\n      return callMethod(\n        DexAccount,\n        this,\n        \"setParents\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    deposit: async (\n      params: DexAccountTypes.SignExecuteMethodParams<\"deposit\">\n    ): Promise<DexAccountTypes.SignExecuteMethodResult<\"deposit\">> => {\n      return signExecuteMethod(DexAccount, this, \"deposit\", params);\n    },\n    createAccount: async (\n      params: DexAccountTypes.SignExecuteMethodParams<\"createAccount\">\n    ): Promise<DexAccountTypes.SignExecuteMethodResult<\"createAccount\">> => {\n      return signExecuteMethod(DexAccount, this, \"createAccount\", params);\n    },\n    asRef: async (\n      params: DexAccountTypes.SignExecuteMethodParams<\"asRef\">\n    ): Promise<DexAccountTypes.SignExecuteMethodResult<\"asRef\">> => {\n      return signExecuteMethod(DexAccount, this, \"asRef\", params);\n    },\n    updateCounter: async (\n      params: DexAccountTypes.SignExecuteMethodParams<\"updateCounter\">\n    ): Promise<DexAccountTypes.SignExecuteMethodResult<\"updateCounter\">> => {\n      return signExecuteMethod(DexAccount, this, \"updateCounter\", params);\n    },\n    setParents: async (\n      params: DexAccountTypes.SignExecuteMethodParams<\"setParents\">\n    ): Promise<DexAccountTypes.SignExecuteMethodResult<\"setParents\">> => {\n      return signExecuteMethod(DexAccount, this, \"setParents\", params);\n    },\n  };\n\n  async multicall<Calls extends DexAccountTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<DexAccountTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends DexAccountTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<DexAccountTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | DexAccountTypes.MultiCallParams\n      | DexAccountTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      DexAccount,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"DexAccount\",\n  \"bytecode\": \"0505404b409940b240ca40e60103050800402cd3bd481528b417051600ce0116011602aa16047a0e314dc3170616064313202f4c1816047a0e314dc31603cc17071605160777467a4c0418a0020c304c04a0020d2ba10201000106004029d365b302f9b41701160149191341f47b160047cb17021602c54c06ce000d0d160201024a01ce00170316011603130264a000a001a00213036417051704160147b116041605c11801000101010ad358cbdacfa0020c2f4c03ce00024a0216000201030101000ad3511324a7b4b1a50d2f1341937b1600a10201030202000cd375472acbb4b1a50d2f1341937b16001601a101a100\",\n  \"codeHash\": \"66c27c91033d54a2d3edc97dbc36b35022274ddd8a7b84b724631ac37586ed48\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"parents\",\n      \"owner\",\n      \"refferer\",\n      \"counter\"\n    ],\n    \"types\": [\n      \"[ByteVec;2]\",\n      \"Address\",\n      \"Address\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      true,\n      false,\n      false,\n      true\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"deposit\",\n      \"paramNames\": [\n        \"payer\",\n        \"tokenId\",\n        \"amount\",\n        \"path\",\n        \"at\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"ByteVec\",\n        \"U256\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"createAccount\",\n      \"paramNames\": [\n        \"ref\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"asRef\",\n      \"paramNames\": [\n        \"defaultRef\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"Address\"\n      ]\n    },\n    {\n      \"name\": \"updateCounter\",\n      \"paramNames\": [\n        \"newCounter\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"setParents\",\n      \"paramNames\": [\n        \"newParents\"\n      ],\n      \"paramTypes\": [\n        \"[ByteVec;2]\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [],\n  \"enums\": []\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, ContractFactory } from \"@alephium/web3\";\n\nlet contracts: ContractFactory<any>[] | undefined = undefined;\n\nexport function getAllContracts(): ContractFactory<any>[] {\n  return contracts ?? [];\n}\n\nexport function registerContract(factory: ContractFactory<any>) {\n  if (contracts === undefined) {\n    contracts = [factory];\n  } else {\n    contracts.push(factory);\n  }\n}\nexport function getContractByCodeHash(codeHash: string): Contract {\n  const c = contracts?.find((c) => c.contract.hasCodeHash(codeHash));\n  if (c === undefined) {\n    throw new Error(\"Unknown code with code hash: \" + codeHash);\n  }\n  return c.contract;\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as ExampleOracleSimpleContractJson } from \"../examples/ExampleOracleSimple.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\n\n// Custom types for the contract\nexport namespace ExampleOracleSimpleTypes {\n  export type Fields = {\n    pair: HexString;\n    price0CumulativeLast: bigint;\n    price1CumulativeLast: bigint;\n    blockTimeStampLast: bigint;\n    price0Average: bigint;\n    price1Average: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    fullMul: {\n      params: CallContractParams<{ x: bigint; y: bigint }>;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    mulDiv: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    fraction: {\n      params: CallContractParams<{ numerator: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    currentCumulativePrices: {\n      params: CallContractParams<{ currentBlockTimeStamp: bigint }>;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    update: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<null>;\n    };\n    consult: {\n      params: CallContractParams<{ tokenId: HexString; amountIn: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    fullMul: {\n      params: SignExecuteContractMethodParams<{ x: bigint; y: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDiv: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    fraction: {\n      params: SignExecuteContractMethodParams<{\n        numerator: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    currentCumulativePrices: {\n      params: SignExecuteContractMethodParams<{\n        currentBlockTimeStamp: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    update: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    consult: {\n      params: SignExecuteContractMethodParams<{\n        tokenId: HexString;\n        amountIn: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  ExampleOracleSimpleInstance,\n  ExampleOracleSimpleTypes.Fields\n> {\n  encodeFields(fields: ExampleOracleSimpleTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      []\n    );\n  }\n\n  consts = {\n    Resolution: BigInt(\"112\"),\n    Period: BigInt(\"86400\"),\n    ErrorCodes: {\n      FullDivOverflow: BigInt(\"0\"),\n      DivByZero: BigInt(\"1\"),\n      FractionOverflow: BigInt(\"2\"),\n      PeriodNotElapsed: BigInt(\"3\"),\n      InvalidToken: BigInt(\"4\"),\n    },\n  };\n\n  at(address: string): ExampleOracleSimpleInstance {\n    return new ExampleOracleSimpleInstance(address);\n  }\n\n  tests = {\n    fullMul: async (\n      params: TestContractParamsWithoutMaps<\n        ExampleOracleSimpleTypes.Fields,\n        { x: bigint; y: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(this, \"fullMul\", params, getContractByCodeHash);\n    },\n    mulDiv: async (\n      params: TestContractParamsWithoutMaps<\n        ExampleOracleSimpleTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"mulDiv\", params, getContractByCodeHash);\n    },\n    fraction: async (\n      params: TestContractParamsWithoutMaps<\n        ExampleOracleSimpleTypes.Fields,\n        { numerator: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"fraction\", params, getContractByCodeHash);\n    },\n    currentCumulativePrices: async (\n      params: TestContractParamsWithoutMaps<\n        ExampleOracleSimpleTypes.Fields,\n        { currentBlockTimeStamp: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(\n        this,\n        \"currentCumulativePrices\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    update: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<ExampleOracleSimpleTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"update\", params, getContractByCodeHash);\n    },\n    consult: async (\n      params: TestContractParamsWithoutMaps<\n        ExampleOracleSimpleTypes.Fields,\n        { tokenId: HexString; amountIn: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"consult\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: ExampleOracleSimpleTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const ExampleOracleSimple = new Factory(\n  Contract.fromJson(\n    ExampleOracleSimpleContractJson,\n    \"\",\n    \"c96ea41f2579f435d70c7801c2ec158031575b7571d8e8bbb2e460a8814cfbdf\",\n    []\n  )\n);\nregisterContract(ExampleOracleSimple);\n\n// Use this class to interact with the blockchain\nexport class ExampleOracleSimpleInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<ExampleOracleSimpleTypes.State> {\n    return fetchContractState(ExampleOracleSimple, this);\n  }\n\n  view = {\n    fullMul: async (\n      params: ExampleOracleSimpleTypes.CallMethodParams<\"fullMul\">\n    ): Promise<ExampleOracleSimpleTypes.CallMethodResult<\"fullMul\">> => {\n      return callMethod(\n        ExampleOracleSimple,\n        this,\n        \"fullMul\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: ExampleOracleSimpleTypes.CallMethodParams<\"mulDiv\">\n    ): Promise<ExampleOracleSimpleTypes.CallMethodResult<\"mulDiv\">> => {\n      return callMethod(\n        ExampleOracleSimple,\n        this,\n        \"mulDiv\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    fraction: async (\n      params: ExampleOracleSimpleTypes.CallMethodParams<\"fraction\">\n    ): Promise<ExampleOracleSimpleTypes.CallMethodResult<\"fraction\">> => {\n      return callMethod(\n        ExampleOracleSimple,\n        this,\n        \"fraction\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    currentCumulativePrices: async (\n      params: ExampleOracleSimpleTypes.CallMethodParams<\"currentCumulativePrices\">\n    ): Promise<\n      ExampleOracleSimpleTypes.CallMethodResult<\"currentCumulativePrices\">\n    > => {\n      return callMethod(\n        ExampleOracleSimple,\n        this,\n        \"currentCumulativePrices\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    update: async (\n      params?: ExampleOracleSimpleTypes.CallMethodParams<\"update\">\n    ): Promise<ExampleOracleSimpleTypes.CallMethodResult<\"update\">> => {\n      return callMethod(\n        ExampleOracleSimple,\n        this,\n        \"update\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    consult: async (\n      params: ExampleOracleSimpleTypes.CallMethodParams<\"consult\">\n    ): Promise<ExampleOracleSimpleTypes.CallMethodResult<\"consult\">> => {\n      return callMethod(\n        ExampleOracleSimple,\n        this,\n        \"consult\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    fullMul: async (\n      params: ExampleOracleSimpleTypes.SignExecuteMethodParams<\"fullMul\">\n    ): Promise<ExampleOracleSimpleTypes.SignExecuteMethodResult<\"fullMul\">> => {\n      return signExecuteMethod(ExampleOracleSimple, this, \"fullMul\", params);\n    },\n    mulDiv: async (\n      params: ExampleOracleSimpleTypes.SignExecuteMethodParams<\"mulDiv\">\n    ): Promise<ExampleOracleSimpleTypes.SignExecuteMethodResult<\"mulDiv\">> => {\n      return signExecuteMethod(ExampleOracleSimple, this, \"mulDiv\", params);\n    },\n    fraction: async (\n      params: ExampleOracleSimpleTypes.SignExecuteMethodParams<\"fraction\">\n    ): Promise<\n      ExampleOracleSimpleTypes.SignExecuteMethodResult<\"fraction\">\n    > => {\n      return signExecuteMethod(ExampleOracleSimple, this, \"fraction\", params);\n    },\n    currentCumulativePrices: async (\n      params: ExampleOracleSimpleTypes.SignExecuteMethodParams<\"currentCumulativePrices\">\n    ): Promise<\n      ExampleOracleSimpleTypes.SignExecuteMethodResult<\"currentCumulativePrices\">\n    > => {\n      return signExecuteMethod(\n        ExampleOracleSimple,\n        this,\n        \"currentCumulativePrices\",\n        params\n      );\n    },\n    update: async (\n      params: ExampleOracleSimpleTypes.SignExecuteMethodParams<\"update\">\n    ): Promise<ExampleOracleSimpleTypes.SignExecuteMethodResult<\"update\">> => {\n      return signExecuteMethod(ExampleOracleSimple, this, \"update\", params);\n    },\n    consult: async (\n      params: ExampleOracleSimpleTypes.SignExecuteMethodParams<\"consult\">\n    ): Promise<ExampleOracleSimpleTypes.SignExecuteMethodResult<\"consult\">> => {\n      return signExecuteMethod(ExampleOracleSimple, this, \"consult\", params);\n    },\n  };\n\n  async multicall<Calls extends ExampleOracleSimpleTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<ExampleOracleSimpleTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends ExampleOracleSimpleTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<ExampleOracleSimpleTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | ExampleOracleSimpleTypes.MultiCallParams\n      | ExampleOracleSimpleTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      ExampleOracleSimple,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"ExampleOracleSimple\",\n  \"bytecode\": \"060640354103414c419f41f0422701000205021bd3ebaef653160016010c0d36871702160016013717031602160336170416021603314c0416040d36170416031604020100030801407fd340d735c316020c300d7b1600160100001704170316040c2f4c04160316022d0216021604330c7b16001601160287170516051603334c0416040d361704160316053617030c1602361602381706160216062d1702160316062d17030c16063616062d0d351706160316041606373917030f1602370e3a170716070e16021607373637170716070e16021607373637170716070e16021607373637170716070e16021607373637170716070e16021607373637170716070e16021607373637170716031607370201000203014028d30dcd6a6a16010c300d7b16000c2f4c020c0216000d1340903b314c0616001340703b16012d4a0616000d1340703b16010001170216020d1340e03b310e7b1602020000010602402e0c0dce00010a17010c0dce00010b17020c0ece0001081704170316000c0dce0001092b170516050c304c10160116041603000216052c351701160216031604000216052c351702160116020201000004004028d3948fae95561343e82d0d13203b2e17001600a0022b170116011380015180340f7b16000003170317021602a0003616012da1031603a0013616012da1041602a1001603a1011600a10201000204011cd3a9d209fc0c0ece0001071703170216001602414c06a00316012c1340703c021600160341107ba00416012c1340703c02\",\n  \"codeHash\": \"c96ea41f2579f435d70c7801c2ec158031575b7571d8e8bbb2e460a8814cfbdf\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"pair\",\n      \"price0CumulativeLast\",\n      \"price1CumulativeLast\",\n      \"blockTimeStampLast\",\n      \"price0Average\",\n      \"price1Average\"\n    ],\n    \"types\": [\n      \"TokenPair\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      true,\n      true,\n      true,\n      true,\n      true\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"fullMul\",\n      \"paramNames\": [\n        \"x\",\n        \"y\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"fraction\",\n      \"paramNames\": [\n        \"numerator\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"currentCumulativePrices\",\n      \"paramNames\": [\n        \"currentBlockTimeStamp\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"update\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"consult\",\n      \"paramNames\": [\n        \"tokenId\",\n        \"amountIn\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    }\n  ],\n  \"constants\": [\n    {\n      \"name\": \"Resolution\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"112\"\n      }\n    },\n    {\n      \"name\": \"Period\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"86400\"\n      }\n    }\n  ],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"FullDivOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"DivByZero\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"FractionOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        },\n        {\n          \"name\": \"PeriodNotElapsed\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"3\"\n          }\n        },\n        {\n          \"name\": \"InvalidToken\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"4\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as FeeCollectorFactoryImplContractJson } from \"../examples/FeeCollectorFactoryImpl.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\n\n// Custom types for the contract\nexport namespace FeeCollectorFactoryImplTypes {\n  export type Fields = {\n    feeCollectorPerTokenPairTemplateId: HexString;\n    tokenPairFactory: HexString;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    createFeeCollector: {\n      params: CallContractParams<{\n        caller: Address;\n        alphAmount: bigint;\n        tokenPair: HexString;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    createFeeCollector: {\n      params: SignExecuteContractMethodParams<{\n        caller: Address;\n        alphAmount: bigint;\n        tokenPair: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  FeeCollectorFactoryImplInstance,\n  FeeCollectorFactoryImplTypes.Fields\n> {\n  encodeFields(fields: FeeCollectorFactoryImplTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      []\n    );\n  }\n\n  consts = {\n    ErrorCodes: {\n      ReserveOverflow: BigInt(\"0\"),\n      InsufficientInitLiquidity: BigInt(\"1\"),\n      InsufficientLiquidityMinted: BigInt(\"2\"),\n      InsufficientLiquidityBurned: BigInt(\"3\"),\n      InvalidToAddress: BigInt(\"4\"),\n      InsufficientLiquidity: BigInt(\"5\"),\n      InvalidTokenInId: BigInt(\"6\"),\n      InvalidCalleeId: BigInt(\"7\"),\n      InvalidK: BigInt(\"8\"),\n      InsufficientOutputAmount: BigInt(\"9\"),\n      InsufficientInputAmount: BigInt(\"10\"),\n      IdenticalTokenIds: BigInt(\"11\"),\n      Expired: BigInt(\"12\"),\n      InsufficientToken0Amount: BigInt(\"13\"),\n      InsufficientToken1Amount: BigInt(\"14\"),\n      TokenNotExist: BigInt(\"15\"),\n      InvalidCaller: BigInt(\"16\"),\n      FeeCollectorNotEnabled: BigInt(\"17\"),\n      InvalidAccount: BigInt(\"18\"),\n    },\n  };\n\n  at(address: string): FeeCollectorFactoryImplInstance {\n    return new FeeCollectorFactoryImplInstance(address);\n  }\n\n  tests = {\n    createFeeCollector: async (\n      params: TestContractParamsWithoutMaps<\n        FeeCollectorFactoryImplTypes.Fields,\n        { caller: Address; alphAmount: bigint; tokenPair: HexString }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(\n        this,\n        \"createFeeCollector\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  stateForTest(\n    initFields: FeeCollectorFactoryImplTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const FeeCollectorFactoryImpl = new Factory(\n  Contract.fromJson(\n    FeeCollectorFactoryImplContractJson,\n    \"\",\n    \"966f75cddefe774a87dbf778012f4f3f494b3a860f4c975d0c5262a1be185d49\",\n    []\n  )\n);\nregisterContract(FeeCollectorFactoryImpl);\n\n// Use this class to interact with the blockchain\nexport class FeeCollectorFactoryImplInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<FeeCollectorFactoryImplTypes.State> {\n    return fetchContractState(FeeCollectorFactoryImpl, this);\n  }\n\n  view = {\n    createFeeCollector: async (\n      params: FeeCollectorFactoryImplTypes.CallMethodParams<\"createFeeCollector\">\n    ): Promise<\n      FeeCollectorFactoryImplTypes.CallMethodResult<\"createFeeCollector\">\n    > => {\n      return callMethod(\n        FeeCollectorFactoryImpl,\n        this,\n        \"createFeeCollector\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    createFeeCollector: async (\n      params: FeeCollectorFactoryImplTypes.SignExecuteMethodParams<\"createFeeCollector\">\n    ): Promise<\n      FeeCollectorFactoryImplTypes.SignExecuteMethodResult<\"createFeeCollector\">\n    > => {\n      return signExecuteMethod(\n        FeeCollectorFactoryImpl,\n        this,\n        \"createFeeCollector\",\n        params\n      );\n    },\n  };\n\n  async multicall<Calls extends FeeCollectorFactoryImplTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<FeeCollectorFactoryImplTypes.MultiCallResults<Calls>>;\n  async multicall<\n    Callss extends FeeCollectorFactoryImplTypes.MultiCallParams[]\n  >(\n    callss: Narrow<Callss>\n  ): Promise<FeeCollectorFactoryImplTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | FeeCollectorFactoryImplTypes.MultiCallParams\n      | FeeCollectorFactoryImplTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      FeeCollectorFactoryImpl,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"FeeCollectorFactoryImpl\",\n  \"bytecode\": \"0201402a010303050116b3ce014113107bce0116021302641300641704170316001601a21602ce0016031604c102\",\n  \"codeHash\": \"966f75cddefe774a87dbf778012f4f3f494b3a860f4c975d0c5262a1be185d49\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"feeCollectorPerTokenPairTemplateId\",\n      \"tokenPairFactory\"\n    ],\n    \"types\": [\n      \"ByteVec\",\n      \"TokenPairFactory\"\n    ],\n    \"isMutable\": [\n      false,\n      false\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"createFeeCollector\",\n      \"paramNames\": [\n        \"caller\",\n        \"alphAmount\",\n        \"tokenPair\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\",\n        \"TokenPair\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"ReserveOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"InsufficientInitLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidityMinted\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidityBurned\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"3\"\n          }\n        },\n        {\n          \"name\": \"InvalidToAddress\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"4\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"5\"\n          }\n        },\n        {\n          \"name\": \"InvalidTokenInId\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"6\"\n          }\n        },\n        {\n          \"name\": \"InvalidCalleeId\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"7\"\n          }\n        },\n        {\n          \"name\": \"InvalidK\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"8\"\n          }\n        },\n        {\n          \"name\": \"InsufficientOutputAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"9\"\n          }\n        },\n        {\n          \"name\": \"InsufficientInputAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"10\"\n          }\n        },\n        {\n          \"name\": \"IdenticalTokenIds\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11\"\n          }\n        },\n        {\n          \"name\": \"Expired\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"12\"\n          }\n        },\n        {\n          \"name\": \"InsufficientToken0Amount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"13\"\n          }\n        },\n        {\n          \"name\": \"InsufficientToken1Amount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"14\"\n          }\n        },\n        {\n          \"name\": \"TokenNotExist\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"15\"\n          }\n        },\n        {\n          \"name\": \"InvalidCaller\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"16\"\n          }\n        },\n        {\n          \"name\": \"FeeCollectorNotEnabled\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"17\"\n          }\n        },\n        {\n          \"name\": \"InvalidAccount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"18\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as FeeCollectorPerTokenPairImplContractJson } from \"../examples/FeeCollectorPerTokenPairImpl.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\n\n// Custom types for the contract\nexport namespace FeeCollectorPerTokenPairImplTypes {\n  export type Fields = {\n    tokenPairFactory: HexString;\n    tokenPair: HexString;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    collectFee: {\n      params: CallContractParams<{ from: Address; amount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    withdraw: {\n      params: CallContractParams<{ to: Address; amount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    destroy: {\n      params: CallContractParams<{ to: Address }>;\n      result: CallContractResult<null>;\n    };\n    collectFeeManually: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    collectFee: {\n      params: SignExecuteContractMethodParams<{\n        from: Address;\n        amount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    withdraw: {\n      params: SignExecuteContractMethodParams<{ to: Address; amount: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    destroy: {\n      params: SignExecuteContractMethodParams<{ to: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    collectFeeManually: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  FeeCollectorPerTokenPairImplInstance,\n  FeeCollectorPerTokenPairImplTypes.Fields\n> {\n  encodeFields(fields: FeeCollectorPerTokenPairImplTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      []\n    );\n  }\n\n  consts = {\n    ErrorCodes: {\n      ReserveOverflow: BigInt(\"0\"),\n      InsufficientInitLiquidity: BigInt(\"1\"),\n      InsufficientLiquidityMinted: BigInt(\"2\"),\n      InsufficientLiquidityBurned: BigInt(\"3\"),\n      InvalidToAddress: BigInt(\"4\"),\n      InsufficientLiquidity: BigInt(\"5\"),\n      InvalidTokenInId: BigInt(\"6\"),\n      InvalidCalleeId: BigInt(\"7\"),\n      InvalidK: BigInt(\"8\"),\n      InsufficientOutputAmount: BigInt(\"9\"),\n      InsufficientInputAmount: BigInt(\"10\"),\n      IdenticalTokenIds: BigInt(\"11\"),\n      Expired: BigInt(\"12\"),\n      InsufficientToken0Amount: BigInt(\"13\"),\n      InsufficientToken1Amount: BigInt(\"14\"),\n      TokenNotExist: BigInt(\"15\"),\n      InvalidCaller: BigInt(\"16\"),\n      FeeCollectorNotEnabled: BigInt(\"17\"),\n      InvalidAccount: BigInt(\"18\"),\n    },\n  };\n\n  at(address: string): FeeCollectorPerTokenPairImplInstance {\n    return new FeeCollectorPerTokenPairImplInstance(address);\n  }\n\n  tests = {\n    collectFee: async (\n      params: TestContractParamsWithoutMaps<\n        FeeCollectorPerTokenPairImplTypes.Fields,\n        { from: Address; amount: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"collectFee\", params, getContractByCodeHash);\n    },\n    withdraw: async (\n      params: TestContractParamsWithoutMaps<\n        FeeCollectorPerTokenPairImplTypes.Fields,\n        { to: Address; amount: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"withdraw\", params, getContractByCodeHash);\n    },\n    destroy: async (\n      params: TestContractParamsWithoutMaps<\n        FeeCollectorPerTokenPairImplTypes.Fields,\n        { to: Address }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"destroy\", params, getContractByCodeHash);\n    },\n    collectFeeManually: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          FeeCollectorPerTokenPairImplTypes.Fields,\n          never\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"collectFeeManually\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  stateForTest(\n    initFields: FeeCollectorPerTokenPairImplTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const FeeCollectorPerTokenPairImpl = new Factory(\n  Contract.fromJson(\n    FeeCollectorPerTokenPairImplContractJson,\n    \"\",\n    \"a2326c414551281d90194411b00b614c3fc07cb568020e1ed2e1852099e6996e\",\n    []\n  )\n);\nregisterContract(FeeCollectorPerTokenPairImpl);\n\n// Use this class to interact with the blockchain\nexport class FeeCollectorPerTokenPairImplInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<FeeCollectorPerTokenPairImplTypes.State> {\n    return fetchContractState(FeeCollectorPerTokenPairImpl, this);\n  }\n\n  view = {\n    collectFee: async (\n      params: FeeCollectorPerTokenPairImplTypes.CallMethodParams<\"collectFee\">\n    ): Promise<\n      FeeCollectorPerTokenPairImplTypes.CallMethodResult<\"collectFee\">\n    > => {\n      return callMethod(\n        FeeCollectorPerTokenPairImpl,\n        this,\n        \"collectFee\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    withdraw: async (\n      params: FeeCollectorPerTokenPairImplTypes.CallMethodParams<\"withdraw\">\n    ): Promise<\n      FeeCollectorPerTokenPairImplTypes.CallMethodResult<\"withdraw\">\n    > => {\n      return callMethod(\n        FeeCollectorPerTokenPairImpl,\n        this,\n        \"withdraw\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    destroy: async (\n      params: FeeCollectorPerTokenPairImplTypes.CallMethodParams<\"destroy\">\n    ): Promise<\n      FeeCollectorPerTokenPairImplTypes.CallMethodResult<\"destroy\">\n    > => {\n      return callMethod(\n        FeeCollectorPerTokenPairImpl,\n        this,\n        \"destroy\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    collectFeeManually: async (\n      params?: FeeCollectorPerTokenPairImplTypes.CallMethodParams<\"collectFeeManually\">\n    ): Promise<\n      FeeCollectorPerTokenPairImplTypes.CallMethodResult<\"collectFeeManually\">\n    > => {\n      return callMethod(\n        FeeCollectorPerTokenPairImpl,\n        this,\n        \"collectFeeManually\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    collectFee: async (\n      params: FeeCollectorPerTokenPairImplTypes.SignExecuteMethodParams<\"collectFee\">\n    ): Promise<\n      FeeCollectorPerTokenPairImplTypes.SignExecuteMethodResult<\"collectFee\">\n    > => {\n      return signExecuteMethod(\n        FeeCollectorPerTokenPairImpl,\n        this,\n        \"collectFee\",\n        params\n      );\n    },\n    withdraw: async (\n      params: FeeCollectorPerTokenPairImplTypes.SignExecuteMethodParams<\"withdraw\">\n    ): Promise<\n      FeeCollectorPerTokenPairImplTypes.SignExecuteMethodResult<\"withdraw\">\n    > => {\n      return signExecuteMethod(\n        FeeCollectorPerTokenPairImpl,\n        this,\n        \"withdraw\",\n        params\n      );\n    },\n    destroy: async (\n      params: FeeCollectorPerTokenPairImplTypes.SignExecuteMethodParams<\"destroy\">\n    ): Promise<\n      FeeCollectorPerTokenPairImplTypes.SignExecuteMethodResult<\"destroy\">\n    > => {\n      return signExecuteMethod(\n        FeeCollectorPerTokenPairImpl,\n        this,\n        \"destroy\",\n        params\n      );\n    },\n    collectFeeManually: async (\n      params: FeeCollectorPerTokenPairImplTypes.SignExecuteMethodParams<\"collectFeeManually\">\n    ): Promise<\n      FeeCollectorPerTokenPairImplTypes.SignExecuteMethodResult<\"collectFeeManually\">\n    > => {\n      return signExecuteMethod(\n        FeeCollectorPerTokenPairImpl,\n        this,\n        \"collectFeeManually\",\n        params\n      );\n    },\n  };\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"FeeCollectorPerTokenPairImpl\",\n  \"bytecode\": \"0204154032404b406701010202000ab3ce014113107b1600b2ce011601aa01020202000dd3f1ab4760b40c0dce0001024513107b1600ce011601ab01020101000bd320f98f62b40c0dce0001024513107b1600b001000000000dd3f2c71c4bb40c0dce0001024513107b0c0cce010111\",\n  \"codeHash\": \"a2326c414551281d90194411b00b614c3fc07cb568020e1ed2e1852099e6996e\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"tokenPairFactory\",\n      \"tokenPair\"\n    ],\n    \"types\": [\n      \"TokenPairFactory\",\n      \"TokenPair\"\n    ],\n    \"isMutable\": [\n      false,\n      false\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"collectFee\",\n      \"paramNames\": [\n        \"from\",\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"withdraw\",\n      \"paramNames\": [\n        \"to\",\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"destroy\",\n      \"paramNames\": [\n        \"to\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"collectFeeManually\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"ReserveOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"InsufficientInitLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidityMinted\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidityBurned\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"3\"\n          }\n        },\n        {\n          \"name\": \"InvalidToAddress\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"4\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"5\"\n          }\n        },\n        {\n          \"name\": \"InvalidTokenInId\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"6\"\n          }\n        },\n        {\n          \"name\": \"InvalidCalleeId\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"7\"\n          }\n        },\n        {\n          \"name\": \"InvalidK\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"8\"\n          }\n        },\n        {\n          \"name\": \"InsufficientOutputAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"9\"\n          }\n        },\n        {\n          \"name\": \"InsufficientInputAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"10\"\n          }\n        },\n        {\n          \"name\": \"IdenticalTokenIds\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11\"\n          }\n        },\n        {\n          \"name\": \"Expired\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"12\"\n          }\n        },\n        {\n          \"name\": \"InsufficientToken0Amount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"13\"\n          }\n        },\n        {\n          \"name\": \"InsufficientToken1Amount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"14\"\n          }\n        },\n        {\n          \"name\": \"TokenNotExist\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"15\"\n          }\n        },\n        {\n          \"name\": \"InvalidCaller\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"16\"\n          }\n        },\n        {\n          \"name\": \"FeeCollectorNotEnabled\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"17\"\n          }\n        },\n        {\n          \"name\": \"InvalidAccount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"18\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as FullMathTestContractJson } from \"../examples/FullMathTest.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\n\n// Custom types for the contract\nexport namespace FullMathTestTypes {\n  export type State = Omit<ContractState<any>, \"fields\">;\n\n  export interface CallMethodTable {\n    fullMul: {\n      params: CallContractParams<{ x: bigint; y: bigint }>;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    mulDiv: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    fraction: {\n      params: CallContractParams<{ numerator: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    fullMul: {\n      params: SignExecuteContractMethodParams<{ x: bigint; y: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDiv: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    fraction: {\n      params: SignExecuteContractMethodParams<{\n        numerator: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<FullMathTestInstance, {}> {\n  encodeFields() {\n    return encodeContractFields({}, this.contract.fieldsSig, []);\n  }\n\n  consts = {\n    Resolution: BigInt(\"112\"),\n    ErrorCodes: {\n      FullDivOverflow: BigInt(\"0\"),\n      DivByZero: BigInt(\"1\"),\n      FractionOverflow: BigInt(\"2\"),\n      PeriodNotElapsed: BigInt(\"3\"),\n      InvalidToken: BigInt(\"4\"),\n    },\n  };\n\n  at(address: string): FullMathTestInstance {\n    return new FullMathTestInstance(address);\n  }\n\n  tests = {\n    fullMul: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<never, { x: bigint; y: bigint }>,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(this, \"fullMul\", params, getContractByCodeHash);\n    },\n    mulDiv: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { a: bigint; b: bigint; denominator: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"mulDiv\", params, getContractByCodeHash);\n    },\n    fraction: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { numerator: bigint; denominator: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"fraction\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(initFields: {}, asset?: Asset, address?: string) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const FullMathTest = new Factory(\n  Contract.fromJson(\n    FullMathTestContractJson,\n    \"\",\n    \"4e6bd23542804a31c9fdc85b4a0065857c11fcd0b7a40a7ce2c66558001e2040\",\n    []\n  )\n);\nregisterContract(FullMathTest);\n\n// Use this class to interact with the blockchain\nexport class FullMathTestInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<FullMathTestTypes.State> {\n    return fetchContractState(FullMathTest, this);\n  }\n\n  view = {\n    fullMul: async (\n      params: FullMathTestTypes.CallMethodParams<\"fullMul\">\n    ): Promise<FullMathTestTypes.CallMethodResult<\"fullMul\">> => {\n      return callMethod(\n        FullMathTest,\n        this,\n        \"fullMul\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: FullMathTestTypes.CallMethodParams<\"mulDiv\">\n    ): Promise<FullMathTestTypes.CallMethodResult<\"mulDiv\">> => {\n      return callMethod(\n        FullMathTest,\n        this,\n        \"mulDiv\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    fraction: async (\n      params: FullMathTestTypes.CallMethodParams<\"fraction\">\n    ): Promise<FullMathTestTypes.CallMethodResult<\"fraction\">> => {\n      return callMethod(\n        FullMathTest,\n        this,\n        \"fraction\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    fullMul: async (\n      params: FullMathTestTypes.SignExecuteMethodParams<\"fullMul\">\n    ): Promise<FullMathTestTypes.SignExecuteMethodResult<\"fullMul\">> => {\n      return signExecuteMethod(FullMathTest, this, \"fullMul\", params);\n    },\n    mulDiv: async (\n      params: FullMathTestTypes.SignExecuteMethodParams<\"mulDiv\">\n    ): Promise<FullMathTestTypes.SignExecuteMethodResult<\"mulDiv\">> => {\n      return signExecuteMethod(FullMathTest, this, \"mulDiv\", params);\n    },\n    fraction: async (\n      params: FullMathTestTypes.SignExecuteMethodParams<\"fraction\">\n    ): Promise<FullMathTestTypes.SignExecuteMethodResult<\"fraction\">> => {\n      return signExecuteMethod(FullMathTest, this, \"fraction\", params);\n    },\n  };\n\n  async multicall<Calls extends FullMathTestTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<FullMathTestTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends FullMathTestTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<FullMathTestTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | FullMathTestTypes.MultiCallParams\n      | FullMathTestTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      FullMathTest,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"FullMathTest\",\n  \"bytecode\": \"000340354103414c01000205021bd3ebaef653160016010c0d36871702160016013717031602160336170416021603314c0416040d36170416031604020100030801407fd340d735c316020c300d7b1600160100001704170316040c2f4c04160316022d0216021604330c7b16001601160287170516051603334c0416040d361704160316053617030c1602361602381706160216062d1702160316062d17030c16063616062d0d351706160316041606373917030f1602370e3a170716070e16021607373637170716070e16021607373637170716070e16021607373637170716070e16021607373637170716070e16021607373637170716070e16021607373637170716031607370201000203014028d30dcd6a6a16010c300d7b16000c2f4c020c0216000d1340903b314c0616001340703b16012d4a0616000d1340703b16010001170216020d1340e03b310e7b160202\",\n  \"codeHash\": \"4e6bd23542804a31c9fdc85b4a0065857c11fcd0b7a40a7ce2c66558001e2040\",\n  \"fieldsSig\": {\n    \"names\": [],\n    \"types\": [],\n    \"isMutable\": []\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"fullMul\",\n      \"paramNames\": [\n        \"x\",\n        \"y\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"fraction\",\n      \"paramNames\": [\n        \"numerator\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    }\n  ],\n  \"constants\": [\n    {\n      \"name\": \"Resolution\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"112\"\n      }\n    }\n  ],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"FullDivOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"DivByZero\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"FractionOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        },\n        {\n          \"name\": \"PeriodNotElapsed\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"3\"\n          }\n        },\n        {\n          \"name\": \"InvalidToken\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"4\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as MathTestContractJson } from \"../test/MathTest.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\n\n// Custom types for the contract\nexport namespace MathTestTypes {\n  export type State = Omit<ContractState<any>, \"fields\">;\n\n  export interface CallMethodTable {\n    uqdiv: {\n      params: CallContractParams<{ a: bigint; b: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    sqrt: {\n      params: CallContractParams<{ y: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    uqdiv: {\n      params: SignExecuteContractMethodParams<{ a: bigint; b: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    sqrt: {\n      params: SignExecuteContractMethodParams<{ y: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<MathTestInstance, {}> {\n  encodeFields() {\n    return encodeContractFields({}, this.contract.fieldsSig, []);\n  }\n\n  at(address: string): MathTestInstance {\n    return new MathTestInstance(address);\n  }\n\n  tests = {\n    uqdiv: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<never, { a: bigint; b: bigint }>,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"uqdiv\", params, getContractByCodeHash);\n    },\n    sqrt: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<never, { y: bigint }>,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"sqrt\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(initFields: {}, asset?: Asset, address?: string) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const MathTest = new Factory(\n  Contract.fromJson(\n    MathTestContractJson,\n    \"\",\n    \"732c8ff5b38eadaa96074453394619cb78ddf7371ff94ce7fb3dbe5fe332655c\",\n    []\n  )\n);\nregisterContract(MathTest);\n\n// Use this class to interact with the blockchain\nexport class MathTestInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<MathTestTypes.State> {\n    return fetchContractState(MathTest, this);\n  }\n\n  view = {\n    uqdiv: async (\n      params: MathTestTypes.CallMethodParams<\"uqdiv\">\n    ): Promise<MathTestTypes.CallMethodResult<\"uqdiv\">> => {\n      return callMethod(MathTest, this, \"uqdiv\", params, getContractByCodeHash);\n    },\n    sqrt: async (\n      params: MathTestTypes.CallMethodParams<\"sqrt\">\n    ): Promise<MathTestTypes.CallMethodResult<\"sqrt\">> => {\n      return callMethod(MathTest, this, \"sqrt\", params, getContractByCodeHash);\n    },\n  };\n\n  transact = {\n    uqdiv: async (\n      params: MathTestTypes.SignExecuteMethodParams<\"uqdiv\">\n    ): Promise<MathTestTypes.SignExecuteMethodResult<\"uqdiv\">> => {\n      return signExecuteMethod(MathTest, this, \"uqdiv\", params);\n    },\n    sqrt: async (\n      params: MathTestTypes.SignExecuteMethodParams<\"sqrt\">\n    ): Promise<MathTestTypes.SignExecuteMethodResult<\"sqrt\">> => {\n      return signExecuteMethod(MathTest, this, \"sqrt\", params);\n    },\n  };\n\n  async multicall<Calls extends MathTestTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<MathTestTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends MathTestTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<MathTestTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | MathTestTypes.MultiCallParams\n      | MathTestTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      MathTest,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"MathTest\",\n  \"bytecode\": \"0002174053010002020109d38c844efd16000d1340703b2c16012d0201000103014020d36ae1998016000f334c191600170116000e2d0d2a170216021601314c0b16021701160016022d16022a0e2d17024a311601020d02\",\n  \"codeHash\": \"732c8ff5b38eadaa96074453394619cb78ddf7371ff94ce7fb3dbe5fe332655c\",\n  \"fieldsSig\": {\n    \"names\": [],\n    \"types\": [],\n    \"isMutable\": []\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"uqdiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"sqrt\",\n      \"paramNames\": [\n        \"y\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": []\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as RouterContractJson } from \"../dex/Router.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\n\n// Custom types for the contract\nexport namespace RouterTypes {\n  export type State = Omit<ContractState<any>, \"fields\">;\n\n  export interface CallMethodTable {\n    addLiquidity_: {\n      params: CallContractParams<{\n        reserve0: bigint;\n        reserve1: bigint;\n        amount0Desired: bigint;\n        amount1Desired: bigint;\n        amount0Min: bigint;\n        amount1Min: bigint;\n      }>;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    addLiquidity: {\n      params: CallContractParams<{\n        tokenPair: HexString;\n        sender: Address;\n        amount0Desired: bigint;\n        amount1Desired: bigint;\n        amount0Min: bigint;\n        amount1Min: bigint;\n        deadline: bigint;\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint]>;\n    };\n    removeLiquidity: {\n      params: CallContractParams<{\n        tokenPairId: HexString;\n        sender: Address;\n        liquidity: bigint;\n        amount0Min: bigint;\n        amount1Min: bigint;\n        deadline: bigint;\n      }>;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    getReserveInAndReserveOut: {\n      params: CallContractParams<{\n        tokenPair: HexString;\n        tokenInId: HexString;\n      }>;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    swapExactTokenForToken: {\n      params: CallContractParams<{\n        tokenPair: HexString;\n        sender: Address;\n        tokenInId: HexString;\n        amountIn: bigint;\n        amountOutMin: bigint;\n        to: Address;\n        deadline: bigint;\n      }>;\n      result: CallContractResult<null>;\n    };\n    swapTokenForExactToken: {\n      params: CallContractParams<{\n        tokenPair: HexString;\n        sender: Address;\n        tokenInId: HexString;\n        amountInMax: bigint;\n        amountOut: bigint;\n        to: Address;\n        deadline: bigint;\n      }>;\n      result: CallContractResult<null>;\n    };\n    swap: {\n      params: CallContractParams<{\n        tokenPair: HexString;\n        sender: Address;\n        to: Address;\n        tokenInId: HexString;\n        amountIn: bigint;\n        amountOut: bigint;\n      }>;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    addLiquidity_: {\n      params: SignExecuteContractMethodParams<{\n        reserve0: bigint;\n        reserve1: bigint;\n        amount0Desired: bigint;\n        amount1Desired: bigint;\n        amount0Min: bigint;\n        amount1Min: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    addLiquidity: {\n      params: SignExecuteContractMethodParams<{\n        tokenPair: HexString;\n        sender: Address;\n        amount0Desired: bigint;\n        amount1Desired: bigint;\n        amount0Min: bigint;\n        amount1Min: bigint;\n        deadline: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    removeLiquidity: {\n      params: SignExecuteContractMethodParams<{\n        tokenPairId: HexString;\n        sender: Address;\n        liquidity: bigint;\n        amount0Min: bigint;\n        amount1Min: bigint;\n        deadline: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getReserveInAndReserveOut: {\n      params: SignExecuteContractMethodParams<{\n        tokenPair: HexString;\n        tokenInId: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    swapExactTokenForToken: {\n      params: SignExecuteContractMethodParams<{\n        tokenPair: HexString;\n        sender: Address;\n        tokenInId: HexString;\n        amountIn: bigint;\n        amountOutMin: bigint;\n        to: Address;\n        deadline: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    swapTokenForExactToken: {\n      params: SignExecuteContractMethodParams<{\n        tokenPair: HexString;\n        sender: Address;\n        tokenInId: HexString;\n        amountInMax: bigint;\n        amountOut: bigint;\n        to: Address;\n        deadline: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    swap: {\n      params: SignExecuteContractMethodParams<{\n        tokenPair: HexString;\n        sender: Address;\n        to: Address;\n        tokenInId: HexString;\n        amountIn: bigint;\n        amountOut: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<RouterInstance, {}> {\n  encodeFields() {\n    return encodeContractFields({}, this.contract.fieldsSig, []);\n  }\n\n  consts = {\n    ErrorCodes: {\n      ReserveOverflow: BigInt(\"0\"),\n      InsufficientInitLiquidity: BigInt(\"1\"),\n      InsufficientLiquidityMinted: BigInt(\"2\"),\n      InsufficientLiquidityBurned: BigInt(\"3\"),\n      InvalidToAddress: BigInt(\"4\"),\n      InsufficientLiquidity: BigInt(\"5\"),\n      InvalidTokenInId: BigInt(\"6\"),\n      InvalidCalleeId: BigInt(\"7\"),\n      InvalidK: BigInt(\"8\"),\n      InsufficientOutputAmount: BigInt(\"9\"),\n      InsufficientInputAmount: BigInt(\"10\"),\n      IdenticalTokenIds: BigInt(\"11\"),\n      Expired: BigInt(\"12\"),\n      InsufficientToken0Amount: BigInt(\"13\"),\n      InsufficientToken1Amount: BigInt(\"14\"),\n      TokenNotExist: BigInt(\"15\"),\n      InvalidCaller: BigInt(\"16\"),\n      FeeCollectorNotEnabled: BigInt(\"17\"),\n      InvalidAccount: BigInt(\"18\"),\n    },\n  };\n\n  at(address: string): RouterInstance {\n    return new RouterInstance(address);\n  }\n\n  tests = {\n    addLiquidity_: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          {\n            reserve0: bigint;\n            reserve1: bigint;\n            amount0Desired: bigint;\n            amount1Desired: bigint;\n            amount0Min: bigint;\n            amount1Min: bigint;\n          }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(this, \"addLiquidity_\", params, getContractByCodeHash);\n    },\n    addLiquidity: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          {\n            tokenPair: HexString;\n            sender: Address;\n            amount0Desired: bigint;\n            amount1Desired: bigint;\n            amount0Min: bigint;\n            amount1Min: bigint;\n            deadline: bigint;\n          }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint, bigint]>> => {\n      return testMethod(this, \"addLiquidity\", params, getContractByCodeHash);\n    },\n    removeLiquidity: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          {\n            tokenPairId: HexString;\n            sender: Address;\n            liquidity: bigint;\n            amount0Min: bigint;\n            amount1Min: bigint;\n            deadline: bigint;\n          }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(this, \"removeLiquidity\", params, getContractByCodeHash);\n    },\n    getReserveInAndReserveOut: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { tokenPair: HexString; tokenInId: HexString }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(\n        this,\n        \"getReserveInAndReserveOut\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    swapExactTokenForToken: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          {\n            tokenPair: HexString;\n            sender: Address;\n            tokenInId: HexString;\n            amountIn: bigint;\n            amountOutMin: bigint;\n            to: Address;\n            deadline: bigint;\n          }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"swapExactTokenForToken\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    swapTokenForExactToken: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          {\n            tokenPair: HexString;\n            sender: Address;\n            tokenInId: HexString;\n            amountInMax: bigint;\n            amountOut: bigint;\n            to: Address;\n            deadline: bigint;\n          }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"swapTokenForExactToken\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    swap: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          {\n            tokenPair: HexString;\n            sender: Address;\n            to: Address;\n            tokenInId: HexString;\n            amountIn: bigint;\n            amountOut: bigint;\n          }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"swap\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(initFields: {}, asset?: Asset, address?: string) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const Router = new Factory(\n  Contract.fromJson(\n    RouterContractJson,\n    \"\",\n    \"e1ef7a11988dd23f3815d376e474266e3e9f69c9ad289974b9c45ed4ad986a6d\",\n    []\n  )\n);\nregisterContract(Router);\n\n// Use this class to interact with the blockchain\nexport class RouterInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<RouterTypes.State> {\n    return fetchContractState(Router, this);\n  }\n\n  view = {\n    addLiquidity_: async (\n      params: RouterTypes.CallMethodParams<\"addLiquidity_\">\n    ): Promise<RouterTypes.CallMethodResult<\"addLiquidity_\">> => {\n      return callMethod(\n        Router,\n        this,\n        \"addLiquidity_\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    addLiquidity: async (\n      params: RouterTypes.CallMethodParams<\"addLiquidity\">\n    ): Promise<RouterTypes.CallMethodResult<\"addLiquidity\">> => {\n      return callMethod(\n        Router,\n        this,\n        \"addLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    removeLiquidity: async (\n      params: RouterTypes.CallMethodParams<\"removeLiquidity\">\n    ): Promise<RouterTypes.CallMethodResult<\"removeLiquidity\">> => {\n      return callMethod(\n        Router,\n        this,\n        \"removeLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getReserveInAndReserveOut: async (\n      params: RouterTypes.CallMethodParams<\"getReserveInAndReserveOut\">\n    ): Promise<RouterTypes.CallMethodResult<\"getReserveInAndReserveOut\">> => {\n      return callMethod(\n        Router,\n        this,\n        \"getReserveInAndReserveOut\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    swapExactTokenForToken: async (\n      params: RouterTypes.CallMethodParams<\"swapExactTokenForToken\">\n    ): Promise<RouterTypes.CallMethodResult<\"swapExactTokenForToken\">> => {\n      return callMethod(\n        Router,\n        this,\n        \"swapExactTokenForToken\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    swapTokenForExactToken: async (\n      params: RouterTypes.CallMethodParams<\"swapTokenForExactToken\">\n    ): Promise<RouterTypes.CallMethodResult<\"swapTokenForExactToken\">> => {\n      return callMethod(\n        Router,\n        this,\n        \"swapTokenForExactToken\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    swap: async (\n      params: RouterTypes.CallMethodParams<\"swap\">\n    ): Promise<RouterTypes.CallMethodResult<\"swap\">> => {\n      return callMethod(Router, this, \"swap\", params, getContractByCodeHash);\n    },\n  };\n\n  transact = {\n    addLiquidity_: async (\n      params: RouterTypes.SignExecuteMethodParams<\"addLiquidity_\">\n    ): Promise<RouterTypes.SignExecuteMethodResult<\"addLiquidity_\">> => {\n      return signExecuteMethod(Router, this, \"addLiquidity_\", params);\n    },\n    addLiquidity: async (\n      params: RouterTypes.SignExecuteMethodParams<\"addLiquidity\">\n    ): Promise<RouterTypes.SignExecuteMethodResult<\"addLiquidity\">> => {\n      return signExecuteMethod(Router, this, \"addLiquidity\", params);\n    },\n    removeLiquidity: async (\n      params: RouterTypes.SignExecuteMethodParams<\"removeLiquidity\">\n    ): Promise<RouterTypes.SignExecuteMethodResult<\"removeLiquidity\">> => {\n      return signExecuteMethod(Router, this, \"removeLiquidity\", params);\n    },\n    getReserveInAndReserveOut: async (\n      params: RouterTypes.SignExecuteMethodParams<\"getReserveInAndReserveOut\">\n    ): Promise<\n      RouterTypes.SignExecuteMethodResult<\"getReserveInAndReserveOut\">\n    > => {\n      return signExecuteMethod(\n        Router,\n        this,\n        \"getReserveInAndReserveOut\",\n        params\n      );\n    },\n    swapExactTokenForToken: async (\n      params: RouterTypes.SignExecuteMethodParams<\"swapExactTokenForToken\">\n    ): Promise<\n      RouterTypes.SignExecuteMethodResult<\"swapExactTokenForToken\">\n    > => {\n      return signExecuteMethod(Router, this, \"swapExactTokenForToken\", params);\n    },\n    swapTokenForExactToken: async (\n      params: RouterTypes.SignExecuteMethodParams<\"swapTokenForExactToken\">\n    ): Promise<\n      RouterTypes.SignExecuteMethodResult<\"swapTokenForExactToken\">\n    > => {\n      return signExecuteMethod(Router, this, \"swapTokenForExactToken\", params);\n    },\n    swap: async (\n      params: RouterTypes.SignExecuteMethodParams<\"swap\">\n    ): Promise<RouterTypes.SignExecuteMethodResult<\"swap\">> => {\n      return signExecuteMethod(Router, this, \"swap\", params);\n    },\n  };\n\n  async multicall<Calls extends RouterTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<RouterTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends RouterTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<RouterTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends RouterTypes.MultiCallParams | RouterTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(Router, this, callss, getContractByCodeHash);\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"Router\",\n  \"bytecode\": \"0007405840b340ef4119416c41bd42060000060802403316000c2f7a4c041816010c2f4c031602160302160216012c16002d170616061603324c081606160534130e7b1602160602160316002c16012d170716071604347a4c04181607160232130d7b16071603020103070e03402fd3c2b1ca2116065634130c7b0c0e16000107170817070c0e16000108170a17091609160a16021603160416050000170c170b16017a1607160ba31608160ca31601160b160c0f0d1600010e170d160b160c160d0201030608021fd3b9fb57ea16055634130c7b160116001602a3160116020e0e1600010f170717061606160334130d7b1607160434130e7b16061607020000020502160c0e16000108170317020c0e1600010718170416011604414c03160216030216031602020103070b004029d364342a1916065634130c7b160016020003170817071343e516032c1709160916082c16091343e816072c2a2d170a160a16043413097b160116021603a316001601160516021603160a00060103070a004029d31937d61916065634130c7b16001602000317081707160716042c1343e82c160816042b1343e52c2d0d2a17091609160332130a7b160116021609a31600160116051602160916040006000306070040270c0e1600010718170616031606414c0f160116031604a31601160216040c0c160513060c160001104a0e160116031604a3160116020c160416050c13060c16000110\",\n  \"codeHash\": \"e1ef7a11988dd23f3815d376e474266e3e9f69c9ad289974b9c45ed4ad986a6d\",\n  \"fieldsSig\": {\n    \"names\": [],\n    \"types\": [],\n    \"isMutable\": []\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"addLiquidity_\",\n      \"paramNames\": [\n        \"reserve0\",\n        \"reserve1\",\n        \"amount0Desired\",\n        \"amount1Desired\",\n        \"amount0Min\",\n        \"amount1Min\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"addLiquidity\",\n      \"paramNames\": [\n        \"tokenPair\",\n        \"sender\",\n        \"amount0Desired\",\n        \"amount1Desired\",\n        \"amount0Min\",\n        \"amount1Min\",\n        \"deadline\"\n      ],\n      \"paramTypes\": [\n        \"TokenPair\",\n        \"Address\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"removeLiquidity\",\n      \"paramNames\": [\n        \"tokenPairId\",\n        \"sender\",\n        \"liquidity\",\n        \"amount0Min\",\n        \"amount1Min\",\n        \"deadline\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"Address\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getReserveInAndReserveOut\",\n      \"paramNames\": [\n        \"tokenPair\",\n        \"tokenInId\"\n      ],\n      \"paramTypes\": [\n        \"TokenPair\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"swapExactTokenForToken\",\n      \"paramNames\": [\n        \"tokenPair\",\n        \"sender\",\n        \"tokenInId\",\n        \"amountIn\",\n        \"amountOutMin\",\n        \"to\",\n        \"deadline\"\n      ],\n      \"paramTypes\": [\n        \"TokenPair\",\n        \"Address\",\n        \"ByteVec\",\n        \"U256\",\n        \"U256\",\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"swapTokenForExactToken\",\n      \"paramNames\": [\n        \"tokenPair\",\n        \"sender\",\n        \"tokenInId\",\n        \"amountInMax\",\n        \"amountOut\",\n        \"to\",\n        \"deadline\"\n      ],\n      \"paramTypes\": [\n        \"TokenPair\",\n        \"Address\",\n        \"ByteVec\",\n        \"U256\",\n        \"U256\",\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"swap\",\n      \"paramNames\": [\n        \"tokenPair\",\n        \"sender\",\n        \"to\",\n        \"tokenInId\",\n        \"amountIn\",\n        \"amountOut\"\n      ],\n      \"paramTypes\": [\n        \"TokenPair\",\n        \"Address\",\n        \"Address\",\n        \"ByteVec\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"ReserveOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"InsufficientInitLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidityMinted\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidityBurned\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"3\"\n          }\n        },\n        {\n          \"name\": \"InvalidToAddress\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"4\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"5\"\n          }\n        },\n        {\n          \"name\": \"InvalidTokenInId\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"6\"\n          }\n        },\n        {\n          \"name\": \"InvalidCalleeId\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"7\"\n          }\n        },\n        {\n          \"name\": \"InvalidK\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"8\"\n          }\n        },\n        {\n          \"name\": \"InsufficientOutputAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"9\"\n          }\n        },\n        {\n          \"name\": \"InsufficientInputAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"10\"\n          }\n        },\n        {\n          \"name\": \"IdenticalTokenIds\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11\"\n          }\n        },\n        {\n          \"name\": \"Expired\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"12\"\n          }\n        },\n        {\n          \"name\": \"InsufficientToken0Amount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"13\"\n          }\n        },\n        {\n          \"name\": \"InsufficientToken1Amount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"14\"\n          }\n        },\n        {\n          \"name\": \"TokenNotExist\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"15\"\n          }\n        },\n        {\n          \"name\": \"InvalidCaller\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"16\"\n          }\n        },\n        {\n          \"name\": \"FeeCollectorNotEnabled\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"17\"\n          }\n        },\n        {\n          \"name\": \"InvalidAccount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"18\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as TestTokenContractJson } from \"../test/TestToken.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\n\n// Custom types for the contract\nexport namespace TestTokenTypes {\n  export type Fields = {\n    symbol: HexString;\n    name: HexString;\n    decimals: bigint;\n    totalSupply: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    getSymbol: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getName: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getDecimals: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    getTotalSupply: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    getToken: {\n      params: CallContractParams<{ sender: Address; amount: bigint }>;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    getSymbol: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getName: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getDecimals: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getTotalSupply: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getToken: {\n      params: SignExecuteContractMethodParams<{\n        sender: Address;\n        amount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  TestTokenInstance,\n  TestTokenTypes.Fields\n> {\n  encodeFields(fields: TestTokenTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      []\n    );\n  }\n\n  at(address: string): TestTokenInstance {\n    return new TestTokenInstance(address);\n  }\n\n  tests = {\n    getSymbol: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TestTokenTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getSymbol\", params, getContractByCodeHash);\n    },\n    getName: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TestTokenTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getName\", params, getContractByCodeHash);\n    },\n    getDecimals: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TestTokenTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"getDecimals\", params, getContractByCodeHash);\n    },\n    getTotalSupply: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TestTokenTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"getTotalSupply\", params, getContractByCodeHash);\n    },\n    getToken: async (\n      params: TestContractParamsWithoutMaps<\n        TestTokenTypes.Fields,\n        { sender: Address; amount: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"getToken\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: TestTokenTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const TestToken = new Factory(\n  Contract.fromJson(\n    TestTokenContractJson,\n    \"\",\n    \"f9dac4e7d0bf28a2bc019f43138339e23afadde322d50441cdfe029993bf35f3\",\n    []\n  )\n);\nregisterContract(TestToken);\n\n// Use this class to interact with the blockchain\nexport class TestTokenInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<TestTokenTypes.State> {\n    return fetchContractState(TestToken, this);\n  }\n\n  view = {\n    getSymbol: async (\n      params?: TestTokenTypes.CallMethodParams<\"getSymbol\">\n    ): Promise<TestTokenTypes.CallMethodResult<\"getSymbol\">> => {\n      return callMethod(\n        TestToken,\n        this,\n        \"getSymbol\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getName: async (\n      params?: TestTokenTypes.CallMethodParams<\"getName\">\n    ): Promise<TestTokenTypes.CallMethodResult<\"getName\">> => {\n      return callMethod(\n        TestToken,\n        this,\n        \"getName\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getDecimals: async (\n      params?: TestTokenTypes.CallMethodParams<\"getDecimals\">\n    ): Promise<TestTokenTypes.CallMethodResult<\"getDecimals\">> => {\n      return callMethod(\n        TestToken,\n        this,\n        \"getDecimals\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getTotalSupply: async (\n      params?: TestTokenTypes.CallMethodParams<\"getTotalSupply\">\n    ): Promise<TestTokenTypes.CallMethodResult<\"getTotalSupply\">> => {\n      return callMethod(\n        TestToken,\n        this,\n        \"getTotalSupply\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getToken: async (\n      params: TestTokenTypes.CallMethodParams<\"getToken\">\n    ): Promise<TestTokenTypes.CallMethodResult<\"getToken\">> => {\n      return callMethod(\n        TestToken,\n        this,\n        \"getToken\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    getSymbol: async (\n      params: TestTokenTypes.SignExecuteMethodParams<\"getSymbol\">\n    ): Promise<TestTokenTypes.SignExecuteMethodResult<\"getSymbol\">> => {\n      return signExecuteMethod(TestToken, this, \"getSymbol\", params);\n    },\n    getName: async (\n      params: TestTokenTypes.SignExecuteMethodParams<\"getName\">\n    ): Promise<TestTokenTypes.SignExecuteMethodResult<\"getName\">> => {\n      return signExecuteMethod(TestToken, this, \"getName\", params);\n    },\n    getDecimals: async (\n      params: TestTokenTypes.SignExecuteMethodParams<\"getDecimals\">\n    ): Promise<TestTokenTypes.SignExecuteMethodResult<\"getDecimals\">> => {\n      return signExecuteMethod(TestToken, this, \"getDecimals\", params);\n    },\n    getTotalSupply: async (\n      params: TestTokenTypes.SignExecuteMethodParams<\"getTotalSupply\">\n    ): Promise<TestTokenTypes.SignExecuteMethodResult<\"getTotalSupply\">> => {\n      return signExecuteMethod(TestToken, this, \"getTotalSupply\", params);\n    },\n    getToken: async (\n      params: TestTokenTypes.SignExecuteMethodParams<\"getToken\">\n    ): Promise<TestTokenTypes.SignExecuteMethodResult<\"getToken\">> => {\n      return signExecuteMethod(TestToken, this, \"getToken\", params);\n    },\n  };\n\n  async multicall<Calls extends TestTokenTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<TestTokenTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends TestTokenTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<TestTokenTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | TestTokenTypes.MultiCallParams\n      | TestTokenTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      TestToken,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"TestToken\",\n  \"bytecode\": \"050509121b40244035010000000102ce0002010000000102ce0102010000000102ce0202010000000102ce0302010202020005d359e9ded71600b11601ab\",\n  \"codeHash\": \"f9dac4e7d0bf28a2bc019f43138339e23afadde322d50441cdfe029993bf35f3\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"symbol\",\n      \"name\",\n      \"decimals\",\n      \"totalSupply\",\n      \"__stdInterfaceId\"\n    ],\n    \"types\": [\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"U256\",\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"getSymbol\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getName\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getDecimals\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getTotalSupply\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getToken\",\n      \"paramNames\": [\n        \"sender\",\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [],\n  \"stdInterfaceId\": \"0001\"\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as TokenPairContractJson } from \"../dex/TokenPair.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\n\n// Custom types for the contract\nexport namespace TokenPairTypes {\n  export type Fields = {\n    tokenPairFactory: HexString;\n    token0Id: HexString;\n    token1Id: HexString;\n    dexAccount0: HexString;\n    reserve0: bigint;\n    reserve1: bigint;\n    blockTimeStampLast: bigint;\n    price0CumulativeLast: bigint;\n    price1CumulativeLast: bigint;\n    totalSupply: bigint;\n    kLast: bigint;\n    feeCollectorId: HexString;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export type MintEvent = ContractEvent<{\n    sender: Address;\n    amount0: bigint;\n    amount1: bigint;\n    liquidity: bigint;\n    totalSupply: bigint;\n  }>;\n  export type BurnEvent = ContractEvent<{\n    sender: Address;\n    amount0: bigint;\n    amount1: bigint;\n    liquidity: bigint;\n    totalSupply: bigint;\n  }>;\n  export type SwapEvent = ContractEvent<{\n    sender: Address;\n    amount0In: bigint;\n    amount1In: bigint;\n    amount0Out: bigint;\n    amount1Out: bigint;\n    to: Address;\n  }>;\n\n  export interface CallMethodTable {\n    getSymbol: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getName: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getDecimals: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    getTotalSupply: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    uqdiv: {\n      params: CallContractParams<{ a: bigint; b: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    sqrt: {\n      params: CallContractParams<{ y: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    setFeeCollectorId: {\n      params: CallContractParams<{ id: HexString }>;\n      result: CallContractResult<null>;\n    };\n    getTokenPair: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<[HexString, HexString]>;\n    };\n    getReserves: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    getBlockTimeStampLast: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    getPrice0CumulativeLast: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    getPrice1CumulativeLast: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    update: {\n      params: CallContractParams<{ newReserve0: bigint; newReserve1: bigint }>;\n      result: CallContractResult<null>;\n    };\n    mintFee: {\n      params: CallContractParams<{ reserve0_: bigint; reserve1_: bigint }>;\n      result: CallContractResult<[boolean, bigint]>;\n    };\n    mint: {\n      params: CallContractParams<{\n        sender: Address;\n        amount0: bigint;\n        amount1: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    burn: {\n      params: CallContractParams<{ sender: Address; liquidity: bigint }>;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    swap: {\n      params: CallContractParams<{\n        sender: Address;\n        to: Address;\n        amount0In: bigint;\n        amount1In: bigint;\n        amount0Out: bigint;\n        amount1Out: bigint;\n      }>;\n      result: CallContractResult<null>;\n    };\n    collectFeeManually: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<null>;\n    };\n    collectFeeAndUpdateKLast: {\n      params: CallContractParams<{ feeAmount: bigint }>;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    getSymbol: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getName: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getDecimals: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getTotalSupply: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    uqdiv: {\n      params: SignExecuteContractMethodParams<{ a: bigint; b: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    sqrt: {\n      params: SignExecuteContractMethodParams<{ y: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    setFeeCollectorId: {\n      params: SignExecuteContractMethodParams<{ id: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getTokenPair: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getReserves: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getBlockTimeStampLast: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getPrice0CumulativeLast: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getPrice1CumulativeLast: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    update: {\n      params: SignExecuteContractMethodParams<{\n        newReserve0: bigint;\n        newReserve1: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mintFee: {\n      params: SignExecuteContractMethodParams<{\n        reserve0_: bigint;\n        reserve1_: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mint: {\n      params: SignExecuteContractMethodParams<{\n        sender: Address;\n        amount0: bigint;\n        amount1: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    burn: {\n      params: SignExecuteContractMethodParams<{\n        sender: Address;\n        liquidity: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    swap: {\n      params: SignExecuteContractMethodParams<{\n        sender: Address;\n        to: Address;\n        amount0In: bigint;\n        amount1In: bigint;\n        amount0Out: bigint;\n        amount1Out: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    collectFeeManually: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    collectFeeAndUpdateKLast: {\n      params: SignExecuteContractMethodParams<{ feeAmount: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  TokenPairInstance,\n  TokenPairTypes.Fields\n> {\n  encodeFields(fields: TokenPairTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      []\n    );\n  }\n\n  eventIndex = { Mint: 0, Burn: 1, Swap: 2 };\n  consts = {\n    MINIMUM_LIQUIDITY: BigInt(\"1000\"),\n    ErrorCodes: {\n      ReserveOverflow: BigInt(\"0\"),\n      InsufficientInitLiquidity: BigInt(\"1\"),\n      InsufficientLiquidityMinted: BigInt(\"2\"),\n      InsufficientLiquidityBurned: BigInt(\"3\"),\n      InvalidToAddress: BigInt(\"4\"),\n      InsufficientLiquidity: BigInt(\"5\"),\n      InvalidTokenInId: BigInt(\"6\"),\n      InvalidCalleeId: BigInt(\"7\"),\n      InvalidK: BigInt(\"8\"),\n      InsufficientOutputAmount: BigInt(\"9\"),\n      InsufficientInputAmount: BigInt(\"10\"),\n      IdenticalTokenIds: BigInt(\"11\"),\n      Expired: BigInt(\"12\"),\n      InsufficientToken0Amount: BigInt(\"13\"),\n      InsufficientToken1Amount: BigInt(\"14\"),\n      TokenNotExist: BigInt(\"15\"),\n      InvalidCaller: BigInt(\"16\"),\n      FeeCollectorNotEnabled: BigInt(\"17\"),\n      InvalidAccount: BigInt(\"18\"),\n    },\n  };\n\n  at(address: string): TokenPairInstance {\n    return new TokenPairInstance(address);\n  }\n\n  tests = {\n    getSymbol: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getSymbol\", params, getContractByCodeHash);\n    },\n    getName: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getName\", params, getContractByCodeHash);\n    },\n    getDecimals: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"getDecimals\", params, getContractByCodeHash);\n    },\n    getTotalSupply: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"getTotalSupply\", params, getContractByCodeHash);\n    },\n    uqdiv: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairTypes.Fields,\n        { a: bigint; b: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"uqdiv\", params, getContractByCodeHash);\n    },\n    sqrt: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairTypes.Fields,\n        { y: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"sqrt\", params, getContractByCodeHash);\n    },\n    setFeeCollectorId: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairTypes.Fields,\n        { id: HexString }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"setFeeCollectorId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getTokenPair: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<[HexString, HexString]>> => {\n      return testMethod(this, \"getTokenPair\", params, getContractByCodeHash);\n    },\n    getReserves: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(this, \"getReserves\", params, getContractByCodeHash);\n    },\n    getBlockTimeStampLast: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getBlockTimeStampLast\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getPrice0CumulativeLast: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getPrice0CumulativeLast\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getPrice1CumulativeLast: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getPrice1CumulativeLast\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    update: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairTypes.Fields,\n        { newReserve0: bigint; newReserve1: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"update\", params, getContractByCodeHash);\n    },\n    mintFee: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairTypes.Fields,\n        { reserve0_: bigint; reserve1_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<[boolean, bigint]>> => {\n      return testMethod(this, \"mintFee\", params, getContractByCodeHash);\n    },\n    mint: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairTypes.Fields,\n        { sender: Address; amount0: bigint; amount1: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"mint\", params, getContractByCodeHash);\n    },\n    burn: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairTypes.Fields,\n        { sender: Address; liquidity: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(this, \"burn\", params, getContractByCodeHash);\n    },\n    swap: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairTypes.Fields,\n        {\n          sender: Address;\n          to: Address;\n          amount0In: bigint;\n          amount1In: bigint;\n          amount0Out: bigint;\n          amount1Out: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"swap\", params, getContractByCodeHash);\n    },\n    collectFeeManually: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"collectFeeManually\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    collectFeeAndUpdateKLast: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairTypes.Fields,\n        { feeAmount: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"collectFeeAndUpdateKLast\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  stateForTest(\n    initFields: TokenPairTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const TokenPair = new Factory(\n  Contract.fromJson(\n    TokenPairContractJson,\n    \"\",\n    \"3a4ac01ae47b1c84a567e7ef467fc4f7f8e5da32c6546192f0e2b2af3d79891f\",\n    []\n  )\n);\nregisterContract(TokenPair);\n\n// Use this class to interact with the blockchain\nexport class TokenPairInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<TokenPairTypes.State> {\n    return fetchContractState(TokenPair, this);\n  }\n\n  async getContractEventsCurrentCount(): Promise<number> {\n    return getContractEventsCurrentCount(this.address);\n  }\n\n  subscribeMintEvent(\n    options: EventSubscribeOptions<TokenPairTypes.MintEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      TokenPair.contract,\n      this,\n      options,\n      \"Mint\",\n      fromCount\n    );\n  }\n\n  subscribeBurnEvent(\n    options: EventSubscribeOptions<TokenPairTypes.BurnEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      TokenPair.contract,\n      this,\n      options,\n      \"Burn\",\n      fromCount\n    );\n  }\n\n  subscribeSwapEvent(\n    options: EventSubscribeOptions<TokenPairTypes.SwapEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      TokenPair.contract,\n      this,\n      options,\n      \"Swap\",\n      fromCount\n    );\n  }\n\n  subscribeAllEvents(\n    options: EventSubscribeOptions<\n      | TokenPairTypes.MintEvent\n      | TokenPairTypes.BurnEvent\n      | TokenPairTypes.SwapEvent\n    >,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvents(\n      TokenPair.contract,\n      this,\n      options,\n      fromCount\n    );\n  }\n\n  view = {\n    getSymbol: async (\n      params?: TokenPairTypes.CallMethodParams<\"getSymbol\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"getSymbol\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"getSymbol\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getName: async (\n      params?: TokenPairTypes.CallMethodParams<\"getName\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"getName\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"getName\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getDecimals: async (\n      params?: TokenPairTypes.CallMethodParams<\"getDecimals\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"getDecimals\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"getDecimals\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getTotalSupply: async (\n      params?: TokenPairTypes.CallMethodParams<\"getTotalSupply\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"getTotalSupply\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"getTotalSupply\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    uqdiv: async (\n      params: TokenPairTypes.CallMethodParams<\"uqdiv\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"uqdiv\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"uqdiv\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    sqrt: async (\n      params: TokenPairTypes.CallMethodParams<\"sqrt\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"sqrt\">> => {\n      return callMethod(TokenPair, this, \"sqrt\", params, getContractByCodeHash);\n    },\n    setFeeCollectorId: async (\n      params: TokenPairTypes.CallMethodParams<\"setFeeCollectorId\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"setFeeCollectorId\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"setFeeCollectorId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getTokenPair: async (\n      params?: TokenPairTypes.CallMethodParams<\"getTokenPair\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"getTokenPair\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"getTokenPair\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getReserves: async (\n      params?: TokenPairTypes.CallMethodParams<\"getReserves\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"getReserves\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"getReserves\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getBlockTimeStampLast: async (\n      params?: TokenPairTypes.CallMethodParams<\"getBlockTimeStampLast\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"getBlockTimeStampLast\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"getBlockTimeStampLast\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getPrice0CumulativeLast: async (\n      params?: TokenPairTypes.CallMethodParams<\"getPrice0CumulativeLast\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"getPrice0CumulativeLast\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"getPrice0CumulativeLast\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getPrice1CumulativeLast: async (\n      params?: TokenPairTypes.CallMethodParams<\"getPrice1CumulativeLast\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"getPrice1CumulativeLast\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"getPrice1CumulativeLast\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    update: async (\n      params: TokenPairTypes.CallMethodParams<\"update\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"update\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"update\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mintFee: async (\n      params: TokenPairTypes.CallMethodParams<\"mintFee\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"mintFee\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"mintFee\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mint: async (\n      params: TokenPairTypes.CallMethodParams<\"mint\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"mint\">> => {\n      return callMethod(TokenPair, this, \"mint\", params, getContractByCodeHash);\n    },\n    burn: async (\n      params: TokenPairTypes.CallMethodParams<\"burn\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"burn\">> => {\n      return callMethod(TokenPair, this, \"burn\", params, getContractByCodeHash);\n    },\n    swap: async (\n      params: TokenPairTypes.CallMethodParams<\"swap\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"swap\">> => {\n      return callMethod(TokenPair, this, \"swap\", params, getContractByCodeHash);\n    },\n    collectFeeManually: async (\n      params?: TokenPairTypes.CallMethodParams<\"collectFeeManually\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"collectFeeManually\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"collectFeeManually\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    collectFeeAndUpdateKLast: async (\n      params: TokenPairTypes.CallMethodParams<\"collectFeeAndUpdateKLast\">\n    ): Promise<TokenPairTypes.CallMethodResult<\"collectFeeAndUpdateKLast\">> => {\n      return callMethod(\n        TokenPair,\n        this,\n        \"collectFeeAndUpdateKLast\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    getSymbol: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"getSymbol\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"getSymbol\">> => {\n      return signExecuteMethod(TokenPair, this, \"getSymbol\", params);\n    },\n    getName: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"getName\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"getName\">> => {\n      return signExecuteMethod(TokenPair, this, \"getName\", params);\n    },\n    getDecimals: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"getDecimals\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"getDecimals\">> => {\n      return signExecuteMethod(TokenPair, this, \"getDecimals\", params);\n    },\n    getTotalSupply: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"getTotalSupply\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"getTotalSupply\">> => {\n      return signExecuteMethod(TokenPair, this, \"getTotalSupply\", params);\n    },\n    uqdiv: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"uqdiv\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"uqdiv\">> => {\n      return signExecuteMethod(TokenPair, this, \"uqdiv\", params);\n    },\n    sqrt: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"sqrt\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"sqrt\">> => {\n      return signExecuteMethod(TokenPair, this, \"sqrt\", params);\n    },\n    setFeeCollectorId: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"setFeeCollectorId\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"setFeeCollectorId\">> => {\n      return signExecuteMethod(TokenPair, this, \"setFeeCollectorId\", params);\n    },\n    getTokenPair: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"getTokenPair\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"getTokenPair\">> => {\n      return signExecuteMethod(TokenPair, this, \"getTokenPair\", params);\n    },\n    getReserves: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"getReserves\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"getReserves\">> => {\n      return signExecuteMethod(TokenPair, this, \"getReserves\", params);\n    },\n    getBlockTimeStampLast: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"getBlockTimeStampLast\">\n    ): Promise<\n      TokenPairTypes.SignExecuteMethodResult<\"getBlockTimeStampLast\">\n    > => {\n      return signExecuteMethod(\n        TokenPair,\n        this,\n        \"getBlockTimeStampLast\",\n        params\n      );\n    },\n    getPrice0CumulativeLast: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"getPrice0CumulativeLast\">\n    ): Promise<\n      TokenPairTypes.SignExecuteMethodResult<\"getPrice0CumulativeLast\">\n    > => {\n      return signExecuteMethod(\n        TokenPair,\n        this,\n        \"getPrice0CumulativeLast\",\n        params\n      );\n    },\n    getPrice1CumulativeLast: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"getPrice1CumulativeLast\">\n    ): Promise<\n      TokenPairTypes.SignExecuteMethodResult<\"getPrice1CumulativeLast\">\n    > => {\n      return signExecuteMethod(\n        TokenPair,\n        this,\n        \"getPrice1CumulativeLast\",\n        params\n      );\n    },\n    update: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"update\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"update\">> => {\n      return signExecuteMethod(TokenPair, this, \"update\", params);\n    },\n    mintFee: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"mintFee\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"mintFee\">> => {\n      return signExecuteMethod(TokenPair, this, \"mintFee\", params);\n    },\n    mint: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"mint\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"mint\">> => {\n      return signExecuteMethod(TokenPair, this, \"mint\", params);\n    },\n    burn: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"burn\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"burn\">> => {\n      return signExecuteMethod(TokenPair, this, \"burn\", params);\n    },\n    swap: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"swap\">\n    ): Promise<TokenPairTypes.SignExecuteMethodResult<\"swap\">> => {\n      return signExecuteMethod(TokenPair, this, \"swap\", params);\n    },\n    collectFeeManually: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"collectFeeManually\">\n    ): Promise<\n      TokenPairTypes.SignExecuteMethodResult<\"collectFeeManually\">\n    > => {\n      return signExecuteMethod(TokenPair, this, \"collectFeeManually\", params);\n    },\n    collectFeeAndUpdateKLast: async (\n      params: TokenPairTypes.SignExecuteMethodParams<\"collectFeeAndUpdateKLast\">\n    ): Promise<\n      TokenPairTypes.SignExecuteMethodResult<\"collectFeeAndUpdateKLast\">\n    > => {\n      return signExecuteMethod(\n        TokenPair,\n        this,\n        \"collectFeeAndUpdateKLast\",\n        params\n      );\n    },\n  };\n\n  async multicall<Calls extends TokenPairTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<TokenPairTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends TokenPairTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<TokenPairTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | TokenPairTypes.MultiCallParams\n      | TokenPairTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      TokenPair,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"TokenPair\",\n  \"bytecode\": \"0d13114022402b4034404b4087409d40ad40bd40cb40d940e7415641b4426842e54420444a446b0100000001021408414c50482d444558020100000001021408414c50482d44455802010000000102131202010000000102a00502010002020109d38c844efd16000d1340703b2c16012d0201000103014020d36ae1998016000f334c191600170116000e2d0d2a170216021601314c0b16021701160016022d16022a0e2d17024a311601020d02010001010008d347fff8f4b3ce004113107b1600a107010000000204d373c3e78fce01ce0202010000000204d37de99ed1a000a00102010000000103d355097b37a00202010000000103d3d3cf0c5aa00302010000000103d37fe75f5ba00402000002050040410d1340703b170216001602317a4c041816011602310c7b561343e82d0d13203b2e17031603a0022b170416040c337a4c0418a0000c337a4c0418a0010c334c10a003a001a000000416042c35a103a004a000a001000416042c35a1041600a1001601a1011603a102000002080240320c1702a007140042170316034c4025a0060c304c4020160016012c00051704a0060005170516041605334c14a005160416052b2c17061604112c16052a1707160616072d1702a00516022aa1054a020ca106160316020201010309014064d393ef503ea000a001000d170417030c1705a0050c2f4c17160116022c0005170616061343e8330d7b16061343e82b1705a0051343e82aa105b2b11343e8bd4a141601a0052ca0002d17071602a0052ca0012d170816071608334c0216084a011607170516050c330e7b1600b11605ab1600ce011601ac1600ce021602aca00516052aa105a00016012aa00116022a000c16034c06b2b11604a316040012051600160116021605a0057316050201010206024046d349c452fda000a001000d170317021601a0002ca0052d17041601a0012ca0052d170516040c337a4c041816050c330f7b1600b11601ac1600ce011604ab1600ce021605aba00516012ba105a00016042ba00116052b000c16024c06b2b11603a316030012061600160416051601a005731604160502010106120040b5d32570119d16040c337a4b041816050c3313097b1604a000317a4c04181605a00131117ba00016022a16042b1706a00116032a16052b17070c1708160216082c1367102d1709160316082c1367102d170a16061343e82c16020f2c2b170b16071343e82c16030f2c2b170ca000a0012c13800f42402c170d160b160c2c160d3413087b160616092b170e1607160a2b170f160e160f2ca000a0012c3413087bce03160047cc17101610c513127bce01ce0244171116020c334c131600ce01160216092bac1600ce011609a31600ce01160916110d110c1610d4bd48152816030c334c131600ce021603160a2bac1600ce02160aa31600ce02160a16110d110c1610d4bd48152816040c334c041601ce011604ab16050c334c041601ce021605ab160e160f000c0716001602160316041605160174010200020014d3f2c71c4bb3a0074113107ba000a001000d17011700160013117bb2b11601a31601001200030101001216000c334c0ab2b11600a3b216000e0ca0070100a000a0012ca106\",\n  \"codeHash\": \"3a4ac01ae47b1c84a567e7ef467fc4f7f8e5da32c6546192f0e2b2af3d79891f\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"tokenPairFactory\",\n      \"token0Id\",\n      \"token1Id\",\n      \"dexAccount0\",\n      \"reserve0\",\n      \"reserve1\",\n      \"blockTimeStampLast\",\n      \"price0CumulativeLast\",\n      \"price1CumulativeLast\",\n      \"totalSupply\",\n      \"kLast\",\n      \"feeCollectorId\",\n      \"__stdInterfaceId\"\n    ],\n    \"types\": [\n      \"TokenPairFactory\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"IDexAccount\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"ByteVec\",\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      true,\n      true,\n      true,\n      true,\n      true,\n      true,\n      true,\n      true,\n      false\n    ]\n  },\n  \"eventsSig\": [\n    {\n      \"name\": \"Mint\",\n      \"fieldNames\": [\n        \"sender\",\n        \"amount0\",\n        \"amount1\",\n        \"liquidity\",\n        \"totalSupply\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"Burn\",\n      \"fieldNames\": [\n        \"sender\",\n        \"amount0\",\n        \"amount1\",\n        \"liquidity\",\n        \"totalSupply\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"Swap\",\n      \"fieldNames\": [\n        \"sender\",\n        \"amount0In\",\n        \"amount1In\",\n        \"amount0Out\",\n        \"amount1Out\",\n        \"to\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"Address\"\n      ]\n    }\n  ],\n  \"functions\": [\n    {\n      \"name\": \"getSymbol\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getName\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getDecimals\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getTotalSupply\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"uqdiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"sqrt\",\n      \"paramNames\": [\n        \"y\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"setFeeCollectorId\",\n      \"paramNames\": [\n        \"id\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"getTokenPair\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getReserves\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getBlockTimeStampLast\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getPrice0CumulativeLast\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getPrice1CumulativeLast\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"update\",\n      \"paramNames\": [\n        \"newReserve0\",\n        \"newReserve1\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"mintFee\",\n      \"paramNames\": [\n        \"reserve0_\",\n        \"reserve1_\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"Bool\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mint\",\n      \"paramNames\": [\n        \"sender\",\n        \"amount0\",\n        \"amount1\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"burn\",\n      \"paramNames\": [\n        \"sender\",\n        \"liquidity\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"swap\",\n      \"paramNames\": [\n        \"sender\",\n        \"to\",\n        \"amount0In\",\n        \"amount1In\",\n        \"amount0Out\",\n        \"amount1Out\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"Address\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"collectFeeManually\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"collectFeeAndUpdateKLast\",\n      \"paramNames\": [\n        \"feeAmount\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [\n    {\n      \"name\": \"MINIMUM_LIQUIDITY\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"1000\"\n      }\n    }\n  ],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"ReserveOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"InsufficientInitLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidityMinted\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidityBurned\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"3\"\n          }\n        },\n        {\n          \"name\": \"InvalidToAddress\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"4\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"5\"\n          }\n        },\n        {\n          \"name\": \"InvalidTokenInId\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"6\"\n          }\n        },\n        {\n          \"name\": \"InvalidCalleeId\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"7\"\n          }\n        },\n        {\n          \"name\": \"InvalidK\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"8\"\n          }\n        },\n        {\n          \"name\": \"InsufficientOutputAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"9\"\n          }\n        },\n        {\n          \"name\": \"InsufficientInputAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"10\"\n          }\n        },\n        {\n          \"name\": \"IdenticalTokenIds\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11\"\n          }\n        },\n        {\n          \"name\": \"Expired\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"12\"\n          }\n        },\n        {\n          \"name\": \"InsufficientToken0Amount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"13\"\n          }\n        },\n        {\n          \"name\": \"InsufficientToken1Amount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"14\"\n          }\n        },\n        {\n          \"name\": \"TokenNotExist\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"15\"\n          }\n        },\n        {\n          \"name\": \"InvalidCaller\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"16\"\n          }\n        },\n        {\n          \"name\": \"FeeCollectorNotEnabled\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"17\"\n          }\n        },\n        {\n          \"name\": \"InvalidAccount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"18\"\n          }\n        }\n      ]\n    }\n  ],\n  \"stdInterfaceId\": \"0001\"\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as TokenPairFactoryContractJson } from \"../dex/TokenPairFactory.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\n\n// Custom types for the contract\nexport namespace TokenPairFactoryTypes {\n  export type Fields = {\n    pairTemplateId: HexString;\n    dexAccount0: HexString;\n    pairSize: bigint;\n    feeSetter: Address;\n    feeCollectorFactory: HexString;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export type PairCreatedEvent = ContractEvent<{\n    token0: HexString;\n    token1: HexString;\n    pair: HexString;\n    currentPairSize: bigint;\n  }>;\n\n  export interface CallMethodTable {\n    setFeeCollectorFactory: {\n      params: CallContractParams<{ factory: HexString }>;\n      result: CallContractResult<null>;\n    };\n    updateFeeSetter: {\n      params: CallContractParams<{ newFeeSetter: Address }>;\n      result: CallContractResult<null>;\n    };\n    getFeeSetter: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<Address>;\n    };\n    enableFeeCollector: {\n      params: CallContractParams<{ tokenPair: HexString; alphAmount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    updateFeeCollector: {\n      params: CallContractParams<{\n        tokenPair: HexString;\n        newFeeCollectorId: HexString;\n      }>;\n      result: CallContractResult<null>;\n    };\n    sortTokens: {\n      params: CallContractParams<{ tokenA: HexString; tokenB: HexString }>;\n      result: CallContractResult<[HexString, HexString]>;\n    };\n    createPair: {\n      params: CallContractParams<{\n        payer: Address;\n        alphAmount: bigint;\n        tokenAId: HexString;\n        tokenBId: HexString;\n      }>;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    setFeeCollectorFactory: {\n      params: SignExecuteContractMethodParams<{ factory: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    updateFeeSetter: {\n      params: SignExecuteContractMethodParams<{ newFeeSetter: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getFeeSetter: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    enableFeeCollector: {\n      params: SignExecuteContractMethodParams<{\n        tokenPair: HexString;\n        alphAmount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    updateFeeCollector: {\n      params: SignExecuteContractMethodParams<{\n        tokenPair: HexString;\n        newFeeCollectorId: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    sortTokens: {\n      params: SignExecuteContractMethodParams<{\n        tokenA: HexString;\n        tokenB: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    createPair: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        alphAmount: bigint;\n        tokenAId: HexString;\n        tokenBId: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  TokenPairFactoryInstance,\n  TokenPairFactoryTypes.Fields\n> {\n  encodeFields(fields: TokenPairFactoryTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      []\n    );\n  }\n\n  eventIndex = { PairCreated: 0 };\n  consts = {\n    ErrorCodes: {\n      ReserveOverflow: BigInt(\"0\"),\n      InsufficientInitLiquidity: BigInt(\"1\"),\n      InsufficientLiquidityMinted: BigInt(\"2\"),\n      InsufficientLiquidityBurned: BigInt(\"3\"),\n      InvalidToAddress: BigInt(\"4\"),\n      InsufficientLiquidity: BigInt(\"5\"),\n      InvalidTokenInId: BigInt(\"6\"),\n      InvalidCalleeId: BigInt(\"7\"),\n      InvalidK: BigInt(\"8\"),\n      InsufficientOutputAmount: BigInt(\"9\"),\n      InsufficientInputAmount: BigInt(\"10\"),\n      IdenticalTokenIds: BigInt(\"11\"),\n      Expired: BigInt(\"12\"),\n      InsufficientToken0Amount: BigInt(\"13\"),\n      InsufficientToken1Amount: BigInt(\"14\"),\n      TokenNotExist: BigInt(\"15\"),\n      InvalidCaller: BigInt(\"16\"),\n      FeeCollectorNotEnabled: BigInt(\"17\"),\n      InvalidAccount: BigInt(\"18\"),\n    },\n  };\n\n  at(address: string): TokenPairFactoryInstance {\n    return new TokenPairFactoryInstance(address);\n  }\n\n  tests = {\n    setFeeCollectorFactory: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairFactoryTypes.Fields,\n        { factory: HexString }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"setFeeCollectorFactory\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateFeeSetter: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairFactoryTypes.Fields,\n        { newFeeSetter: Address }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"updateFeeSetter\", params, getContractByCodeHash);\n    },\n    getFeeSetter: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TokenPairFactoryTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<Address>> => {\n      return testMethod(this, \"getFeeSetter\", params, getContractByCodeHash);\n    },\n    enableFeeCollector: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairFactoryTypes.Fields,\n        { tokenPair: HexString; alphAmount: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"enableFeeCollector\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateFeeCollector: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairFactoryTypes.Fields,\n        { tokenPair: HexString; newFeeCollectorId: HexString }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"updateFeeCollector\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    sortTokens: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairFactoryTypes.Fields,\n        { tokenA: HexString; tokenB: HexString }\n      >\n    ): Promise<TestContractResultWithoutMaps<[HexString, HexString]>> => {\n      return testMethod(this, \"sortTokens\", params, getContractByCodeHash);\n    },\n    createPair: async (\n      params: TestContractParamsWithoutMaps<\n        TokenPairFactoryTypes.Fields,\n        {\n          payer: Address;\n          alphAmount: bigint;\n          tokenAId: HexString;\n          tokenBId: HexString;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"createPair\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: TokenPairFactoryTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const TokenPairFactory = new Factory(\n  Contract.fromJson(\n    TokenPairFactoryContractJson,\n    \"\",\n    \"597644c0643972e3d6e7f5a681e2d9908de74775e9b4e205e15ba39397a9e48c\",\n    []\n  )\n);\nregisterContract(TokenPairFactory);\n\n// Use this class to interact with the blockchain\nexport class TokenPairFactoryInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<TokenPairFactoryTypes.State> {\n    return fetchContractState(TokenPairFactory, this);\n  }\n\n  async getContractEventsCurrentCount(): Promise<number> {\n    return getContractEventsCurrentCount(this.address);\n  }\n\n  subscribePairCreatedEvent(\n    options: EventSubscribeOptions<TokenPairFactoryTypes.PairCreatedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      TokenPairFactory.contract,\n      this,\n      options,\n      \"PairCreated\",\n      fromCount\n    );\n  }\n\n  view = {\n    setFeeCollectorFactory: async (\n      params: TokenPairFactoryTypes.CallMethodParams<\"setFeeCollectorFactory\">\n    ): Promise<\n      TokenPairFactoryTypes.CallMethodResult<\"setFeeCollectorFactory\">\n    > => {\n      return callMethod(\n        TokenPairFactory,\n        this,\n        \"setFeeCollectorFactory\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateFeeSetter: async (\n      params: TokenPairFactoryTypes.CallMethodParams<\"updateFeeSetter\">\n    ): Promise<TokenPairFactoryTypes.CallMethodResult<\"updateFeeSetter\">> => {\n      return callMethod(\n        TokenPairFactory,\n        this,\n        \"updateFeeSetter\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getFeeSetter: async (\n      params?: TokenPairFactoryTypes.CallMethodParams<\"getFeeSetter\">\n    ): Promise<TokenPairFactoryTypes.CallMethodResult<\"getFeeSetter\">> => {\n      return callMethod(\n        TokenPairFactory,\n        this,\n        \"getFeeSetter\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    enableFeeCollector: async (\n      params: TokenPairFactoryTypes.CallMethodParams<\"enableFeeCollector\">\n    ): Promise<\n      TokenPairFactoryTypes.CallMethodResult<\"enableFeeCollector\">\n    > => {\n      return callMethod(\n        TokenPairFactory,\n        this,\n        \"enableFeeCollector\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateFeeCollector: async (\n      params: TokenPairFactoryTypes.CallMethodParams<\"updateFeeCollector\">\n    ): Promise<\n      TokenPairFactoryTypes.CallMethodResult<\"updateFeeCollector\">\n    > => {\n      return callMethod(\n        TokenPairFactory,\n        this,\n        \"updateFeeCollector\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    sortTokens: async (\n      params: TokenPairFactoryTypes.CallMethodParams<\"sortTokens\">\n    ): Promise<TokenPairFactoryTypes.CallMethodResult<\"sortTokens\">> => {\n      return callMethod(\n        TokenPairFactory,\n        this,\n        \"sortTokens\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    createPair: async (\n      params: TokenPairFactoryTypes.CallMethodParams<\"createPair\">\n    ): Promise<TokenPairFactoryTypes.CallMethodResult<\"createPair\">> => {\n      return callMethod(\n        TokenPairFactory,\n        this,\n        \"createPair\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    setFeeCollectorFactory: async (\n      params: TokenPairFactoryTypes.SignExecuteMethodParams<\"setFeeCollectorFactory\">\n    ): Promise<\n      TokenPairFactoryTypes.SignExecuteMethodResult<\"setFeeCollectorFactory\">\n    > => {\n      return signExecuteMethod(\n        TokenPairFactory,\n        this,\n        \"setFeeCollectorFactory\",\n        params\n      );\n    },\n    updateFeeSetter: async (\n      params: TokenPairFactoryTypes.SignExecuteMethodParams<\"updateFeeSetter\">\n    ): Promise<\n      TokenPairFactoryTypes.SignExecuteMethodResult<\"updateFeeSetter\">\n    > => {\n      return signExecuteMethod(\n        TokenPairFactory,\n        this,\n        \"updateFeeSetter\",\n        params\n      );\n    },\n    getFeeSetter: async (\n      params: TokenPairFactoryTypes.SignExecuteMethodParams<\"getFeeSetter\">\n    ): Promise<\n      TokenPairFactoryTypes.SignExecuteMethodResult<\"getFeeSetter\">\n    > => {\n      return signExecuteMethod(TokenPairFactory, this, \"getFeeSetter\", params);\n    },\n    enableFeeCollector: async (\n      params: TokenPairFactoryTypes.SignExecuteMethodParams<\"enableFeeCollector\">\n    ): Promise<\n      TokenPairFactoryTypes.SignExecuteMethodResult<\"enableFeeCollector\">\n    > => {\n      return signExecuteMethod(\n        TokenPairFactory,\n        this,\n        \"enableFeeCollector\",\n        params\n      );\n    },\n    updateFeeCollector: async (\n      params: TokenPairFactoryTypes.SignExecuteMethodParams<\"updateFeeCollector\">\n    ): Promise<\n      TokenPairFactoryTypes.SignExecuteMethodResult<\"updateFeeCollector\">\n    > => {\n      return signExecuteMethod(\n        TokenPairFactory,\n        this,\n        \"updateFeeCollector\",\n        params\n      );\n    },\n    sortTokens: async (\n      params: TokenPairFactoryTypes.SignExecuteMethodParams<\"sortTokens\">\n    ): Promise<TokenPairFactoryTypes.SignExecuteMethodResult<\"sortTokens\">> => {\n      return signExecuteMethod(TokenPairFactory, this, \"sortTokens\", params);\n    },\n    createPair: async (\n      params: TokenPairFactoryTypes.SignExecuteMethodParams<\"createPair\">\n    ): Promise<TokenPairFactoryTypes.SignExecuteMethodResult<\"createPair\">> => {\n      return signExecuteMethod(TokenPairFactory, this, \"createPair\", params);\n    },\n  };\n\n  async multicall<Calls extends TokenPairFactoryTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<TokenPairFactoryTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends TokenPairFactoryTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<TokenPairFactoryTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | TokenPairFactoryTypes.MultiCallParams\n      | TokenPairFactoryTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      TokenPairFactory,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"TokenPairFactory\",\n  \"bytecode\": \"050716402c403a406b408540a64123010001010008d302f1c0ffb4a0014513107b1600a102010001010008d34db5e042b4a0014513107b1600a101010000000103d34086275fa00102010302040018d3a2ac8580b417021602a0014513107b16021601a21602160116000f0da0020100170316030d0c1600010601000202000bd3c9a43b3cb4a0014513107b16010d0c160001060000020402101600711702160171170316021603314c031600160102160116000201030409004045d3fd02709216001602a50c337a4c061816001603a50c33130f7b1602160342130b7b16021603000517051704b116041605ce011406414c504800011305640c0c0c0c0c0c0c14001308641707170616001601a21604160544ce00160616070d1340ff3bc2170805160416051608a00061a0000d2aa100\",\n  \"codeHash\": \"597644c0643972e3d6e7f5a681e2d9908de74775e9b4e205e15ba39397a9e48c\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"pairTemplateId\",\n      \"dexAccount0\",\n      \"pairSize\",\n      \"feeSetter\",\n      \"feeCollectorFactory\"\n    ],\n    \"types\": [\n      \"ByteVec\",\n      \"IDexAccount\",\n      \"U256\",\n      \"Address\",\n      \"FeeCollectorFactory\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      true,\n      true,\n      true\n    ]\n  },\n  \"eventsSig\": [\n    {\n      \"name\": \"PairCreated\",\n      \"fieldNames\": [\n        \"token0\",\n        \"token1\",\n        \"pair\",\n        \"currentPairSize\"\n      ],\n      \"fieldTypes\": [\n        \"ByteVec\",\n        \"ByteVec\",\n        \"ByteVec\",\n        \"U256\"\n      ]\n    }\n  ],\n  \"functions\": [\n    {\n      \"name\": \"setFeeCollectorFactory\",\n      \"paramNames\": [\n        \"factory\"\n      ],\n      \"paramTypes\": [\n        \"FeeCollectorFactory\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"updateFeeSetter\",\n      \"paramNames\": [\n        \"newFeeSetter\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"getFeeSetter\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"Address\"\n      ]\n    },\n    {\n      \"name\": \"enableFeeCollector\",\n      \"paramNames\": [\n        \"tokenPair\",\n        \"alphAmount\"\n      ],\n      \"paramTypes\": [\n        \"TokenPair\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"updateFeeCollector\",\n      \"paramNames\": [\n        \"tokenPair\",\n        \"newFeeCollectorId\"\n      ],\n      \"paramTypes\": [\n        \"TokenPair\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"sortTokens\",\n      \"paramNames\": [\n        \"tokenA\",\n        \"tokenB\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"createPair\",\n      \"paramNames\": [\n        \"payer\",\n        \"alphAmount\",\n        \"tokenAId\",\n        \"tokenBId\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\",\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"ReserveOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"InsufficientInitLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidityMinted\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidityBurned\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"3\"\n          }\n        },\n        {\n          \"name\": \"InvalidToAddress\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"4\"\n          }\n        },\n        {\n          \"name\": \"InsufficientLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"5\"\n          }\n        },\n        {\n          \"name\": \"InvalidTokenInId\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"6\"\n          }\n        },\n        {\n          \"name\": \"InvalidCalleeId\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"7\"\n          }\n        },\n        {\n          \"name\": \"InvalidK\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"8\"\n          }\n        },\n        {\n          \"name\": \"InsufficientOutputAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"9\"\n          }\n        },\n        {\n          \"name\": \"InsufficientInputAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"10\"\n          }\n        },\n        {\n          \"name\": \"IdenticalTokenIds\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11\"\n          }\n        },\n        {\n          \"name\": \"Expired\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"12\"\n          }\n        },\n        {\n          \"name\": \"InsufficientToken0Amount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"13\"\n          }\n        },\n        {\n          \"name\": \"InsufficientToken1Amount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"14\"\n          }\n        },\n        {\n          \"name\": \"TokenNotExist\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"15\"\n          }\n        },\n        {\n          \"name\": \"InvalidCaller\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"16\"\n          }\n        },\n        {\n          \"name\": \"FeeCollectorNotEnabled\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"17\"\n          }\n        },\n        {\n          \"name\": \"InvalidAccount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"18\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  ExecutableScript,\n  ExecuteScriptParams,\n  ExecuteScriptResult,\n  Script,\n  SignerProvider,\n  HexString,\n} from \"@alephium/web3\";\nimport { getContractByCodeHash } from \"./contracts\";\nimport { default as AddLiquidityScriptJson } from \"../scripts/AddLiquidity.ral.json\";\nimport { default as BurnScriptJson } from \"../scripts/Burn.ral.json\";\nimport { default as CollectFeeScriptJson } from \"../scripts/CollectFee.ral.json\";\nimport { default as CreatePairScriptJson } from \"../scripts/CreatePair.ral.json\";\nimport { default as CreatePairAndAddLiquidityScriptJson } from \"../scripts/CreatePairAndAddLiquidity.ral.json\";\nimport { default as EnableFeeCollectorScriptJson } from \"../scripts/EnableFeeCollector.ral.json\";\nimport { default as GetTokenScriptJson } from \"../test/GetToken.ral.json\";\nimport { default as MintScriptJson } from \"../scripts/Mint.ral.json\";\nimport { default as RemoveLiquidityScriptJson } from \"../scripts/RemoveLiquidity.ral.json\";\nimport { default as SetFeeCollectorFactoryScriptJson } from \"../scripts/SetFeeCollectorFactory.ral.json\";\nimport { default as SwapScriptJson } from \"../scripts/Swap.ral.json\";\nimport { default as SwapMaxInScriptJson } from \"../scripts/SwapMaxIn.ral.json\";\nimport { default as SwapMinOutScriptJson } from \"../scripts/SwapMinOut.ral.json\";\n\nexport const AddLiquidity = new ExecutableScript<{\n  sender: Address;\n  router: HexString;\n  pair: HexString;\n  amount0Desired: bigint;\n  amount1Desired: bigint;\n  amount0Min: bigint;\n  amount1Min: bigint;\n  deadline: bigint;\n}>(Script.fromJson(AddLiquidityScriptJson, \"\", []), getContractByCodeHash);\n\nexport const Burn = new ExecutableScript<{\n  tokenPair: HexString;\n  sender: Address;\n  liquidity: bigint;\n}>(Script.fromJson(BurnScriptJson, \"\", []), getContractByCodeHash);\n\nexport const CollectFee = new ExecutableScript<{ feeCollector: HexString }>(\n  Script.fromJson(CollectFeeScriptJson, \"\", []),\n  getContractByCodeHash\n);\n\nexport const CreatePair = new ExecutableScript<{\n  payer: Address;\n  factory: HexString;\n  alphAmount: bigint;\n  tokenAId: HexString;\n  tokenBId: HexString;\n}>(Script.fromJson(CreatePairScriptJson, \"\", []), getContractByCodeHash);\n\nexport const CreatePairAndAddLiquidity = new ExecutableScript<{\n  payer: Address;\n  factory: HexString;\n  alphAmount: bigint;\n  token0Id: HexString;\n  token1Id: HexString;\n  amount0: bigint;\n  amount1: bigint;\n}>(\n  Script.fromJson(CreatePairAndAddLiquidityScriptJson, \"\", []),\n  getContractByCodeHash\n);\n\nexport const EnableFeeCollector = new ExecutableScript<{\n  tokenPairFactory: HexString;\n  tokenPair: HexString;\n}>(\n  Script.fromJson(EnableFeeCollectorScriptJson, \"\", []),\n  getContractByCodeHash\n);\n\nexport const GetToken = new ExecutableScript<{\n  token: HexString;\n  sender: Address;\n  amount: bigint;\n}>(Script.fromJson(GetTokenScriptJson, \"\", []), getContractByCodeHash);\n\nexport const Mint = new ExecutableScript<{\n  tokenPair: HexString;\n  sender: Address;\n  amount0: bigint;\n  amount1: bigint;\n}>(Script.fromJson(MintScriptJson, \"\", []), getContractByCodeHash);\n\nexport const RemoveLiquidity = new ExecutableScript<{\n  sender: Address;\n  router: HexString;\n  pairId: HexString;\n  liquidity: bigint;\n  amount0Min: bigint;\n  amount1Min: bigint;\n  deadline: bigint;\n}>(Script.fromJson(RemoveLiquidityScriptJson, \"\", []), getContractByCodeHash);\n\nexport const SetFeeCollectorFactory = new ExecutableScript<{\n  tokenPairFactory: HexString;\n  feeCollectorFactory: HexString;\n}>(\n  Script.fromJson(SetFeeCollectorFactoryScriptJson, \"\", []),\n  getContractByCodeHash\n);\n\nexport const Swap = new ExecutableScript<{\n  dexAccount: HexString;\n  tokenPair: HexString;\n  sender: Address;\n  to: Address;\n  amount0In: bigint;\n  amount1In: bigint;\n  amount0Out: bigint;\n  amount1Out: bigint;\n}>(Script.fromJson(SwapScriptJson, \"\", []), getContractByCodeHash);\n\nexport const SwapMaxIn = new ExecutableScript<{\n  dexAccount: HexString;\n  sender: Address;\n  router: HexString;\n  pair: HexString;\n  tokenInId: HexString;\n  amountInMax: bigint;\n  amountOut: bigint;\n  deadline: bigint;\n}>(Script.fromJson(SwapMaxInScriptJson, \"\", []), getContractByCodeHash);\n\nexport const SwapMinOut = new ExecutableScript<{\n  dexAccount: HexString;\n  sender: Address;\n  router: HexString;\n  pair: HexString;\n  tokenInId: HexString;\n  amountIn: bigint;\n  amountOutMin: bigint;\n  deadline: bigint;\n}>(Script.fromJson(SwapMinOutScriptJson, \"\", []), getContractByCodeHash);\n","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"AddLiquidity\",\n  \"bytecodeTemplate\": \"0101030002001c0c0e{2}010717011700{0}7a1600{3}a31601{4}a3{2}{0}{3}{4}{5}{6}{7}13070f{1}0101181818\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"sender\",\n      \"router\",\n      \"pair\",\n      \"amount0Desired\",\n      \"amount1Desired\",\n      \"amount0Min\",\n      \"amount1Min\",\n      \"deadline\"\n    ],\n    \"types\": [\n      \"Address\",\n      \"Router\",\n      \"TokenPair\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"Burn\",\n  \"bytecodeTemplate\": \"0101030000000c{1}{0}{2}a3{1}{2}0e0e{0}010f1818\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"tokenPair\",\n      \"sender\",\n      \"liquidity\"\n    ],\n    \"types\": [\n      \"TokenPair\",\n      \"Address\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"CollectFee\",\n  \"bytecodeTemplate\": \"010100000000040c0c{0}0103\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"feeCollector\"\n    ],\n    \"types\": [\n      \"FeeCollectorPerTokenPairImpl\"\n    ],\n    \"isMutable\": [\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"CreatePair\",\n  \"bytecodeTemplate\": \"01010300000013{0}7a7a{2}a2{3}0da3{4}0da3{0}{2}{3}{4}100c{1}0106\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"payer\",\n      \"factory\",\n      \"alphAmount\",\n      \"tokenAId\",\n      \"tokenBId\"\n    ],\n    \"types\": [\n      \"Address\",\n      \"TokenPairFactory\",\n      \"U256\",\n      \"ByteVec\",\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"CreatePairAndAddLiquidity\",\n  \"bytecodeTemplate\": \"0101030001004029{0}7a7a{2}a2{3}0da3{4}0da3{0}{2}{3}{4}100c{1}0106{1}{3}{4}44cc1700{0}7a{3}{5}a3{4}{6}a3{0}{5}{6}0f0d1600010e18\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"payer\",\n      \"factory\",\n      \"alphAmount\",\n      \"token0Id\",\n      \"token1Id\",\n      \"amount0\",\n      \"amount1\"\n    ],\n    \"types\": [\n      \"Address\",\n      \"TokenPairFactory\",\n      \"U256\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"EnableFeeCollector\",\n  \"bytecodeTemplate\": \"01010300000009b413c40de0b6b3a7640000a2{1}13c40de0b6b3a76400000e0c{0}0103\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"tokenPairFactory\",\n      \"tokenPair\"\n    ],\n    \"types\": [\n      \"TokenPairFactory\",\n      \"TokenPair\"\n    ],\n    \"isMutable\": [\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"GetToken\",\n  \"bytecodeTemplate\": \"01010300000006{1}{2}0e0c{0}0104\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"token\",\n      \"sender\",\n      \"amount\"\n    ],\n    \"types\": [\n      \"TestToken\",\n      \"Address\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"Mint\",\n  \"bytecodeTemplate\": \"010103000200160c0e{0}010717011700{1}7a1600{2}a31601{3}a3{1}{2}{3}0f0d{0}010e18\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"tokenPair\",\n      \"sender\",\n      \"amount0\",\n      \"amount1\"\n    ],\n    \"types\": [\n      \"TokenPair\",\n      \"Address\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"RemoveLiquidity\",\n  \"bytecodeTemplate\": \"01010300000010{0}{2}{3}a3{2}{0}{3}{4}{5}{6}13060e{1}01021818\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"sender\",\n      \"router\",\n      \"pairId\",\n      \"liquidity\",\n      \"amount0Min\",\n      \"amount1Min\",\n      \"deadline\"\n    ],\n    \"types\": [\n      \"Address\",\n      \"Router\",\n      \"ByteVec\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.0.0\",\n  \"name\": \"SetFeeCollectorFactory\",\n  \"bytecodeTemplate\": \"01010300000005{1}0d0c{0}0100\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"tokenPairFactory\",\n      \"feeCollectorFactory\"\n    ],\n    \"types\": [\n      \"TokenPairFactory\",\n      \"FeeCollectorFactory\"\n    ],\n    \"isMutable\": [\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"Swap\",\n  \"bytecodeTemplate\": \"0101030004004056b41700{0}160047cc17011601c5194c0516000d0c{0}d465b302f90c0e{1}010717031702{2}{3}464c04{2}{3}13c3038d7ea4c68000a7{4}0c2f4c0f{2}1603{5}a3{2}{3}{4}{5}{6}{7}13060c{1}01104a4025{5}0c2f4c0f{2}1602{4}a3{2}{3}{4}{5}{6}{7}13060c{1}01104a12{2}7a1602{4}a31603{5}a3{2}{3}{4}{5}{6}{7}13060c{1}0110\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"dexAccount\",\n      \"tokenPair\",\n      \"sender\",\n      \"to\",\n      \"amount0In\",\n      \"amount1In\",\n      \"amount0Out\",\n      \"amount1Out\"\n    ],\n    \"types\": [\n      \"IDexAccount\",\n      \"TokenPair\",\n      \"Address\",\n      \"Address\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"SwapMaxIn\",\n  \"bytecodeTemplate\": \"0101030002001fb41700{0}160047cc17011601c5194c0516000d0c{0}d465b302f9{1}{4}{5}a3{3}{1}{4}{5}{6}{1}{7}13070c{2}0105\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"dexAccount\",\n      \"sender\",\n      \"router\",\n      \"pair\",\n      \"tokenInId\",\n      \"amountInMax\",\n      \"amountOut\",\n      \"deadline\"\n    ],\n    \"types\": [\n      \"IDexAccount\",\n      \"Address\",\n      \"Router\",\n      \"TokenPair\",\n      \"ByteVec\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"SwapMinOut\",\n  \"bytecodeTemplate\": \"0101030002001fb41700{0}160047cc17011601c5194c0516000d0c{0}d465b302f9{1}{4}{5}a3{3}{1}{4}{5}{6}{1}{7}13070c{2}0104\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"dexAccount\",\n      \"sender\",\n      \"router\",\n      \"pair\",\n      \"tokenInId\",\n      \"amountIn\",\n      \"amountOutMin\",\n      \"deadline\"\n    ],\n    \"types\": [\n      \"IDexAccount\",\n      \"Address\",\n      \"Router\",\n      \"TokenPair\",\n      \"ByteVec\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","[\n  {\n    \"deployerAddress\": \"1GkZ5MphFzHTBpsDBGjYpe6m7KXQMmJ68VQH3vpPznVF1\",\n    \"contracts\": {\n      \"TokenPair\": {\n        \"txId\": \"d462b5c73abcf438e336db24c145ad759801e607ee8da49eab611adcffe19cbe\",\n        \"unsignedTx\": \"000101010103000000081500ea078bd2664dae71f816ba8da4e2b400c6dd7e46fe6d9f90bc570662b039b0b413c4016345785d8a0000a214448e0d13114022402b4034404b4087409d40ad40bd40cb40d940e7415641b4426842e5441c444644670100000001021408414c50482d444558020100000001021408414c50482d44455802010000000102131202010000000102a00502010002020109d38c844efd16000d1340703b2c16012d0201000103014020d36ae1998016000f334c191600170116000e2d0d2a170216021601314c0b16021701160016022d16022a0e2d17024a311601020d02010001010008d347fff8f4b3ce004113107b1600a107010000000204d373c3e78fce01ce0202010000000204d37de99ed1a000a00102010000000103d355097b37a00202010000000103d3d3cf0c5aa00302010000000103d37fe75f5ba00402000002050040410d1340703b170216001602317a4c041816011602310c7b561343e82d0d13203b2e17031603a0022b170416040c337a4c0418a0000c337a4c0418a0010c334c10a003a001a000000416042c35a103a004a000a001000416042c35a1041600a1001601a1011603a102000002080240320c1702a007140042170316034c4025a0060c304c4020160016012c00051704a0060005170516041605334c14a005160416052b2c17061604112c16052a1707160616072d1702a00516022aa1054a020ca106160316020201010309014064d393ef503ea000a001000d170417030c1705a0050c2f4c17160116022c0005170616061343e8330d7b16061343e82b1705a0051343e82aa105b2b11343e8bd4a141601a0052ca0002d17071602a0052ca0012d170816071608334c0216084a011607170516050c330e7b1600b11605ab1600ce011601ac1600ce021602aca00516052aa105a00016012aa00116022a000c16034c06b2b11604a316040012051600160116021605a0057316050201010206024046d349c452fda000a001000d170317021601a0002ca0052d17041601a0012ca0052d170516040c337a4c041816050c330f7b1600b11601ac1600ce011604ab1600ce021605aba00516012ba105a00016042ba00116052b000c16024c06b2b11603a316030012061600160416051601a005731604160502010106110040b3d32570119d16040c337a4b041816050c3313097b1604a000317a4c04181605a00131117ba00016022a16042b1706a00116032a16052b170716020f2c1367102d170816030f2c1367102d170916061343e82c16020f2c2b170a16071343e82c16030f2c2b170ba000a0012c13800f42402c170c160a160b2c160c3413087b160616082b170d160716092b170e160d160e2ca000a0012c3413087bce03160147cc170f160fc51341f47bce01ce0244171016020c334c131600ce01160216082bac1600ce011608a31600ce01160816100d110c160fd4bd48152816030c334c131600ce02160316092bac1600ce021609a31600ce02160916100d110c160fd4bd48152816040c334c041601ce011604ab16050c334c041601ce021605ab160d160e000c0716001602160316041605160174010200020014d3f2c71c4bb3a0074113107ba000a001000d17011700160013117bb2b11601a31601001200030101001216000c334c0ab2b11600a3b216000e0ca0070100a000a0012ca10614403205030003000300034020015d9f57975c026d5949f753dbac5b20917fcabf7294f4e9cbcb9562c05297000306414c5048000114110802000200020002000200020002000300ad188000e911c1174876e800026c62bf3d24858653eacf0117caf54d55702fcc13e3051d3aab819093ef07cc01d80a65360002a5cc1442f0535a9b88d0539447bc443c4b2e260cf54e25583b5563340f48421a6c62bf3d9a67e0ea7e7e4337ba770936465a5484286307efd3eb44a249c44d2fbc39c4240301c41aff2d992fa6080000ea078bd2664dae71f816ba8da4e2b400c6dd7e46fe6d9f90bc570662b039b0b400000000000000000000\",\n        \"signature\": \"192b043c8bb86a243a51fdf0128e5e6162443d40c3be615ae07f3449cb2afe6f07eab46a0341699777f45349be783e8222ba7eae7a904f3287a2a879bb8301ea\",\n        \"gasPrice\": \"100000000000\",\n        \"gasAmount\": 59665,\n        \"blockHash\": \"0000007a3ee220c20504ba87b53c2ad555b1c802f8e7cee2567e2bdca85e3330\",\n        \"codeHash\": \"20cf0074582e5360461a52fbfd2599e8bc699c76a70e65d1c92fdcc552a0eeb7\",\n        \"contractInstance\": {\n          \"address\": \"yF1DH1rt4sGB53t4rrZ2Ecvf2eopyPTg6cNvJKw8efaw\",\n          \"contractId\": \"43a4d6a9880e837a6421897e8f95cd32459996e7218cf059a9e6cf5e63ceec00\",\n          \"groupIndex\": 0\n        }\n      },\n      \"TokenPairFactory\": {\n        \"txId\": \"d0d23b06ac4f304cd5758b9e44688e2b7fb48697c5d78c8458f64e983b712487\",\n        \"unsignedTx\": \"000101010103000000081500ea078bd2664dae71f816ba8da4e2b400c6dd7e46fe6d9f90bc570662b039b0b413c4016345785d8a0000a2144132050716402c403a406b408540a64123010001010008d302f1c0ffb4a0014513107b1600a102010001010008d34db5e042b4a0014513107b1600a101010000000103d34086275fa00102010302040018d3a2ac8580b417021602a0014513107b16021601a21602160116000f0da0020100170316030d0c1600010601000202000bd3c9a43b3cb4a0014513107b16010d0c160001060000020402101600711702160171170316021603314c031600160102160116000201030409004045d3fd02709216001602a50c337a4c061816001603a50c33130f7b1602160342130b7b16021603000517051704b116041605ce011406414c504800011305640c0c0c0c0c0c0c14001308641707170616001601a21604160544ce00160616070d1340ff3bc2170805160416051608a00061a0000d2aa1001440470203402043a4d6a9880e837a6421897e8f95cd32459996e7218cf059a9e6cf5e63ceec00034020015d9f57975c026d5949f753dbac5b20917fcabf7294f4e9cbcb9562c052970014402703020004008568e1012f9fb2bb69aac7ec92d62a9f0c0bcef3bb9a4d0fdb707ac5087752660300ad188000e1ffc1174876e800016c62bf3d3f1a7689e2163480f1830c8fd4f14256165f9fe4f38ca900f2a01f77df2cb1430002a5cc1442f0535a9b88d0539447bc443c4b2e260cf54e25583b5563340f48421a01c419875a3f21c2f00000ea078bd2664dae71f816ba8da4e2b400c6dd7e46fe6d9f90bc570662b039b0b400000000000000000000\",\n        \"signature\": \"444d343e69228005ff7e4476ecfcebe1e479dbe4666f4cc9193aefd97621ce8e3fc9e4d4602143245d89d68a872e5ee517102540b9985a89c277062dda3c4d18\",\n        \"gasPrice\": \"100000000000\",\n        \"gasAmount\": 57855,\n        \"blockHash\": \"000000ba8d63f5149b42f75d547e29c261b74e443bb48ca04a2788a11cdbe2d0\",\n        \"codeHash\": \"b296b265ec8a4d877b4313ba563d55b528125dbe56b381f4bcdf395ddaa503ae\",\n        \"contractInstance\": {\n          \"address\": \"237TuFxrrCaiyiBfjaf7tDm9J15vTnDmQYLfrtyxL1kgF\",\n          \"contractId\": \"7d251e1404c259c499e2578f4b8f79898ffbc30b5dccccef20c57caeaebd5200\",\n          \"groupIndex\": 0\n        }\n      },\n      \"Router\": {\n        \"txId\": \"cb8a8e3cf177fded84efded9cdaac80dbc219564a5fe7efa5ec6a1ba06af4783\",\n        \"unsignedTx\": \"000101010103000000081500ea078bd2664dae71f816ba8da4e2b400c6dd7e46fe6d9f90bc570662b039b0b413c4016345785d8a0000a21442160007405840b340ef4119416c41bd42060000060802403316000c2f7a4c041816010c2f4c031602160302160216012c16002d170616061603324c081606160534130e7b1602160602160316002c16012d170716071604347a4c04181607160232130d7b16071603020103070e03402fd3c2b1ca2116065634130c7b0c0e16000107170817070c0e16000108170a17091609160a16021603160416050000170c170b16017a1607160ba31608160ca31601160b160c0f0d1600010e170d160b160c160d0201030608021fd3b9fb57ea16055634130c7b160116001602a3160116020e0e1600010f170717061606160334130d7b1607160434130e7b16061607020000020502160c0e16000108170317020c0e1600010718170416011604414c03160216030216031602020103070b004029d364342a1916065634130c7b160016020003170817071343e516032c1709160916082c16091343e816072c2a2d170a160a16043413097b160116021603a316001601160516021603160a00060103070a004029d31937d61916065634130c7b16001602000317081707160716042c1343e82c160816042b1343e52c2d0d2a17091609160332130a7b160116021609a31600160116051602160916040006000306070040270c0e1600010718170616031606414c0f160116031604a31601160216040c0c160513060c160001104a0e160116031604a3160116020c160416050c13060c16000110140100140100ad188000e2d9c1174876e800016c62bf3ddb1da9529b4cdf421d58ea9dd6e843fa8fb7f42ab35a26107a5b40c0104f5c3c0002a5cc1442f0535a9b88d0539447bc443c4b2e260cf54e25583b5563340f48421a01c4180f73115e9e480000ea078bd2664dae71f816ba8da4e2b400c6dd7e46fe6d9f90bc570662b039b0b400000000000000000000\",\n        \"signature\": \"ce2b014a31009bf53a89f1bcbdee756488b09bd59ac79b9b276f015ac04f9a2449d83ab13d8d70398f962ffd8183f883db7839e95b3f16cb3339912f7264d321\",\n        \"gasPrice\": \"100000000000\",\n        \"gasAmount\": 58073,\n        \"blockHash\": \"00000080852ea4a17be5bacffb86458c29a25a66d6c3f16833f5b8d29b69e240\",\n        \"codeHash\": \"720b48663ba906f7fc6b97b0bea633e6dc213200bdb6b02edeb0fd6f418cf91c\",\n        \"contractInstance\": {\n          \"address\": \"zuG2u5pnpwe2VLdvArMb3fydmN2BQ1jAMWcn63P4uThy\",\n          \"contractId\": \"5c4d5abbdd3fe1a6e1041062268d1a43128a1d58069cc796e489585654a57200\",\n          \"groupIndex\": 0\n        }\n      },\n      \"FeeCollectorPerTokenPairImpl\": {\n        \"txId\": \"eed96070483afd4fbfc498535624d1dad4d8b843947aa4949695e37d8f100ed3\",\n        \"unsignedTx\": \"000101010103000000081500ea078bd2664dae71f816ba8da4e2b400c6dd7e46fe6d9f90bc570662b039b0b413c4016345785d8a0000a21440700204154032404b406701010202000ab3ce014113107b1600b2ce011601aa01020202000dd3f1ab4760b40c0dce0001024513107b1600ce011601ab01020101000bd320f98f62b40c0dce0001024513107b1600b001000000000dd3f2c71c4bb40c0dce0001024513107b0c0cce01011114050203000300140100ad188000df91c1174876e800016c62bf3df833086da8ce51e03166acc576f14bc03238c58bdf0a2e56245fc5fd2bc24cdd0002a5cc1442f0535a9b88d0539447bc443c4b2e260cf54e25583b5563340f48421a01c41697d84961a2e00000ea078bd2664dae71f816ba8da4e2b400c6dd7e46fe6d9f90bc570662b039b0b400000000000000000000\",\n        \"signature\": \"76b6cade00fa46b91b4c74670f9a4d62115cb9b20970bb32eb1276d148117d4b4ebe6c67e33fa8997d6593d491a3d47f7571ea93883c47a8678fe14c8bf4d29d\",\n        \"gasPrice\": \"100000000000\",\n        \"gasAmount\": 57233,\n        \"blockHash\": \"000000a79fbd0fa1cb06ae7e6d706294ec5c4c4ce692d07631c7c1c5ea1d3860\",\n        \"codeHash\": \"1820b6e23f0ff6c305c58cbbfdb0bfb4f54b9deba1f9d671cc503f49bae39b33\",\n        \"contractInstance\": {\n          \"address\": \"28hJYMQjLeWxVpdKqb4PcJbKe9NTZzNrgsQa2JZZzq3Ew\",\n          \"contractId\": \"d01ab73aa6269bb9a5ec5a43f017dea558d06056f6429b17ae74c3a4f2311300\",\n          \"groupIndex\": 0\n        }\n      },\n      \"FeeCollectorFactoryImpl\": {\n        \"txId\": \"6429a9c7a48b94217f1520068edd98665182df653d9ae80d52d90053d8dc0850\",\n        \"unsignedTx\": \"000101010103000000081500ea078bd2664dae71f816ba8da4e2b400c6dd7e46fe6d9f90bc570662b039b0b413c4016345785d8a0000a214402e0201402a010303050116b3ce014113107bce0116021302641300641704170316001601a21602ce0016031604c10214404702034020d01ab73aa6269bb9a5ec5a43f017dea558d06056f6429b17ae74c3a4f23113000340207d251e1404c259c499e2578f4b8f79898ffbc30b5dccccef20c57caeaebd5200140100ad188000df90c1174876e800016c62bf3d23a96b27d8c1eb480af3207c6873feba492289baf7e717f1d99c92bf278daff30002a5cc1442f0535a9b88d0539447bc443c4b2e260cf54e25583b5563340f48421a01c415203d98ad1e600000ea078bd2664dae71f816ba8da4e2b400c6dd7e46fe6d9f90bc570662b039b0b400000000000000000000\",\n        \"signature\": \"2c555c0e73369b086b384e4bbd4108e4ac29fc8d48954bc9e092423180b81f5d7159f0e33c58ba28dcfb6ab3545ec562ce4891ec0939b9228da215f3266bf8e3\",\n        \"gasPrice\": \"100000000000\",\n        \"gasAmount\": 57232,\n        \"blockHash\": \"0000005d00aa79d3e13ac57e949039a8bbbb65db3bbda1f0e7da9f26ac452560\",\n        \"codeHash\": \"447887dc44d12777efe786335ba9b1d9772d68a56e04820d657ead19a48d7716\",\n        \"contractInstance\": {\n          \"address\": \"26pTijM7u1gQHyCkg5k4oEqSpGGHuLTTZG8hAvyqHVJ8f\",\n          \"contractId\": \"b438c944b2e3fe73c7cc986cd52b03a9d8c758fee645adf1155197608a569400\",\n          \"groupIndex\": 0\n        }\n      }\n    },\n    \"scripts\": {},\n    \"migrations\": {}\n  }\n]","{\n  \"deployerAddress\": \"1DrDyTr9RpRsQnDnXo2YRiPzPW4ooHX5LLoqXrqfMrpQH\",\n  \"contracts\": {\n    \"TokenPair\": {\n      \"txId\": \"2f2113d047d049ca144481fbea8187dc303160967eb6ea7b672768e4729cc580\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a214448e0d13114022402b4034404b4087409d40ad40bd40cb40d940e7415641b4426842e5441c444644670100000001021408414c50482d444558020100000001021408414c50482d44455802010000000102131202010000000102a00502010002020109d38c844efd16000d1340703b2c16012d0201000103014020d36ae1998016000f334c191600170116000e2d0d2a170216021601314c0b16021701160016022d16022a0e2d17024a311601020d02010001010008d347fff8f4b3ce004113107b1600a107010000000204d373c3e78fce01ce0202010000000204d37de99ed1a000a00102010000000103d355097b37a00202010000000103d3d3cf0c5aa00302010000000103d37fe75f5ba00402000002050040410d1340703b170216001602317a4c041816011602310c7b561343e82d0d13203b2e17031603a0022b170416040c337a4c0418a0000c337a4c0418a0010c334c10a003a001a000000416042c35a103a004a000a001000416042c35a1041600a1001601a1011603a102000002080240320c1702a007140042170316034c4025a0060c304c4020160016012c00051704a0060005170516041605334c14a005160416052b2c17061604112c16052a1707160616072d1702a00516022aa1054a020ca106160316020201010309014064d393ef503ea000a001000d170417030c1705a0050c2f4c17160116022c0005170616061343e8330d7b16061343e82b1705a0051343e82aa105b2b11343e8bd4a141601a0052ca0002d17071602a0052ca0012d170816071608334c0216084a011607170516050c330e7b1600b11605ab1600ce011601ac1600ce021602aca00516052aa105a00016012aa00116022a000c16034c06b2b11604a316040012051600160116021605a0057316050201010206024046d349c452fda000a001000d170317021601a0002ca0052d17041601a0012ca0052d170516040c337a4c041816050c330f7b1600b11601ac1600ce011604ab1600ce021605aba00516012ba105a00016042ba00116052b000c16024c06b2b11603a316030012061600160416051601a005731604160502010106110040b3d32570119d16040c337a4b041816050c3313097b1604a000317a4c04181605a00131117ba00016022a16042b1706a00116032a16052b170716020f2c1367102d170816030f2c1367102d170916061343e82c16020f2c2b170a16071343e82c16030f2c2b170ba000a0012c13800f42402c170c160a160b2c160c3413087b160616082b170d160716092b170e160d160e2ca000a0012c3413087bce03160147cc170f160fc51341f47bce01ce0244171016020c334c131600ce01160216082bac1600ce011608a31600ce01160816100d110c160fd4bd48152816030c334c131600ce02160316092bac1600ce021609a31600ce02160916100d110c160fd4bd48152816040c334c041601ce011604ab16050c334c041601ce021605ab160d160e000c0716001602160316041605160174010200020014d3f2c71c4bb3a0074113107ba000a001000d17011700160013117bb2b11601a31601001200030101001216000c334c0ab2b11600a3b216000e0ca0070100a000a0012ca106144032050300030003000340203a2bc6ad435bc7485602a8af12bc95afc766ea18f6195d267bd7abfc38af9a000306414c5048000114110802000200020002000200020002000300ad188000e911c1174876e8000137a4444753990d55b04bb5d8be7ab472e5250947f0c0364c6f6f93d6faf44005f0d7bba4000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d23f9fff45387e0ff5d100bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"ccaf52f5cde9640194b105a30aebadb3016510886fa81c002b2e9284b34ef2c76eea574cccfd0ea93f3db6ce6e17d2bec850502bf2bd87d445cceae74e4ebede\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 59665,\n      \"blockHash\": \"0140beb5f40db79def3008f4eedf258247ce26419e88a8680ad449bf58fc43a0\",\n      \"codeHash\": \"4511a4a64d0aee7fc90e6ba034026001296d700c0061cf82b1b34f169b354fbb\",\n      \"contractInstance\": {\n        \"address\": \"2A1a8KVBFKfiJYb1isUzbaecikgDBt8gcfTVoBqvE84CF\",\n        \"contractId\": \"e3a47adecdd6ae49e3aef8406d6d2268d4901ee15d04054ff252c07011aa6800\",\n        \"groupIndex\": 0\n      }\n    },\n    \"TokenPairFactory\": {\n      \"txId\": \"83413632657147d47f567f90df7f5cce6e4204d4eb6a6a31e2c184f95a30b26d\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a2144132050716402c403a406b408540a64123010001010008d302f1c0ffb4a0014513107b1600a102010001010008d34db5e042b4a0014513107b1600a101010000000103d34086275fa00102010302040018d3a2ac8580b417021602a0014513107b16021601a21602160116000f0da0020100170316030d0c1600010601000202000bd3c9a43b3cb4a0014513107b16010d0c160001060000020402101600711702160171170316021603314c031600160102160116000201030409004045d3fd02709216001602a50c337a4c061816001603a50c33130f7b1602160342130b7b16021603000517051704b116041605ce011406414c504800011305640c0c0c0c0c0c0c14001308641707170616001601a21604160544ce00160616070d1340ff3bc2170805160416051608a00061a0000d2aa10014404702034020e3a47adecdd6ae49e3aef8406d6d2268d4901ee15d04054ff252c07011aa68000340203a2bc6ad435bc7485602a8af12bc95afc766ea18f6195d267bd7abfc38af9a001440270302000400bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a0300ad188000e1ffc1174876e8000137a444473a936218b4f5ec4c5d65f82ba1259d43535b5b3457f065175458d084bc6059d3000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d23f9e8771de702cddd100bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"cdd1253862ac882bd76799f8787b52327a0069ad4bd2a66d827dedaebe28ed51771140401762fab58fabad057bfbfa2c73be910939c40ebc0b51a6279aff32c6\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 57855,\n      \"blockHash\": \"013c9c5e1b9a734d474f39d8e1ad0259dd56f84bc1eb22ed740b8bb9809274a0\",\n      \"codeHash\": \"511a3877f5db08042f7079f65d76135f95edc85fd70f2fce161ed05950db1245\",\n      \"contractInstance\": {\n        \"address\": \"22x2ytsMC9Dc7hX1yoWsFKBMfmNCigSrQga3SNWEHmh8B\",\n        \"contractId\": \"7abab68781ed3cc4fd2e2ca59f8da296958fef5a31e1db88525374dace1aa300\",\n        \"groupIndex\": 0\n      }\n    },\n    \"Router\": {\n      \"txId\": \"47266b9f5252fc095f6314dada5f3d2608f9675454c4000010a41dbeb5973c3d\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a21442160007405840b340ef4119416c41bd42060000060802403316000c2f7a4c041816010c2f4c031602160302160216012c16002d170616061603324c081606160534130e7b1602160602160316002c16012d170716071604347a4c04181607160232130d7b16071603020103070e03402fd3c2b1ca2116065634130c7b0c0e16000107170817070c0e16000108170a17091609160a16021603160416050000170c170b16017a1607160ba31608160ca31601160b160c0f0d1600010e170d160b160c160d0201030608021fd3b9fb57ea16055634130c7b160116001602a3160116020e0e1600010f170717061606160334130d7b1607160434130e7b16061607020000020502160c0e16000108170317020c0e1600010718170416011604414c03160216030216031602020103070b004029d364342a1916065634130c7b160016020003170817071343e516032c1709160916082c16091343e816072c2a2d170a160a16043413097b160116021603a316001601160516021603160a00060103070a004029d31937d61916065634130c7b16001602000317081707160716042c1343e82c160816042b1343e52c2d0d2a17091609160332130a7b160116021609a31600160116051602160916040006000306070040270c0e1600010718170616031606414c0f160116031604a31601160216040c0c160513060c160001104a0e160116031604a3160116020c160416050c13060c16000110140100140100ad188000e2d9c1174876e8000137a444479020a2e25e02cbe614a912fcf810e04e85a213136e2c6f4ad0b90ef127fc9f98000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c1e821e216e09fa00000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"1ef38fd124879f208f2a60b322c8ec6cf6c816ba773e79d18e3e7a4b8e622e12126003150b550a34c69056c001e78fc697849a6f1e135f08a6dc5edf4e30c4d5\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58073,\n      \"blockHash\": \"c0bad3d18e97f0a353b7fea22e8ac5ae49b8c51ef55863181504f7de72cda800\",\n      \"codeHash\": \"720b48663ba906f7fc6b97b0bea633e6dc213200bdb6b02edeb0fd6f418cf91c\",\n      \"contractInstance\": {\n        \"address\": \"zyyvPYaHLfLLik1xi8p6jEFYyZdwPqJ4rQX7ebmqFHmR\",\n        \"contractId\": \"5d830a5256db563c67389db55c77465995f8841859844075062eadf9f44c3400\",\n        \"groupIndex\": 0\n      }\n    },\n    \"FeeCollectorPerTokenPairImpl\": {\n      \"txId\": \"b9cb58b57b6c36b13cc46b85b842f4cb425931ecd2a17716bd89db02e7939efe\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a21440700204154032404b406701010202000ab3ce014113107b1600b2ce011601aa01020202000dd3f1ab4760b40c0dce0001024513107b1600ce011601ab01020101000bd320f98f62b40c0dce0001024513107b1600b001000000000dd3f2c71c4bb40c0dce0001024513107b0c0cce01011114050203000300140100ad188000df91c1174876e8000137a44447271ad56a8747d06f159ebbf8e4bddd6ee7ce0a7b89888961d9a7466438bad654000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c1e6aa474ee3a4380000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"8a0c925ca2579bed383095902ed7e1b0bd81055994a538bd1a34c2f83cf1198e6523570a07fde5969bccba530404565ffa622cacbab800c48f8283cc2e4ce61e\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 57233,\n      \"blockHash\": \"6cf0f2c13accc29204d359c97e1ff439a6fa53e471ae7832d4a3a629595a8550\",\n      \"codeHash\": \"1820b6e23f0ff6c305c58cbbfdb0bfb4f54b9deba1f9d671cc503f49bae39b33\",\n      \"contractInstance\": {\n        \"address\": \"25cz5W3ahmmox3998aJ45Zg2zsP728zWssBpT4GNXC5io\",\n        \"contractId\": \"a26c74a2213fd01bfa909d05b65daba091c6aded18f83fa74a73adccc34ae100\",\n        \"groupIndex\": 0\n      }\n    },\n    \"FeeCollectorFactoryImpl\": {\n      \"txId\": \"6624410db752ce7a038419524bf826a0922be1a3ce3fa9138953acd970ce93ca\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a214402e0201402a010303050116b3ce014113107bce0116021302641300641704170316001601a21602ce0016031604c10214404702034020a26c74a2213fd01bfa909d05b65daba091c6aded18f83fa74a73adccc34ae1000340207abab68781ed3cc4fd2e2ca59f8da296958fef5a31e1db88525374dace1aa300140100ad188000df90c1174876e8000137a44447f30c4724ce600b084b4aa2023ac72085ac2c3362e4f2ac13e67e183d48430ee7000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d23f9d0fd72dbba85dd100bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"028b5501cba7f022a06c1d65a5a1490f50efd125bb25a7a418545db253d9ed9025b5fdccf5b8b3efef8da893167b7f32ba56fbe277ef20cf268b22acba3c6815\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 57232,\n      \"blockHash\": \"02bb858e329bc2eba0d896690ecd9d8cdda699bd3c3690f4563dea2dcb34a310\",\n      \"codeHash\": \"f4164dacb696e1cd9c2bb771ea16c9a23ac33eb9dba83b43e58e8b3cfc8b3153\",\n      \"contractInstance\": {\n        \"address\": \"ynaAdt4Xn8P6FDH9UJWGNoTu7Ggn3UEgA72rJovLSwd9\",\n        \"contractId\": \"4bbb1af86e54a2552dfb00e72e33e1e7be51b2becc451fe30a72bd1c79833b00\",\n        \"groupIndex\": 0\n      }\n    }\n  },\n  \"scripts\": {},\n  \"migrations\": {}\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  RunScriptResult,\n  DeployContractExecutionResult,\n  NetworkId,\n} from \"@alephium/web3\";\nimport {\n  TokenPair,\n  TokenPairInstance,\n  TokenPairFactory,\n  TokenPairFactoryInstance,\n  Router,\n  RouterInstance,\n  FeeCollectorPerTokenPairImpl,\n  FeeCollectorPerTokenPairImplInstance,\n  FeeCollectorFactoryImpl,\n  FeeCollectorFactoryImplInstance,\n} from \".\";\nimport { default as testnetDeployments } from \"../../deployments/.deployments.testnet.json\";\nimport { default as devnetDeployments } from \"../../deployments/.deployments.devnet.json\";\n\nexport type Deployments = {\n  deployerAddress: string;\n  contracts: {\n    TokenPair: DeployContractExecutionResult<TokenPairInstance>;\n    TokenPairFactory: DeployContractExecutionResult<TokenPairFactoryInstance>;\n    Router: DeployContractExecutionResult<RouterInstance>;\n    FeeCollectorPerTokenPairImpl: DeployContractExecutionResult<FeeCollectorPerTokenPairImplInstance>;\n    FeeCollectorFactoryImpl: DeployContractExecutionResult<FeeCollectorFactoryImplInstance>;\n  };\n};\n\nfunction toDeployments(json: any): Deployments {\n  const contracts = {\n    TokenPair: {\n      ...json.contracts[\"TokenPair\"],\n      contractInstance: TokenPair.at(\n        json.contracts[\"TokenPair\"].contractInstance.address\n      ),\n    },\n    TokenPairFactory: {\n      ...json.contracts[\"TokenPairFactory\"],\n      contractInstance: TokenPairFactory.at(\n        json.contracts[\"TokenPairFactory\"].contractInstance.address\n      ),\n    },\n    Router: {\n      ...json.contracts[\"Router\"],\n      contractInstance: Router.at(\n        json.contracts[\"Router\"].contractInstance.address\n      ),\n    },\n    FeeCollectorPerTokenPairImpl: {\n      ...json.contracts[\"FeeCollectorPerTokenPairImpl\"],\n      contractInstance: FeeCollectorPerTokenPairImpl.at(\n        json.contracts[\"FeeCollectorPerTokenPairImpl\"].contractInstance.address\n      ),\n    },\n    FeeCollectorFactoryImpl: {\n      ...json.contracts[\"FeeCollectorFactoryImpl\"],\n      contractInstance: FeeCollectorFactoryImpl.at(\n        json.contracts[\"FeeCollectorFactoryImpl\"].contractInstance.address\n      ),\n    },\n  };\n  return {\n    ...json,\n    contracts: contracts as Deployments[\"contracts\"],\n  };\n}\n\nexport function loadDeployments(\n  networkId: NetworkId,\n  deployerAddress?: string\n): Deployments {\n  const deployments =\n    networkId === \"testnet\"\n      ? testnetDeployments\n      : networkId === \"devnet\"\n      ? devnetDeployments\n      : undefined;\n  if (deployments === undefined) {\n    throw Error(\"The contract has not been deployed to the \" + networkId);\n  }\n  const allDeployments: any[] = Array.isArray(deployments)\n    ? deployments\n    : [deployments];\n  if (deployerAddress === undefined) {\n    if (allDeployments.length > 1) {\n      throw Error(\n        \"The contract has been deployed multiple times on \" +\n          networkId +\n          \", please specify the deployer address\"\n      );\n    } else {\n      return toDeployments(allDeployments[0]);\n    }\n  }\n  const result = allDeployments.find(\n    (d) => d.deployerAddress === deployerAddress\n  );\n  if (result === undefined) {\n    throw Error(\"The contract deployment result does not exist\");\n  }\n  return toDeployments(result);\n}\n","export function sortTokens(tokenAId: string, tokenBId: string): [string, string] {\n  return tokenAId < tokenBId ? [tokenAId, tokenBId] : [tokenBId, tokenAId];\n}\n","export const MAX_PRICE_IMPACT = 5; // 5%\nexport const MINIMUM_LIQUIDITY = 1000n;\n","export class ZetaSDKError extends Error {\n  constructor(message: string, options?: ErrorOptions) {\n    super(message, options);\n    this.name = 'ZetaSDKError';\n  }\n}\n\nexport class InsufficientLiquidityError extends ZetaSDKError {\n  constructor(message: string = 'Insufficient liquidity') {\n    super(message);\n    this.name = 'InsufficientLiquidityError';\n  }\n}\n\nexport class PriceImpactTooHighError extends ZetaSDKError {\n  constructor(priceImpact: number, maxPriceImpact: number) {\n    super(`Price impact too high: ${priceImpact.toFixed(2)}% > ${maxPriceImpact}%`);\n    this.name = 'PriceImpactTooHighError';\n  }\n}\n\nexport class PoolNotFoundError extends ZetaSDKError {\n  constructor(poolId: string) {\n    super(`Pool does not exist for ${poolId}`);\n    this.name = 'PoolNotFoundError';\n  }\n}\n\nexport class InsufficientBalanceError extends ZetaSDKError {\n  constructor(token: string, required: string, available: string) {\n    super(`Not enough ${token} balance. Required: ${required}, Available: ${available}`);\n    this.name = 'InsufficientBalanceError';\n  }\n}\n\nexport class TokenListFetchError extends ZetaSDKError {\n  public readonly status?: number;\n\n  constructor(url: string, options?: { status?: number; cause?: unknown }) {\n    const statusPart = options?.status !== undefined ? ` (status ${options.status})` : '';\n    const errorOptions = options?.cause !== undefined ? { cause: options.cause } : undefined;\n    super(`Failed to fetch token list from ${url}${statusPart}`, errorOptions);\n    this.name = 'TokenListFetchError';\n    this.status = options?.status;\n  }\n}\n","export enum LogLevel {\n  Error,\n  Warning,\n  Info,\n  Debug,\n}\n\nexport class Logger {\n  private logLevel: LogLevel;\n  private name: string;\n\n  constructor(params: { name: string; logLevel?: LogLevel }) {\n    this.logLevel = params.logLevel !== undefined ? params.logLevel : LogLevel.Error;\n    this.name = params.name;\n  }\n\n  set level(logLevel: LogLevel) {\n    this.logLevel = logLevel;\n  }\n\n  get time(): string {\n    return new Date().toISOString();\n  }\n\n  get moduleName(): string {\n    return this.name;\n  }\n\n  private isLogLevel(level: LogLevel): boolean {\n    return level <= this.logLevel;\n  }\n\n  public error(...props: unknown[]): Logger {\n    if (!this.isLogLevel(LogLevel.Error)) return this;\n    console.error(this.time, this.name, 'error', ...props);\n    return this;\n  }\n\n  public logWithError(...props: unknown[]): Logger {\n    const msg = props\n      .map((arg) => (typeof arg === 'object' ? JSON.stringify(arg) : arg))\n      .join(', ');\n    throw new Error(msg);\n  }\n\n  public warning(...props: unknown[]): Logger {\n    if (!this.isLogLevel(LogLevel.Warning)) return this;\n    console.warn(this.time, this.name, 'warning', ...props);\n    return this;\n  }\n\n  public info(...props: unknown[]): Logger {\n    if (!this.isLogLevel(LogLevel.Info)) return this;\n    console.info(this.time, this.name, 'info', ...props);\n    return this;\n  }\n\n  public debug(...props: unknown[]): Logger {\n    if (!this.isLogLevel(LogLevel.Debug)) return this;\n    console.debug(this.time, this.name, 'debug', ...props);\n    return this;\n  }\n}\n\nconst moduleLoggers: { [key: string]: Logger } = {};\nconst moduleLevels: { [key: string]: LogLevel } = {};\n\nexport function createLogger(moduleName: string): Logger {\n  let logger = moduleLoggers[moduleName];\n  if (!logger) {\n    const logLevel = moduleLevels[moduleName];\n    logger = new Logger({ name: moduleName, logLevel });\n    moduleLoggers[moduleName] = logger;\n  }\n  return logger;\n}\n\nexport function setLoggerLevel(moduleName: string, level: LogLevel): void {\n  moduleLevels[moduleName] = level;\n  const logger = moduleLoggers[moduleName];\n  if (logger) logger.level = level;\n}\n","import type { Logger } from './common/logger';\nimport { createLogger } from './common/logger';\nimport type { Zeta } from './zeta';\n\nexport interface ModuleBaseProps {\n  scope: Zeta;\n  moduleName: string;\n}\n\nconst joinMsg = (...args: unknown[]): string =>\n  args\n    .map((arg) => {\n      if (arg instanceof Error) {\n        const base = arg.message ?? arg.name;\n        return arg.stack ? `${base}\\n${arg.stack}` : base;\n      }\n\n      if (typeof arg === 'object' && arg !== null) {\n        try {\n          return JSON.stringify(arg);\n        } catch {\n          return String(arg);\n        }\n      }\n\n      return String(arg);\n    })\n    .join(', ');\n\nexport default class ModuleBase {\n  public scope: Zeta;\n  private disabled = false;\n  protected logger: Logger;\n\n  constructor({ scope, moduleName }: ModuleBaseProps) {\n    this.scope = scope;\n    this.logger = createLogger(moduleName);\n  }\n\n  public logDebug(...args: unknown[]): void {\n    this.logger.debug(joinMsg(...args));\n  }\n\n  public logInfo(...args: unknown[]): void {\n    this.logger.info(joinMsg(...args));\n  }\n\n  public logWarning(...args: unknown[]): void {\n    this.logger.warning(joinMsg(...args));\n  }\n\n  public logError(...args: unknown[]): void {\n    this.logger.error(joinMsg(...args));\n  }\n\n  public logAndThrowError(...args: unknown[]): never {\n    const message = joinMsg(...args);\n    throw new Error(message);\n  }\n\n  public checkDisabled(): void {\n    if (this.disabled || !this.scope) this.logAndThrowError('module not working');\n  }\n}\n","/*\r\n *      bignumber.js v9.3.1\r\n *      A JavaScript library for arbitrary-precision arithmetic.\r\n *      https://github.com/MikeMcl/bignumber.js\r\n *      Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *      MIT Licensed.\r\n *\r\n *      BigNumber.prototype methods     |  BigNumber methods\r\n *                                      |\r\n *      absoluteValue            abs    |  clone\r\n *      comparedTo                      |  config               set\r\n *      decimalPlaces            dp     |      DECIMAL_PLACES\r\n *      dividedBy                div    |      ROUNDING_MODE\r\n *      dividedToIntegerBy       idiv   |      EXPONENTIAL_AT\r\n *      exponentiatedBy          pow    |      RANGE\r\n *      integerValue                    |      CRYPTO\r\n *      isEqualTo                eq     |      MODULO_MODE\r\n *      isFinite                        |      POW_PRECISION\r\n *      isGreaterThan            gt     |      FORMAT\r\n *      isGreaterThanOrEqualTo   gte    |      ALPHABET\r\n *      isInteger                       |  isBigNumber\r\n *      isLessThan               lt     |  maximum              max\r\n *      isLessThanOrEqualTo      lte    |  minimum              min\r\n *      isNaN                           |  random\r\n *      isNegative                      |  sum\r\n *      isPositive                      |\r\n *      isZero                          |\r\n *      minus                           |\r\n *      modulo                   mod    |\r\n *      multipliedBy             times  |\r\n *      negated                         |\r\n *      plus                            |\r\n *      precision                sd     |\r\n *      shiftedBy                       |\r\n *      squareRoot               sqrt   |\r\n *      toExponential                   |\r\n *      toFixed                         |\r\n *      toFormat                        |\r\n *      toFraction                      |\r\n *      toJSON                          |\r\n *      toNumber                        |\r\n *      toPrecision                     |\r\n *      toString                        |\r\n *      valueOf                         |\r\n *\r\n */\r\n\r\n\r\nvar\r\n  isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n  mathceil = Math.ceil,\r\n  mathfloor = Math.floor,\r\n\r\n  bignumberError = '[BigNumber Error] ',\r\n  tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n  BASE = 1e14,\r\n  LOG_BASE = 14,\r\n  MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1\r\n  // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1\r\n  POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n  SQRT_BASE = 1e7,\r\n\r\n  // EDITABLE\r\n  // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n  // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n  MAX = 1E9;                                   // 0 to MAX_INT32\r\n\r\n\r\n/*\r\n * Create and return a BigNumber constructor.\r\n */\r\nfunction clone(configObject) {\r\n  var div, convertBase, parseNumeric,\r\n    P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n    ONE = new BigNumber(1),\r\n\r\n\r\n    //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n    // The default values below must be integers within the inclusive ranges stated.\r\n    // The values can also be changed at run-time using BigNumber.set.\r\n\r\n    // The maximum number of decimal places for operations involving division.\r\n    DECIMAL_PLACES = 20,                     // 0 to MAX\r\n\r\n    // The rounding mode used when rounding to the above decimal places, and when using\r\n    // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n    // UP         0 Away from zero.\r\n    // DOWN       1 Towards zero.\r\n    // CEIL       2 Towards +Infinity.\r\n    // FLOOR      3 Towards -Infinity.\r\n    // HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n    // HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n    // HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n    // HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n    // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n    ROUNDING_MODE = 4,                       // 0 to 8\r\n\r\n    // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n    // The exponent value at and beneath which toString returns exponential notation.\r\n    // Number type: -7\r\n    TO_EXP_NEG = -7,                         // 0 to -MAX\r\n\r\n    // The exponent value at and above which toString returns exponential notation.\r\n    // Number type: 21\r\n    TO_EXP_POS = 21,                         // 0 to MAX\r\n\r\n    // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n    // The minimum exponent value, beneath which underflow to zero occurs.\r\n    // Number type: -324  (5e-324)\r\n    MIN_EXP = -1e7,                          // -1 to -MAX\r\n\r\n    // The maximum exponent value, above which overflow to Infinity occurs.\r\n    // Number type:  308  (1.7976931348623157e+308)\r\n    // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n    MAX_EXP = 1e7,                           // 1 to MAX\r\n\r\n    // Whether to use cryptographically-secure random number generation, if available.\r\n    CRYPTO = false,                          // true or false\r\n\r\n    // The modulo mode used when calculating the modulus: a mod n.\r\n    // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n    // The remainder (r) is calculated as: r = a - n * q.\r\n    //\r\n    // UP        0 The remainder is positive if the dividend is negative, else is negative.\r\n    // DOWN      1 The remainder has the same sign as the dividend.\r\n    //             This modulo mode is commonly known as 'truncated division' and is\r\n    //             equivalent to (a % n) in JavaScript.\r\n    // FLOOR     3 The remainder has the same sign as the divisor (Python %).\r\n    // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n    // EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n    //             The remainder is always positive.\r\n    //\r\n    // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n    // modes are commonly used for the modulus operation.\r\n    // Although the other rounding modes can also be used, they may not give useful results.\r\n    MODULO_MODE = 1,                         // 0 to 9\r\n\r\n    // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n    // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n    POW_PRECISION = 0,                       // 0 to MAX\r\n\r\n    // The format specification used by the BigNumber.prototype.toFormat method.\r\n    FORMAT = {\r\n      prefix: '',\r\n      groupSize: 3,\r\n      secondaryGroupSize: 0,\r\n      groupSeparator: ',',\r\n      decimalSeparator: '.',\r\n      fractionGroupSize: 0,\r\n      fractionGroupSeparator: '\\xA0',        // non-breaking space\r\n      suffix: ''\r\n    },\r\n\r\n    // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n    // '-', '.', whitespace, or repeated character.\r\n    // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n    ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',\r\n    alphabetHasNormalDecimalDigits = true;\r\n\r\n\r\n  //------------------------------------------------------------------------------------------\r\n\r\n\r\n  // CONSTRUCTOR\r\n\r\n\r\n  /*\r\n   * The BigNumber constructor and exported function.\r\n   * Create and return a new instance of a BigNumber object.\r\n   *\r\n   * v {number|string|BigNumber} A numeric value.\r\n   * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n   */\r\n  function BigNumber(v, b) {\r\n    var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n      x = this;\r\n\r\n    // Enable constructor call without `new`.\r\n    if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n    if (b == null) {\r\n\r\n      if (v && v._isBigNumber === true) {\r\n        x.s = v.s;\r\n\r\n        if (!v.c || v.e > MAX_EXP) {\r\n          x.c = x.e = null;\r\n        } else if (v.e < MIN_EXP) {\r\n          x.c = [x.e = 0];\r\n        } else {\r\n          x.e = v.e;\r\n          x.c = v.c.slice();\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n        // Use `1 / n` to handle minus zero also.\r\n        x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n        // Fast path for integers, where n < 2147483648 (2**31).\r\n        if (v === ~~v) {\r\n          for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n          if (e > MAX_EXP) {\r\n            x.c = x.e = null;\r\n          } else {\r\n            x.e = e;\r\n            x.c = [v];\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n        str = String(v);\r\n      } else {\r\n\r\n        if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n        x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n      }\r\n\r\n      // Decimal point?\r\n      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n      // Exponential form?\r\n      if ((i = str.search(/e/i)) > 0) {\r\n\r\n        // Determine exponent.\r\n        if (e < 0) e = i;\r\n        e += +str.slice(i + 1);\r\n        str = str.substring(0, i);\r\n      } else if (e < 0) {\r\n\r\n        // Integer.\r\n        e = str.length;\r\n      }\r\n\r\n    } else {\r\n\r\n      // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n      intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n      // Allow exponential notation to be used with base 10 argument, while\r\n      // also rounding to DECIMAL_PLACES as with other bases.\r\n      if (b == 10 && alphabetHasNormalDecimalDigits) {\r\n        x = new BigNumber(v);\r\n        return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n      }\r\n\r\n      str = String(v);\r\n\r\n      if (isNum = typeof v == 'number') {\r\n\r\n        // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n        if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n        x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n        // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n        if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n          throw Error\r\n           (tooManyDigits + v);\r\n        }\r\n      } else {\r\n        x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n      }\r\n\r\n      alphabet = ALPHABET.slice(0, b);\r\n      e = i = 0;\r\n\r\n      // Check that str is a valid base b number.\r\n      // Don't use RegExp, so alphabet can contain special characters.\r\n      for (len = str.length; i < len; i++) {\r\n        if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n          if (c == '.') {\r\n\r\n            // If '.' is not the first character and it has not be found before.\r\n            if (i > e) {\r\n              e = len;\r\n              continue;\r\n            }\r\n          } else if (!caseChanged) {\r\n\r\n            // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n            if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n                str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n              caseChanged = true;\r\n              i = -1;\r\n              e = 0;\r\n              continue;\r\n            }\r\n          }\r\n\r\n          return parseNumeric(x, String(v), isNum, b);\r\n        }\r\n      }\r\n\r\n      // Prevent later check for length on converted number.\r\n      isNum = false;\r\n      str = convertBase(str, b, 10, x.s);\r\n\r\n      // Decimal point?\r\n      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n      else e = str.length;\r\n    }\r\n\r\n    // Determine leading zeros.\r\n    for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n    // Determine trailing zeros.\r\n    for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n    if (str = str.slice(i, ++len)) {\r\n      len -= i;\r\n\r\n      // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n      if (isNum && BigNumber.DEBUG &&\r\n        len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n          throw Error\r\n           (tooManyDigits + (x.s * v));\r\n      }\r\n\r\n       // Overflow?\r\n      if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n        // Infinity.\r\n        x.c = x.e = null;\r\n\r\n      // Underflow?\r\n      } else if (e < MIN_EXP) {\r\n\r\n        // Zero.\r\n        x.c = [x.e = 0];\r\n      } else {\r\n        x.e = e;\r\n        x.c = [];\r\n\r\n        // Transform base\r\n\r\n        // e is the base 10 exponent.\r\n        // i is where to slice str to get the first element of the coefficient array.\r\n        i = (e + 1) % LOG_BASE;\r\n        if (e < 0) i += LOG_BASE;  // i < 1\r\n\r\n        if (i < len) {\r\n          if (i) x.c.push(+str.slice(0, i));\r\n\r\n          for (len -= LOG_BASE; i < len;) {\r\n            x.c.push(+str.slice(i, i += LOG_BASE));\r\n          }\r\n\r\n          i = LOG_BASE - (str = str.slice(i)).length;\r\n        } else {\r\n          i -= len;\r\n        }\r\n\r\n        for (; i--; str += '0');\r\n        x.c.push(+str);\r\n      }\r\n    } else {\r\n\r\n      // Zero.\r\n      x.c = [x.e = 0];\r\n    }\r\n  }\r\n\r\n\r\n  // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n  BigNumber.clone = clone;\r\n\r\n  BigNumber.ROUND_UP = 0;\r\n  BigNumber.ROUND_DOWN = 1;\r\n  BigNumber.ROUND_CEIL = 2;\r\n  BigNumber.ROUND_FLOOR = 3;\r\n  BigNumber.ROUND_HALF_UP = 4;\r\n  BigNumber.ROUND_HALF_DOWN = 5;\r\n  BigNumber.ROUND_HALF_EVEN = 6;\r\n  BigNumber.ROUND_HALF_CEIL = 7;\r\n  BigNumber.ROUND_HALF_FLOOR = 8;\r\n  BigNumber.EUCLID = 9;\r\n\r\n\r\n  /*\r\n   * Configure infrequently-changing library-wide settings.\r\n   *\r\n   * Accept an object with the following optional properties (if the value of a property is\r\n   * a number, it must be an integer within the inclusive range stated):\r\n   *\r\n   *   DECIMAL_PLACES   {number}           0 to MAX\r\n   *   ROUNDING_MODE    {number}           0 to 8\r\n   *   EXPONENTIAL_AT   {number|number[]}  -MAX to MAX  or  [-MAX to 0, 0 to MAX]\r\n   *   RANGE            {number|number[]}  -MAX to MAX (not zero)  or  [-MAX to -1, 1 to MAX]\r\n   *   CRYPTO           {boolean}          true or false\r\n   *   MODULO_MODE      {number}           0 to 9\r\n   *   POW_PRECISION       {number}           0 to MAX\r\n   *   ALPHABET         {string}           A string of two or more unique characters which does\r\n   *                                       not contain '.'.\r\n   *   FORMAT           {object}           An object with some of the following properties:\r\n   *     prefix                 {string}\r\n   *     groupSize              {number}\r\n   *     secondaryGroupSize     {number}\r\n   *     groupSeparator         {string}\r\n   *     decimalSeparator       {string}\r\n   *     fractionGroupSize      {number}\r\n   *     fractionGroupSeparator {string}\r\n   *     suffix                 {string}\r\n   *\r\n   * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n   *\r\n   * E.g.\r\n   * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n   *\r\n   * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n   *\r\n   * Return an object with the properties current values.\r\n   */\r\n  BigNumber.config = BigNumber.set = function (obj) {\r\n    var p, v;\r\n\r\n    if (obj != null) {\r\n\r\n      if (typeof obj == 'object') {\r\n\r\n        // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n        // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, MAX, p);\r\n          DECIMAL_PLACES = v;\r\n        }\r\n\r\n        // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n        // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, 8, p);\r\n          ROUNDING_MODE = v;\r\n        }\r\n\r\n        // EXPONENTIAL_AT {number|number[]}\r\n        // Integer, -MAX to MAX inclusive or\r\n        // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n        // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n          v = obj[p];\r\n          if (v && v.pop) {\r\n            intCheck(v[0], -MAX, 0, p);\r\n            intCheck(v[1], 0, MAX, p);\r\n            TO_EXP_NEG = v[0];\r\n            TO_EXP_POS = v[1];\r\n          } else {\r\n            intCheck(v, -MAX, MAX, p);\r\n            TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n          }\r\n        }\r\n\r\n        // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n        // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n        // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n        if (obj.hasOwnProperty(p = 'RANGE')) {\r\n          v = obj[p];\r\n          if (v && v.pop) {\r\n            intCheck(v[0], -MAX, -1, p);\r\n            intCheck(v[1], 1, MAX, p);\r\n            MIN_EXP = v[0];\r\n            MAX_EXP = v[1];\r\n          } else {\r\n            intCheck(v, -MAX, MAX, p);\r\n            if (v) {\r\n              MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n            } else {\r\n              throw Error\r\n               (bignumberError + p + ' cannot be zero: ' + v);\r\n            }\r\n          }\r\n        }\r\n\r\n        // CRYPTO {boolean} true or false.\r\n        // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n        // '[BigNumber Error] crypto unavailable'\r\n        if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n          v = obj[p];\r\n          if (v === !!v) {\r\n            if (v) {\r\n              if (typeof crypto != 'undefined' && crypto &&\r\n               (crypto.getRandomValues || crypto.randomBytes)) {\r\n                CRYPTO = v;\r\n              } else {\r\n                CRYPTO = !v;\r\n                throw Error\r\n                 (bignumberError + 'crypto unavailable');\r\n              }\r\n            } else {\r\n              CRYPTO = v;\r\n            }\r\n          } else {\r\n            throw Error\r\n             (bignumberError + p + ' not true or false: ' + v);\r\n          }\r\n        }\r\n\r\n        // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n        // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, 9, p);\r\n          MODULO_MODE = v;\r\n        }\r\n\r\n        // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n        // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, MAX, p);\r\n          POW_PRECISION = v;\r\n        }\r\n\r\n        // FORMAT {object}\r\n        // '[BigNumber Error] FORMAT not an object: {v}'\r\n        if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n          v = obj[p];\r\n          if (typeof v == 'object') FORMAT = v;\r\n          else throw Error\r\n           (bignumberError + p + ' not an object: ' + v);\r\n        }\r\n\r\n        // ALPHABET {string}\r\n        // '[BigNumber Error] ALPHABET invalid: {v}'\r\n        if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n          v = obj[p];\r\n\r\n          // Disallow if less than two characters,\r\n          // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n          if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n            alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';\r\n            ALPHABET = v;\r\n          } else {\r\n            throw Error\r\n             (bignumberError + p + ' invalid: ' + v);\r\n          }\r\n        }\r\n\r\n      } else {\r\n\r\n        // '[BigNumber Error] Object expected: {v}'\r\n        throw Error\r\n         (bignumberError + 'Object expected: ' + obj);\r\n      }\r\n    }\r\n\r\n    return {\r\n      DECIMAL_PLACES: DECIMAL_PLACES,\r\n      ROUNDING_MODE: ROUNDING_MODE,\r\n      EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n      RANGE: [MIN_EXP, MAX_EXP],\r\n      CRYPTO: CRYPTO,\r\n      MODULO_MODE: MODULO_MODE,\r\n      POW_PRECISION: POW_PRECISION,\r\n      FORMAT: FORMAT,\r\n      ALPHABET: ALPHABET\r\n    };\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if v is a BigNumber instance, otherwise return false.\r\n   *\r\n   * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n   *\r\n   * v {any}\r\n   *\r\n   * '[BigNumber Error] Invalid BigNumber: {v}'\r\n   */\r\n  BigNumber.isBigNumber = function (v) {\r\n    if (!v || v._isBigNumber !== true) return false;\r\n    if (!BigNumber.DEBUG) return true;\r\n\r\n    var i, n,\r\n      c = v.c,\r\n      e = v.e,\r\n      s = v.s;\r\n\r\n    out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n      if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n        // If the first element is zero, the BigNumber value must be zero.\r\n        if (c[0] === 0) {\r\n          if (e === 0 && c.length === 1) return true;\r\n          break out;\r\n        }\r\n\r\n        // Calculate number of digits that c[0] should have, based on the exponent.\r\n        i = (e + 1) % LOG_BASE;\r\n        if (i < 1) i += LOG_BASE;\r\n\r\n        // Calculate number of digits of c[0].\r\n        //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n        if (String(c[0]).length == i) {\r\n\r\n          for (i = 0; i < c.length; i++) {\r\n            n = c[i];\r\n            if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n          }\r\n\r\n          // Last element cannot be zero, unless it is the only element.\r\n          if (n !== 0) return true;\r\n        }\r\n      }\r\n\r\n    // Infinity/NaN\r\n    } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n      return true;\r\n    }\r\n\r\n    throw Error\r\n      (bignumberError + 'Invalid BigNumber: ' + v);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the maximum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.maximum = BigNumber.max = function () {\r\n    return maxOrMin(arguments, -1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the minimum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.minimum = BigNumber.min = function () {\r\n    return maxOrMin(arguments, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n   * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n   * zeros are produced).\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n   * '[BigNumber Error] crypto unavailable'\r\n   */\r\n  BigNumber.random = (function () {\r\n    var pow2_53 = 0x20000000000000;\r\n\r\n    // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n    // Check if Math.random() produces more than 32 bits of randomness.\r\n    // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n    // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n    var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n     ? function () { return mathfloor(Math.random() * pow2_53); }\r\n     : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n       (Math.random() * 0x800000 | 0); };\r\n\r\n    return function (dp) {\r\n      var a, b, e, k, v,\r\n        i = 0,\r\n        c = [],\r\n        rand = new BigNumber(ONE);\r\n\r\n      if (dp == null) dp = DECIMAL_PLACES;\r\n      else intCheck(dp, 0, MAX);\r\n\r\n      k = mathceil(dp / LOG_BASE);\r\n\r\n      if (CRYPTO) {\r\n\r\n        // Browsers supporting crypto.getRandomValues.\r\n        if (crypto.getRandomValues) {\r\n\r\n          a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n          for (; i < k;) {\r\n\r\n            // 53 bits:\r\n            // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n            // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n            // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n            //                                     11111 11111111 11111111\r\n            // 0x20000 is 2^21.\r\n            v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n            // Rejection sampling:\r\n            // 0 <= v < 9007199254740992\r\n            // Probability that v >= 9e15, is\r\n            // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n            if (v >= 9e15) {\r\n              b = crypto.getRandomValues(new Uint32Array(2));\r\n              a[i] = b[0];\r\n              a[i + 1] = b[1];\r\n            } else {\r\n\r\n              // 0 <= v <= 8999999999999999\r\n              // 0 <= (v % 1e14) <= 99999999999999\r\n              c.push(v % 1e14);\r\n              i += 2;\r\n            }\r\n          }\r\n          i = k / 2;\r\n\r\n        // Node.js supporting crypto.randomBytes.\r\n        } else if (crypto.randomBytes) {\r\n\r\n          // buffer\r\n          a = crypto.randomBytes(k *= 7);\r\n\r\n          for (; i < k;) {\r\n\r\n            // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n            // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n            // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n            // 0 <= v < 9007199254740992\r\n            v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n               (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n               (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n            if (v >= 9e15) {\r\n              crypto.randomBytes(7).copy(a, i);\r\n            } else {\r\n\r\n              // 0 <= (v % 1e14) <= 99999999999999\r\n              c.push(v % 1e14);\r\n              i += 7;\r\n            }\r\n          }\r\n          i = k / 7;\r\n        } else {\r\n          CRYPTO = false;\r\n          throw Error\r\n           (bignumberError + 'crypto unavailable');\r\n        }\r\n      }\r\n\r\n      // Use Math.random.\r\n      if (!CRYPTO) {\r\n\r\n        for (; i < k;) {\r\n          v = random53bitInt();\r\n          if (v < 9e15) c[i++] = v % 1e14;\r\n        }\r\n      }\r\n\r\n      k = c[--i];\r\n      dp %= LOG_BASE;\r\n\r\n      // Convert trailing digits to zeros according to dp.\r\n      if (k && dp) {\r\n        v = POWS_TEN[LOG_BASE - dp];\r\n        c[i] = mathfloor(k / v) * v;\r\n      }\r\n\r\n      // Remove trailing elements which are zero.\r\n      for (; c[i] === 0; c.pop(), i--);\r\n\r\n      // Zero?\r\n      if (i < 0) {\r\n        c = [e = 0];\r\n      } else {\r\n\r\n        // Remove leading elements which are zero and adjust exponent accordingly.\r\n        for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n        // Count the digits of the first element of c to determine leading zeros, and...\r\n        for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n        // adjust the exponent accordingly.\r\n        if (i < LOG_BASE) e -= LOG_BASE - i;\r\n      }\r\n\r\n      rand.e = e;\r\n      rand.c = c;\r\n      return rand;\r\n    };\r\n  })();\r\n\r\n\r\n   /*\r\n   * Return a BigNumber whose value is the sum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.sum = function () {\r\n    var i = 1,\r\n      args = arguments,\r\n      sum = new BigNumber(args[0]);\r\n    for (; i < args.length;) sum = sum.plus(args[i++]);\r\n    return sum;\r\n  };\r\n\r\n\r\n  // PRIVATE FUNCTIONS\r\n\r\n\r\n  // Called by BigNumber and BigNumber.prototype.toString.\r\n  convertBase = (function () {\r\n    var decimal = '0123456789';\r\n\r\n    /*\r\n     * Convert string of baseIn to an array of numbers of baseOut.\r\n     * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n     * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n     */\r\n    function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n      var j,\r\n        arr = [0],\r\n        arrL,\r\n        i = 0,\r\n        len = str.length;\r\n\r\n      for (; i < len;) {\r\n        for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n        arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n        for (j = 0; j < arr.length; j++) {\r\n\r\n          if (arr[j] > baseOut - 1) {\r\n            if (arr[j + 1] == null) arr[j + 1] = 0;\r\n            arr[j + 1] += arr[j] / baseOut | 0;\r\n            arr[j] %= baseOut;\r\n          }\r\n        }\r\n      }\r\n\r\n      return arr.reverse();\r\n    }\r\n\r\n    // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n    // If the caller is toString, we are converting from base 10 to baseOut.\r\n    // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n    return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n      var alphabet, d, e, k, r, x, xc, y,\r\n        i = str.indexOf('.'),\r\n        dp = DECIMAL_PLACES,\r\n        rm = ROUNDING_MODE;\r\n\r\n      // Non-integer.\r\n      if (i >= 0) {\r\n        k = POW_PRECISION;\r\n\r\n        // Unlimited precision.\r\n        POW_PRECISION = 0;\r\n        str = str.replace('.', '');\r\n        y = new BigNumber(baseIn);\r\n        x = y.pow(str.length - i);\r\n        POW_PRECISION = k;\r\n\r\n        // Convert str as if an integer, then restore the fraction part by dividing the\r\n        // result by its base raised to a power.\r\n\r\n        y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n         10, baseOut, decimal);\r\n        y.e = y.c.length;\r\n      }\r\n\r\n      // Convert the number as integer.\r\n\r\n      xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n       ? (alphabet = ALPHABET, decimal)\r\n       : (alphabet = decimal, ALPHABET));\r\n\r\n      // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n      e = k = xc.length;\r\n\r\n      // Remove trailing zeros.\r\n      for (; xc[--k] == 0; xc.pop());\r\n\r\n      // Zero?\r\n      if (!xc[0]) return alphabet.charAt(0);\r\n\r\n      // Does str represent an integer? If so, no need for the division.\r\n      if (i < 0) {\r\n        --e;\r\n      } else {\r\n        x.c = xc;\r\n        x.e = e;\r\n\r\n        // The sign is needed for correct rounding.\r\n        x.s = sign;\r\n        x = div(x, y, dp, rm, baseOut);\r\n        xc = x.c;\r\n        r = x.r;\r\n        e = x.e;\r\n      }\r\n\r\n      // xc now represents str converted to baseOut.\r\n\r\n      // The index of the rounding digit.\r\n      d = e + dp + 1;\r\n\r\n      // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n      i = xc[d];\r\n\r\n      // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n      k = baseOut / 2;\r\n      r = r || d < 0 || xc[d + 1] != null;\r\n\r\n      r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n            : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n             rm == (x.s < 0 ? 8 : 7));\r\n\r\n      // If the index of the rounding digit is not greater than zero, or xc represents\r\n      // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n      // such as 0.00001.\r\n      if (d < 1 || !xc[0]) {\r\n\r\n        // 1^-dp or 0\r\n        str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n      } else {\r\n\r\n        // Truncate xc to the required number of decimal places.\r\n        xc.length = d;\r\n\r\n        // Round up?\r\n        if (r) {\r\n\r\n          // Rounding up may mean the previous digit has to be rounded up and so on.\r\n          for (--baseOut; ++xc[--d] > baseOut;) {\r\n            xc[d] = 0;\r\n\r\n            if (!d) {\r\n              ++e;\r\n              xc = [1].concat(xc);\r\n            }\r\n          }\r\n        }\r\n\r\n        // Determine trailing zeros.\r\n        for (k = xc.length; !xc[--k];);\r\n\r\n        // E.g. [4, 11, 15] becomes 4bf.\r\n        for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n        // Add leading zeros, decimal point and trailing zeros as required.\r\n        str = toFixedPoint(str, e, alphabet.charAt(0));\r\n      }\r\n\r\n      // The caller will add the sign.\r\n      return str;\r\n    };\r\n  })();\r\n\r\n\r\n  // Perform division in the specified base. Called by div and convertBase.\r\n  div = (function () {\r\n\r\n    // Assume non-zero x and k.\r\n    function multiply(x, k, base) {\r\n      var m, temp, xlo, xhi,\r\n        carry = 0,\r\n        i = x.length,\r\n        klo = k % SQRT_BASE,\r\n        khi = k / SQRT_BASE | 0;\r\n\r\n      for (x = x.slice(); i--;) {\r\n        xlo = x[i] % SQRT_BASE;\r\n        xhi = x[i] / SQRT_BASE | 0;\r\n        m = khi * xlo + xhi * klo;\r\n        temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n        carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n        x[i] = temp % base;\r\n      }\r\n\r\n      if (carry) x = [carry].concat(x);\r\n\r\n      return x;\r\n    }\r\n\r\n    function compare(a, b, aL, bL) {\r\n      var i, cmp;\r\n\r\n      if (aL != bL) {\r\n        cmp = aL > bL ? 1 : -1;\r\n      } else {\r\n\r\n        for (i = cmp = 0; i < aL; i++) {\r\n\r\n          if (a[i] != b[i]) {\r\n            cmp = a[i] > b[i] ? 1 : -1;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      return cmp;\r\n    }\r\n\r\n    function subtract(a, b, aL, base) {\r\n      var i = 0;\r\n\r\n      // Subtract b from a.\r\n      for (; aL--;) {\r\n        a[aL] -= i;\r\n        i = a[aL] < b[aL] ? 1 : 0;\r\n        a[aL] = i * base + a[aL] - b[aL];\r\n      }\r\n\r\n      // Remove leading zeros.\r\n      for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n    }\r\n\r\n    // x: dividend, y: divisor.\r\n    return function (x, y, dp, rm, base) {\r\n      var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n        yL, yz,\r\n        s = x.s == y.s ? 1 : -1,\r\n        xc = x.c,\r\n        yc = y.c;\r\n\r\n      // Either NaN, Infinity or 0?\r\n      if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n        return new BigNumber(\r\n\r\n         // Return NaN if either NaN, or both Infinity or 0.\r\n         !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n          // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n          xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n       );\r\n      }\r\n\r\n      q = new BigNumber(s);\r\n      qc = q.c = [];\r\n      e = x.e - y.e;\r\n      s = dp + e + 1;\r\n\r\n      if (!base) {\r\n        base = BASE;\r\n        e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n        s = s / LOG_BASE | 0;\r\n      }\r\n\r\n      // Result exponent may be one less then the current value of e.\r\n      // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n      for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n      if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n      if (s < 0) {\r\n        qc.push(1);\r\n        more = true;\r\n      } else {\r\n        xL = xc.length;\r\n        yL = yc.length;\r\n        i = 0;\r\n        s += 2;\r\n\r\n        // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n        n = mathfloor(base / (yc[0] + 1));\r\n\r\n        // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n        // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n        if (n > 1) {\r\n          yc = multiply(yc, n, base);\r\n          xc = multiply(xc, n, base);\r\n          yL = yc.length;\r\n          xL = xc.length;\r\n        }\r\n\r\n        xi = yL;\r\n        rem = xc.slice(0, yL);\r\n        remL = rem.length;\r\n\r\n        // Add zeros to make remainder as long as divisor.\r\n        for (; remL < yL; rem[remL++] = 0);\r\n        yz = yc.slice();\r\n        yz = [0].concat(yz);\r\n        yc0 = yc[0];\r\n        if (yc[1] >= base / 2) yc0++;\r\n        // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n        // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n        do {\r\n          n = 0;\r\n\r\n          // Compare divisor and remainder.\r\n          cmp = compare(yc, rem, yL, remL);\r\n\r\n          // If divisor < remainder.\r\n          if (cmp < 0) {\r\n\r\n            // Calculate trial digit, n.\r\n\r\n            rem0 = rem[0];\r\n            if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n            // n is how many times the divisor goes into the current remainder.\r\n            n = mathfloor(rem0 / yc0);\r\n\r\n            //  Algorithm:\r\n            //  product = divisor multiplied by trial digit (n).\r\n            //  Compare product and remainder.\r\n            //  If product is greater than remainder:\r\n            //    Subtract divisor from product, decrement trial digit.\r\n            //  Subtract product from remainder.\r\n            //  If product was less than remainder at the last compare:\r\n            //    Compare new remainder and divisor.\r\n            //    If remainder is greater than divisor:\r\n            //      Subtract divisor from remainder, increment trial digit.\r\n\r\n            if (n > 1) {\r\n\r\n              // n may be > base only when base is 3.\r\n              if (n >= base) n = base - 1;\r\n\r\n              // product = divisor * trial digit.\r\n              prod = multiply(yc, n, base);\r\n              prodL = prod.length;\r\n              remL = rem.length;\r\n\r\n              // Compare product and remainder.\r\n              // If product > remainder then trial digit n too high.\r\n              // n is 1 too high about 5% of the time, and is not known to have\r\n              // ever been more than 1 too high.\r\n              while (compare(prod, rem, prodL, remL) == 1) {\r\n                n--;\r\n\r\n                // Subtract divisor from product.\r\n                subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n                prodL = prod.length;\r\n                cmp = 1;\r\n              }\r\n            } else {\r\n\r\n              // n is 0 or 1, cmp is -1.\r\n              // If n is 0, there is no need to compare yc and rem again below,\r\n              // so change cmp to 1 to avoid it.\r\n              // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n              if (n == 0) {\r\n\r\n                // divisor < remainder, so n must be at least 1.\r\n                cmp = n = 1;\r\n              }\r\n\r\n              // product = divisor\r\n              prod = yc.slice();\r\n              prodL = prod.length;\r\n            }\r\n\r\n            if (prodL < remL) prod = [0].concat(prod);\r\n\r\n            // Subtract product from remainder.\r\n            subtract(rem, prod, remL, base);\r\n            remL = rem.length;\r\n\r\n             // If product was < remainder.\r\n            if (cmp == -1) {\r\n\r\n              // Compare divisor and new remainder.\r\n              // If divisor < new remainder, subtract divisor from remainder.\r\n              // Trial digit n too low.\r\n              // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n              while (compare(yc, rem, yL, remL) < 1) {\r\n                n++;\r\n\r\n                // Subtract divisor from remainder.\r\n                subtract(rem, yL < remL ? yz : yc, remL, base);\r\n                remL = rem.length;\r\n              }\r\n            }\r\n          } else if (cmp === 0) {\r\n            n++;\r\n            rem = [0];\r\n          } // else cmp === 1 and n will be 0\r\n\r\n          // Add the next digit, n, to the result array.\r\n          qc[i++] = n;\r\n\r\n          // Update the remainder.\r\n          if (rem[0]) {\r\n            rem[remL++] = xc[xi] || 0;\r\n          } else {\r\n            rem = [xc[xi]];\r\n            remL = 1;\r\n          }\r\n        } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n        more = rem[0] != null;\r\n\r\n        // Leading zero?\r\n        if (!qc[0]) qc.splice(0, 1);\r\n      }\r\n\r\n      if (base == BASE) {\r\n\r\n        // To calculate q.e, first get the number of digits of qc[0].\r\n        for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n        round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n      // Caller is convertBase.\r\n      } else {\r\n        q.e = e;\r\n        q.r = +more;\r\n      }\r\n\r\n      return q;\r\n    };\r\n  })();\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n   * notation rounded to the specified decimal places or significant digits.\r\n   *\r\n   * n: a BigNumber.\r\n   * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n   * rm: the rounding mode.\r\n   * id: 1 (toExponential) or 2 (toPrecision).\r\n   */\r\n  function format(n, i, rm, id) {\r\n    var c0, e, ne, len, str;\r\n\r\n    if (rm == null) rm = ROUNDING_MODE;\r\n    else intCheck(rm, 0, 8);\r\n\r\n    if (!n.c) return n.toString();\r\n\r\n    c0 = n.c[0];\r\n    ne = n.e;\r\n\r\n    if (i == null) {\r\n      str = coeffToString(n.c);\r\n      str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n       ? toExponential(str, ne)\r\n       : toFixedPoint(str, ne, '0');\r\n    } else {\r\n      n = round(new BigNumber(n), i, rm);\r\n\r\n      // n.e may have changed if the value was rounded up.\r\n      e = n.e;\r\n\r\n      str = coeffToString(n.c);\r\n      len = str.length;\r\n\r\n      // toPrecision returns exponential notation if the number of significant digits\r\n      // specified is less than the number of digits necessary to represent the integer\r\n      // part of the value in fixed-point notation.\r\n\r\n      // Exponential notation.\r\n      if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n        // Append zeros?\r\n        for (; len < i; str += '0', len++);\r\n        str = toExponential(str, e);\r\n\r\n      // Fixed-point notation.\r\n      } else {\r\n        i -= ne + (id === 2 && e > ne);\r\n        str = toFixedPoint(str, e, '0');\r\n\r\n        // Append zeros?\r\n        if (e + 1 > len) {\r\n          if (--i > 0) for (str += '.'; i--; str += '0');\r\n        } else {\r\n          i += e - len;\r\n          if (i > 0) {\r\n            if (e + 1 == len) str += '.';\r\n            for (; i--; str += '0');\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return n.s < 0 && c0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // Handle BigNumber.max and BigNumber.min.\r\n  // If any number is NaN, return NaN.\r\n  function maxOrMin(args, n) {\r\n    var k, y,\r\n      i = 1,\r\n      x = new BigNumber(args[0]);\r\n\r\n    for (; i < args.length; i++) {\r\n      y = new BigNumber(args[i]);\r\n      if (!y.s || (k = compare(x, y)) === n || k === 0 && x.s === n) {\r\n        x = y;\r\n      }\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n   * Called by minus, plus and times.\r\n   */\r\n  function normalise(n, c, e) {\r\n    var i = 1,\r\n      j = c.length;\r\n\r\n     // Remove trailing zeros.\r\n    for (; !c[--j]; c.pop());\r\n\r\n    // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n    for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n    // Overflow?\r\n    if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n      // Infinity.\r\n      n.c = n.e = null;\r\n\r\n    // Underflow?\r\n    } else if (e < MIN_EXP) {\r\n\r\n      // Zero.\r\n      n.c = [n.e = 0];\r\n    } else {\r\n      n.e = e;\r\n      n.c = c;\r\n    }\r\n\r\n    return n;\r\n  }\r\n\r\n\r\n  // Handle values that fail the validity test in BigNumber.\r\n  parseNumeric = (function () {\r\n    var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n      dotAfter = /^([^.]+)\\.$/,\r\n      dotBefore = /^\\.([^.]+)$/,\r\n      isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n      whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n    return function (x, str, isNum, b) {\r\n      var base,\r\n        s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n      // No exception on ±Infinity or NaN.\r\n      if (isInfinityOrNaN.test(s)) {\r\n        x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n      } else {\r\n        if (!isNum) {\r\n\r\n          // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n          s = s.replace(basePrefix, function (m, p1, p2) {\r\n            base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n            return !b || b == base ? p1 : m;\r\n          });\r\n\r\n          if (b) {\r\n            base = b;\r\n\r\n            // E.g. '1.' to '1', '.1' to '0.1'\r\n            s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n          }\r\n\r\n          if (str != s) return new BigNumber(s, base);\r\n        }\r\n\r\n        // '[BigNumber Error] Not a number: {n}'\r\n        // '[BigNumber Error] Not a base {b} number: {n}'\r\n        if (BigNumber.DEBUG) {\r\n          throw Error\r\n            (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n        }\r\n\r\n        // NaN\r\n        x.s = null;\r\n      }\r\n\r\n      x.c = x.e = null;\r\n    }\r\n  })();\r\n\r\n\r\n  /*\r\n   * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n   * If r is truthy, it is known that there are more digits after the rounding digit.\r\n   */\r\n  function round(x, sd, rm, r) {\r\n    var d, i, j, k, n, ni, rd,\r\n      xc = x.c,\r\n      pows10 = POWS_TEN;\r\n\r\n    // if x is not Infinity or NaN...\r\n    if (xc) {\r\n\r\n      // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n      // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n      // ni is the index of n within x.c.\r\n      // d is the number of digits of n.\r\n      // i is the index of rd within n including leading zeros.\r\n      // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n      out: {\r\n\r\n        // Get the number of digits of the first element of xc.\r\n        for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n        i = sd - d;\r\n\r\n        // If the rounding digit is in the first element of xc...\r\n        if (i < 0) {\r\n          i += LOG_BASE;\r\n          j = sd;\r\n          n = xc[ni = 0];\r\n\r\n          // Get the rounding digit at index j of n.\r\n          rd = mathfloor(n / pows10[d - j - 1] % 10);\r\n        } else {\r\n          ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n          if (ni >= xc.length) {\r\n\r\n            if (r) {\r\n\r\n              // Needed by sqrt.\r\n              for (; xc.length <= ni; xc.push(0));\r\n              n = rd = 0;\r\n              d = 1;\r\n              i %= LOG_BASE;\r\n              j = i - LOG_BASE + 1;\r\n            } else {\r\n              break out;\r\n            }\r\n          } else {\r\n            n = k = xc[ni];\r\n\r\n            // Get the number of digits of n.\r\n            for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n            // Get the index of rd within n.\r\n            i %= LOG_BASE;\r\n\r\n            // Get the index of rd within n, adjusted for leading zeros.\r\n            // The number of leading zeros of n is given by LOG_BASE - d.\r\n            j = i - LOG_BASE + d;\r\n\r\n            // Get the rounding digit at index j of n.\r\n            rd = j < 0 ? 0 : mathfloor(n / pows10[d - j - 1] % 10);\r\n          }\r\n        }\r\n\r\n        r = r || sd < 0 ||\r\n\r\n        // Are there any non-zero digits after the rounding digit?\r\n        // The expression  n % pows10[d - j - 1]  returns all digits of n to the right\r\n        // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n         xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n        r = rm < 4\r\n         ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n         : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n          // Check whether the digit to the left of the rounding digit is odd.\r\n          ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n           rm == (x.s < 0 ? 8 : 7));\r\n\r\n        if (sd < 1 || !xc[0]) {\r\n          xc.length = 0;\r\n\r\n          if (r) {\r\n\r\n            // Convert sd to decimal places.\r\n            sd -= x.e + 1;\r\n\r\n            // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n            xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n            x.e = -sd || 0;\r\n          } else {\r\n\r\n            // Zero.\r\n            xc[0] = x.e = 0;\r\n          }\r\n\r\n          return x;\r\n        }\r\n\r\n        // Remove excess digits.\r\n        if (i == 0) {\r\n          xc.length = ni;\r\n          k = 1;\r\n          ni--;\r\n        } else {\r\n          xc.length = ni + 1;\r\n          k = pows10[LOG_BASE - i];\r\n\r\n          // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n          // j > 0 means i > number of leading zeros of n.\r\n          xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n        }\r\n\r\n        // Round up?\r\n        if (r) {\r\n\r\n          for (; ;) {\r\n\r\n            // If the digit to be rounded up is in the first element of xc...\r\n            if (ni == 0) {\r\n\r\n              // i will be the length of xc[0] before k is added.\r\n              for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n              j = xc[0] += k;\r\n              for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n              // if i != k the length has increased.\r\n              if (i != k) {\r\n                x.e++;\r\n                if (xc[0] == BASE) xc[0] = 1;\r\n              }\r\n\r\n              break;\r\n            } else {\r\n              xc[ni] += k;\r\n              if (xc[ni] != BASE) break;\r\n              xc[ni--] = 0;\r\n              k = 1;\r\n            }\r\n          }\r\n        }\r\n\r\n        // Remove trailing zeros.\r\n        for (i = xc.length; xc[--i] === 0; xc.pop());\r\n      }\r\n\r\n      // Overflow? Infinity.\r\n      if (x.e > MAX_EXP) {\r\n        x.c = x.e = null;\r\n\r\n      // Underflow? Zero.\r\n      } else if (x.e < MIN_EXP) {\r\n        x.c = [x.e = 0];\r\n      }\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  function valueOf(n) {\r\n    var str,\r\n      e = n.e;\r\n\r\n    if (e === null) return n.toString();\r\n\r\n    str = coeffToString(n.c);\r\n\r\n    str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n      ? toExponential(str, e)\r\n      : toFixedPoint(str, e, '0');\r\n\r\n    return n.s < 0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n   */\r\n  P.absoluteValue = P.abs = function () {\r\n    var x = new BigNumber(this);\r\n    if (x.s < 0) x.s = 1;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return\r\n   *   1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n   *   -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n   *   0 if they have the same value,\r\n   *   or null if the value of either is NaN.\r\n   */\r\n  P.comparedTo = function (y, b) {\r\n    return compare(this, new BigNumber(y, b));\r\n  };\r\n\r\n\r\n  /*\r\n   * If dp is undefined or null or true or false, return the number of decimal places of the\r\n   * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n   *\r\n   * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n   * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n   * ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.decimalPlaces = P.dp = function (dp, rm) {\r\n    var c, n, v,\r\n      x = this;\r\n\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n\r\n      return round(new BigNumber(x), dp + x.e + 1, rm);\r\n    }\r\n\r\n    if (!(c = x.c)) return null;\r\n    n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n    // Subtract the number of trailing zeros of the last number.\r\n    if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n    if (n < 0) n = 0;\r\n\r\n    return n;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n / 0 = I\r\n   *  n / N = N\r\n   *  n / I = 0\r\n   *  0 / n = 0\r\n   *  0 / 0 = N\r\n   *  0 / N = N\r\n   *  0 / I = 0\r\n   *  N / n = N\r\n   *  N / 0 = N\r\n   *  N / N = N\r\n   *  N / I = N\r\n   *  I / n = I\r\n   *  I / 0 = I\r\n   *  I / N = N\r\n   *  I / I = N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n   * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   */\r\n  P.dividedBy = P.div = function (y, b) {\r\n    return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n   * BigNumber by the value of BigNumber(y, b).\r\n   */\r\n  P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n    return div(this, new BigNumber(y, b), 0, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n   *\r\n   * If m is present, return the result modulo m.\r\n   * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n   *\r\n   * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n   * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n   *\r\n   * n {number|string|BigNumber} The exponent. An integer.\r\n   * [m] {number|string|BigNumber} The modulus.\r\n   *\r\n   * '[BigNumber Error] Exponent not an integer: {n}'\r\n   */\r\n  P.exponentiatedBy = P.pow = function (n, m) {\r\n    var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n      x = this;\r\n\r\n    n = new BigNumber(n);\r\n\r\n    // Allow NaN and ±Infinity, but not other non-integers.\r\n    if (n.c && !n.isInteger()) {\r\n      throw Error\r\n        (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n    }\r\n\r\n    if (m != null) m = new BigNumber(m);\r\n\r\n    // Exponent of MAX_SAFE_INTEGER is 15.\r\n    nIsBig = n.e > 14;\r\n\r\n    // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n    if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n      // The sign of the result of pow when x is negative depends on the evenness of n.\r\n      // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n      y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n)));\r\n      return m ? y.mod(m) : y;\r\n    }\r\n\r\n    nIsNeg = n.s < 0;\r\n\r\n    if (m) {\r\n\r\n      // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n      if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n      isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n      if (isModExp) x = x.mod(m);\r\n\r\n    // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n    // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n    } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n      // [1, 240000000]\r\n      ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n      // [80000000000000]  [99999750000000]\r\n      : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n      // If x is negative and n is odd, k = -0, else k = 0.\r\n      k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n      // If x >= 1, k = ±Infinity.\r\n      if (x.e > -1) k = 1 / k;\r\n\r\n      // If n is negative return ±0, else return ±Infinity.\r\n      return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n    } else if (POW_PRECISION) {\r\n\r\n      // Truncating each coefficient array to a length of k after each multiplication\r\n      // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n      // i.e. there will be a minimum of 28 guard digits retained.\r\n      k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n    }\r\n\r\n    if (nIsBig) {\r\n      half = new BigNumber(0.5);\r\n      if (nIsNeg) n.s = 1;\r\n      nIsOdd = isOdd(n);\r\n    } else {\r\n      i = Math.abs(+valueOf(n));\r\n      nIsOdd = i % 2;\r\n    }\r\n\r\n    y = new BigNumber(ONE);\r\n\r\n    // Performs 54 loop iterations for n of 9007199254740991.\r\n    for (; ;) {\r\n\r\n      if (nIsOdd) {\r\n        y = y.times(x);\r\n        if (!y.c) break;\r\n\r\n        if (k) {\r\n          if (y.c.length > k) y.c.length = k;\r\n        } else if (isModExp) {\r\n          y = y.mod(m);    //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n        }\r\n      }\r\n\r\n      if (i) {\r\n        i = mathfloor(i / 2);\r\n        if (i === 0) break;\r\n        nIsOdd = i % 2;\r\n      } else {\r\n        n = n.times(half);\r\n        round(n, n.e + 1, 1);\r\n\r\n        if (n.e > 14) {\r\n          nIsOdd = isOdd(n);\r\n        } else {\r\n          i = +valueOf(n);\r\n          if (i === 0) break;\r\n          nIsOdd = i % 2;\r\n        }\r\n      }\r\n\r\n      x = x.times(x);\r\n\r\n      if (k) {\r\n        if (x.c && x.c.length > k) x.c.length = k;\r\n      } else if (isModExp) {\r\n        x = x.mod(m);    //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n      }\r\n    }\r\n\r\n    if (isModExp) return y;\r\n    if (nIsNeg) y = ONE.div(y);\r\n\r\n    return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n   * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n   */\r\n  P.integerValue = function (rm) {\r\n    var n = new BigNumber(this);\r\n    if (rm == null) rm = ROUNDING_MODE;\r\n    else intCheck(rm, 0, 8);\r\n    return round(n, n.e + 1, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isEqualTo = P.eq = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n   */\r\n  P.isFinite = function () {\r\n    return !!this.c;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isGreaterThan = P.gt = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is greater than or equal to the value of\r\n   * BigNumber(y, b), otherwise return false.\r\n   */\r\n  P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n    return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n   */\r\n  P.isInteger = function () {\r\n    return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isLessThan = P.lt = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is less than or equal to the value of\r\n   * BigNumber(y, b), otherwise return false.\r\n   */\r\n  P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n    return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n   */\r\n  P.isNaN = function () {\r\n    return !this.s;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is negative, otherwise return false.\r\n   */\r\n  P.isNegative = function () {\r\n    return this.s < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is positive, otherwise return false.\r\n   */\r\n  P.isPositive = function () {\r\n    return this.s > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n   */\r\n  P.isZero = function () {\r\n    return !!this.c && this.c[0] == 0;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n - 0 = n\r\n   *  n - N = N\r\n   *  n - I = -I\r\n   *  0 - n = -n\r\n   *  0 - 0 = 0\r\n   *  0 - N = N\r\n   *  0 - I = -I\r\n   *  N - n = N\r\n   *  N - 0 = N\r\n   *  N - N = N\r\n   *  N - I = N\r\n   *  I - n = I\r\n   *  I - 0 = I\r\n   *  I - N = N\r\n   *  I - I = N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n   * BigNumber(y, b).\r\n   */\r\n  P.minus = function (y, b) {\r\n    var i, j, t, xLTy,\r\n      x = this,\r\n      a = x.s;\r\n\r\n    y = new BigNumber(y, b);\r\n    b = y.s;\r\n\r\n    // Either NaN?\r\n    if (!a || !b) return new BigNumber(NaN);\r\n\r\n    // Signs differ?\r\n    if (a != b) {\r\n      y.s = -b;\r\n      return x.plus(y);\r\n    }\r\n\r\n    var xe = x.e / LOG_BASE,\r\n      ye = y.e / LOG_BASE,\r\n      xc = x.c,\r\n      yc = y.c;\r\n\r\n    if (!xe || !ye) {\r\n\r\n      // Either Infinity?\r\n      if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n      // Either zero?\r\n      if (!xc[0] || !yc[0]) {\r\n\r\n        // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n        return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n         // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n         ROUNDING_MODE == 3 ? -0 : 0);\r\n      }\r\n    }\r\n\r\n    xe = bitFloor(xe);\r\n    ye = bitFloor(ye);\r\n    xc = xc.slice();\r\n\r\n    // Determine which is the bigger number.\r\n    if (a = xe - ye) {\r\n\r\n      if (xLTy = a < 0) {\r\n        a = -a;\r\n        t = xc;\r\n      } else {\r\n        ye = xe;\r\n        t = yc;\r\n      }\r\n\r\n      t.reverse();\r\n\r\n      // Prepend zeros to equalise exponents.\r\n      for (b = a; b--; t.push(0));\r\n      t.reverse();\r\n    } else {\r\n\r\n      // Exponents equal. Check digit by digit.\r\n      j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n      for (a = b = 0; b < j; b++) {\r\n\r\n        if (xc[b] != yc[b]) {\r\n          xLTy = xc[b] < yc[b];\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // x < y? Point xc to the array of the bigger number.\r\n    if (xLTy) {\r\n      t = xc;\r\n      xc = yc;\r\n      yc = t;\r\n      y.s = -y.s;\r\n    }\r\n\r\n    b = (j = yc.length) - (i = xc.length);\r\n\r\n    // Append zeros to xc if shorter.\r\n    // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n    if (b > 0) for (; b--; xc[i++] = 0);\r\n    b = BASE - 1;\r\n\r\n    // Subtract yc from xc.\r\n    for (; j > a;) {\r\n\r\n      if (xc[--j] < yc[j]) {\r\n        for (i = j; i && !xc[--i]; xc[i] = b);\r\n        --xc[i];\r\n        xc[j] += BASE;\r\n      }\r\n\r\n      xc[j] -= yc[j];\r\n    }\r\n\r\n    // Remove leading zeros and adjust exponent accordingly.\r\n    for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n    // Zero?\r\n    if (!xc[0]) {\r\n\r\n      // Following IEEE 754 (2008) 6.3,\r\n      // n - n = +0  but  n - n = -0  when rounding towards -Infinity.\r\n      y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n      y.c = [y.e = 0];\r\n      return y;\r\n    }\r\n\r\n    // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n    // for finite x and y.\r\n    return normalise(y, xc, ye);\r\n  };\r\n\r\n\r\n  /*\r\n   *   n % 0 =  N\r\n   *   n % N =  N\r\n   *   n % I =  n\r\n   *   0 % n =  0\r\n   *  -0 % n = -0\r\n   *   0 % 0 =  N\r\n   *   0 % N =  N\r\n   *   0 % I =  0\r\n   *   N % n =  N\r\n   *   N % 0 =  N\r\n   *   N % N =  N\r\n   *   N % I =  N\r\n   *   I % n =  N\r\n   *   I % 0 =  N\r\n   *   I % N =  N\r\n   *   I % I =  N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n   * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n   */\r\n  P.modulo = P.mod = function (y, b) {\r\n    var q, s,\r\n      x = this;\r\n\r\n    y = new BigNumber(y, b);\r\n\r\n    // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n    if (!x.c || !y.s || y.c && !y.c[0]) {\r\n      return new BigNumber(NaN);\r\n\r\n    // Return x if y is Infinity or x is zero.\r\n    } else if (!y.c || x.c && !x.c[0]) {\r\n      return new BigNumber(x);\r\n    }\r\n\r\n    if (MODULO_MODE == 9) {\r\n\r\n      // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n      // r = x - qy    where  0 <= r < abs(y)\r\n      s = y.s;\r\n      y.s = 1;\r\n      q = div(x, y, 0, 3);\r\n      y.s = s;\r\n      q.s *= s;\r\n    } else {\r\n      q = div(x, y, 0, MODULO_MODE);\r\n    }\r\n\r\n    y = x.minus(q.times(y));\r\n\r\n    // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n    if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n    return y;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n * 0 = 0\r\n   *  n * N = N\r\n   *  n * I = I\r\n   *  0 * n = 0\r\n   *  0 * 0 = 0\r\n   *  0 * N = N\r\n   *  0 * I = N\r\n   *  N * n = N\r\n   *  N * 0 = N\r\n   *  N * N = N\r\n   *  N * I = N\r\n   *  I * n = I\r\n   *  I * 0 = N\r\n   *  I * N = N\r\n   *  I * I = I\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n   * of BigNumber(y, b).\r\n   */\r\n  P.multipliedBy = P.times = function (y, b) {\r\n    var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n      base, sqrtBase,\r\n      x = this,\r\n      xc = x.c,\r\n      yc = (y = new BigNumber(y, b)).c;\r\n\r\n    // Either NaN, ±Infinity or ±0?\r\n    if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n      // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n      if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n        y.c = y.e = y.s = null;\r\n      } else {\r\n        y.s *= x.s;\r\n\r\n        // Return ±Infinity if either is ±Infinity.\r\n        if (!xc || !yc) {\r\n          y.c = y.e = null;\r\n\r\n        // Return ±0 if either is ±0.\r\n        } else {\r\n          y.c = [0];\r\n          y.e = 0;\r\n        }\r\n      }\r\n\r\n      return y;\r\n    }\r\n\r\n    e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n    y.s *= x.s;\r\n    xcL = xc.length;\r\n    ycL = yc.length;\r\n\r\n    // Ensure xc points to longer array and xcL to its length.\r\n    if (xcL < ycL) {\r\n      zc = xc;\r\n      xc = yc;\r\n      yc = zc;\r\n      i = xcL;\r\n      xcL = ycL;\r\n      ycL = i;\r\n    }\r\n\r\n    // Initialise the result array with zeros.\r\n    for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n    base = BASE;\r\n    sqrtBase = SQRT_BASE;\r\n\r\n    for (i = ycL; --i >= 0;) {\r\n      c = 0;\r\n      ylo = yc[i] % sqrtBase;\r\n      yhi = yc[i] / sqrtBase | 0;\r\n\r\n      for (k = xcL, j = i + k; j > i;) {\r\n        xlo = xc[--k] % sqrtBase;\r\n        xhi = xc[k] / sqrtBase | 0;\r\n        m = yhi * xlo + xhi * ylo;\r\n        xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n        c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n        zc[j--] = xlo % base;\r\n      }\r\n\r\n      zc[j] = c;\r\n    }\r\n\r\n    if (c) {\r\n      ++e;\r\n    } else {\r\n      zc.splice(0, 1);\r\n    }\r\n\r\n    return normalise(y, zc, e);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n   * i.e. multiplied by -1.\r\n   */\r\n  P.negated = function () {\r\n    var x = new BigNumber(this);\r\n    x.s = -x.s || null;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n + 0 = n\r\n   *  n + N = N\r\n   *  n + I = I\r\n   *  0 + n = n\r\n   *  0 + 0 = 0\r\n   *  0 + N = N\r\n   *  0 + I = I\r\n   *  N + n = N\r\n   *  N + 0 = N\r\n   *  N + N = N\r\n   *  N + I = N\r\n   *  I + n = I\r\n   *  I + 0 = I\r\n   *  I + N = N\r\n   *  I + I = I\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n   * BigNumber(y, b).\r\n   */\r\n  P.plus = function (y, b) {\r\n    var t,\r\n      x = this,\r\n      a = x.s;\r\n\r\n    y = new BigNumber(y, b);\r\n    b = y.s;\r\n\r\n    // Either NaN?\r\n    if (!a || !b) return new BigNumber(NaN);\r\n\r\n    // Signs differ?\r\n     if (a != b) {\r\n      y.s = -b;\r\n      return x.minus(y);\r\n    }\r\n\r\n    var xe = x.e / LOG_BASE,\r\n      ye = y.e / LOG_BASE,\r\n      xc = x.c,\r\n      yc = y.c;\r\n\r\n    if (!xe || !ye) {\r\n\r\n      // Return ±Infinity if either ±Infinity.\r\n      if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n      // Either zero?\r\n      // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n      if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n    }\r\n\r\n    xe = bitFloor(xe);\r\n    ye = bitFloor(ye);\r\n    xc = xc.slice();\r\n\r\n    // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n    if (a = xe - ye) {\r\n      if (a > 0) {\r\n        ye = xe;\r\n        t = yc;\r\n      } else {\r\n        a = -a;\r\n        t = xc;\r\n      }\r\n\r\n      t.reverse();\r\n      for (; a--; t.push(0));\r\n      t.reverse();\r\n    }\r\n\r\n    a = xc.length;\r\n    b = yc.length;\r\n\r\n    // Point xc to the longer array, and b to the shorter length.\r\n    if (a - b < 0) {\r\n      t = yc;\r\n      yc = xc;\r\n      xc = t;\r\n      b = a;\r\n    }\r\n\r\n    // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n    for (a = 0; b;) {\r\n      a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n      xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n    }\r\n\r\n    if (a) {\r\n      xc = [a].concat(xc);\r\n      ++ye;\r\n    }\r\n\r\n    // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n    // ye = MAX_EXP + 1 possible\r\n    return normalise(y, xc, ye);\r\n  };\r\n\r\n\r\n  /*\r\n   * If sd is undefined or null or true or false, return the number of significant digits of\r\n   * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n   * If sd is true include integer-part trailing zeros in the count.\r\n   *\r\n   * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n   * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n   * ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n   *                     boolean: whether to count integer-part trailing zeros: true or false.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n   */\r\n  P.precision = P.sd = function (sd, rm) {\r\n    var c, n, v,\r\n      x = this;\r\n\r\n    if (sd != null && sd !== !!sd) {\r\n      intCheck(sd, 1, MAX);\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n\r\n      return round(new BigNumber(x), sd, rm);\r\n    }\r\n\r\n    if (!(c = x.c)) return null;\r\n    v = c.length - 1;\r\n    n = v * LOG_BASE + 1;\r\n\r\n    if (v = c[v]) {\r\n\r\n      // Subtract the number of trailing zeros of the last element.\r\n      for (; v % 10 == 0; v /= 10, n--);\r\n\r\n      // Add the number of digits of the first element.\r\n      for (v = c[0]; v >= 10; v /= 10, n++);\r\n    }\r\n\r\n    if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n    return n;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n   * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n   *\r\n   * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n   */\r\n  P.shiftedBy = function (k) {\r\n    intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n    return this.times('1e' + k);\r\n  };\r\n\r\n\r\n  /*\r\n   *  sqrt(-n) =  N\r\n   *  sqrt(N) =  N\r\n   *  sqrt(-I) =  N\r\n   *  sqrt(I) =  I\r\n   *  sqrt(0) =  0\r\n   *  sqrt(-0) = -0\r\n   *\r\n   * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n   * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   */\r\n  P.squareRoot = P.sqrt = function () {\r\n    var m, n, r, rep, t,\r\n      x = this,\r\n      c = x.c,\r\n      s = x.s,\r\n      e = x.e,\r\n      dp = DECIMAL_PLACES + 4,\r\n      half = new BigNumber('0.5');\r\n\r\n    // Negative/NaN/Infinity/zero?\r\n    if (s !== 1 || !c || !c[0]) {\r\n      return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n    }\r\n\r\n    // Initial estimate.\r\n    s = Math.sqrt(+valueOf(x));\r\n\r\n    // Math.sqrt underflow/overflow?\r\n    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n    if (s == 0 || s == 1 / 0) {\r\n      n = coeffToString(c);\r\n      if ((n.length + e) % 2 == 0) n += '0';\r\n      s = Math.sqrt(+n);\r\n      e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n      if (s == 1 / 0) {\r\n        n = '5e' + e;\r\n      } else {\r\n        n = s.toExponential();\r\n        n = n.slice(0, n.indexOf('e') + 1) + e;\r\n      }\r\n\r\n      r = new BigNumber(n);\r\n    } else {\r\n      r = new BigNumber(s + '');\r\n    }\r\n\r\n    // Check for zero.\r\n    // r could be zero if MIN_EXP is changed after the this value was created.\r\n    // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n    // coeffToString to throw.\r\n    if (r.c[0]) {\r\n      e = r.e;\r\n      s = e + dp;\r\n      if (s < 3) s = 0;\r\n\r\n      // Newton-Raphson iteration.\r\n      for (; ;) {\r\n        t = r;\r\n        r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n        if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n          // The exponent of r may here be one less than the final result exponent,\r\n          // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n          // are indexed correctly.\r\n          if (r.e < e) --s;\r\n          n = n.slice(s - 3, s + 1);\r\n\r\n          // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n          // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n          // iteration.\r\n          if (n == '9999' || !rep && n == '4999') {\r\n\r\n            // On the first iteration only, check to see if rounding up gives the\r\n            // exact result as the nines may infinitely repeat.\r\n            if (!rep) {\r\n              round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n              if (t.times(t).eq(x)) {\r\n                r = t;\r\n                break;\r\n              }\r\n            }\r\n\r\n            dp += 4;\r\n            s += 4;\r\n            rep = 1;\r\n          } else {\r\n\r\n            // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n            // result. If not, then there are further digits and m will be truthy.\r\n            if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n              // Truncate to the first rounding digit.\r\n              round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n              m = !r.times(r).eq(x);\r\n            }\r\n\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in exponential notation and\r\n   * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.toExponential = function (dp, rm) {\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      dp++;\r\n    }\r\n    return format(this, dp, rm, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n   * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n   * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.toFixed = function (dp, rm) {\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      dp = dp + this.e + 1;\r\n    }\r\n    return format(this, dp, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n   * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n   * of the format or FORMAT object (see BigNumber.set).\r\n   *\r\n   * The formatting object may contain some or all of the properties shown below.\r\n   *\r\n   * FORMAT = {\r\n   *   prefix: '',\r\n   *   groupSize: 3,\r\n   *   secondaryGroupSize: 0,\r\n   *   groupSeparator: ',',\r\n   *   decimalSeparator: '.',\r\n   *   fractionGroupSize: 0,\r\n   *   fractionGroupSeparator: '\\xA0',      // non-breaking space\r\n   *   suffix: ''\r\n   * };\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   * [format] {object} Formatting options. See FORMAT pbject above.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   * '[BigNumber Error] Argument not an object: {format}'\r\n   */\r\n  P.toFormat = function (dp, rm, format) {\r\n    var str,\r\n      x = this;\r\n\r\n    if (format == null) {\r\n      if (dp != null && rm && typeof rm == 'object') {\r\n        format = rm;\r\n        rm = null;\r\n      } else if (dp && typeof dp == 'object') {\r\n        format = dp;\r\n        dp = rm = null;\r\n      } else {\r\n        format = FORMAT;\r\n      }\r\n    } else if (typeof format != 'object') {\r\n      throw Error\r\n        (bignumberError + 'Argument not an object: ' + format);\r\n    }\r\n\r\n    str = x.toFixed(dp, rm);\r\n\r\n    if (x.c) {\r\n      var i,\r\n        arr = str.split('.'),\r\n        g1 = +format.groupSize,\r\n        g2 = +format.secondaryGroupSize,\r\n        groupSeparator = format.groupSeparator || '',\r\n        intPart = arr[0],\r\n        fractionPart = arr[1],\r\n        isNeg = x.s < 0,\r\n        intDigits = isNeg ? intPart.slice(1) : intPart,\r\n        len = intDigits.length;\r\n\r\n      if (g2) {\r\n        i = g1;\r\n        g1 = g2;\r\n        g2 = i;\r\n        len -= i;\r\n      }\r\n\r\n      if (g1 > 0 && len > 0) {\r\n        i = len % g1 || g1;\r\n        intPart = intDigits.substr(0, i);\r\n        for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n        if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n        if (isNeg) intPart = '-' + intPart;\r\n      }\r\n\r\n      str = fractionPart\r\n       ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n        ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n         '$&' + (format.fractionGroupSeparator || ''))\r\n        : fractionPart)\r\n       : intPart;\r\n    }\r\n\r\n    return (format.prefix || '') + str + (format.suffix || '');\r\n  };\r\n\r\n\r\n  /*\r\n   * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n   * fraction with an integer numerator and an integer denominator.\r\n   * The denominator will be a positive non-zero value less than or equal to the specified\r\n   * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n   * the lowest value necessary to represent the number exactly.\r\n   *\r\n   * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n   *\r\n   * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n   */\r\n  P.toFraction = function (md) {\r\n    var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n      x = this,\r\n      xc = x.c;\r\n\r\n    if (md != null) {\r\n      n = new BigNumber(md);\r\n\r\n      // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n      if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n        throw Error\r\n          (bignumberError + 'Argument ' +\r\n            (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n      }\r\n    }\r\n\r\n    if (!xc) return new BigNumber(x);\r\n\r\n    d = new BigNumber(ONE);\r\n    n1 = d0 = new BigNumber(ONE);\r\n    d1 = n0 = new BigNumber(ONE);\r\n    s = coeffToString(xc);\r\n\r\n    // Determine initial denominator.\r\n    // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n    e = d.e = s.length - x.e - 1;\r\n    d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n    md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n    exp = MAX_EXP;\r\n    MAX_EXP = 1 / 0;\r\n    n = new BigNumber(s);\r\n\r\n    // n0 = d1 = 0\r\n    n0.c[0] = 0;\r\n\r\n    for (; ;)  {\r\n      q = div(n, d, 0, 1);\r\n      d2 = d0.plus(q.times(d1));\r\n      if (d2.comparedTo(md) == 1) break;\r\n      d0 = d1;\r\n      d1 = d2;\r\n      n1 = n0.plus(q.times(d2 = n1));\r\n      n0 = d2;\r\n      d = n.minus(q.times(d2 = d));\r\n      n = d2;\r\n    }\r\n\r\n    d2 = div(md.minus(d0), d1, 0, 1);\r\n    n0 = n0.plus(d2.times(n1));\r\n    d0 = d0.plus(d2.times(d1));\r\n    n0.s = n1.s = x.s;\r\n    e = e * 2;\r\n\r\n    // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n    r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n        div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n    MAX_EXP = exp;\r\n\r\n    return r;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the value of this BigNumber converted to a number primitive.\r\n   */\r\n  P.toNumber = function () {\r\n    return +valueOf(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n   * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n   * necessary to represent the integer part of the value in fixed-point notation, then use\r\n   * exponential notation.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n   */\r\n  P.toPrecision = function (sd, rm) {\r\n    if (sd != null) intCheck(sd, 1, MAX);\r\n    return format(this, sd, rm, 2);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n   * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n   * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n   * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n   * TO_EXP_NEG, return exponential notation.\r\n   *\r\n   * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n   *\r\n   * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n   */\r\n  P.toString = function (b) {\r\n    var str,\r\n      n = this,\r\n      s = n.s,\r\n      e = n.e;\r\n\r\n    // Infinity or NaN?\r\n    if (e === null) {\r\n      if (s) {\r\n        str = 'Infinity';\r\n        if (s < 0) str = '-' + str;\r\n      } else {\r\n        str = 'NaN';\r\n      }\r\n    } else {\r\n      if (b == null) {\r\n        str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n         ? toExponential(coeffToString(n.c), e)\r\n         : toFixedPoint(coeffToString(n.c), e, '0');\r\n      } else if (b === 10 && alphabetHasNormalDecimalDigits) {\r\n        n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n        str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n      } else {\r\n        intCheck(b, 2, ALPHABET.length, 'Base');\r\n        str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n      }\r\n\r\n      if (s < 0 && n.c[0]) str = '-' + str;\r\n    }\r\n\r\n    return str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return as toString, but do not accept a base argument, and include the minus sign for\r\n   * negative zero.\r\n   */\r\n  P.valueOf = P.toJSON = function () {\r\n    return valueOf(this);\r\n  };\r\n\r\n\r\n  P._isBigNumber = true;\r\n\r\n  P[Symbol.toStringTag] = 'BigNumber';\r\n\r\n  // Node.js v10.12.0+\r\n  P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf;\r\n\r\n  if (configObject != null) BigNumber.set(configObject);\r\n\r\n  return BigNumber;\r\n}\r\n\r\n\r\n// PRIVATE HELPER FUNCTIONS\r\n\r\n// These functions don't need access to variables,\r\n// e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\nfunction bitFloor(n) {\r\n  var i = n | 0;\r\n  return n > 0 || n === i ? i : i - 1;\r\n}\r\n\r\n\r\n// Return a coefficient array as a string of base 10 digits.\r\nfunction coeffToString(a) {\r\n  var s, z,\r\n    i = 1,\r\n    j = a.length,\r\n    r = a[0] + '';\r\n\r\n  for (; i < j;) {\r\n    s = a[i++] + '';\r\n    z = LOG_BASE - s.length;\r\n    for (; z--; s = '0' + s);\r\n    r += s;\r\n  }\r\n\r\n  // Determine trailing zeros.\r\n  for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n  return r.slice(0, j + 1 || 1);\r\n}\r\n\r\n\r\n// Compare the value of BigNumbers x and y.\r\nfunction compare(x, y) {\r\n  var a, b,\r\n    xc = x.c,\r\n    yc = y.c,\r\n    i = x.s,\r\n    j = y.s,\r\n    k = x.e,\r\n    l = y.e;\r\n\r\n  // Either NaN?\r\n  if (!i || !j) return null;\r\n\r\n  a = xc && !xc[0];\r\n  b = yc && !yc[0];\r\n\r\n  // Either zero?\r\n  if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n  // Signs differ?\r\n  if (i != j) return i;\r\n\r\n  a = i < 0;\r\n  b = k == l;\r\n\r\n  // Either Infinity?\r\n  if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n  // Compare exponents.\r\n  if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n  j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n  // Compare digit by digit.\r\n  for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n  // Compare lengths.\r\n  return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n}\r\n\r\n\r\n/*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\nfunction intCheck(n, min, max, name) {\r\n  if (n < min || n > max || n !== mathfloor(n)) {\r\n    throw Error\r\n     (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n       ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n       : ' not a primitive number: ') + String(n));\r\n  }\r\n}\r\n\r\n\r\n// Assumes finite n.\r\nfunction isOdd(n) {\r\n  var k = n.c.length - 1;\r\n  return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n}\r\n\r\n\r\nfunction toExponential(str, e) {\r\n  return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n   (e < 0 ? 'e' : 'e+') + e;\r\n}\r\n\r\n\r\nfunction toFixedPoint(str, e, z) {\r\n  var len, zs;\r\n\r\n  // Negative exponent?\r\n  if (e < 0) {\r\n\r\n    // Prepend zeros.\r\n    for (zs = z + '.'; ++e; zs += z);\r\n    str = zs + str;\r\n\r\n  // Positive exponent\r\n  } else {\r\n    len = str.length;\r\n\r\n    // Append zeros.\r\n    if (++e > len) {\r\n      for (zs = z, e -= len; --e; zs += z);\r\n      str += zs;\r\n    } else if (e < len) {\r\n      str = str.slice(0, e) + '.' + str.slice(e);\r\n    }\r\n  }\r\n\r\n  return str;\r\n}\r\n\r\n\r\n// EXPORT\r\n\r\n\r\nexport var BigNumber = clone();\r\n\r\nexport default BigNumber;\r\n","export type Rounding = 'floor' | 'ceil';\n\nexport class MathUtil {\n  // Copied from https://github.com/Aisse-258/bigint-isqrt/blob/master/main.js\n  static sqrt = function (value: bigint): bigint {\n    if (value < 2n) {\n      return value;\n    }\n\n    if (value < 16n) {\n      return BigInt(Math.sqrt(Number(value)) | 0);\n    }\n\n    let x0, x1;\n    if (value < 4503599627370496n) {\n      //1n<<52n\n      x1 = BigInt(Math.sqrt(Number(value)) | 0) - 3n;\n    } else {\n      const vlen = value.toString().length;\n      if (!(vlen & 1)) {\n        x1 = 10n ** BigInt(vlen / 2);\n      } else {\n        x1 = 4n * 10n ** BigInt((vlen / 2) | 0);\n      }\n    }\n\n    do {\n      x0 = x1;\n      x1 = (value / x0 + x0) >> 1n;\n    } while (x0 !== x1 && x0 !== x1 - 1n);\n\n    return x0;\n  };\n\n  static alphDiv(a: bigint, b: bigint): bigint {\n    const result = a / b;\n    if (a * b < 0n) return result - BigInt(a % b != 0n);\n    return result;\n  }\n\n  static alphCeil(a: bigint, b: bigint): bigint {\n    const result = a / b;\n    const rem = a % b;\n    return result + BigInt(rem != 0n) * BigInt(rem < 0n ? -1n : 1n);\n  }\n\n  static divFloor(a: bigint, b: bigint): bigint {\n    return this.divWithRounding(a, b, 'floor');\n  }\n\n  static divCeil(a: bigint, b: bigint): bigint {\n    return this.divWithRounding(a, b, 'ceil');\n  }\n\n  static mulDivFloor(a: bigint, b: bigint, d: bigint): bigint {\n    if (d === 0n) {\n      throw new Error(`Division by zero in mulDivFloor: ${a} * ${b} / ${d}`);\n    }\n    const product = a * b;\n    return this.divFloor(product, d);\n  }\n\n  static mulDivCeil(a: bigint, b: bigint, d: bigint): bigint {\n    if (d === 0n) {\n      throw new Error(`Division by zero in mulDivCeil: ${a} * ${b} / ${d}`);\n    }\n    const product = a * b;\n    return this.divCeil(product, d);\n  }\n\n  private static divWithRounding = (a: bigint, b: bigint, mode: Rounding): bigint => {\n    if (b === 0n) {\n      throw new Error(`Division by zero: ${a} / ${b}`);\n    }\n\n    const quotient = a / b;\n    const remainder = a % b;\n    if (remainder === 0n) {\n      return quotient;\n    }\n\n    const signsMatch = a >= 0n === b >= 0n;\n    if (mode === 'floor') {\n      return signsMatch ? quotient : quotient - 1n;\n    }\n    return signsMatch ? quotient + 1n : quotient;\n  };\n}\n","export const BPS = 10_000n; // basis points denominator\n","import type { SignerProvider, NetworkId } from '@alephium/web3';\n\nexport interface Network {\n  id: NetworkId;\n  name: string;\n  nodeUrl: string;\n  nodeApiKey?: string;\n  explorerApiUrl: string;\n  explorerUrl: string;\n  tokenListUrl: string;\n}\n\nexport const DEVNET = {\n  id: 'devnet' as NetworkId,\n  nodeUrl: 'http://127.0.0.1:22973',\n  explorerApiUrl: 'http://localhost:9090',\n  explorerUrl: 'http://localhost:23000',\n  tokenListUrl: 'http://127.0.0.1:4000/token-list/devnet.json', // Temporary solution for devnet\n  name: 'Devnet',\n};\n\nexport const defaultNetworks: Network[] = [\n  {\n    id: 'mainnet',\n    nodeUrl: 'https://node.mainnet.alephium.org',\n    explorerApiUrl: 'https://backend.mainnet.alephium.org',\n    explorerUrl: 'https://explorer.alephium.org',\n    tokenListUrl:\n      'https://raw.githubusercontent.com/alephium/token-list/master/tokens/mainnet.json',\n    name: 'Mainnet',\n  },\n  {\n    id: 'testnet',\n    nodeUrl: 'https://node.testnet.alephium.org',\n    explorerApiUrl: 'https://backend.testnet.alephium.org',\n    explorerUrl: 'https://testnet.alephium.org',\n    tokenListUrl:\n      'https://raw.githubusercontent.com/alephium/token-list/master/tokens/testnet.json',\n    name: 'Testnet',\n  },\n  DEVNET,\n];\nexport type NetworkOverrides = Partial<Omit<Network, 'id'>>;\n\nexport interface ZetaLoadParams {\n  networkId: NetworkId;\n  signer?: SignerProvider;\n  networkOverrides?: NetworkOverrides;\n}\n","import type { SignExecuteScriptTxResult, Token } from '@alephium/web3';\nimport {\n  addressFromContractId,\n  binToHex,\n  DUST_AMOUNT,\n  MINIMAL_CONTRACT_DEPOSIT,\n  subContractId,\n  codec,\n  encodePrimitiveValues,\n  groupOfAddress,\n  isGrouplessAddressWithoutGroupIndex,\n  ALPH_TOKEN_ID,\n} from '@alephium/web3';\nimport { loadDeployments } from 'clmm/artifacts/ts/deployments';\nimport ModuleBase from '../moduleBase';\nimport type { Zeta } from '../zeta';\nimport type {\n  AddLiquidity,\n  ClmmConfig,\n  CollectProtocolFees,\n  CollectTokens,\n  LiquidityDistribution,\n  RemoveLiquidity,\n  SimulateSwap,\n  ClmmSwapParams,\n  ClmmPoolContractState,\n  ClmmPoolConfig,\n  SetRewardParams,\n  ExtendRewards,\n  PositionPath,\n  ClmmPositionInfo,\n} from './types';\nimport type { PoolInstance, PoolTypes } from 'clmm/artifacts/ts';\nimport {\n  CreateLiquidPool,\n  Pool,\n  PoolConfig,\n  PoolFactory,\n  PositionManager,\n  SwapWithoutAccount,\n} from 'clmm/artifacts/ts';\nimport { PoolUtils } from './pool';\nimport { TickUtils } from './tick';\nimport { ClmmLiquidityUtils } from './liquidity';\nimport { PoolNotFoundError, sortTokens } from '../common';\n\nfunction normalizeAddress(address: string, group: number): string {\n  return isGrouplessAddressWithoutGroupIndex(address) ? `${address}:${group}` : address;\n}\n\nexport class ClmmModule extends ModuleBase {\n  private config: ClmmConfig;\n  private configsByIndex = new Map<bigint, ClmmPoolConfig>();\n\n  constructor(scope: Zeta) {\n    super({ scope, moduleName: 'ClmmModule' });\n\n    this.config = this._getClmmConfig();\n  }\n\n  setConfig(config: ClmmConfig) {\n    this.config = config;\n  }\n\n  getClmmConfig(): ClmmConfig {\n    return this.config;\n  }\n\n  getPoolConfigId(configIndex: bigint): string {\n    const rawIndex = codec.u256Codec.encode(configIndex);\n    const configPath = binToHex(rawIndex);\n    const group = this.config.groupIndex;\n    return subContractId(this.config.factoryId, configPath, group);\n  }\n\n  async getAllPoolConfigs(): Promise<ClmmPoolConfig[]> {\n    const factoryAddress = addressFromContractId(this.config.factoryId);\n    const factory = PoolFactory.at(factoryAddress);\n    const state = await factory.fetchState();\n    const nextConfigIndex = state.fields.nextConfigIndex;\n\n    const configs: ClmmPoolConfig[] = [];\n    for (let i = 0n; i < nextConfigIndex; i++) {\n      let config = this.configsByIndex.get(i);\n      if (!config) {\n        config = await this.fetchConfigFromChain(i);\n        this.configsByIndex.set(i, config);\n      }\n      configs.push(config);\n    }\n\n    return configs;\n  }\n\n  async getPoolConfig(configIndex: bigint): Promise<ClmmPoolConfig | undefined> {\n    const cached = this.configsByIndex.get(configIndex);\n    if (cached) {\n      return cached;\n    }\n\n    try {\n      const config = await this.fetchConfigFromChain(configIndex);\n      this.configsByIndex.set(configIndex, config);\n      return config;\n    } catch (error) {\n      this.logWarning(`Failed to fetch config ${configIndex.toString()}`, error);\n      return undefined;\n    }\n  }\n\n  private async fetchConfigFromChain(configIndex: bigint): Promise<ClmmPoolConfig> {\n    const poolConfigId = this.getPoolConfigId(configIndex);\n    const poolConfigAddress = addressFromContractId(poolConfigId);\n    const poolConfig = PoolConfig.at(poolConfigAddress);\n    const poolConfigState = await poolConfig.fetchState();\n    return {\n      configIndex,\n      tickSpacing: poolConfigState.fields.config.tickSpacing,\n      tradingFee: poolConfigState.fields.config.fee,\n      protocolFee: poolConfigState.fields.config.feeProtocol,\n    };\n  }\n\n  async getPoolState(poolId: string): Promise<ClmmPoolContractState> {\n    try {\n      const poolAddress = addressFromContractId(poolId);\n      const pool = Pool.at(poolAddress);\n      const state = await pool.fetchState();\n      const token0Info = await this.scope.token.getTokenById(state.fields.token0);\n      const token1Info = await this.scope.token.getTokenById(state.fields.token1);\n\n      return {\n        poolId,\n        token0Info,\n        token1Info,\n        liquidity: state.fields.liquidity,\n        tradingFee: state.fields.fee,\n        protocolFee: state.fields.slot0.feeProtocol,\n        tick: state.fields.slot0.tick,\n        tickSpacing: state.fields.tickSpacing,\n        sqrtPriceX96: state.fields.slot0.sqrtPriceX96,\n        configIndex: state.fields.configIndex,\n      };\n    } catch (error) {\n      if (error instanceof Error && error.message.includes('not found')) {\n        throw new PoolNotFoundError(poolId);\n      }\n      this.logAndThrowError(`Failed to fetch CLMM pool state on ${poolId}`, error);\n    }\n  }\n\n  async getPoolTokenBalances(poolId: string): Promise<{ token0Balance: bigint; token1Balance: bigint }> {\n    try {\n      const poolAddress = addressFromContractId(poolId);\n      const state = await Pool.at(poolAddress).fetchState();\n      const { token0, token1 } = state.fields;\n\n      const balance = await this.scope.nodeProvider.addresses.getAddressesAddressBalance(poolAddress);\n\n      const getBalance = (tokenId: string) =>\n        tokenId === ALPH_TOKEN_ID\n          ? BigInt(balance.balance)\n          : BigInt(balance.tokenBalances?.find((t) => t.id === tokenId)?.amount || '0');\n\n      return {\n        token0Balance: getBalance(token0),\n        token1Balance: getBalance(token1),\n      };\n    } catch (error) {\n      if (error instanceof Error && error.message.includes('not found')) {\n        throw new PoolNotFoundError(poolId);\n      }\n      this.logAndThrowError(`Failed to fetch CLMM pool token balances for ${poolId}`, error);\n    }\n  }\n\n  getPoolId(tokenA: string, tokenB: string, configIndex: bigint): string {\n    const [token0, token1] = sortTokens(tokenA, tokenB);\n    const group = this.config.groupIndex;\n    const factoryId = this.config.factoryId;\n    const rawIndex = codec.u256Codec.encode(configIndex);\n    const configPath = binToHex(rawIndex);\n    const configId = subContractId(factoryId, configPath, group);\n    const path = token0 + token1 + configId;\n    return subContractId(factoryId, path, group);\n  }\n\n  getPositionId(poolId: string, owner: string, tickLower: bigint, tickUpper: bigint): string {\n    const group = groupOfAddress(addressFromContractId(poolId));\n    const path = encodePrimitiveValues([\n      { type: 'U256', value: Pool.consts.PathPrefixes.Position },\n      { type: 'Address', value: owner },\n      { type: 'I256', value: tickLower },\n      { type: 'I256', value: tickUpper },\n    ]);\n    return subContractId(poolId, binToHex(path), group);\n  }\n\n  getPoolAddress(tokenA: string, tokenB: string, configIndex: bigint): string {\n    const poolId = this.getPoolId(tokenA, tokenB, configIndex);\n    return addressFromContractId(poolId);\n  }\n\n  getPool(tokenA: string, tokenB: string, configIndex: bigint): PoolInstance {\n    const poolAddress = this.getPoolAddress(tokenA, tokenB, configIndex);\n    return Pool.at(poolAddress);\n  }\n\n  async poolExists(tokenA: string, tokenB: string, configIndex: bigint): Promise<boolean> {\n    const poolAddress = this.getPoolAddress(tokenA, tokenB, configIndex);\n    const pool = Pool.at(poolAddress);\n    try {\n      await pool.fetchState();\n      return true;\n    } catch (error) {\n      if (error instanceof Error && error.message.includes('not found')) {\n        return false;\n      }\n      this.logAndThrowError(`Failed to fetch pool state on ${poolAddress}`, error);\n    }\n  }\n\n  async createPool(\n    configIndex: bigint,\n    token0: string,\n    token1: string,\n    rewardToken: string,\n    tick: bigint,\n    amount0: bigint,\n    amount1: bigint,\n    tickLower: bigint,\n    tickUpper: bigint,\n    dustAmount?: bigint,\n  ): Promise<{ poolAddress: string; result: SignExecuteScriptTxResult }> {\n    const sqrtPriceX96 = TickUtils.getSqrtRatioAtTick(tick);\n    const tokens = [token0, token1];\n    const amounts = [amount0, amount1];\n    const ticks = [tickLower, tickUpper];\n    if (token0 > token1) {\n      tokens.reverse();\n      amounts.reverse();\n    }\n    if (tickLower > tickUpper) {\n      ticks.reverse();\n    }\n    const sqrtPriceX96A = TickUtils.getSqrtRatioAtTick(ticks[0]);\n    const sqrtPriceX96B = TickUtils.getSqrtRatioAtTick(ticks[1]);\n    const liquidity = ClmmLiquidityUtils.getLiquidityFromAmounts(\n      sqrtPriceX96,\n      sqrtPriceX96A,\n      sqrtPriceX96B,\n      amounts[0],\n      amounts[1],\n    );\n    const result = await CreateLiquidPool.execute({\n      signer: this.scope.signer,\n      initialFields: {\n        factory: this.config.factoryId,\n        token0: tokens[0],\n        token1: tokens[1],\n        rewardToken,\n        liquidity,\n        tickLower: ticks[0],\n        tickUpper: ticks[1],\n        sqrtPriceX96,\n        configIndex,\n        amount0: amounts[0],\n        amount1: amounts[1],\n      },\n      attoAlphAmount: MINIMAL_CONTRACT_DEPOSIT * 6n,\n      tokens: [\n        { id: tokens[0], amount: amounts[0] },\n        { id: tokens[1], amount: amounts[1] },\n      ],\n      dustAmount: dustAmount ?? MINIMAL_CONTRACT_DEPOSIT * 2n,\n    });\n    const poolAddress = this.getPoolAddress(tokens[0], tokens[1], configIndex);\n    return { poolAddress, result };\n  }\n\n  async addLiquidity(\n    p: AddLiquidity,\n  ): Promise<{ positionId: string; result: SignExecuteScriptTxResult }> {\n    const poolAddress = this.getPoolAddress(p.token0, p.token1, p.configIndex);\n    const pool = Pool.at(poolAddress);\n    const positionManagerAddress = addressFromContractId(this.config.positionManagerId);\n    const positionManager = PositionManager.at(positionManagerAddress);\n\n    const signerAccount = await this.scope.signer.getSelectedAccount();\n    const owner = p.owner || signerAccount.address;\n\n    const group = this.config.groupIndex;\n    const normalizedOwner = normalizeAddress(owner, group);\n    const normalizedPayer = normalizeAddress(signerAccount.address, group);\n\n    const {\n      returns: [sqrtPriceX96, sqrtRatioAX96, sqrtRatioBX96, deposit],\n    } = await positionManager.view.getSqrtPricesX96({\n      args: {\n        tickLower: p.tickLower,\n        tickUpper: p.tickUpper,\n        pool: pool.contractId,\n        owner: normalizedOwner,\n      },\n    });\n    const currentTick = TickUtils.getTickAtSqrtRatio(sqrtPriceX96);\n    const minTick = currentTick - p.slippage;\n    const maxTick = currentTick + p.slippage;\n    const minSqrtPriceX96 = TickUtils.getSqrtRatioAtTick(minTick);\n    const maxSqrtPriceX96 = TickUtils.getSqrtRatioAtTick(maxTick);\n\n    const liquidity = ClmmLiquidityUtils.getLiquidityFromAmounts(\n      sqrtPriceX96,\n      sqrtRatioAX96,\n      sqrtRatioBX96,\n      p.amount0,\n      p.amount1,\n    );\n    const [spotAmount0, spotAmount1] = ClmmLiquidityUtils.getAmountsForLiquidity(\n      sqrtPriceX96,\n      sqrtRatioAX96,\n      sqrtRatioBX96,\n      -liquidity,\n    );\n    const [minAmount0, minAmount1] = ClmmLiquidityUtils.getAmountsForLiquidity(\n      minSqrtPriceX96,\n      sqrtRatioAX96,\n      sqrtRatioBX96,\n      -liquidity,\n    );\n    const [maxAmount0, maxAmount1] = ClmmLiquidityUtils.getAmountsForLiquidity(\n      maxSqrtPriceX96,\n      sqrtRatioAX96,\n      sqrtRatioBX96,\n      -liquidity,\n    );\n\n    const positionId = PoolUtils.getPositionId(poolAddress, owner, p.tickLower, p.tickUpper);\n    const tokens: Token[] = [\n      { id: p.token0, amount: -minAmount0 },\n      { id: p.token1, amount: -maxAmount1 },\n    ];\n\n    if (p.existingPosition) {\n      tokens.push({ id: positionId, amount: 1n });\n    }\n    const result = await positionManager.transact.addLiquidity({\n      signer: this.scope.signer,\n      args: {\n        payer: normalizedPayer,\n        p: {\n          token0: p.token0,\n          token1: p.token1,\n          configIndex: p.configIndex,\n          owner: normalizedOwner,\n          tickLower: p.tickLower,\n          tickUpper: p.tickUpper,\n          amount0Desired: -spotAmount0,\n          amount1Desired: -spotAmount1,\n          amount0Min: -maxAmount0,\n          amount1Min: -minAmount1,\n        },\n      },\n      tokens,\n      attoAlphAmount: deposit,\n    });\n\n    return { positionId, result };\n  }\n\n  async removeLiquidity(\n    p: RemoveLiquidity,\n  ): Promise<{ positionId: string; result: SignExecuteScriptTxResult }> {\n    const poolAddress = this.getPoolAddress(p.token0, p.token1, p.configIndex);\n    const positionManagerAddress = addressFromContractId(this.config.positionManagerId);\n    const positionManager = PositionManager.at(positionManagerAddress);\n    const signerAccount = await this.scope.signer.getSelectedAccount();\n\n    const group = this.config.groupIndex;\n    const normalizedOwner = normalizeAddress(p.owner, group);\n    const normalizedOperator = normalizeAddress(signerAccount.address, group);\n\n    const positionId = PoolUtils.getPositionId(poolAddress, p.owner, p.tickLower, p.tickUpper);\n\n    // Determine minimum amounts based on base token selection (Raydium pattern)\n    // For remove liquidity: base amount is what we expect, other amount is the minimum we'll accept\n    const amount0Min = p.base === 'token0' ? p.baseAmount : p.otherAmountMax;\n    const amount1Min = p.base === 'token0' ? p.otherAmountMax : p.baseAmount;\n\n    const result = await positionManager.transact.decreaseLiquidity({\n      signer: this.scope.signer,\n      args: {\n        liquidity: p.liquidity,\n        operator: normalizedOperator,\n        p: {\n          configIndex: p.configIndex,\n          token0: p.token0,\n          token1: p.token1,\n          owner: normalizedOwner,\n          tickLower: p.tickLower,\n          tickUpper: p.tickUpper,\n          amount0Min: amount0Min,\n          amount1Min: amount1Min,\n        },\n      },\n      tokens: [{ id: positionId, amount: 1n }],\n      attoAlphAmount: DUST_AMOUNT * 3n,\n    });\n    return { positionId, result };\n  }\n\n  async positionInfo({ poolId, ...args }: PositionPath): Promise<ClmmPositionInfo> {\n    const pool = Pool.at(addressFromContractId(poolId));\n    const { returns } = await pool.view.positionInfo({ args });\n    return returns;\n  }\n  async collectTokens(\n    p: CollectTokens,\n  ): Promise<{ positionId: string; result: SignExecuteScriptTxResult }> {\n    const poolAddress = this.getPoolAddress(p.token0, p.token1, p.configIndex);\n    const positionId = PoolUtils.getPositionId(poolAddress, p.owner, p.tickLower, p.tickUpper);\n    const positionManagerAddress = addressFromContractId(this.config.positionManagerId);\n    const signerAccount = await this.scope.signer.getSelectedAccount();\n\n    const group = this.config.groupIndex;\n    const normalizedOwner = normalizeAddress(p.owner, group);\n    const normalizedOperator = normalizeAddress(signerAccount.address, group);\n    const normalizedRecipient = normalizeAddress(p.recipient, group);\n\n    const positionManager = PositionManager.at(positionManagerAddress);\n    const result = await positionManager.transact.collect({\n      signer: this.scope.signer,\n      args: {\n        liquidity: p.liquidity,\n        operator: normalizedOperator,\n        p: {\n          configIndex: p.configIndex,\n          token0: p.token0,\n          token1: p.token1,\n          owner: normalizedOwner,\n          recipient: normalizedRecipient,\n          tickLower: p.tickLower,\n          tickUpper: p.tickUpper,\n          amount0Max: p.amount0Max,\n          amount1Max: p.amount1Max,\n        },\n      },\n      tokens: [{ id: positionId, amount: 1n }],\n      attoAlphAmount: DUST_AMOUNT * 3n,\n    });\n\n    return { positionId, result };\n  }\n\n  async findBestRoute(token0: string, token1: string): Promise<bigint> {\n    const poolFactoryAddress = addressFromContractId(this.config.factoryId);\n    const poolFactory = PoolFactory.at(poolFactoryAddress);\n    const state = await poolFactory.fetchState();\n    const f = (_: number, i: number) => this.getPoolAddress(token0, token1, BigInt(i));\n    const addresses = Array.from({ length: Number(state.fields.nextConfigIndex) }, f);\n    const pools = await Promise.all(\n      addresses.map(async (addr, i) =>\n        (await this.poolExists(token0, token1, BigInt(i))) ? Pool.at(addr).fetchState() : undefined,\n      ),\n    );\n    const [index] = pools.reduce<[bigint, bigint]>(\n      ([index, liquidity], pool, i) => {\n        const liquidity2 = pool?.fields.liquidity || 0n;\n        return liquidity2 > liquidity ? [BigInt(i), liquidity2] : [index, liquidity];\n      },\n      [-1n, 0n],\n    );\n\n    if (index === -1n) {\n      throw new PoolNotFoundError(`No concentrated liquidity pool found for token pair ${token0}/${token1}`);\n    }\n\n    return index;\n  }\n\n  async simulateSwap(p: SimulateSwap): Promise<LiquidityDistribution> {\n    const poolAddress = this.getPoolAddress(p.token0, p.token1, p.configIndex);\n    const pool = Pool.at(poolAddress);\n    const result = await pool.view.simulateSwap({\n      args: {\n        amountSpecified: p.amount,\n        zeroForOne: p.zeroForOne,\n        data: '',\n        maxSteps: 500n,\n      },\n    });\n\n    const poolState = result.contracts.at(0)?.fields as PoolTypes.Fields;\n    const startEvent = result.events.at(0) as PoolTypes.SwapStartEvent;\n    return {\n      sqrtPriceX96: poolState.slot0.sqrtPriceX96,\n      baseSqrtPriceX96: startEvent.fields.sqrtPriceX96,\n      liquidity: poolState.liquidity,\n      fee: poolState.fee,\n      rows: result.events.slice(1).map((e) => {\n        const event = e as PoolTypes.SwapStepEvent;\n        return {\n          sqrtPriceX96: event.fields.sqrtPriceX96,\n          liquidity: event.fields.liquidity,\n        };\n      }),\n    };\n  }\n\n  async swap(p: ClmmSwapParams): Promise<SignExecuteScriptTxResult> {\n    const configIndex = p.routePlan[0];\n    const pool = this.getPool(p.token0, p.token1, configIndex);\n    const poolState = await pool.fetchState();\n    const sqrtPriceX96 = poolState.fields.slot0.sqrtPriceX96;\n    const zeroForOne = poolState.fields.token0 === p.token0;\n    const sqrtPriceLimitX96 = TickUtils.getSqrtPriceLimitX96(sqrtPriceX96, p.slippage, zeroForOne);\n\n    const tokens = sortTokens(p.token0, p.token1);\n    const [tokenIn, tokenOut] = zeroForOne ? tokens : tokens.reverse();\n    return await SwapWithoutAccount.execute({\n      signer: this.scope.signer,\n      initialFields: {\n        dexAccount: this.config.accountRoot,\n        pool: pool.contractId,\n        tokenIn,\n        tokenOut,\n        zeroForOne,\n        amountSpecified: p.amount,\n        sqrtPriceLimitX96,\n        data: '',\n      },\n      tokens: [{ id: tokenIn, amount: p.amount }],\n      attoAlphAmount: DUST_AMOUNT * 2n,\n    });\n  }\n\n  async collectProtocolFees(p: CollectProtocolFees): Promise<SignExecuteScriptTxResult> {\n    const poolFactoryAddress = addressFromContractId(this.config.factoryId);\n    const poolFactory = PoolFactory.at(poolFactoryAddress);\n    const result = await poolFactory.transact.collectProtocolFees({\n      signer: this.scope.signer,\n      args: {\n        recipient: p.recipient,\n        configIndex: p.configIndex,\n        token0: p.token0,\n        token1: p.token1,\n      },\n    });\n    return result;\n  }\n\n  async setRewardParams(p: SetRewardParams): Promise<SignExecuteScriptTxResult> {\n    const poolFactoryAddress = addressFromContractId(this.config.factoryId);\n    const poolFactory = PoolFactory.at(poolFactoryAddress);\n    const index = p.rewardToken === p.token0 ? 0n : p.rewardToken === p.token1 ? 1n : 2n;\n    const result = await poolFactory.transact.setRewardParams({\n      signer: this.scope.signer,\n      args: {\n        token0: p.token0,\n        token1: p.token1,\n        configIndex: p.configIndex,\n        amount: p.amount,\n        index,\n        openTime: p.openTime,\n        endTime: p.endTime,\n        payer: p.payer,\n        tokenId: p.rewardToken,\n      },\n      tokens: [{ id: p.rewardToken, amount: p.amount }],\n      attoAlphAmount: DUST_AMOUNT,\n    });\n    return result;\n  }\n\n  async extendRewards(p: ExtendRewards): Promise<SignExecuteScriptTxResult> {\n    const poolAddress = this.getPoolAddress(p.token0, p.token1, p.configIndex);\n    const pool = Pool.at(poolAddress);\n    const index = p.rewardToken === p.token0 ? 0n : p.rewardToken === p.token1 ? 1n : 2n;\n    const result = await pool.transact.extendRewards({\n      signer: this.scope.signer,\n      args: {\n        payer: p.payer,\n        index,\n        amount: p.amount,\n      },\n      tokens: [{ id: p.rewardToken, amount: p.amount }],\n      attoAlphAmount: DUST_AMOUNT,\n    });\n    return result;\n  }\n\n  private _getClmmConfig(): ClmmConfig {\n    const networkId = this.scope.network.id;\n    try {\n      const deployments = loadDeployments(networkId);\n      return {\n        groupIndex: deployments.contracts.PoolFactory.contractInstance.groupIndex,\n        factoryId: deployments.contracts.PoolFactory.contractInstance.contractId,\n        positionManagerId: deployments.contracts.PositionManager.contractInstance.contractId,\n        defaultConfigIndex: 0n,\n        accountRoot: deployments.contracts.DexAccount.contractInstance.contractId,\n      };\n    } catch (error) {\n      this.logAndThrowError(`Failed to load deployments on ${networkId}`, error);\n    }\n  }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nexport * from \"./BitmapWord\";\nexport * from \"./BitmapWordDeployer\";\nexport * from \"./DexAccount\";\nexport * from \"./LiquidityAmountsTest\";\nexport * from \"./LiquidityManagmentTest\";\nexport * from \"./Pool\";\nexport * from \"./PoolConfig\";\nexport * from \"./PoolFactory\";\nexport * from \"./PoolUser\";\nexport * from \"./Position\";\nexport * from \"./PositionManager\";\nexport * from \"./TestToken\";\nexport * from \"./Tick\";\nexport * from \"./TickBitmapTest\";\nexport * from \"./contracts\";\nexport * from \"./scripts\";\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as BitmapWordContractJson } from \"../BitmapWord.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace BitmapWordTypes {\n  export type Fields = {\n    parent: Address;\n    value: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    mostSignificantBit: {\n      params: CallContractParams<{ x: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    leastSignificantBit: {\n      params: CallContractParams<{ x: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    flip: {\n      params: CallContractParams<{ tick: bigint }>;\n      result: CallContractResult<null>;\n    };\n    getNext: {\n      params: CallContractParams<{\n        compressed: bigint;\n        zeroForOne: boolean;\n        tickSpacing: bigint;\n      }>;\n      result: CallContractResult<[bigint, boolean]>;\n    };\n    getBitPos: {\n      params: CallContractParams<{ tick: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    mostSignificantBit: {\n      params: SignExecuteContractMethodParams<{ x: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    leastSignificantBit: {\n      params: SignExecuteContractMethodParams<{ x: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    flip: {\n      params: SignExecuteContractMethodParams<{ tick: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getNext: {\n      params: SignExecuteContractMethodParams<{\n        compressed: bigint;\n        zeroForOne: boolean;\n        tickSpacing: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getBitPos: {\n      params: SignExecuteContractMethodParams<{ tick: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  BitmapWordInstance,\n  BitmapWordTypes.Fields\n> {\n  encodeFields(fields: BitmapWordTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  consts = {\n    BitMathError: {\n      NoMostSignificantBit: BigInt(\"150\"),\n      NoLeastSignificantBit: BigInt(\"151\"),\n    },\n  };\n\n  at(address: string): BitmapWordInstance {\n    return new BitmapWordInstance(address);\n  }\n\n  tests = {\n    mostSignificantBit: async (\n      params: TestContractParamsWithoutMaps<\n        BitmapWordTypes.Fields,\n        { x: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"mostSignificantBit\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    leastSignificantBit: async (\n      params: TestContractParamsWithoutMaps<\n        BitmapWordTypes.Fields,\n        { x: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"leastSignificantBit\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    flip: async (\n      params: TestContractParamsWithoutMaps<\n        BitmapWordTypes.Fields,\n        { tick: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"flip\", params, getContractByCodeHash);\n    },\n    getNext: async (\n      params: TestContractParamsWithoutMaps<\n        BitmapWordTypes.Fields,\n        { compressed: bigint; zeroForOne: boolean; tickSpacing: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, boolean]>> => {\n      return testMethod(this, \"getNext\", params, getContractByCodeHash);\n    },\n    getBitPos: async (\n      params: TestContractParamsWithoutMaps<\n        BitmapWordTypes.Fields,\n        { tick: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"getBitPos\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: BitmapWordTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const BitmapWord = new Factory(\n  Contract.fromJson(\n    BitmapWordContractJson,\n    \"\",\n    \"69fd344eb51899a9bdc30ae94beeb2dcfeb2fc312d39116ebe9d208a55293edd\",\n    types.AllStructs\n  )\n);\nregisterContract(BitmapWord);\n\n// Use this class to interact with the blockchain\nexport class BitmapWordInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<BitmapWordTypes.State> {\n    return fetchContractState(BitmapWord, this);\n  }\n\n  view = {\n    mostSignificantBit: async (\n      params: BitmapWordTypes.CallMethodParams<\"mostSignificantBit\">\n    ): Promise<BitmapWordTypes.CallMethodResult<\"mostSignificantBit\">> => {\n      return callMethod(\n        BitmapWord,\n        this,\n        \"mostSignificantBit\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    leastSignificantBit: async (\n      params: BitmapWordTypes.CallMethodParams<\"leastSignificantBit\">\n    ): Promise<BitmapWordTypes.CallMethodResult<\"leastSignificantBit\">> => {\n      return callMethod(\n        BitmapWord,\n        this,\n        \"leastSignificantBit\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    flip: async (\n      params: BitmapWordTypes.CallMethodParams<\"flip\">\n    ): Promise<BitmapWordTypes.CallMethodResult<\"flip\">> => {\n      return callMethod(\n        BitmapWord,\n        this,\n        \"flip\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getNext: async (\n      params: BitmapWordTypes.CallMethodParams<\"getNext\">\n    ): Promise<BitmapWordTypes.CallMethodResult<\"getNext\">> => {\n      return callMethod(\n        BitmapWord,\n        this,\n        \"getNext\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getBitPos: async (\n      params: BitmapWordTypes.CallMethodParams<\"getBitPos\">\n    ): Promise<BitmapWordTypes.CallMethodResult<\"getBitPos\">> => {\n      return callMethod(\n        BitmapWord,\n        this,\n        \"getBitPos\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    mostSignificantBit: async (\n      params: BitmapWordTypes.SignExecuteMethodParams<\"mostSignificantBit\">\n    ): Promise<\n      BitmapWordTypes.SignExecuteMethodResult<\"mostSignificantBit\">\n    > => {\n      return signExecuteMethod(BitmapWord, this, \"mostSignificantBit\", params);\n    },\n    leastSignificantBit: async (\n      params: BitmapWordTypes.SignExecuteMethodParams<\"leastSignificantBit\">\n    ): Promise<\n      BitmapWordTypes.SignExecuteMethodResult<\"leastSignificantBit\">\n    > => {\n      return signExecuteMethod(BitmapWord, this, \"leastSignificantBit\", params);\n    },\n    flip: async (\n      params: BitmapWordTypes.SignExecuteMethodParams<\"flip\">\n    ): Promise<BitmapWordTypes.SignExecuteMethodResult<\"flip\">> => {\n      return signExecuteMethod(BitmapWord, this, \"flip\", params);\n    },\n    getNext: async (\n      params: BitmapWordTypes.SignExecuteMethodParams<\"getNext\">\n    ): Promise<BitmapWordTypes.SignExecuteMethodResult<\"getNext\">> => {\n      return signExecuteMethod(BitmapWord, this, \"getNext\", params);\n    },\n    getBitPos: async (\n      params: BitmapWordTypes.SignExecuteMethodParams<\"getBitPos\">\n    ): Promise<BitmapWordTypes.SignExecuteMethodResult<\"getBitPos\">> => {\n      return signExecuteMethod(BitmapWord, this, \"getBitPos\", params);\n    },\n  };\n\n  async multicall<Calls extends BitmapWordTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<BitmapWordTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends BitmapWordTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<BitmapWordTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | BitmapWordTypes.MultiCallParams\n      | BitmapWordTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      BitmapWord,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"BitmapWord\",\n  \"bytecode\": \"020540d641c941e7429442aa0000010201406516000c301340967b0c1701160013cd0100000000000000000000000000000000344c0816001340803c170016011340802a1701160013c5010000000000000000344c0816001340403c170016011340402a1701160013c10100000000344c08160013203c1700160113202a170116001380010000344c08160013103c1700160113102a17011600134100344c08160013083c1700160113082a170116001310344c081600103c17001601102a1701160010344c0816000e3c170016010e2a170116000e344c0416010d2a17011601020000010201407c16000c301340977b1340ff1701160013ccffffffffffffffffffffffffffffffff380c334c0516011340802b17014a0416001340803c1700160013c4ffffffffffffffff380c334c0516011340402b17014a0416001340403c1700160013c0ffffffff380c334c05160113202b17014a04160013203c17001600138000ffff380c334c05160113102b17014a04160013103c170016001340ff380c334c05160113082b17014a04160013083c17001600130f380c334c051601102b17014a041600103c170016000f380c334c0516010e2b17014a0416000e3c170016000d380c334c0416010d2b170116010201000101000dd3ff38d2a3ce00b4451341937ba0000d160000043b3aa1000100030f024064d327ef6f9f16014c40301600000417030d16033b0d2b0d16033b2a1704a000160438170516050c30170616064c0e16001603160500002b3f20160221170716071606024a0a160016033f20160221170816081606024a40311600000417090d16093b0d2b0c0d363a170aa000160a38170b160b0c30170c160c4c0e1600160b000116092b3f1f160221170d160d160c024a0c16001240ff16093f201f160221170e160e160c020000010101091600124100231241001f124100233d02\",\n  \"codeHash\": \"69fd344eb51899a9bdc30ae94beeb2dcfeb2fc312d39116ebe9d208a55293edd\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"parent\",\n      \"value\"\n    ],\n    \"types\": [\n      \"Address\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      true\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"mostSignificantBit\",\n      \"paramNames\": [\n        \"x\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"leastSignificantBit\",\n      \"paramNames\": [\n        \"x\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"flip\",\n      \"paramNames\": [\n        \"tick\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"getNext\",\n      \"paramNames\": [\n        \"compressed\",\n        \"zeroForOne\",\n        \"tickSpacing\"\n      ],\n      \"paramTypes\": [\n        \"I256\",\n        \"Bool\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\",\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"getBitPos\",\n      \"paramNames\": [\n        \"tick\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"BitMathError\",\n      \"fields\": [\n        {\n          \"name\": \"NoMostSignificantBit\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"150\"\n          }\n        },\n        {\n          \"name\": \"NoLeastSignificantBit\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"151\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, ContractFactory } from \"@alephium/web3\";\n\nlet contracts: ContractFactory<any>[] | undefined = undefined;\n\nexport function getAllContracts(): ContractFactory<any>[] {\n  return contracts ?? [];\n}\n\nexport function registerContract(factory: ContractFactory<any>) {\n  if (contracts === undefined) {\n    contracts = [factory];\n  } else {\n    contracts.push(factory);\n  }\n}\nexport function getContractByCodeHash(codeHash: string): Contract {\n  const c = contracts?.find((c) => c.contract.hasCodeHash(codeHash));\n  if (c === undefined) {\n    throw new Error(\"Unknown code with code hash: \" + codeHash);\n  }\n  return c.contract;\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Address, HexString, Val, Struct } from \"@alephium/web3\";\nimport { default as allStructsJson } from \"../structs.ral.json\";\nexport const AllStructs = allStructsJson.map((json) => Struct.fromJson(json));\nexport interface CollectParams extends Record<string, Val> {\n  token0: HexString;\n  token1: HexString;\n  configIndex: bigint;\n  owner: Address;\n  recipient: Address;\n  tickLower: bigint;\n  tickUpper: bigint;\n  amount0Max: bigint;\n  amount1Max: bigint;\n}\nexport interface Config extends Record<string, Val> {\n  tickSpacing: bigint;\n  fee: bigint;\n  feeProtocol: bigint;\n}\nexport interface DecreaseLiquidityParams extends Record<string, Val> {\n  token0: HexString;\n  token1: HexString;\n  configIndex: bigint;\n  owner: Address;\n  tickLower: bigint;\n  tickUpper: bigint;\n  amount0Min: bigint;\n  amount1Min: bigint;\n}\nexport interface ModifyLiquidityParams extends Record<string, Val> {\n  token0: HexString;\n  token1: HexString;\n  configIndex: bigint;\n  owner: Address;\n  tickLower: bigint;\n  tickUpper: bigint;\n  amount0Desired: bigint;\n  amount1Desired: bigint;\n  amount0Min: bigint;\n  amount1Min: bigint;\n}\nexport interface ModifyPositionParams extends Record<string, Val> {\n  owner: Address;\n  tickLower: bigint;\n  tickUpper: bigint;\n  liquidityDelta: bigint;\n}\nexport interface PositionInfo extends Record<string, Val> {\n  amount0: bigint;\n  amount1: bigint;\n  fees: [bigint, bigint, bigint];\n  avgValue: bigint;\n  avgFees: bigint;\n  avgTime: bigint;\n}\nexport interface ProtocolFees extends Record<string, Val> {\n  token0: bigint;\n  token1: bigint;\n}\nexport interface Reward extends Record<string, Val> {\n  nextOpenTime: bigint;\n  endTime: bigint;\n  amount: bigint;\n}\nexport interface Slot0 extends Record<string, Val> {\n  sqrtPriceX96: bigint;\n  tick: bigint;\n  feeProtocol: bigint;\n}\nexport interface StepComputations extends Record<string, Val> {\n  sqrtPriceStartX96: bigint;\n  tickNext: bigint;\n  initialized: boolean;\n  sqrtPriceNextX96: bigint;\n  amountIn: bigint;\n  amountOut: bigint;\n  feeAmount: bigint;\n}\nexport interface SwapCache extends Record<string, Val> {\n  liquidityStart: bigint;\n  feeProtocol: bigint;\n}\nexport interface SwapParams extends Record<string, Val> {\n  payer: Address;\n  recipient: Address;\n  token: HexString;\n  payToken: HexString;\n  toPay: bigint;\n  withdrawToken: HexString;\n  toWithdraw: bigint;\n  data: HexString;\n}\nexport interface SwapState extends Record<string, Val> {\n  amountSpecifiedRemaining: bigint;\n  amountCalculated: bigint;\n  sqrtPriceX96: bigint;\n  tick: bigint;\n  feeGrowthGlobalX128: bigint;\n  liquidity: bigint;\n  protocolFee: bigint;\n}\n","[\n  {\n    \"name\": \"ModifyLiquidityParams\",\n    \"fieldNames\": [\n      \"token0\",\n      \"token1\",\n      \"configIndex\",\n      \"owner\",\n      \"tickLower\",\n      \"tickUpper\",\n      \"amount0Desired\",\n      \"amount1Desired\",\n      \"amount0Min\",\n      \"amount1Min\"\n    ],\n    \"fieldTypes\": [\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"Address\",\n      \"I256\",\n      \"I256\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  {\n    \"name\": \"Slot0\",\n    \"fieldNames\": [\n      \"sqrtPriceX96\",\n      \"tick\",\n      \"feeProtocol\"\n    ],\n    \"fieldTypes\": [\n      \"U256\",\n      \"I256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      true,\n      true,\n      true\n    ]\n  },\n  {\n    \"name\": \"SwapParams\",\n    \"fieldNames\": [\n      \"payer\",\n      \"recipient\",\n      \"token\",\n      \"payToken\",\n      \"toPay\",\n      \"withdrawToken\",\n      \"toWithdraw\",\n      \"data\"\n    ],\n    \"fieldTypes\": [\n      \"Address\",\n      \"Address\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"ByteVec\",\n      \"U256\",\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  {\n    \"name\": \"ModifyPositionParams\",\n    \"fieldNames\": [\n      \"owner\",\n      \"tickLower\",\n      \"tickUpper\",\n      \"liquidityDelta\"\n    ],\n    \"fieldTypes\": [\n      \"Address\",\n      \"I256\",\n      \"I256\",\n      \"I256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  {\n    \"name\": \"SwapCache\",\n    \"fieldNames\": [\n      \"liquidityStart\",\n      \"feeProtocol\"\n    ],\n    \"fieldTypes\": [\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false\n    ]\n  },\n  {\n    \"name\": \"SwapState\",\n    \"fieldNames\": [\n      \"amountSpecifiedRemaining\",\n      \"amountCalculated\",\n      \"sqrtPriceX96\",\n      \"tick\",\n      \"feeGrowthGlobalX128\",\n      \"liquidity\",\n      \"protocolFee\"\n    ],\n    \"fieldTypes\": [\n      \"I256\",\n      \"I256\",\n      \"U256\",\n      \"I256\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      true,\n      true,\n      true,\n      true,\n      true,\n      true,\n      true\n    ]\n  },\n  {\n    \"name\": \"StepComputations\",\n    \"fieldNames\": [\n      \"sqrtPriceStartX96\",\n      \"tickNext\",\n      \"initialized\",\n      \"sqrtPriceNextX96\",\n      \"amountIn\",\n      \"amountOut\",\n      \"feeAmount\"\n    ],\n    \"fieldTypes\": [\n      \"U256\",\n      \"I256\",\n      \"Bool\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      true,\n      true,\n      true,\n      true,\n      true,\n      true,\n      true\n    ]\n  },\n  {\n    \"name\": \"Reward\",\n    \"fieldNames\": [\n      \"nextOpenTime\",\n      \"endTime\",\n      \"amount\"\n    ],\n    \"fieldTypes\": [\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      true,\n      true,\n      true\n    ]\n  },\n  {\n    \"name\": \"ProtocolFees\",\n    \"fieldNames\": [\n      \"token0\",\n      \"token1\"\n    ],\n    \"fieldTypes\": [\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      true,\n      true\n    ]\n  },\n  {\n    \"name\": \"PositionInfo\",\n    \"fieldNames\": [\n      \"amount0\",\n      \"amount1\",\n      \"fees\",\n      \"avgValue\",\n      \"avgFees\",\n      \"avgTime\"\n    ],\n    \"fieldTypes\": [\n      \"I256\",\n      \"I256\",\n      \"[U256;3]\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  {\n    \"name\": \"Config\",\n    \"fieldNames\": [\n      \"tickSpacing\",\n      \"fee\",\n      \"feeProtocol\"\n    ],\n    \"fieldTypes\": [\n      \"I256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false\n    ]\n  },\n  {\n    \"name\": \"DecreaseLiquidityParams\",\n    \"fieldNames\": [\n      \"token0\",\n      \"token1\",\n      \"configIndex\",\n      \"owner\",\n      \"tickLower\",\n      \"tickUpper\",\n      \"amount0Min\",\n      \"amount1Min\"\n    ],\n    \"fieldTypes\": [\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"Address\",\n      \"I256\",\n      \"I256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  {\n    \"name\": \"CollectParams\",\n    \"fieldNames\": [\n      \"token0\",\n      \"token1\",\n      \"configIndex\",\n      \"owner\",\n      \"recipient\",\n      \"tickLower\",\n      \"tickUpper\",\n      \"amount0Max\",\n      \"amount1Max\"\n    ],\n    \"fieldTypes\": [\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"Address\",\n      \"Address\",\n      \"I256\",\n      \"I256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  }\n]","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as BitmapWordDeployerContractJson } from \"../BitmapWordDeployer.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace BitmapWordDeployerTypes {\n  export type State = Omit<ContractState<any>, \"fields\">;\n\n  export interface CallMethodTable {\n    deploy: {\n      params: CallContractParams<{ payer: Address }>;\n      result: CallContractResult<HexString>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    deploy: {\n      params: SignExecuteContractMethodParams<{ payer: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<BitmapWordDeployerInstance, {}> {\n  encodeFields() {\n    return encodeContractFields({}, this.contract.fieldsSig, types.AllStructs);\n  }\n\n  at(address: string): BitmapWordDeployerInstance {\n    return new BitmapWordDeployerInstance(address);\n  }\n\n  tests = {\n    deploy: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<never, { payer: Address }>,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"deploy\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(initFields: {}, asset?: Asset, address?: string) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const BitmapWordDeployer = new Factory(\n  Contract.fromJson(\n    BitmapWordDeployerContractJson,\n    \"\",\n    \"082de32f22857e094db5658611a1d2ba23e792a7f23a548525e6de2784f2a70b\",\n    types.AllStructs\n  )\n);\nregisterContract(BitmapWordDeployer);\n\n// Use this class to interact with the blockchain\nexport class BitmapWordDeployerInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<BitmapWordDeployerTypes.State> {\n    return fetchContractState(BitmapWordDeployer, this);\n  }\n\n  view = {\n    deploy: async (\n      params: BitmapWordDeployerTypes.CallMethodParams<\"deploy\">\n    ): Promise<BitmapWordDeployerTypes.CallMethodResult<\"deploy\">> => {\n      return callMethod(\n        BitmapWordDeployer,\n        this,\n        \"deploy\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    deploy: async (\n      params: BitmapWordDeployerTypes.SignExecuteMethodParams<\"deploy\">\n    ): Promise<BitmapWordDeployerTypes.SignExecuteMethodResult<\"deploy\">> => {\n      return signExecuteMethod(BitmapWordDeployer, this, \"deploy\", params);\n    },\n  };\n\n  async multicall<Calls extends BitmapWordDeployerTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<BitmapWordDeployerTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends BitmapWordDeployerTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<BitmapWordDeployerTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | BitmapWordDeployerTypes.MultiCallParams\n      | BitmapWordDeployerTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      BitmapWordDeployer,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"BitmapWordDeployer\",\n  \"bytecode\": \"00014026010301040113d3c7309617b41301640c130164170217011600d1a2b316011602af1703160302\",\n  \"codeHash\": \"082de32f22857e094db5658611a1d2ba23e792a7f23a548525e6de2784f2a70b\",\n  \"fieldsSig\": {\n    \"names\": [],\n    \"types\": [],\n    \"isMutable\": []\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"deploy\",\n      \"paramNames\": [\n        \"payer\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"BitmapWord\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": []\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as DexAccountContractJson } from \"../DexAccount.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace DexAccountTypes {\n  export type Fields = {\n    parents: [HexString, HexString];\n    owner: Address;\n    refferer: Address;\n    counter: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    deposit: {\n      params: CallContractParams<{\n        payer: Address;\n        tokenId: HexString;\n        amount: bigint;\n        path: HexString;\n        at: bigint;\n      }>;\n      result: CallContractResult<null>;\n    };\n    createAccount: {\n      params: CallContractParams<{ ref: Address }>;\n      result: CallContractResult<null>;\n    };\n    asRef: {\n      params: CallContractParams<{ defaultRef: Address }>;\n      result: CallContractResult<Address>;\n    };\n    updateCounter: {\n      params: CallContractParams<{ newCounter: bigint }>;\n      result: CallContractResult<null>;\n    };\n    setParents: {\n      params: CallContractParams<{ newParents: [HexString, HexString] }>;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    deposit: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        tokenId: HexString;\n        amount: bigint;\n        path: HexString;\n        at: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    createAccount: {\n      params: SignExecuteContractMethodParams<{ ref: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    asRef: {\n      params: SignExecuteContractMethodParams<{ defaultRef: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    updateCounter: {\n      params: SignExecuteContractMethodParams<{ newCounter: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    setParents: {\n      params: SignExecuteContractMethodParams<{\n        newParents: [HexString, HexString];\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  DexAccountInstance,\n  DexAccountTypes.Fields\n> {\n  encodeFields(fields: DexAccountTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  at(address: string): DexAccountInstance {\n    return new DexAccountInstance(address);\n  }\n\n  tests = {\n    deposit: async (\n      params: TestContractParamsWithoutMaps<\n        DexAccountTypes.Fields,\n        {\n          payer: Address;\n          tokenId: HexString;\n          amount: bigint;\n          path: HexString;\n          at: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"deposit\", params, getContractByCodeHash);\n    },\n    createAccount: async (\n      params: TestContractParamsWithoutMaps<\n        DexAccountTypes.Fields,\n        { ref: Address }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"createAccount\", params, getContractByCodeHash);\n    },\n    asRef: async (\n      params: TestContractParamsWithoutMaps<\n        DexAccountTypes.Fields,\n        { defaultRef: Address }\n      >\n    ): Promise<TestContractResultWithoutMaps<Address>> => {\n      return testMethod(this, \"asRef\", params, getContractByCodeHash);\n    },\n    updateCounter: async (\n      params: TestContractParamsWithoutMaps<\n        DexAccountTypes.Fields,\n        { newCounter: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"updateCounter\", params, getContractByCodeHash);\n    },\n    setParents: async (\n      params: TestContractParamsWithoutMaps<\n        DexAccountTypes.Fields,\n        { newParents: [HexString, HexString] }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"setParents\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: DexAccountTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const DexAccount = new Factory(\n  Contract.fromJson(\n    DexAccountContractJson,\n    \"\",\n    \"66c27c91033d54a2d3edc97dbc36b35022274ddd8a7b84b724631ac37586ed48\",\n    types.AllStructs\n  )\n);\nregisterContract(DexAccount);\n\n// Use this class to interact with the blockchain\nexport class DexAccountInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<DexAccountTypes.State> {\n    return fetchContractState(DexAccount, this);\n  }\n\n  view = {\n    deposit: async (\n      params: DexAccountTypes.CallMethodParams<\"deposit\">\n    ): Promise<DexAccountTypes.CallMethodResult<\"deposit\">> => {\n      return callMethod(\n        DexAccount,\n        this,\n        \"deposit\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    createAccount: async (\n      params: DexAccountTypes.CallMethodParams<\"createAccount\">\n    ): Promise<DexAccountTypes.CallMethodResult<\"createAccount\">> => {\n      return callMethod(\n        DexAccount,\n        this,\n        \"createAccount\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    asRef: async (\n      params: DexAccountTypes.CallMethodParams<\"asRef\">\n    ): Promise<DexAccountTypes.CallMethodResult<\"asRef\">> => {\n      return callMethod(\n        DexAccount,\n        this,\n        \"asRef\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateCounter: async (\n      params: DexAccountTypes.CallMethodParams<\"updateCounter\">\n    ): Promise<DexAccountTypes.CallMethodResult<\"updateCounter\">> => {\n      return callMethod(\n        DexAccount,\n        this,\n        \"updateCounter\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    setParents: async (\n      params: DexAccountTypes.CallMethodParams<\"setParents\">\n    ): Promise<DexAccountTypes.CallMethodResult<\"setParents\">> => {\n      return callMethod(\n        DexAccount,\n        this,\n        \"setParents\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    deposit: async (\n      params: DexAccountTypes.SignExecuteMethodParams<\"deposit\">\n    ): Promise<DexAccountTypes.SignExecuteMethodResult<\"deposit\">> => {\n      return signExecuteMethod(DexAccount, this, \"deposit\", params);\n    },\n    createAccount: async (\n      params: DexAccountTypes.SignExecuteMethodParams<\"createAccount\">\n    ): Promise<DexAccountTypes.SignExecuteMethodResult<\"createAccount\">> => {\n      return signExecuteMethod(DexAccount, this, \"createAccount\", params);\n    },\n    asRef: async (\n      params: DexAccountTypes.SignExecuteMethodParams<\"asRef\">\n    ): Promise<DexAccountTypes.SignExecuteMethodResult<\"asRef\">> => {\n      return signExecuteMethod(DexAccount, this, \"asRef\", params);\n    },\n    updateCounter: async (\n      params: DexAccountTypes.SignExecuteMethodParams<\"updateCounter\">\n    ): Promise<DexAccountTypes.SignExecuteMethodResult<\"updateCounter\">> => {\n      return signExecuteMethod(DexAccount, this, \"updateCounter\", params);\n    },\n    setParents: async (\n      params: DexAccountTypes.SignExecuteMethodParams<\"setParents\">\n    ): Promise<DexAccountTypes.SignExecuteMethodResult<\"setParents\">> => {\n      return signExecuteMethod(DexAccount, this, \"setParents\", params);\n    },\n  };\n\n  async multicall<Calls extends DexAccountTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<DexAccountTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends DexAccountTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<DexAccountTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | DexAccountTypes.MultiCallParams\n      | DexAccountTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      DexAccount,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"DexAccount\",\n  \"bytecode\": \"0505404b409940b240ca40e60103050800402cd3bd481528b417051600ce0116011602aa16047a0e314dc3170616064313202f4c1816047a0e314dc31603cc17071605160777467a4c0418a0020c304c04a0020d2ba10201000106004029d365b302f9b41701160149191341f47b160047cb17021602c54c06ce000d0d160201024a01ce00170316011603130264a000a001a00213036417051704160147b116041605c11801000101010ad358cbdacfa0020c2f4c03ce00024a0216000201030101000ad3511324a7b4b1a50d2f1341937b1600a10201030202000cd375472acbb4b1a50d2f1341937b16001601a101a100\",\n  \"codeHash\": \"66c27c91033d54a2d3edc97dbc36b35022274ddd8a7b84b724631ac37586ed48\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"parents\",\n      \"owner\",\n      \"refferer\",\n      \"counter\"\n    ],\n    \"types\": [\n      \"[ByteVec;2]\",\n      \"Address\",\n      \"Address\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      true,\n      false,\n      false,\n      true\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"deposit\",\n      \"paramNames\": [\n        \"payer\",\n        \"tokenId\",\n        \"amount\",\n        \"path\",\n        \"at\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"ByteVec\",\n        \"U256\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"createAccount\",\n      \"paramNames\": [\n        \"ref\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"asRef\",\n      \"paramNames\": [\n        \"defaultRef\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"Address\"\n      ]\n    },\n    {\n      \"name\": \"updateCounter\",\n      \"paramNames\": [\n        \"newCounter\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"setParents\",\n      \"paramNames\": [\n        \"newParents\"\n      ],\n      \"paramTypes\": [\n        \"[ByteVec;2]\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [],\n  \"enums\": []\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as LiquidityAmountsTestContractJson } from \"../LiquidityAmountsTest.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace LiquidityAmountsTestTypes {\n  export type State = Omit<ContractState<any>, \"fields\">;\n\n  export interface CallMethodTable {\n    getLiquidityForAmount0: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getLiquidityForAmount1: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount1: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getLiquidityForAmounts: {\n      params: CallContractParams<{\n        sqrtRatioX96: bigint;\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n        amount1: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getAmount0ForLiquidity: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidity: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    mulDiv: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    mulDivRoundingUp: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    getLiquidityForAmount0: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getLiquidityForAmount1: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount1: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getLiquidityForAmounts: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioX96: bigint;\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n        amount1: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getAmount0ForLiquidity: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidity: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDiv: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDivRoundingUp: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<LiquidityAmountsTestInstance, {}> {\n  encodeFields() {\n    return encodeContractFields({}, this.contract.fieldsSig, types.AllStructs);\n  }\n\n  consts = { FullMathError: { MulDivOverflow: BigInt(\"351\") } };\n\n  at(address: string): LiquidityAmountsTestInstance {\n    return new LiquidityAmountsTestInstance(address);\n  }\n\n  tests = {\n    getLiquidityForAmount0: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; amount0: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getLiquidityForAmount0\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmount1: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; amount1: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getLiquidityForAmount1\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmounts: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          {\n            sqrtRatioX96: bigint;\n            sqrtRatioAX96: bigint;\n            sqrtRatioBX96: bigint;\n            amount0: bigint;\n            amount1: bigint;\n          }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getLiquidityForAmounts\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount0ForLiquidity: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; liquidity: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getAmount0ForLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { a: bigint; b: bigint; denominator: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"mulDiv\", params, getContractByCodeHash);\n    },\n    mulDivRoundingUp: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { a: bigint; b: bigint; denominator: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"mulDivRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  stateForTest(initFields: {}, asset?: Asset, address?: string) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const LiquidityAmountsTest = new Factory(\n  Contract.fromJson(\n    LiquidityAmountsTestContractJson,\n    \"\",\n    \"6a4ba04c81892909e02efe02e9f3ebf139cf27afd40f5fca01f4a9b98a9003da\",\n    types.AllStructs\n  )\n);\nregisterContract(LiquidityAmountsTest);\n\n// Use this class to interact with the blockchain\nexport class LiquidityAmountsTestInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<LiquidityAmountsTestTypes.State> {\n    return fetchContractState(LiquidityAmountsTest, this);\n  }\n\n  view = {\n    getLiquidityForAmount0: async (\n      params: LiquidityAmountsTestTypes.CallMethodParams<\"getLiquidityForAmount0\">\n    ): Promise<\n      LiquidityAmountsTestTypes.CallMethodResult<\"getLiquidityForAmount0\">\n    > => {\n      return callMethod(\n        LiquidityAmountsTest,\n        this,\n        \"getLiquidityForAmount0\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmount1: async (\n      params: LiquidityAmountsTestTypes.CallMethodParams<\"getLiquidityForAmount1\">\n    ): Promise<\n      LiquidityAmountsTestTypes.CallMethodResult<\"getLiquidityForAmount1\">\n    > => {\n      return callMethod(\n        LiquidityAmountsTest,\n        this,\n        \"getLiquidityForAmount1\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmounts: async (\n      params: LiquidityAmountsTestTypes.CallMethodParams<\"getLiquidityForAmounts\">\n    ): Promise<\n      LiquidityAmountsTestTypes.CallMethodResult<\"getLiquidityForAmounts\">\n    > => {\n      return callMethod(\n        LiquidityAmountsTest,\n        this,\n        \"getLiquidityForAmounts\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount0ForLiquidity: async (\n      params: LiquidityAmountsTestTypes.CallMethodParams<\"getAmount0ForLiquidity\">\n    ): Promise<\n      LiquidityAmountsTestTypes.CallMethodResult<\"getAmount0ForLiquidity\">\n    > => {\n      return callMethod(\n        LiquidityAmountsTest,\n        this,\n        \"getAmount0ForLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: LiquidityAmountsTestTypes.CallMethodParams<\"mulDiv\">\n    ): Promise<LiquidityAmountsTestTypes.CallMethodResult<\"mulDiv\">> => {\n      return callMethod(\n        LiquidityAmountsTest,\n        this,\n        \"mulDiv\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDivRoundingUp: async (\n      params: LiquidityAmountsTestTypes.CallMethodParams<\"mulDivRoundingUp\">\n    ): Promise<\n      LiquidityAmountsTestTypes.CallMethodResult<\"mulDivRoundingUp\">\n    > => {\n      return callMethod(\n        LiquidityAmountsTest,\n        this,\n        \"mulDivRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    getLiquidityForAmount0: async (\n      params: LiquidityAmountsTestTypes.SignExecuteMethodParams<\"getLiquidityForAmount0\">\n    ): Promise<\n      LiquidityAmountsTestTypes.SignExecuteMethodResult<\"getLiquidityForAmount0\">\n    > => {\n      return signExecuteMethod(\n        LiquidityAmountsTest,\n        this,\n        \"getLiquidityForAmount0\",\n        params\n      );\n    },\n    getLiquidityForAmount1: async (\n      params: LiquidityAmountsTestTypes.SignExecuteMethodParams<\"getLiquidityForAmount1\">\n    ): Promise<\n      LiquidityAmountsTestTypes.SignExecuteMethodResult<\"getLiquidityForAmount1\">\n    > => {\n      return signExecuteMethod(\n        LiquidityAmountsTest,\n        this,\n        \"getLiquidityForAmount1\",\n        params\n      );\n    },\n    getLiquidityForAmounts: async (\n      params: LiquidityAmountsTestTypes.SignExecuteMethodParams<\"getLiquidityForAmounts\">\n    ): Promise<\n      LiquidityAmountsTestTypes.SignExecuteMethodResult<\"getLiquidityForAmounts\">\n    > => {\n      return signExecuteMethod(\n        LiquidityAmountsTest,\n        this,\n        \"getLiquidityForAmounts\",\n        params\n      );\n    },\n    getAmount0ForLiquidity: async (\n      params: LiquidityAmountsTestTypes.SignExecuteMethodParams<\"getAmount0ForLiquidity\">\n    ): Promise<\n      LiquidityAmountsTestTypes.SignExecuteMethodResult<\"getAmount0ForLiquidity\">\n    > => {\n      return signExecuteMethod(\n        LiquidityAmountsTest,\n        this,\n        \"getAmount0ForLiquidity\",\n        params\n      );\n    },\n    mulDiv: async (\n      params: LiquidityAmountsTestTypes.SignExecuteMethodParams<\"mulDiv\">\n    ): Promise<LiquidityAmountsTestTypes.SignExecuteMethodResult<\"mulDiv\">> => {\n      return signExecuteMethod(LiquidityAmountsTest, this, \"mulDiv\", params);\n    },\n    mulDivRoundingUp: async (\n      params: LiquidityAmountsTestTypes.SignExecuteMethodParams<\"mulDivRoundingUp\">\n    ): Promise<\n      LiquidityAmountsTestTypes.SignExecuteMethodResult<\"mulDivRoundingUp\">\n    > => {\n      return signExecuteMethod(\n        LiquidityAmountsTest,\n        this,\n        \"mulDivRoundingUp\",\n        params\n      );\n    },\n  };\n\n  async multicall<Calls extends LiquidityAmountsTestTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<LiquidityAmountsTestTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends LiquidityAmountsTestTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<LiquidityAmountsTestTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | LiquidityAmountsTestTypes.MultiCallParams\n      | LiquidityAmountsTestTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      LiquidityAmountsTest,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"LiquidityAmountsTest\",\n  \"bytecode\": \"0006402e405240a440d241b441d701000304010dd3b8a5f4fb1600160113c9010000000000000000000000000004170316021603160116002b000402010003030108d364be47fc160213c901000000000000000000000000160116002b00040201000507014027d345f12d7a16001601324c061601160216030000024a1c16001602314c13160016021603000017051601160016040001170616051606314c0216054a011606024a0516011602160400010201000304010ed374e08b3b160213c9010000000000000000000000002c160116002b160100041703160316002d020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200041703160016011602870c334c0416030d2a02160302\",\n  \"codeHash\": \"6a4ba04c81892909e02efe02e9f3ebf139cf27afd40f5fca01f4a9b98a9003da\",\n  \"fieldsSig\": {\n    \"names\": [],\n    \"types\": [],\n    \"isMutable\": []\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"getLiquidityForAmount0\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"amount0\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getLiquidityForAmount1\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"amount1\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getLiquidityForAmounts\",\n      \"paramNames\": [\n        \"sqrtRatioX96\",\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"amount0\",\n        \"amount1\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getAmount0ForLiquidity\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"liquidity\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDivRoundingUp\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"FullMathError\",\n      \"fields\": [\n        {\n          \"name\": \"MulDivOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"351\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as LiquidityManagmentTestContractJson } from \"../LiquidityManagmentTest.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace LiquidityManagmentTestTypes {\n  export type Fields = {\n    parent: HexString;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    addLiquidity: {\n      params: CallContractParams<{\n        payer: Address;\n        p: types.ModifyLiquidityParams;\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint, HexString]>;\n    };\n    getLiquidityForAmount0: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getLiquidityForAmount1: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount1: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getLiquidityForAmounts: {\n      params: CallContractParams<{\n        sqrtRatioX96: bigint;\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n        amount1: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getAmount0ForLiquidity: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidity: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    mulDiv: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    mulDivRoundingUp: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    configPath: {\n      params: CallContractParams<{ configIndex_: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    poolPath: {\n      params: CallContractParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    poolContractId: {\n      params: CallContractParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    positionPath: {\n      params: CallContractParams<{\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    positionContractId: {\n      params: CallContractParams<{\n        pool: HexString;\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    getSqrtRatioAtTick: {\n      params: CallContractParams<{ tick: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    getTickAtSqrtRatio: {\n      params: CallContractParams<{ sqrtPriceX96: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    addLiquidity: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        p: types.ModifyLiquidityParams;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getLiquidityForAmount0: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getLiquidityForAmount1: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount1: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getLiquidityForAmounts: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioX96: bigint;\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n        amount1: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getAmount0ForLiquidity: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidity: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDiv: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDivRoundingUp: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    configPath: {\n      params: SignExecuteContractMethodParams<{ configIndex_: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    poolPath: {\n      params: SignExecuteContractMethodParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    poolContractId: {\n      params: SignExecuteContractMethodParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    positionPath: {\n      params: SignExecuteContractMethodParams<{\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    positionContractId: {\n      params: SignExecuteContractMethodParams<{\n        pool: HexString;\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getSqrtRatioAtTick: {\n      params: SignExecuteContractMethodParams<{ tick: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getTickAtSqrtRatio: {\n      params: SignExecuteContractMethodParams<{ sqrtPriceX96: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  LiquidityManagmentTestInstance,\n  LiquidityManagmentTestTypes.Fields\n> {\n  encodeFields(fields: LiquidityManagmentTestTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  consts = {\n    LiquidityManagmentError: {\n      MintSlippage: BigInt(\"850\"),\n      BurnSlippage: BigInt(\"851\"),\n    },\n    FullMathError: { MulDivOverflow: BigInt(\"351\") },\n    PathPrefixes: {\n      Tick: BigInt(\"0\"),\n      Position: BigInt(\"1\"),\n      Word: BigInt(\"2\"),\n    },\n    TickMathError: {\n      SqrtPriceX96OutOfBounds: BigInt(\"201\"),\n      TickOutOfBounds: BigInt(\"202\"),\n    },\n  };\n\n  at(address: string): LiquidityManagmentTestInstance {\n    return new LiquidityManagmentTestInstance(address);\n  }\n\n  tests = {\n    addLiquidity: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { payer: Address; p: types.ModifyLiquidityParams }\n      >\n    ): Promise<\n      TestContractResultWithoutMaps<[bigint, bigint, bigint, HexString]>\n    > => {\n      return testMethod(this, \"addLiquidity\", params, getContractByCodeHash);\n    },\n    getLiquidityForAmount0: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; amount0: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getLiquidityForAmount0\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmount1: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; amount1: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getLiquidityForAmount1\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmounts: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        {\n          sqrtRatioX96: bigint;\n          sqrtRatioAX96: bigint;\n          sqrtRatioBX96: bigint;\n          amount0: bigint;\n          amount1: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getLiquidityForAmounts\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount0ForLiquidity: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; liquidity: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getAmount0ForLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"mulDiv\", params, getContractByCodeHash);\n    },\n    mulDivRoundingUp: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"mulDivRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    configPath: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"configPath\", params, getContractByCodeHash);\n    },\n    poolPath: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { factory: HexString; tokens: HexString; configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"poolPath\", params, getContractByCodeHash);\n    },\n    poolContractId: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { factory: HexString; tokens: HexString; configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"poolContractId\", params, getContractByCodeHash);\n    },\n    positionPath: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { o: Address; tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"positionPath\", params, getContractByCodeHash);\n    },\n    positionContractId: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { pool: HexString; o: Address; tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(\n        this,\n        \"positionContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getSqrtRatioAtTick: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { tick: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getSqrtRatioAtTick\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getTickAtSqrtRatio: async (\n      params: TestContractParamsWithoutMaps<\n        LiquidityManagmentTestTypes.Fields,\n        { sqrtPriceX96: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getTickAtSqrtRatio\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  stateForTest(\n    initFields: LiquidityManagmentTestTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const LiquidityManagmentTest = new Factory(\n  Contract.fromJson(\n    LiquidityManagmentTestContractJson,\n    \"\",\n    \"8824caa1efe83247812dfa7f32a80ae3d4603937df2b062437581ac421fa817d\",\n    types.AllStructs\n  )\n);\nregisterContract(LiquidityManagmentTest);\n\n// Use this class to interact with the blockchain\nexport class LiquidityManagmentTestInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<LiquidityManagmentTestTypes.State> {\n    return fetchContractState(LiquidityManagmentTest, this);\n  }\n\n  view = {\n    addLiquidity: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"addLiquidity\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"addLiquidity\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"addLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmount0: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"getLiquidityForAmount0\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"getLiquidityForAmount0\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getLiquidityForAmount0\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmount1: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"getLiquidityForAmount1\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"getLiquidityForAmount1\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getLiquidityForAmount1\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmounts: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"getLiquidityForAmounts\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"getLiquidityForAmounts\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getLiquidityForAmounts\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount0ForLiquidity: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"getAmount0ForLiquidity\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"getAmount0ForLiquidity\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getAmount0ForLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"mulDiv\">\n    ): Promise<LiquidityManagmentTestTypes.CallMethodResult<\"mulDiv\">> => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"mulDiv\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDivRoundingUp: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"mulDivRoundingUp\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"mulDivRoundingUp\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"mulDivRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    configPath: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"configPath\">\n    ): Promise<LiquidityManagmentTestTypes.CallMethodResult<\"configPath\">> => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"configPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    poolPath: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"poolPath\">\n    ): Promise<LiquidityManagmentTestTypes.CallMethodResult<\"poolPath\">> => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"poolPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    poolContractId: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"poolContractId\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"poolContractId\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"poolContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionPath: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"positionPath\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"positionPath\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"positionPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionContractId: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"positionContractId\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"positionContractId\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"positionContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getSqrtRatioAtTick: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"getSqrtRatioAtTick\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"getSqrtRatioAtTick\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getSqrtRatioAtTick\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getTickAtSqrtRatio: async (\n      params: LiquidityManagmentTestTypes.CallMethodParams<\"getTickAtSqrtRatio\">\n    ): Promise<\n      LiquidityManagmentTestTypes.CallMethodResult<\"getTickAtSqrtRatio\">\n    > => {\n      return callMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getTickAtSqrtRatio\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    addLiquidity: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"addLiquidity\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"addLiquidity\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"addLiquidity\",\n        params\n      );\n    },\n    getLiquidityForAmount0: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"getLiquidityForAmount0\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"getLiquidityForAmount0\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getLiquidityForAmount0\",\n        params\n      );\n    },\n    getLiquidityForAmount1: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"getLiquidityForAmount1\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"getLiquidityForAmount1\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getLiquidityForAmount1\",\n        params\n      );\n    },\n    getLiquidityForAmounts: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"getLiquidityForAmounts\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"getLiquidityForAmounts\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getLiquidityForAmounts\",\n        params\n      );\n    },\n    getAmount0ForLiquidity: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"getAmount0ForLiquidity\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"getAmount0ForLiquidity\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getAmount0ForLiquidity\",\n        params\n      );\n    },\n    mulDiv: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"mulDiv\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"mulDiv\">\n    > => {\n      return signExecuteMethod(LiquidityManagmentTest, this, \"mulDiv\", params);\n    },\n    mulDivRoundingUp: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"mulDivRoundingUp\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"mulDivRoundingUp\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"mulDivRoundingUp\",\n        params\n      );\n    },\n    configPath: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"configPath\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"configPath\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"configPath\",\n        params\n      );\n    },\n    poolPath: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"poolPath\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"poolPath\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"poolPath\",\n        params\n      );\n    },\n    poolContractId: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"poolContractId\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"poolContractId\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"poolContractId\",\n        params\n      );\n    },\n    positionPath: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"positionPath\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"positionPath\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"positionPath\",\n        params\n      );\n    },\n    positionContractId: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"positionContractId\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"positionContractId\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"positionContractId\",\n        params\n      );\n    },\n    getSqrtRatioAtTick: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"getSqrtRatioAtTick\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"getSqrtRatioAtTick\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getSqrtRatioAtTick\",\n        params\n      );\n    },\n    getTickAtSqrtRatio: async (\n      params: LiquidityManagmentTestTypes.SignExecuteMethodParams<\"getTickAtSqrtRatio\">\n    ): Promise<\n      LiquidityManagmentTestTypes.SignExecuteMethodResult<\"getTickAtSqrtRatio\">\n    > => {\n      return signExecuteMethod(\n        LiquidityManagmentTest,\n        this,\n        \"getTickAtSqrtRatio\",\n        params\n      );\n    },\n  };\n\n  async multicall<Calls extends LiquidityManagmentTestTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<LiquidityManagmentTestTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends LiquidityManagmentTestTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<LiquidityManagmentTestTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | LiquidityManagmentTestTypes.MultiCallParams\n      | LiquidityManagmentTestTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      LiquidityManagmentTest,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"LiquidityManagmentTest\",\n  \"bytecode\": \"010e409a40c840ec413e416c424e4271427b429042a642bc42d746564a5201030b16044051d39b20ce13ce00160116024416030009170b160516060e0f160b012e170e170d170c160c160d160e160716080003170f160b160416051606000b171016001610a5171116001601a5171216001602a5171316007a7a16011612a316021613a316101611a31600160416051606160f110e160b01251715171416141609347a4c04181615160a341343527b160f16141615160b0201000304010dd3b8a5f4fb1600160113c9010000000000000000000000000005170316021603160116002b000502010003030108d364be47fc160213c901000000000000000000000000160116002b00050201000507014027d345f12d7a16001601324c061601160216030001024a1c16001602314c13160016021603000117051601160016040002170616051606314c0216054a011606024a0516011602160400020201000304010ed374e08b3b160213c9010000000000000000000000002c160116002b160100051703160316002d020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200051703160016011602870c334c0416030d2a0216030200000101010316004002000003040109160016020007cc17031601160344020000030401091600160116020008170316001603cc02010003030108d37afb14100d1600160116021304640201000405010ad35b19984c160116021603000a170416001604cc020000010301413816000c3f264c061600057c203d4a0216003d1701160112800d89e83d321340ca7b16010d380c304c0213ccfffcb933bd6fad37aa2d162d1a5940014a0113cd0100000000000000000000000000000000170216010e380c304c06160213ccfff97272373d413259a46990580e213a2c1340803c4a0116021702160110380c304c06160213ccfff2e50f5f656932ef12357cf3c7fdcc2c1340803c4a011602170216011308380c304c06160213ccffe5caca7e10e4e61c3624eaa0941cd02c1340803c4a011602170216011310380c304c06160213ccffcb9843d60f6159c9db58835c9266442c1340803c4a011602170216011320380c304c06160213ccff973b41fa98c081472e6896dfb254c02c1340803c4a01160217021601134040380c304c06160213ccff2ea16466c96a3843ec78b326b528612c1340803c4a01160217021601134080380c304c06160213ccfe5dee046a99a2a811c461f1969c30532c1340803c4a01160217021601134100380c304c06160213ccfcbe86c7900a88aedcffc83b479aa3a42c1340803c4a01160217021601134200380c304c06160213ccf987a7253ac413176f2b074cf7815e542c1340803c4a01160217021601134400380c304c06160213ccf3392b0822b70005940c7a398e4b70f32c1340803c4a01160217021601134800380c304c06160213cce7159475a2c29b7443b29c7fa6e889d92c1340803c4a01160217021601135000380c304c06160213ccd097f3bdfd2022b8845ad8f792aa58252c1340803c4a01160217021601136000380c304c06160213cca9f746462d870fdf8a65dc1f90e061e52c1340803c4a011602170216011380004000380c304c06160213cc70d869a156d2a1b890bb3df62baf32f72c1340803c4a011602170216011380008000380c304c06160213cc31be135f97d08fd981231505542fcfa62c1340803c4a011602170216011380010000380c304c06160213cc09aa508b5b7a84e1c677de54f3e99bc92c1340803c4a011602170216011380020000380c304c06160213cb5d6af8dedb81196699c329225ee6042c1340803c4a011602170216011380040000380c304c06160213ca2216e584f5fa1ea926041bedfe982c1340803c4a011602170216011380080000380c304c06160213c8048a170391f7dc42444e8fa22c1340803c4a0116021702160005284c060c0d3616022d4a0116021702160213c1010000000091020100010b0141f2d3c6eb44f3160013c101000276a3347a4c0418160013d0fffd8963efd1fc6a506488495d951d5263988d26311340c97b160013203b1701160117020c1703160213cd01000000000000000000000000000000000d2b334c08160313408039170316021340803c1702160213c50100000000000000000d2b334c08160313404039170316021340403c1702160213c101000000000d2b334c0816031320391703160213203c17021602138000ffff334c0816031310391703160213103c170216021340ff334c0816031308391703160213083c17021602130f334c081603103917031602103c170216020f334c0816030e39170316020e3c170216020d334c0416030d3917031603134080344c071601160313407f2b3c17024a06160113407f16032b3b17021603134080314c0e0c0d3613407f2b16032a0c0d361340403c384a0316031340802b1340403b17040c1705160216022c13407f3c170216021340803c170516041605133f3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133e3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133d3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133c3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133b3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133a3b391704160216053c1702160216022c13407f3c170216021340803c17051604160513393b391704160216053c1702160216022c13407f3c170216021340803c17051604160513383b391704160216053c1702160216022c13407f3c170216021340803c17051604160513373b391704160216053c1702160216022c13407f3c170216021340803c17051604160513363b391704160216053c1702160216022c13407f3c170216021340803c17051604160513353b391704160216053c1702160216022c13407f3c170216021340803c17051604160513343b391704160216053c1702160216022c13407f3c170216021340803c17051604160513333b391704160216053c1702160216022c13407f3c170216021340803c17051604160513323b391704160413c63627a301d71055774c85371706160613dcfffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc556351340803c1707160613ccdb2df09e81959a81455e260799a0632f351340803c170816071380800000314c0316073f4a0616071380ffffff383f128100000020170916081380800000314c0316083f4a0616081380ffffff383f128100000020170a1609160a244c031609024a0a160a000c1600324c03160a024a02160902\",\n  \"codeHash\": \"8824caa1efe83247812dfa7f32a80ae3d4603937df2b062437581ac421fa817d\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"parent\"\n    ],\n    \"types\": [\n      \"PoolFactory\"\n    ],\n    \"isMutable\": [\n      false\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"addLiquidity\",\n      \"paramNames\": [\n        \"payer\",\n        \"p\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"ModifyLiquidityParams\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"Pool\"\n      ]\n    },\n    {\n      \"name\": \"getLiquidityForAmount0\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"amount0\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getLiquidityForAmount1\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"amount1\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getLiquidityForAmounts\",\n      \"paramNames\": [\n        \"sqrtRatioX96\",\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"amount0\",\n        \"amount1\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getAmount0ForLiquidity\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"liquidity\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDivRoundingUp\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"configPath\",\n      \"paramNames\": [\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"poolPath\",\n      \"paramNames\": [\n        \"factory\",\n        \"tokens\",\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"PoolFactory\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"poolContractId\",\n      \"paramNames\": [\n        \"factory\",\n        \"tokens\",\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"PoolFactory\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"positionPath\",\n      \"paramNames\": [\n        \"o\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"positionContractId\",\n      \"paramNames\": [\n        \"pool\",\n        \"o\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Pool\",\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getSqrtRatioAtTick\",\n      \"paramNames\": [\n        \"tick\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getTickAtSqrtRatio\",\n      \"paramNames\": [\n        \"sqrtPriceX96\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"LiquidityManagmentError\",\n      \"fields\": [\n        {\n          \"name\": \"MintSlippage\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"850\"\n          }\n        },\n        {\n          \"name\": \"BurnSlippage\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"851\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"FullMathError\",\n      \"fields\": [\n        {\n          \"name\": \"MulDivOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"351\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"PathPrefixes\",\n      \"fields\": [\n        {\n          \"name\": \"Tick\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"Position\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"Word\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"TickMathError\",\n      \"fields\": [\n        {\n          \"name\": \"SqrtPriceX96OutOfBounds\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"201\"\n          }\n        },\n        {\n          \"name\": \"TickOutOfBounds\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"202\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as PoolContractJson } from \"../Pool.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace PoolTypes {\n  export type Fields = {\n    parent: HexString;\n    positionTemplate: HexString;\n    dexAccountTemplate: HexString;\n    tickTemplate: HexString;\n    wordTemplate: HexString;\n    configIndex: bigint;\n    token0: HexString;\n    token1: HexString;\n    token2: HexString;\n    fee: bigint;\n    tickSpacing: bigint;\n    maxLiquidityPerTick: bigint;\n    nextNftIndex: bigint;\n    slot0: types.Slot0;\n    liquidity: bigint;\n    rewardInfos: [types.Reward, types.Reward, types.Reward];\n    feeGrowths: [bigint, bigint, bigint];\n    protocolFees: types.ProtocolFees;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export type InitializeEvent = ContractEvent<{\n    sqrtPriceX96: bigint;\n    tick: bigint;\n  }>;\n  export type SwapStartEvent = ContractEvent<{ sqrtPriceX96: bigint }>;\n  export type SwapStepEvent = ContractEvent<{\n    sqrtPriceX96: bigint;\n    liquidity: bigint;\n  }>;\n  export type SwapEvent = ContractEvent<{\n    sender: Address;\n    recipient: Address;\n    amount0: bigint;\n    amount1: bigint;\n    sqrtPriceX96: bigint;\n    liquidity: bigint;\n    tick: bigint;\n  }>;\n  export type MintEvent = ContractEvent<{\n    sender: Address;\n    owner: Address;\n    tickLower: bigint;\n    tickUpper: bigint;\n    liquidity: bigint;\n    amount0: bigint;\n    amount1: bigint;\n    timestamp: bigint;\n  }>;\n  export type BurnEvent = ContractEvent<{\n    operator: Address;\n    owner: Address;\n    tickLower: bigint;\n    tickUpper: bigint;\n    liquidity: bigint;\n    amount0: bigint;\n    amount1: bigint;\n  }>;\n  export type CollectEvent = ContractEvent<{\n    operator: Address;\n    recipient: Address;\n    owner: Address;\n    tickLower: bigint;\n    tickUpper: bigint;\n    amount0: bigint;\n    amount1: bigint;\n    amount2: bigint;\n  }>;\n  export type FeesEvent = ContractEvent<{\n    owner: Address;\n    tickLower: bigint;\n    tickUpper: bigint;\n    amount0: bigint;\n    amount1: bigint;\n    amount2: bigint;\n    timestamp: bigint;\n  }>;\n  export type CollectProtocolEvent = ContractEvent<{\n    sender: Address;\n    recipient: Address;\n    amount0: bigint;\n    amount1: bigint;\n  }>;\n\n  export interface CallMethodTable {\n    getCollectionUri: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    totalSupply: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    nftByIndex: {\n      params: CallContractParams<{ index: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    validateNFT: {\n      params: CallContractParams<{ nftId: HexString; nftIndex: bigint }>;\n      result: CallContractResult<null>;\n    };\n    getSqrtRatioAtTick: {\n      params: CallContractParams<{ tick: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    getTickAtSqrtRatio: {\n      params: CallContractParams<{ sqrtPriceX96: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    computeSwapStep: {\n      params: CallContractParams<{\n        sqrtRatioCurrentX96: bigint;\n        sqrtRatioTargetX96: bigint;\n        liquidity_: bigint;\n        amountRemaining: bigint;\n        feePips: bigint;\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint, bigint]>;\n    };\n    divRoundingUp: {\n      params: CallContractParams<{ x: bigint; y: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    getNextSqrtPriceFromAmount0RoundingUp: {\n      params: CallContractParams<{\n        sqrtPX96: bigint;\n        liquidity_: bigint;\n        amount: bigint;\n        add: boolean;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getNextSqrtPriceFromAmount1RoundingDown: {\n      params: CallContractParams<{\n        sqrtPX96: bigint;\n        liquidity_: bigint;\n        amount: bigint;\n        add: boolean;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getNextSqrtPriceFromInput: {\n      params: CallContractParams<{\n        sqrtPX96: bigint;\n        liquidity_: bigint;\n        amountIn: bigint;\n        zeroForOne: boolean;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getNextSqrtPriceFromOutput: {\n      params: CallContractParams<{\n        sqrtPX96: bigint;\n        liquidity_: bigint;\n        amountOut: bigint;\n        zeroForOne: boolean;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getAmount0DeltaEx: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidityDelta: bigint;\n        roundUp: boolean;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getAmount0Delta: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidityDelta: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getAmount1DeltaEx: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidityDelta: bigint;\n        roundUp: boolean;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getAmount1Delta: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidityDelta: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    mulDiv: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    mulDivRoundingUp: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    wordPath: {\n      params: CallContractParams<{ compressed: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    getWord: {\n      params: CallContractParams<{ compressed: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    getWordOrTemplate: {\n      params: CallContractParams<{ compressed: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    flipTick: {\n      params: CallContractParams<{ tick: bigint }>;\n      result: CallContractResult<null>;\n    };\n    nextInitializedTickWithinOneWord: {\n      params: CallContractParams<{ tick: bigint; zeroForOne: boolean }>;\n      result: CallContractResult<[bigint, boolean]>;\n    };\n    positionPath: {\n      params: CallContractParams<{\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    positionContractId: {\n      params: CallContractParams<{\n        pool: HexString;\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    configPath: {\n      params: CallContractParams<{ configIndex_: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    poolPath: {\n      params: CallContractParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    poolContractId: {\n      params: CallContractParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    checkTicks: {\n      params: CallContractParams<{ tickLower: bigint; tickUpper: bigint }>;\n      result: CallContractResult<null>;\n    };\n    tickPath: {\n      params: CallContractParams<{ tick: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    toTick: {\n      params: CallContractParams<{ tick: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    getTick: {\n      params: CallContractParams<{ tick: bigint }>;\n      result: CallContractResult<[HexString, boolean]>;\n    };\n    toPosition: {\n      params: CallContractParams<{\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    getPosition: {\n      params: CallContractParams<{\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<[HexString, boolean]>;\n    };\n    getFeeGrowthInside: {\n      params: CallContractParams<{\n        tickLower: HexString;\n        tickUpper: HexString;\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint]>;\n    };\n    updatePosition: {\n      params: CallContractParams<{\n        position: HexString;\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n        liquidityDelta: bigint;\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint]>;\n    };\n    modifyPosition: {\n      params: CallContractParams<{\n        position: HexString;\n        params: types.ModifyPositionParams;\n      }>;\n      result: CallContractResult<[bigint, bigint, [bigint, bigint, bigint]]>;\n    };\n    mint: {\n      params: CallContractParams<{\n        payer: Address;\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n        amount: bigint;\n      }>;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    burn: {\n      params: CallContractParams<{\n        operator: Address;\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n        amount: bigint;\n      }>;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    collect: {\n      params: CallContractParams<{\n        operator: Address;\n        recipient: Address;\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n        maxAmounts: [bigint, bigint, bigint];\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint]>;\n    };\n    withdraw: {\n      params: CallContractParams<{\n        recipient: Address;\n        amounts: [bigint, bigint, bigint];\n      }>;\n      result: CallContractResult<null>;\n    };\n    simulateSwap: {\n      params: CallContractParams<{\n        zeroForOne: boolean;\n        amountSpecified: bigint;\n        data: HexString;\n        maxSteps: bigint;\n      }>;\n      result: CallContractResult<null>;\n    };\n    swap: {\n      params: CallContractParams<{\n        payer: Address;\n        recipient: Address;\n        token: HexString;\n        zeroForOne: boolean;\n        amountSpecified: bigint;\n        sqrtPriceLimitX96: bigint;\n        data: HexString;\n      }>;\n      result: CallContractResult<[bigint, bigint]>;\n    };\n    pop: {\n      params: CallContractParams<{\n        data: HexString;\n        t: HexString;\n        exactInput: boolean;\n      }>;\n      result: CallContractResult<[boolean, bigint, HexString, HexString]>;\n    };\n    swapExactOut: {\n      params: CallContractParams<{ p: types.SwapParams; refRewards: bigint }>;\n      result: CallContractResult<null>;\n    };\n    swapExactIn: {\n      params: CallContractParams<{ p: types.SwapParams; refRewards: bigint }>;\n      result: CallContractResult<null>;\n    };\n    getSqrtPricesX96: {\n      params: CallContractParams<{ tickLower: bigint; tickUpper: bigint }>;\n      result: CallContractResult<[bigint, bigint, bigint]>;\n    };\n    updateReward: {\n      params: CallContractParams<{ index: bigint; blockTime: bigint }>;\n      result: CallContractResult<null>;\n    };\n    updateRewards: {\n      params: CallContractParams<{ blockTime: bigint }>;\n      result: CallContractResult<null>;\n    };\n    extendRewards: {\n      params: CallContractParams<{\n        payer: Address;\n        index: bigint;\n        amount: bigint;\n      }>;\n      result: CallContractResult<null>;\n    };\n    setRewardParams: {\n      params: CallContractParams<{\n        payer: Address;\n        index: bigint;\n        openTime: bigint;\n        endTime: bigint;\n        amount: bigint;\n      }>;\n      result: CallContractResult<null>;\n    };\n    collectProtocolFees: {\n      params: CallContractParams<{ recipient: Address }>;\n      result: CallContractResult<null>;\n    };\n    positionInfo: {\n      params: CallContractParams<{\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n        acc: bigint;\n        iacc0: bigint;\n        iacc1: bigint;\n        t0: bigint;\n        acct0: bigint;\n      }>;\n      result: CallContractResult<types.PositionInfo>;\n    };\n    getTokenUri: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    getCollectionUri: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    totalSupply: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    nftByIndex: {\n      params: SignExecuteContractMethodParams<{ index: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    validateNFT: {\n      params: SignExecuteContractMethodParams<{\n        nftId: HexString;\n        nftIndex: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getSqrtRatioAtTick: {\n      params: SignExecuteContractMethodParams<{ tick: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getTickAtSqrtRatio: {\n      params: SignExecuteContractMethodParams<{ sqrtPriceX96: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    computeSwapStep: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioCurrentX96: bigint;\n        sqrtRatioTargetX96: bigint;\n        liquidity_: bigint;\n        amountRemaining: bigint;\n        feePips: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    divRoundingUp: {\n      params: SignExecuteContractMethodParams<{ x: bigint; y: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getNextSqrtPriceFromAmount0RoundingUp: {\n      params: SignExecuteContractMethodParams<{\n        sqrtPX96: bigint;\n        liquidity_: bigint;\n        amount: bigint;\n        add: boolean;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getNextSqrtPriceFromAmount1RoundingDown: {\n      params: SignExecuteContractMethodParams<{\n        sqrtPX96: bigint;\n        liquidity_: bigint;\n        amount: bigint;\n        add: boolean;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getNextSqrtPriceFromInput: {\n      params: SignExecuteContractMethodParams<{\n        sqrtPX96: bigint;\n        liquidity_: bigint;\n        amountIn: bigint;\n        zeroForOne: boolean;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getNextSqrtPriceFromOutput: {\n      params: SignExecuteContractMethodParams<{\n        sqrtPX96: bigint;\n        liquidity_: bigint;\n        amountOut: bigint;\n        zeroForOne: boolean;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getAmount0DeltaEx: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidityDelta: bigint;\n        roundUp: boolean;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getAmount0Delta: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidityDelta: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getAmount1DeltaEx: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidityDelta: bigint;\n        roundUp: boolean;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getAmount1Delta: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidityDelta: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDiv: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDivRoundingUp: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    wordPath: {\n      params: SignExecuteContractMethodParams<{ compressed: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getWord: {\n      params: SignExecuteContractMethodParams<{ compressed: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getWordOrTemplate: {\n      params: SignExecuteContractMethodParams<{ compressed: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    flipTick: {\n      params: SignExecuteContractMethodParams<{ tick: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    nextInitializedTickWithinOneWord: {\n      params: SignExecuteContractMethodParams<{\n        tick: bigint;\n        zeroForOne: boolean;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    positionPath: {\n      params: SignExecuteContractMethodParams<{\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    positionContractId: {\n      params: SignExecuteContractMethodParams<{\n        pool: HexString;\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    configPath: {\n      params: SignExecuteContractMethodParams<{ configIndex_: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    poolPath: {\n      params: SignExecuteContractMethodParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    poolContractId: {\n      params: SignExecuteContractMethodParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    checkTicks: {\n      params: SignExecuteContractMethodParams<{\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    tickPath: {\n      params: SignExecuteContractMethodParams<{ tick: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    toTick: {\n      params: SignExecuteContractMethodParams<{ tick: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getTick: {\n      params: SignExecuteContractMethodParams<{ tick: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    toPosition: {\n      params: SignExecuteContractMethodParams<{\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getPosition: {\n      params: SignExecuteContractMethodParams<{\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getFeeGrowthInside: {\n      params: SignExecuteContractMethodParams<{\n        tickLower: HexString;\n        tickUpper: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    updatePosition: {\n      params: SignExecuteContractMethodParams<{\n        position: HexString;\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n        liquidityDelta: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    modifyPosition: {\n      params: SignExecuteContractMethodParams<{\n        position: HexString;\n        params: types.ModifyPositionParams;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mint: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n        amount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    burn: {\n      params: SignExecuteContractMethodParams<{\n        operator: Address;\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n        amount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    collect: {\n      params: SignExecuteContractMethodParams<{\n        operator: Address;\n        recipient: Address;\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n        maxAmounts: [bigint, bigint, bigint];\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    withdraw: {\n      params: SignExecuteContractMethodParams<{\n        recipient: Address;\n        amounts: [bigint, bigint, bigint];\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    simulateSwap: {\n      params: SignExecuteContractMethodParams<{\n        zeroForOne: boolean;\n        amountSpecified: bigint;\n        data: HexString;\n        maxSteps: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    swap: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        recipient: Address;\n        token: HexString;\n        zeroForOne: boolean;\n        amountSpecified: bigint;\n        sqrtPriceLimitX96: bigint;\n        data: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    pop: {\n      params: SignExecuteContractMethodParams<{\n        data: HexString;\n        t: HexString;\n        exactInput: boolean;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    swapExactOut: {\n      params: SignExecuteContractMethodParams<{\n        p: types.SwapParams;\n        refRewards: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    swapExactIn: {\n      params: SignExecuteContractMethodParams<{\n        p: types.SwapParams;\n        refRewards: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getSqrtPricesX96: {\n      params: SignExecuteContractMethodParams<{\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    updateReward: {\n      params: SignExecuteContractMethodParams<{\n        index: bigint;\n        blockTime: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    updateRewards: {\n      params: SignExecuteContractMethodParams<{ blockTime: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    extendRewards: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        index: bigint;\n        amount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    setRewardParams: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        index: bigint;\n        openTime: bigint;\n        endTime: bigint;\n        amount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    collectProtocolFees: {\n      params: SignExecuteContractMethodParams<{ recipient: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    positionInfo: {\n      params: SignExecuteContractMethodParams<{\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n        acc: bigint;\n        iacc0: bigint;\n        iacc1: bigint;\n        t0: bigint;\n        acct0: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getTokenUri: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<PoolInstance, PoolTypes.Fields> {\n  encodeFields(fields: PoolTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  eventIndex = {\n    Initialize: 0,\n    SwapStart: 1,\n    SwapStep: 2,\n    Swap: 3,\n    Mint: 4,\n    Burn: 5,\n    Collect: 6,\n    Fees: 7,\n    CollectProtocol: 8,\n  };\n  consts = {\n    MAX_PIPS: BigInt(\"1000000\"),\n    TickMathError: {\n      SqrtPriceX96OutOfBounds: BigInt(\"201\"),\n      TickOutOfBounds: BigInt(\"202\"),\n    },\n    SqrtPriceMathError: {\n      SqrtFromAmountOverflow: BigInt(\"221\"),\n      QuotientTooHigh: BigInt(\"222\"),\n      PriceZero: BigInt(\"223\"),\n      NoLiquidity: BigInt(\"224\"),\n      PriceNotFitIn160: BigInt(\"225\"),\n    },\n    FullMathError: { MulDivOverflow: BigInt(\"351\") },\n    TickBitmapError: { TickNotAligned: BigInt(\"301\") },\n    PathPrefixes: {\n      Tick: BigInt(\"0\"),\n      Position: BigInt(\"1\"),\n      Word: BigInt(\"2\"),\n    },\n    PoolError: {\n      TLU: BigInt(\"102\"),\n      TLM: BigInt(\"103\"),\n      TUM: BigInt(\"104\"),\n      AS: BigInt(\"105\"),\n      SPL: BigInt(\"106\"),\n      NP: BigInt(\"107\"),\n      UnauthorizedMint: BigInt(\"108\"),\n      NFTNotPartOfCollection: BigInt(\"109\"),\n      NFTByIndexNotSupported: BigInt(\"110\"),\n      UnauthorizedRewardSender: BigInt(\"111\"),\n      InvalidRewardParams: BigInt(\"112\"),\n      DexAccountNotFound: BigInt(\"113\"),\n      InvalidRewardIndex: BigInt(\"114\"),\n      RewardPeriodEnded: BigInt(\"115\"),\n      ZeroRewardAmount: BigInt(\"116\"),\n    },\n  };\n\n  at(address: string): PoolInstance {\n    return new PoolInstance(address);\n  }\n\n  tests = {\n    getCollectionUri: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<PoolTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(\n        this,\n        \"getCollectionUri\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    totalSupply: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<PoolTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"totalSupply\", params, getContractByCodeHash);\n    },\n    nftByIndex: async (\n      params: TestContractParamsWithoutMaps<PoolTypes.Fields, { index: bigint }>\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"nftByIndex\", params, getContractByCodeHash);\n    },\n    validateNFT: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { nftId: HexString; nftIndex: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"validateNFT\", params, getContractByCodeHash);\n    },\n    getSqrtRatioAtTick: async (\n      params: TestContractParamsWithoutMaps<PoolTypes.Fields, { tick: bigint }>\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getSqrtRatioAtTick\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getTickAtSqrtRatio: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { sqrtPriceX96: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getTickAtSqrtRatio\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    computeSwapStep: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          sqrtRatioCurrentX96: bigint;\n          sqrtRatioTargetX96: bigint;\n          liquidity_: bigint;\n          amountRemaining: bigint;\n          feePips: bigint;\n        }\n      >\n    ): Promise<\n      TestContractResultWithoutMaps<[bigint, bigint, bigint, bigint]>\n    > => {\n      return testMethod(this, \"computeSwapStep\", params, getContractByCodeHash);\n    },\n    divRoundingUp: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { x: bigint; y: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"divRoundingUp\", params, getContractByCodeHash);\n    },\n    getNextSqrtPriceFromAmount0RoundingUp: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { sqrtPX96: bigint; liquidity_: bigint; amount: bigint; add: boolean }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getNextSqrtPriceFromAmount0RoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getNextSqrtPriceFromAmount1RoundingDown: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { sqrtPX96: bigint; liquidity_: bigint; amount: bigint; add: boolean }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getNextSqrtPriceFromAmount1RoundingDown\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getNextSqrtPriceFromInput: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          sqrtPX96: bigint;\n          liquidity_: bigint;\n          amountIn: bigint;\n          zeroForOne: boolean;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getNextSqrtPriceFromInput\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getNextSqrtPriceFromOutput: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          sqrtPX96: bigint;\n          liquidity_: bigint;\n          amountOut: bigint;\n          zeroForOne: boolean;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getNextSqrtPriceFromOutput\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount0DeltaEx: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          sqrtRatioAX96: bigint;\n          sqrtRatioBX96: bigint;\n          liquidityDelta: bigint;\n          roundUp: boolean;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getAmount0DeltaEx\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount0Delta: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; liquidityDelta: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"getAmount0Delta\", params, getContractByCodeHash);\n    },\n    getAmount1DeltaEx: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          sqrtRatioAX96: bigint;\n          sqrtRatioBX96: bigint;\n          liquidityDelta: bigint;\n          roundUp: boolean;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getAmount1DeltaEx\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount1Delta: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; liquidityDelta: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"getAmount1Delta\", params, getContractByCodeHash);\n    },\n    mulDiv: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"mulDiv\", params, getContractByCodeHash);\n    },\n    mulDivRoundingUp: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"mulDivRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    wordPath: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { compressed: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"wordPath\", params, getContractByCodeHash);\n    },\n    getWord: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { compressed: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getWord\", params, getContractByCodeHash);\n    },\n    getWordOrTemplate: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { compressed: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(\n        this,\n        \"getWordOrTemplate\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    flipTick: async (\n      params: TestContractParamsWithoutMaps<PoolTypes.Fields, { tick: bigint }>\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"flipTick\", params, getContractByCodeHash);\n    },\n    nextInitializedTickWithinOneWord: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { tick: bigint; zeroForOne: boolean }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, boolean]>> => {\n      return testMethod(\n        this,\n        \"nextInitializedTickWithinOneWord\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionPath: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { o: Address; tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"positionPath\", params, getContractByCodeHash);\n    },\n    positionContractId: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { pool: HexString; o: Address; tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(\n        this,\n        \"positionContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    configPath: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"configPath\", params, getContractByCodeHash);\n    },\n    poolPath: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { factory: HexString; tokens: HexString; configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"poolPath\", params, getContractByCodeHash);\n    },\n    poolContractId: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { factory: HexString; tokens: HexString; configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"poolContractId\", params, getContractByCodeHash);\n    },\n    checkTicks: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"checkTicks\", params, getContractByCodeHash);\n    },\n    tickPath: async (\n      params: TestContractParamsWithoutMaps<PoolTypes.Fields, { tick: bigint }>\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"tickPath\", params, getContractByCodeHash);\n    },\n    toTick: async (\n      params: TestContractParamsWithoutMaps<PoolTypes.Fields, { tick: bigint }>\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"toTick\", params, getContractByCodeHash);\n    },\n    getTick: async (\n      params: TestContractParamsWithoutMaps<PoolTypes.Fields, { tick: bigint }>\n    ): Promise<TestContractResultWithoutMaps<[HexString, boolean]>> => {\n      return testMethod(this, \"getTick\", params, getContractByCodeHash);\n    },\n    toPosition: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { owner: Address; tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"toPosition\", params, getContractByCodeHash);\n    },\n    getPosition: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { owner: Address; tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<[HexString, boolean]>> => {\n      return testMethod(this, \"getPosition\", params, getContractByCodeHash);\n    },\n    getFeeGrowthInside: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { tickLower: HexString; tickUpper: HexString }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint, bigint]>> => {\n      return testMethod(\n        this,\n        \"getFeeGrowthInside\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updatePosition: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          position: HexString;\n          owner: Address;\n          tickLower: bigint;\n          tickUpper: bigint;\n          liquidityDelta: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint, bigint]>> => {\n      return testMethod(this, \"updatePosition\", params, getContractByCodeHash);\n    },\n    modifyPosition: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { position: HexString; params: types.ModifyPositionParams }\n      >\n    ): Promise<\n      TestContractResultWithoutMaps<[bigint, bigint, [bigint, bigint, bigint]]>\n    > => {\n      return testMethod(this, \"modifyPosition\", params, getContractByCodeHash);\n    },\n    mint: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          payer: Address;\n          owner: Address;\n          tickLower: bigint;\n          tickUpper: bigint;\n          amount: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(this, \"mint\", params, getContractByCodeHash);\n    },\n    burn: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          operator: Address;\n          owner: Address;\n          tickLower: bigint;\n          tickUpper: bigint;\n          amount: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(this, \"burn\", params, getContractByCodeHash);\n    },\n    collect: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          operator: Address;\n          recipient: Address;\n          owner: Address;\n          tickLower: bigint;\n          tickUpper: bigint;\n          maxAmounts: [bigint, bigint, bigint];\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint, bigint]>> => {\n      return testMethod(this, \"collect\", params, getContractByCodeHash);\n    },\n    withdraw: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { recipient: Address; amounts: [bigint, bigint, bigint] }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"withdraw\", params, getContractByCodeHash);\n    },\n    simulateSwap: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          zeroForOne: boolean;\n          amountSpecified: bigint;\n          data: HexString;\n          maxSteps: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"simulateSwap\", params, getContractByCodeHash);\n    },\n    swap: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          payer: Address;\n          recipient: Address;\n          token: HexString;\n          zeroForOne: boolean;\n          amountSpecified: bigint;\n          sqrtPriceLimitX96: bigint;\n          data: HexString;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint]>> => {\n      return testMethod(this, \"swap\", params, getContractByCodeHash);\n    },\n    pop: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { data: HexString; t: HexString; exactInput: boolean }\n      >\n    ): Promise<\n      TestContractResultWithoutMaps<[boolean, bigint, HexString, HexString]>\n    > => {\n      return testMethod(this, \"pop\", params, getContractByCodeHash);\n    },\n    swapExactOut: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { p: types.SwapParams; refRewards: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"swapExactOut\", params, getContractByCodeHash);\n    },\n    swapExactIn: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { p: types.SwapParams; refRewards: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"swapExactIn\", params, getContractByCodeHash);\n    },\n    getSqrtPricesX96: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint, bigint]>> => {\n      return testMethod(\n        this,\n        \"getSqrtPricesX96\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateReward: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { index: bigint; blockTime: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"updateReward\", params, getContractByCodeHash);\n    },\n    updateRewards: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { blockTime: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"updateRewards\", params, getContractByCodeHash);\n    },\n    extendRewards: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { payer: Address; index: bigint; amount: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"extendRewards\", params, getContractByCodeHash);\n    },\n    setRewardParams: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          payer: Address;\n          index: bigint;\n          openTime: bigint;\n          endTime: bigint;\n          amount: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"setRewardParams\", params, getContractByCodeHash);\n    },\n    collectProtocolFees: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        { recipient: Address }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"collectProtocolFees\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionInfo: async (\n      params: TestContractParamsWithoutMaps<\n        PoolTypes.Fields,\n        {\n          owner: Address;\n          tickLower: bigint;\n          tickUpper: bigint;\n          acc: bigint;\n          iacc0: bigint;\n          iacc1: bigint;\n          t0: bigint;\n          acct0: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<types.PositionInfo>> => {\n      return testMethod(this, \"positionInfo\", params, getContractByCodeHash);\n    },\n    getTokenUri: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<PoolTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getTokenUri\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(initFields: PoolTypes.Fields, asset?: Asset, address?: string) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const Pool = new Factory(\n  Contract.fromJson(\n    PoolContractJson,\n    \"\",\n    \"cdb37fb2772ba9c976a4dc34db15994ecaeef82d8690b9a94c600a81c67f98c4\",\n    types.AllStructs\n  )\n);\nregisterContract(Pool);\n\n// Use this class to interact with the blockchain\nexport class PoolInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<PoolTypes.State> {\n    return fetchContractState(Pool, this);\n  }\n\n  async getContractEventsCurrentCount(): Promise<number> {\n    return getContractEventsCurrentCount(this.address);\n  }\n\n  subscribeInitializeEvent(\n    options: EventSubscribeOptions<PoolTypes.InitializeEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      Pool.contract,\n      this,\n      options,\n      \"Initialize\",\n      fromCount\n    );\n  }\n\n  subscribeSwapStartEvent(\n    options: EventSubscribeOptions<PoolTypes.SwapStartEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      Pool.contract,\n      this,\n      options,\n      \"SwapStart\",\n      fromCount\n    );\n  }\n\n  subscribeSwapStepEvent(\n    options: EventSubscribeOptions<PoolTypes.SwapStepEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      Pool.contract,\n      this,\n      options,\n      \"SwapStep\",\n      fromCount\n    );\n  }\n\n  subscribeSwapEvent(\n    options: EventSubscribeOptions<PoolTypes.SwapEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      Pool.contract,\n      this,\n      options,\n      \"Swap\",\n      fromCount\n    );\n  }\n\n  subscribeMintEvent(\n    options: EventSubscribeOptions<PoolTypes.MintEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      Pool.contract,\n      this,\n      options,\n      \"Mint\",\n      fromCount\n    );\n  }\n\n  subscribeBurnEvent(\n    options: EventSubscribeOptions<PoolTypes.BurnEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      Pool.contract,\n      this,\n      options,\n      \"Burn\",\n      fromCount\n    );\n  }\n\n  subscribeCollectEvent(\n    options: EventSubscribeOptions<PoolTypes.CollectEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      Pool.contract,\n      this,\n      options,\n      \"Collect\",\n      fromCount\n    );\n  }\n\n  subscribeFeesEvent(\n    options: EventSubscribeOptions<PoolTypes.FeesEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      Pool.contract,\n      this,\n      options,\n      \"Fees\",\n      fromCount\n    );\n  }\n\n  subscribeCollectProtocolEvent(\n    options: EventSubscribeOptions<PoolTypes.CollectProtocolEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      Pool.contract,\n      this,\n      options,\n      \"CollectProtocol\",\n      fromCount\n    );\n  }\n\n  subscribeAllEvents(\n    options: EventSubscribeOptions<\n      | PoolTypes.InitializeEvent\n      | PoolTypes.SwapStartEvent\n      | PoolTypes.SwapStepEvent\n      | PoolTypes.SwapEvent\n      | PoolTypes.MintEvent\n      | PoolTypes.BurnEvent\n      | PoolTypes.CollectEvent\n      | PoolTypes.FeesEvent\n      | PoolTypes.CollectProtocolEvent\n    >,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvents(Pool.contract, this, options, fromCount);\n  }\n\n  view = {\n    getCollectionUri: async (\n      params?: PoolTypes.CallMethodParams<\"getCollectionUri\">\n    ): Promise<PoolTypes.CallMethodResult<\"getCollectionUri\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getCollectionUri\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    totalSupply: async (\n      params?: PoolTypes.CallMethodParams<\"totalSupply\">\n    ): Promise<PoolTypes.CallMethodResult<\"totalSupply\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"totalSupply\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    nftByIndex: async (\n      params: PoolTypes.CallMethodParams<\"nftByIndex\">\n    ): Promise<PoolTypes.CallMethodResult<\"nftByIndex\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"nftByIndex\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    validateNFT: async (\n      params: PoolTypes.CallMethodParams<\"validateNFT\">\n    ): Promise<PoolTypes.CallMethodResult<\"validateNFT\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"validateNFT\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getSqrtRatioAtTick: async (\n      params: PoolTypes.CallMethodParams<\"getSqrtRatioAtTick\">\n    ): Promise<PoolTypes.CallMethodResult<\"getSqrtRatioAtTick\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getSqrtRatioAtTick\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getTickAtSqrtRatio: async (\n      params: PoolTypes.CallMethodParams<\"getTickAtSqrtRatio\">\n    ): Promise<PoolTypes.CallMethodResult<\"getTickAtSqrtRatio\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getTickAtSqrtRatio\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    computeSwapStep: async (\n      params: PoolTypes.CallMethodParams<\"computeSwapStep\">\n    ): Promise<PoolTypes.CallMethodResult<\"computeSwapStep\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"computeSwapStep\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    divRoundingUp: async (\n      params: PoolTypes.CallMethodParams<\"divRoundingUp\">\n    ): Promise<PoolTypes.CallMethodResult<\"divRoundingUp\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"divRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getNextSqrtPriceFromAmount0RoundingUp: async (\n      params: PoolTypes.CallMethodParams<\"getNextSqrtPriceFromAmount0RoundingUp\">\n    ): Promise<\n      PoolTypes.CallMethodResult<\"getNextSqrtPriceFromAmount0RoundingUp\">\n    > => {\n      return callMethod(\n        Pool,\n        this,\n        \"getNextSqrtPriceFromAmount0RoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getNextSqrtPriceFromAmount1RoundingDown: async (\n      params: PoolTypes.CallMethodParams<\"getNextSqrtPriceFromAmount1RoundingDown\">\n    ): Promise<\n      PoolTypes.CallMethodResult<\"getNextSqrtPriceFromAmount1RoundingDown\">\n    > => {\n      return callMethod(\n        Pool,\n        this,\n        \"getNextSqrtPriceFromAmount1RoundingDown\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getNextSqrtPriceFromInput: async (\n      params: PoolTypes.CallMethodParams<\"getNextSqrtPriceFromInput\">\n    ): Promise<PoolTypes.CallMethodResult<\"getNextSqrtPriceFromInput\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getNextSqrtPriceFromInput\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getNextSqrtPriceFromOutput: async (\n      params: PoolTypes.CallMethodParams<\"getNextSqrtPriceFromOutput\">\n    ): Promise<PoolTypes.CallMethodResult<\"getNextSqrtPriceFromOutput\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getNextSqrtPriceFromOutput\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount0DeltaEx: async (\n      params: PoolTypes.CallMethodParams<\"getAmount0DeltaEx\">\n    ): Promise<PoolTypes.CallMethodResult<\"getAmount0DeltaEx\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getAmount0DeltaEx\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount0Delta: async (\n      params: PoolTypes.CallMethodParams<\"getAmount0Delta\">\n    ): Promise<PoolTypes.CallMethodResult<\"getAmount0Delta\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getAmount0Delta\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount1DeltaEx: async (\n      params: PoolTypes.CallMethodParams<\"getAmount1DeltaEx\">\n    ): Promise<PoolTypes.CallMethodResult<\"getAmount1DeltaEx\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getAmount1DeltaEx\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount1Delta: async (\n      params: PoolTypes.CallMethodParams<\"getAmount1Delta\">\n    ): Promise<PoolTypes.CallMethodResult<\"getAmount1Delta\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getAmount1Delta\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: PoolTypes.CallMethodParams<\"mulDiv\">\n    ): Promise<PoolTypes.CallMethodResult<\"mulDiv\">> => {\n      return callMethod(Pool, this, \"mulDiv\", params, getContractByCodeHash);\n    },\n    mulDivRoundingUp: async (\n      params: PoolTypes.CallMethodParams<\"mulDivRoundingUp\">\n    ): Promise<PoolTypes.CallMethodResult<\"mulDivRoundingUp\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"mulDivRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    wordPath: async (\n      params: PoolTypes.CallMethodParams<\"wordPath\">\n    ): Promise<PoolTypes.CallMethodResult<\"wordPath\">> => {\n      return callMethod(Pool, this, \"wordPath\", params, getContractByCodeHash);\n    },\n    getWord: async (\n      params: PoolTypes.CallMethodParams<\"getWord\">\n    ): Promise<PoolTypes.CallMethodResult<\"getWord\">> => {\n      return callMethod(Pool, this, \"getWord\", params, getContractByCodeHash);\n    },\n    getWordOrTemplate: async (\n      params: PoolTypes.CallMethodParams<\"getWordOrTemplate\">\n    ): Promise<PoolTypes.CallMethodResult<\"getWordOrTemplate\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getWordOrTemplate\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    flipTick: async (\n      params: PoolTypes.CallMethodParams<\"flipTick\">\n    ): Promise<PoolTypes.CallMethodResult<\"flipTick\">> => {\n      return callMethod(Pool, this, \"flipTick\", params, getContractByCodeHash);\n    },\n    nextInitializedTickWithinOneWord: async (\n      params: PoolTypes.CallMethodParams<\"nextInitializedTickWithinOneWord\">\n    ): Promise<\n      PoolTypes.CallMethodResult<\"nextInitializedTickWithinOneWord\">\n    > => {\n      return callMethod(\n        Pool,\n        this,\n        \"nextInitializedTickWithinOneWord\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionPath: async (\n      params: PoolTypes.CallMethodParams<\"positionPath\">\n    ): Promise<PoolTypes.CallMethodResult<\"positionPath\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"positionPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionContractId: async (\n      params: PoolTypes.CallMethodParams<\"positionContractId\">\n    ): Promise<PoolTypes.CallMethodResult<\"positionContractId\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"positionContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    configPath: async (\n      params: PoolTypes.CallMethodParams<\"configPath\">\n    ): Promise<PoolTypes.CallMethodResult<\"configPath\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"configPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    poolPath: async (\n      params: PoolTypes.CallMethodParams<\"poolPath\">\n    ): Promise<PoolTypes.CallMethodResult<\"poolPath\">> => {\n      return callMethod(Pool, this, \"poolPath\", params, getContractByCodeHash);\n    },\n    poolContractId: async (\n      params: PoolTypes.CallMethodParams<\"poolContractId\">\n    ): Promise<PoolTypes.CallMethodResult<\"poolContractId\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"poolContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    checkTicks: async (\n      params: PoolTypes.CallMethodParams<\"checkTicks\">\n    ): Promise<PoolTypes.CallMethodResult<\"checkTicks\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"checkTicks\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    tickPath: async (\n      params: PoolTypes.CallMethodParams<\"tickPath\">\n    ): Promise<PoolTypes.CallMethodResult<\"tickPath\">> => {\n      return callMethod(Pool, this, \"tickPath\", params, getContractByCodeHash);\n    },\n    toTick: async (\n      params: PoolTypes.CallMethodParams<\"toTick\">\n    ): Promise<PoolTypes.CallMethodResult<\"toTick\">> => {\n      return callMethod(Pool, this, \"toTick\", params, getContractByCodeHash);\n    },\n    getTick: async (\n      params: PoolTypes.CallMethodParams<\"getTick\">\n    ): Promise<PoolTypes.CallMethodResult<\"getTick\">> => {\n      return callMethod(Pool, this, \"getTick\", params, getContractByCodeHash);\n    },\n    toPosition: async (\n      params: PoolTypes.CallMethodParams<\"toPosition\">\n    ): Promise<PoolTypes.CallMethodResult<\"toPosition\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"toPosition\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getPosition: async (\n      params: PoolTypes.CallMethodParams<\"getPosition\">\n    ): Promise<PoolTypes.CallMethodResult<\"getPosition\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getPosition\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getFeeGrowthInside: async (\n      params: PoolTypes.CallMethodParams<\"getFeeGrowthInside\">\n    ): Promise<PoolTypes.CallMethodResult<\"getFeeGrowthInside\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getFeeGrowthInside\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updatePosition: async (\n      params: PoolTypes.CallMethodParams<\"updatePosition\">\n    ): Promise<PoolTypes.CallMethodResult<\"updatePosition\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"updatePosition\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    modifyPosition: async (\n      params: PoolTypes.CallMethodParams<\"modifyPosition\">\n    ): Promise<PoolTypes.CallMethodResult<\"modifyPosition\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"modifyPosition\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mint: async (\n      params: PoolTypes.CallMethodParams<\"mint\">\n    ): Promise<PoolTypes.CallMethodResult<\"mint\">> => {\n      return callMethod(Pool, this, \"mint\", params, getContractByCodeHash);\n    },\n    burn: async (\n      params: PoolTypes.CallMethodParams<\"burn\">\n    ): Promise<PoolTypes.CallMethodResult<\"burn\">> => {\n      return callMethod(Pool, this, \"burn\", params, getContractByCodeHash);\n    },\n    collect: async (\n      params: PoolTypes.CallMethodParams<\"collect\">\n    ): Promise<PoolTypes.CallMethodResult<\"collect\">> => {\n      return callMethod(Pool, this, \"collect\", params, getContractByCodeHash);\n    },\n    withdraw: async (\n      params: PoolTypes.CallMethodParams<\"withdraw\">\n    ): Promise<PoolTypes.CallMethodResult<\"withdraw\">> => {\n      return callMethod(Pool, this, \"withdraw\", params, getContractByCodeHash);\n    },\n    simulateSwap: async (\n      params: PoolTypes.CallMethodParams<\"simulateSwap\">\n    ): Promise<PoolTypes.CallMethodResult<\"simulateSwap\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"simulateSwap\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    swap: async (\n      params: PoolTypes.CallMethodParams<\"swap\">\n    ): Promise<PoolTypes.CallMethodResult<\"swap\">> => {\n      return callMethod(Pool, this, \"swap\", params, getContractByCodeHash);\n    },\n    pop: async (\n      params: PoolTypes.CallMethodParams<\"pop\">\n    ): Promise<PoolTypes.CallMethodResult<\"pop\">> => {\n      return callMethod(Pool, this, \"pop\", params, getContractByCodeHash);\n    },\n    swapExactOut: async (\n      params: PoolTypes.CallMethodParams<\"swapExactOut\">\n    ): Promise<PoolTypes.CallMethodResult<\"swapExactOut\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"swapExactOut\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    swapExactIn: async (\n      params: PoolTypes.CallMethodParams<\"swapExactIn\">\n    ): Promise<PoolTypes.CallMethodResult<\"swapExactIn\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"swapExactIn\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getSqrtPricesX96: async (\n      params: PoolTypes.CallMethodParams<\"getSqrtPricesX96\">\n    ): Promise<PoolTypes.CallMethodResult<\"getSqrtPricesX96\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getSqrtPricesX96\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateReward: async (\n      params: PoolTypes.CallMethodParams<\"updateReward\">\n    ): Promise<PoolTypes.CallMethodResult<\"updateReward\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"updateReward\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateRewards: async (\n      params: PoolTypes.CallMethodParams<\"updateRewards\">\n    ): Promise<PoolTypes.CallMethodResult<\"updateRewards\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"updateRewards\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    extendRewards: async (\n      params: PoolTypes.CallMethodParams<\"extendRewards\">\n    ): Promise<PoolTypes.CallMethodResult<\"extendRewards\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"extendRewards\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    setRewardParams: async (\n      params: PoolTypes.CallMethodParams<\"setRewardParams\">\n    ): Promise<PoolTypes.CallMethodResult<\"setRewardParams\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"setRewardParams\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    collectProtocolFees: async (\n      params: PoolTypes.CallMethodParams<\"collectProtocolFees\">\n    ): Promise<PoolTypes.CallMethodResult<\"collectProtocolFees\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"collectProtocolFees\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionInfo: async (\n      params: PoolTypes.CallMethodParams<\"positionInfo\">\n    ): Promise<PoolTypes.CallMethodResult<\"positionInfo\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"positionInfo\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getTokenUri: async (\n      params?: PoolTypes.CallMethodParams<\"getTokenUri\">\n    ): Promise<PoolTypes.CallMethodResult<\"getTokenUri\">> => {\n      return callMethod(\n        Pool,\n        this,\n        \"getTokenUri\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    getCollectionUri: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getCollectionUri\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getCollectionUri\">> => {\n      return signExecuteMethod(Pool, this, \"getCollectionUri\", params);\n    },\n    totalSupply: async (\n      params: PoolTypes.SignExecuteMethodParams<\"totalSupply\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"totalSupply\">> => {\n      return signExecuteMethod(Pool, this, \"totalSupply\", params);\n    },\n    nftByIndex: async (\n      params: PoolTypes.SignExecuteMethodParams<\"nftByIndex\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"nftByIndex\">> => {\n      return signExecuteMethod(Pool, this, \"nftByIndex\", params);\n    },\n    validateNFT: async (\n      params: PoolTypes.SignExecuteMethodParams<\"validateNFT\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"validateNFT\">> => {\n      return signExecuteMethod(Pool, this, \"validateNFT\", params);\n    },\n    getSqrtRatioAtTick: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getSqrtRatioAtTick\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getSqrtRatioAtTick\">> => {\n      return signExecuteMethod(Pool, this, \"getSqrtRatioAtTick\", params);\n    },\n    getTickAtSqrtRatio: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getTickAtSqrtRatio\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getTickAtSqrtRatio\">> => {\n      return signExecuteMethod(Pool, this, \"getTickAtSqrtRatio\", params);\n    },\n    computeSwapStep: async (\n      params: PoolTypes.SignExecuteMethodParams<\"computeSwapStep\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"computeSwapStep\">> => {\n      return signExecuteMethod(Pool, this, \"computeSwapStep\", params);\n    },\n    divRoundingUp: async (\n      params: PoolTypes.SignExecuteMethodParams<\"divRoundingUp\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"divRoundingUp\">> => {\n      return signExecuteMethod(Pool, this, \"divRoundingUp\", params);\n    },\n    getNextSqrtPriceFromAmount0RoundingUp: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getNextSqrtPriceFromAmount0RoundingUp\">\n    ): Promise<\n      PoolTypes.SignExecuteMethodResult<\"getNextSqrtPriceFromAmount0RoundingUp\">\n    > => {\n      return signExecuteMethod(\n        Pool,\n        this,\n        \"getNextSqrtPriceFromAmount0RoundingUp\",\n        params\n      );\n    },\n    getNextSqrtPriceFromAmount1RoundingDown: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getNextSqrtPriceFromAmount1RoundingDown\">\n    ): Promise<\n      PoolTypes.SignExecuteMethodResult<\"getNextSqrtPriceFromAmount1RoundingDown\">\n    > => {\n      return signExecuteMethod(\n        Pool,\n        this,\n        \"getNextSqrtPriceFromAmount1RoundingDown\",\n        params\n      );\n    },\n    getNextSqrtPriceFromInput: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getNextSqrtPriceFromInput\">\n    ): Promise<\n      PoolTypes.SignExecuteMethodResult<\"getNextSqrtPriceFromInput\">\n    > => {\n      return signExecuteMethod(Pool, this, \"getNextSqrtPriceFromInput\", params);\n    },\n    getNextSqrtPriceFromOutput: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getNextSqrtPriceFromOutput\">\n    ): Promise<\n      PoolTypes.SignExecuteMethodResult<\"getNextSqrtPriceFromOutput\">\n    > => {\n      return signExecuteMethod(\n        Pool,\n        this,\n        \"getNextSqrtPriceFromOutput\",\n        params\n      );\n    },\n    getAmount0DeltaEx: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getAmount0DeltaEx\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getAmount0DeltaEx\">> => {\n      return signExecuteMethod(Pool, this, \"getAmount0DeltaEx\", params);\n    },\n    getAmount0Delta: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getAmount0Delta\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getAmount0Delta\">> => {\n      return signExecuteMethod(Pool, this, \"getAmount0Delta\", params);\n    },\n    getAmount1DeltaEx: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getAmount1DeltaEx\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getAmount1DeltaEx\">> => {\n      return signExecuteMethod(Pool, this, \"getAmount1DeltaEx\", params);\n    },\n    getAmount1Delta: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getAmount1Delta\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getAmount1Delta\">> => {\n      return signExecuteMethod(Pool, this, \"getAmount1Delta\", params);\n    },\n    mulDiv: async (\n      params: PoolTypes.SignExecuteMethodParams<\"mulDiv\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"mulDiv\">> => {\n      return signExecuteMethod(Pool, this, \"mulDiv\", params);\n    },\n    mulDivRoundingUp: async (\n      params: PoolTypes.SignExecuteMethodParams<\"mulDivRoundingUp\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"mulDivRoundingUp\">> => {\n      return signExecuteMethod(Pool, this, \"mulDivRoundingUp\", params);\n    },\n    wordPath: async (\n      params: PoolTypes.SignExecuteMethodParams<\"wordPath\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"wordPath\">> => {\n      return signExecuteMethod(Pool, this, \"wordPath\", params);\n    },\n    getWord: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getWord\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getWord\">> => {\n      return signExecuteMethod(Pool, this, \"getWord\", params);\n    },\n    getWordOrTemplate: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getWordOrTemplate\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getWordOrTemplate\">> => {\n      return signExecuteMethod(Pool, this, \"getWordOrTemplate\", params);\n    },\n    flipTick: async (\n      params: PoolTypes.SignExecuteMethodParams<\"flipTick\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"flipTick\">> => {\n      return signExecuteMethod(Pool, this, \"flipTick\", params);\n    },\n    nextInitializedTickWithinOneWord: async (\n      params: PoolTypes.SignExecuteMethodParams<\"nextInitializedTickWithinOneWord\">\n    ): Promise<\n      PoolTypes.SignExecuteMethodResult<\"nextInitializedTickWithinOneWord\">\n    > => {\n      return signExecuteMethod(\n        Pool,\n        this,\n        \"nextInitializedTickWithinOneWord\",\n        params\n      );\n    },\n    positionPath: async (\n      params: PoolTypes.SignExecuteMethodParams<\"positionPath\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"positionPath\">> => {\n      return signExecuteMethod(Pool, this, \"positionPath\", params);\n    },\n    positionContractId: async (\n      params: PoolTypes.SignExecuteMethodParams<\"positionContractId\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"positionContractId\">> => {\n      return signExecuteMethod(Pool, this, \"positionContractId\", params);\n    },\n    configPath: async (\n      params: PoolTypes.SignExecuteMethodParams<\"configPath\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"configPath\">> => {\n      return signExecuteMethod(Pool, this, \"configPath\", params);\n    },\n    poolPath: async (\n      params: PoolTypes.SignExecuteMethodParams<\"poolPath\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"poolPath\">> => {\n      return signExecuteMethod(Pool, this, \"poolPath\", params);\n    },\n    poolContractId: async (\n      params: PoolTypes.SignExecuteMethodParams<\"poolContractId\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"poolContractId\">> => {\n      return signExecuteMethod(Pool, this, \"poolContractId\", params);\n    },\n    checkTicks: async (\n      params: PoolTypes.SignExecuteMethodParams<\"checkTicks\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"checkTicks\">> => {\n      return signExecuteMethod(Pool, this, \"checkTicks\", params);\n    },\n    tickPath: async (\n      params: PoolTypes.SignExecuteMethodParams<\"tickPath\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"tickPath\">> => {\n      return signExecuteMethod(Pool, this, \"tickPath\", params);\n    },\n    toTick: async (\n      params: PoolTypes.SignExecuteMethodParams<\"toTick\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"toTick\">> => {\n      return signExecuteMethod(Pool, this, \"toTick\", params);\n    },\n    getTick: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getTick\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getTick\">> => {\n      return signExecuteMethod(Pool, this, \"getTick\", params);\n    },\n    toPosition: async (\n      params: PoolTypes.SignExecuteMethodParams<\"toPosition\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"toPosition\">> => {\n      return signExecuteMethod(Pool, this, \"toPosition\", params);\n    },\n    getPosition: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getPosition\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getPosition\">> => {\n      return signExecuteMethod(Pool, this, \"getPosition\", params);\n    },\n    getFeeGrowthInside: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getFeeGrowthInside\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getFeeGrowthInside\">> => {\n      return signExecuteMethod(Pool, this, \"getFeeGrowthInside\", params);\n    },\n    updatePosition: async (\n      params: PoolTypes.SignExecuteMethodParams<\"updatePosition\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"updatePosition\">> => {\n      return signExecuteMethod(Pool, this, \"updatePosition\", params);\n    },\n    modifyPosition: async (\n      params: PoolTypes.SignExecuteMethodParams<\"modifyPosition\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"modifyPosition\">> => {\n      return signExecuteMethod(Pool, this, \"modifyPosition\", params);\n    },\n    mint: async (\n      params: PoolTypes.SignExecuteMethodParams<\"mint\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"mint\">> => {\n      return signExecuteMethod(Pool, this, \"mint\", params);\n    },\n    burn: async (\n      params: PoolTypes.SignExecuteMethodParams<\"burn\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"burn\">> => {\n      return signExecuteMethod(Pool, this, \"burn\", params);\n    },\n    collect: async (\n      params: PoolTypes.SignExecuteMethodParams<\"collect\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"collect\">> => {\n      return signExecuteMethod(Pool, this, \"collect\", params);\n    },\n    withdraw: async (\n      params: PoolTypes.SignExecuteMethodParams<\"withdraw\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"withdraw\">> => {\n      return signExecuteMethod(Pool, this, \"withdraw\", params);\n    },\n    simulateSwap: async (\n      params: PoolTypes.SignExecuteMethodParams<\"simulateSwap\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"simulateSwap\">> => {\n      return signExecuteMethod(Pool, this, \"simulateSwap\", params);\n    },\n    swap: async (\n      params: PoolTypes.SignExecuteMethodParams<\"swap\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"swap\">> => {\n      return signExecuteMethod(Pool, this, \"swap\", params);\n    },\n    pop: async (\n      params: PoolTypes.SignExecuteMethodParams<\"pop\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"pop\">> => {\n      return signExecuteMethod(Pool, this, \"pop\", params);\n    },\n    swapExactOut: async (\n      params: PoolTypes.SignExecuteMethodParams<\"swapExactOut\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"swapExactOut\">> => {\n      return signExecuteMethod(Pool, this, \"swapExactOut\", params);\n    },\n    swapExactIn: async (\n      params: PoolTypes.SignExecuteMethodParams<\"swapExactIn\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"swapExactIn\">> => {\n      return signExecuteMethod(Pool, this, \"swapExactIn\", params);\n    },\n    getSqrtPricesX96: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getSqrtPricesX96\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getSqrtPricesX96\">> => {\n      return signExecuteMethod(Pool, this, \"getSqrtPricesX96\", params);\n    },\n    updateReward: async (\n      params: PoolTypes.SignExecuteMethodParams<\"updateReward\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"updateReward\">> => {\n      return signExecuteMethod(Pool, this, \"updateReward\", params);\n    },\n    updateRewards: async (\n      params: PoolTypes.SignExecuteMethodParams<\"updateRewards\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"updateRewards\">> => {\n      return signExecuteMethod(Pool, this, \"updateRewards\", params);\n    },\n    extendRewards: async (\n      params: PoolTypes.SignExecuteMethodParams<\"extendRewards\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"extendRewards\">> => {\n      return signExecuteMethod(Pool, this, \"extendRewards\", params);\n    },\n    setRewardParams: async (\n      params: PoolTypes.SignExecuteMethodParams<\"setRewardParams\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"setRewardParams\">> => {\n      return signExecuteMethod(Pool, this, \"setRewardParams\", params);\n    },\n    collectProtocolFees: async (\n      params: PoolTypes.SignExecuteMethodParams<\"collectProtocolFees\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"collectProtocolFees\">> => {\n      return signExecuteMethod(Pool, this, \"collectProtocolFees\", params);\n    },\n    positionInfo: async (\n      params: PoolTypes.SignExecuteMethodParams<\"positionInfo\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"positionInfo\">> => {\n      return signExecuteMethod(Pool, this, \"positionInfo\", params);\n    },\n    getTokenUri: async (\n      params: PoolTypes.SignExecuteMethodParams<\"getTokenUri\">\n    ): Promise<PoolTypes.SignExecuteMethodResult<\"getTokenUri\">> => {\n      return signExecuteMethod(Pool, this, \"getTokenUri\", params);\n    },\n  };\n\n  async multicall<Calls extends PoolTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<PoolTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends PoolTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<PoolTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends PoolTypes.MultiCallParams | PoolTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(Pool, this, callss, getContractByCodeHash);\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"Pool\",\n  \"bytecode\": \"4020403609124023403843b747b34916493049ca4a3c4a6c4a9c4ad04afc4b3b4b674c494c6c4c8a4cbc4cd84d0b4d6c4d824d9d4da74dbc4dd24df94e064e1b4e714e854eef4f5f4feb508b512f51b45206524e535c562056ae572f57af57c5589258af597a5a125a4b5bfe5c55010000000102140002010000000102a0000201000101010716000c3413406e7bce0102010002030008160100021702160016024113406d7b0000010301413816000c3f264c061600057c203d4a0216003d1701160112800d89e83d321340ca7b16010d380c304c0213ccfffcb933bd6fad37aa2d162d1a5940014a0113cd0100000000000000000000000000000000170216010e380c304c06160213ccfff97272373d413259a46990580e213a2c1340803c4a0116021702160110380c304c06160213ccfff2e50f5f656932ef12357cf3c7fdcc2c1340803c4a011602170216011308380c304c06160213ccffe5caca7e10e4e61c3624eaa0941cd02c1340803c4a011602170216011310380c304c06160213ccffcb9843d60f6159c9db58835c9266442c1340803c4a011602170216011320380c304c06160213ccff973b41fa98c081472e6896dfb254c02c1340803c4a01160217021601134040380c304c06160213ccff2ea16466c96a3843ec78b326b528612c1340803c4a01160217021601134080380c304c06160213ccfe5dee046a99a2a811c461f1969c30532c1340803c4a01160217021601134100380c304c06160213ccfcbe86c7900a88aedcffc83b479aa3a42c1340803c4a01160217021601134200380c304c06160213ccf987a7253ac413176f2b074cf7815e542c1340803c4a01160217021601134400380c304c06160213ccf3392b0822b70005940c7a398e4b70f32c1340803c4a01160217021601134800380c304c06160213cce7159475a2c29b7443b29c7fa6e889d92c1340803c4a01160217021601135000380c304c06160213ccd097f3bdfd2022b8845ad8f792aa58252c1340803c4a01160217021601136000380c304c06160213cca9f746462d870fdf8a65dc1f90e061e52c1340803c4a011602170216011380004000380c304c06160213cc70d869a156d2a1b890bb3df62baf32f72c1340803c4a011602170216011380008000380c304c06160213cc31be135f97d08fd981231505542fcfa62c1340803c4a011602170216011380010000380c304c06160213cc09aa508b5b7a84e1c677de54f3e99bc92c1340803c4a011602170216011380020000380c304c06160213cb5d6af8dedb81196699c329225ee6042c1340803c4a011602170216011380040000380c304c06160213ca2216e584f5fa1ea926041bedfe982c1340803c4a011602170216011380080000380c304c06160213c8048a170391f7dc42444e8fa22c1340803c4a0116021702160005284c060c0d3616022d4a0116021702160213c1010000000091020100010b0141f2d3c6eb44f3160013c101000276a3347a4c0418160013d0fffd8963efd1fc6a506488495d951d5263988d26311340c97b160013203b1701160117020c1703160213cd01000000000000000000000000000000000d2b334c08160313408039170316021340803c1702160213c50100000000000000000d2b334c08160313404039170316021340403c1702160213c101000000000d2b334c0816031320391703160213203c17021602138000ffff334c0816031310391703160213103c170216021340ff334c0816031308391703160213083c17021602130f334c081603103917031602103c170216020f334c0816030e39170316020e3c170216020d334c0416030d3917031603134080344c071601160313407f2b3c17024a06160113407f16032b3b17021603134080314c0e0c0d3613407f2b16032a0c0d361340403c384a0316031340802b1340403b17040c1705160216022c13407f3c170216021340803c170516041605133f3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133e3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133d3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133c3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133b3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133a3b391704160216053c1702160216022c13407f3c170216021340803c17051604160513393b391704160216053c1702160216022c13407f3c170216021340803c17051604160513383b391704160216053c1702160216022c13407f3c170216021340803c17051604160513373b391704160216053c1702160216022c13407f3c170216021340803c17051604160513363b391704160216053c1702160216022c13407f3c170216021340803c17051604160513353b391704160216053c1702160216022c13407f3c170216021340803c17051604160513343b391704160216053c1702160216022c13407f3c170216021340803c17051604160513333b391704160216053c1702160216022c13407f3c170216021340803c17051604160513323b391704160413c63627a301d71055774c85371706160613dcfffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc556351340803c1707160613ccdb2df09e81959a81455e260799a0632f351340803c170816071380800000314c0316073f4a0616071380ffffff383f128100000020170916081380800000314c0316083f4a0616081380ffffff383f128100000020170a1609160a244c031609024a0a160a00041600324c03160a024a021609020000050d0440c5160016013417051603052917060c17070c17080c17090c170a16064c402316033d13800f424016042b13800f42400010170b16054c0616011600160203000c4a0516001601160203000e1707160b1607344c0216014a0516001602160b1605000a17094a402216054c0616011600160204000e4a0516001601160204000c17081603057c203d1608344c0216014a09160016021603057c203d1605000b1709160116092f170c16054c1e160c7a4c021816064c0216074a0516091600160203000c1707160c7a4c03181606194c0216084a0516091600160204000e17084a1d160c7a4c021816064c0216074a0516001609160203000e1707160c7a4c03181606194c0216084a0516001609160204000c17081606197a4c0818160316083f057c20284c061603057c203d170816067a4c041816091601304c0616033d16072b170a4a071607160413800f424016042b0011170a160916071608160a0200000202010e160016012d160016012e0c2f4c020c4a010d2a020000040901404916020c2f4c0216000216011340603b17041602160037170516034c1c160516022d16002f4c0d1604160535170616061604344c051604160016060011021604160416002d16022a0007024a1d160516022d16002f7a4c041816041605331340dd7b160416052b170716041600160700111708160813d1010000000000000000000000000000000000000000311340e17b1608020000040701402116034c11160213c901000000000000000000000000160100101704160016042a1705160513d1010000000000000000000000000000000000000000311340e17b1605024a0e160213c90100000000000000000000000016010011170616001606331340de7b160016062b0200000404011916000c331340df7b16010c331340e07b16034c07160016011602030008024a061600160116020300090200000404011916000c331340df7b16010c331340e07b16034c07160016011602040009024a061600160116020400080200000406011916021340603b1704160116002b170516034c08160416051601001116000007024a07160416051601001016002d0200000303011b16020b274c0f160016011602057c203d04000c3f057c20024a081600160116023d03000c3f02000004050111160116002b170416034c061602160413c9010000000000000000000000000011024a051602160413c90100000000000000000000000000100200000303011b160205264c0f160016011602057c203d04000e3f057c20024a081600160116023d03000e3f020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200101703160016011602870c334c0416030d2a021603020000010101120e16007a7a1241003a7a05294b033a904a023a221302640200000105011b1600001217011601cb17021602c54c02160202b21301640c130164170417031601ce0416031604c11816020200000103010d1600001217011601cb17021602c54c02160202ce040200000103001e1600ce0a23052413412d7b16007a7ace0a3a7a05294b033a904a023a22170116010013170216010d0c160201020000020602403016007a7ace0a3a7a05294b033a904a023a2216014c02054a01061f170216020014170316021601ce0a0f0e1603010317051704160412bff27618264c0212bff276181704160412800d89e8284c0212800d89e817041604160502010003030108d37afb14100d1600160116021304640201000405010ad35b19984c1601160216030017170416001604cc0200000101010316004002000003040109160016020019cc1703160116034402000003040109160016011602001a170316001603cc0200000202000f16001601261340667b160012bff27618291340677b160112800d89e8271340687b0000010101050c160013026402010001020107d30949c5981600001d17011601cb02000001080240301600001d17011601cb17021602c54c03160204021600a002274c04a00ea00fa0104a030c0c0c170517041703b216001302640c05160316041605130564170717061601ce0316061607c11816020302000003040108160016011602001717031603cb020000030d024039160016011602001717031603cb17041604c54c03160404020c0c0c1709170817070c0c0c170c170b170ab2a0001406414c504800031303640c160716081609160a160b160c13076417061705a0000d2aa1001603ce01160516060d1600c9181604030200000209034047a002a00ea00fa010100f16000101170417031702a002a00ea00fa010100f160101021707170617050c170816080f314c402716087a0f314d130e2ac316087a0f314d0e2a782b16087a0f314d112a783616087a0f314d0e2a7916080d2a17084a7fd5160216031604020000051103404b1602001f170617051603001f17081707ce0b1604040f0d160501001709ce0b1604030f0d16070100170a16097a4b021816064c0216020015160a7a4b021816084c0216030015160516070022170d170c170b1604160b160c160d100f160001041710170f170e16094c0516010d0c16050103160a4c0516010d0c16070103160e160f1610020003050f05405416021603001c560030160016011602160316040023170717061705160405254c403ca004170816020004170916030004170aa0021602264c0b1609160a1604000d170b160b0516051606160702a0021603264c16a001160a1604000d170c1609a0011604000f170d16083f16041f3da104160c160d160516061607021609160a1604000f170e05160e1605160616070205051605160616070201070513024056d3e58379f416011602160300211706170516064c0d16040c2f170716071913406b7b160016014513406c7b16011602160316043f170b170a170917081600160516064c020c4a010da3160516081609160a160b00241710170f170e170d170c160c3d1711160d3d17121600ce061611ac1600ce071612ac1207160116021603160e160f161056750916001601160216031604161116125676161116120201030511024048d39d5023b316011602160316043f057c20170817071706170516011602160300201709160016090da3160916051606160716080024170e170d170c170b170a160a057c203d170f160b057c203d1710160f16100e0c160901051207160116021603160c160d160e56750a16001601160216031604160f161075160f1610020103080c034027d3417830ee160216031604002017081605160616070f0f16080106170b170a1709160016080da316011609160a160b00281206160016011602160316041609160a160b761609160a160b020001040800402ece06ce07ce081706170517040c170716070f314c402216077a0f314d0d2a780c334c12160016077a0f314d102a7816077a0f314d0d2a78ab16070d2a17074a7fda01000418004097d34c88990ba0011704a0021705a00417061601052817070517081605160019001618170906160900045e16030c334c407c16030d2b1703160516000016170b170a160a0004170c1604160c16061601ce0900061710170f170e170d16074c0d1601160e16102a3f2017011608160f3f2017084a0c1601160f3f1f17011608160e16102a3f1f1708160b4c17160a001e17110c0d16110105171216004c051612057c204a011612171316063f16131f3d170616004c04160a06204a01160a1705160d170407160416065f160105244c1f1602430c2f4c0102160016071c4c02ce074a01ce061714160216141607002b171717161817151615160816171603100c16160129024a7f80010307403402416dd3d6407a21160405251340697b560030160405281707a001a002a003170a1709170816034c0c16051608317a4c0418160513c101000276a33313406a7b4a0b16051608337a4c0418160513d0fffd8963efd1fc6a506488495d951d5263988d263113406a7ba00416034c04160a13102e4a03160a103c170c170b1604051608160916034c02a00e4a01a00f160b0c1713171217111710170f170e170d160d05257a4c0418160f1605304c409b1610160300161715171416140004171616034c0416161605314a031616160533171716174c0216054a0116161718160f16181612160dce090006171c171b171a1719160f161416151616161a161b161c1723172217211720171f171e171d1619170f16074c0d160d162116232a3f20170d160e16223f20170e4a0c160d16223f1f170d160e162116232a3f1f170e160c0c334c041623160c2d4a010c1724161316242a171316120c334c091611162316242b13cd0100000000000000000000000000000000161200102a1711160f16202f4c4027161f4c1c161e001e1725a00ea00fa01016031611110d16250104172616034c051626057c204a011626172716123f16271f3d171216034c04161e06204a01161e17104a07160f161d304c03160f000517104a7f5b160fa1011610a1021612a1041613130a2d1728161316282b171316034c071611a10ea01116132aa1114a061611a10fa01216132aa1121604160d201729160e172a160316071d4c041629172a160e172916034c0e160016011602ce0616293dce07162a057c203d16064a0d160016011602ce07162a3dce061629057c203d1606173217311730172f172e172d172c172b16074c0f1600162e162fa3162b162c162d162e162f1630163116321628002d4a1216001602a51733160016021633a3162b162c162d162e162f1630163116321628002c08160016011629162aa001a004a002751629162a020000030d04404116000c13206217030e170416001320132016042a62170516056d1706160171160371311707160716021c170816084c0413c101000276a30d2a4a0313d0fffd8963efd1fc6a506488495d951d5263988d260d2b17091600132016042a16004362170a16074c0416011603444a031603160144170bce00160b1606001b170c16081609160c160a020001091000404716031602414c1e160016031604acce02160047cc1709ce00ce06ce0744ce05001a170a160016031608a3160016031608160a0c110c160901004a40211607160304002b170e170d170c170b16001602a5170f16001602160fa31600b21602160b16043f057c20160c160e13070e160d012a1818160116051606ab00010910004046160016031604acce02160147cc17091609c51340717b1609170ace00ce06ce0744ce05001a170b160016031608a3160016031608160b0c110c160a010016051602414c05160116051606ab4a1a1607160503002b170f170e170d170cb216051606a3b216011602160c16063f160d160f13070e160e012a1818010002020307d3c62bf5cfa0011600000416010004020000020800408716007a0f314d0f2c112ac3170216007a0f314d0f2c112a0d2ac3170316020c2f7a4b041816011602327a4b041816031602324c0102a0040c304c404f160116022b170416007a0f314d0f2c112a0e2ac31705160316022b170616041606314c0516041605160600104a011605170716007a0f314d130e2ac3160713cd0100000000000000000000000000000000a00400102a16007a0f314d130e2ac416007a0f314d0f2c112a0e2ac316072b16007a0f314d0f2c112a0e2ac4160116007a0f314d0f2c112ac400000102000e0c170116010f314c0816011600002f16010d2a17014a340107030a004096d34ca91e1416010f311340727b16020c331340747bce06ce07ce0817051704170316017a0f314d0f2a7817065617071607003016017a0f314d0f2c112a0e2ac3170816017a0f314d0f2c112a0d2ac31607337a4c041816080c331340737b16017a0f314d0f2c112a0d2ac316072b1709160716017a0f314d0f2c112ac416017a0f314d0f2c112a0d2ac316091602160800102a16017a0f314d0f2c112a0d2ac416017a0f314d0f2c112a0e2ac316022a16017a0f314d0f2c112a0e2ac4160016061602ac0107050a004065d375c252e5b4ce00774513406f7b16010f311340727b16040c331340747b56170516021605334c0216024a011605170616061603311340707b16050030ce06ce07ce08170917081707160616017a0f314d0f2c112ac4160316017a0f314d0f2c112a0d2ac416017a0f314d0f2c112a0e2ac316042a16017a0f314d0f2c112a0e2ac4160016017a0f314d13072a781604ac01020103001cd3960b26b3b3ce00411341937ba0111701a01217021600ce061601ab1600ce071602ab0ca1110ca1121208b41600160116026101000840270840d1d300611b5f1601001e17081602001e17091600160116020020170a0c10160a0107170e170d170c170b16081609002217111710170f160100041712160200041713051714051715160b3f1716a0021601264c06161216131616000d17144a14a0021602264c0ba00116131616000d17141612a0011616000f17154a05161216131616000f17150c0c0c171917181717160b0c334c40290c171a161a0f314c4023161a7a0f314d130f2a78161a7a0f314d130c2a782b171b161b160b13cd01000000000000000000000000000000000010161a7a0f314d13172a79161a0d2a171a4a7fd905171c05171d56171e161e16062b171f1607161f2a17201603160b161f2c2a3f1721a0021601264c06161216131621000d171c4a14a0021602264c0ba00116131621000d171c1612a0011621000f171d4a05161216131621000f171da001a00113c901000000000000000000000000001017221622161c3d13c9010000000000000000000000000010161d3d2a1723160416172a1724160516182a17251622162413c901000000000000000000000000001016252a17261614161516171618161916231626162002010000000103d3ee6a5cd514404868747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f616c65706869756d2f746f6b656e2d6c6973742f6d61737465722f636f72652f6d2e6a736f6e02\",\n  \"codeHash\": \"cdb37fb2772ba9c976a4dc34db15994ecaeef82d8690b9a94c600a81c67f98c4\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"parent\",\n      \"positionTemplate\",\n      \"dexAccountTemplate\",\n      \"tickTemplate\",\n      \"wordTemplate\",\n      \"configIndex\",\n      \"token0\",\n      \"token1\",\n      \"token2\",\n      \"fee\",\n      \"tickSpacing\",\n      \"maxLiquidityPerTick\",\n      \"nextNftIndex\",\n      \"slot0\",\n      \"liquidity\",\n      \"rewardInfos\",\n      \"feeGrowths\",\n      \"protocolFees\",\n      \"__stdInterfaceId\"\n    ],\n    \"types\": [\n      \"PoolFactory\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"I256\",\n      \"U256\",\n      \"U256\",\n      \"Slot0\",\n      \"U256\",\n      \"[Reward;3]\",\n      \"[U256;3]\",\n      \"ProtocolFees\",\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      true,\n      true,\n      true,\n      true,\n      true,\n      true,\n      false\n    ]\n  },\n  \"eventsSig\": [\n    {\n      \"name\": \"Initialize\",\n      \"fieldNames\": [\n        \"sqrtPriceX96\",\n        \"tick\"\n      ],\n      \"fieldTypes\": [\n        \"U256\",\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"SwapStart\",\n      \"fieldNames\": [\n        \"sqrtPriceX96\"\n      ],\n      \"fieldTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"SwapStep\",\n      \"fieldNames\": [\n        \"sqrtPriceX96\",\n        \"liquidity\"\n      ],\n      \"fieldTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"Swap\",\n      \"fieldNames\": [\n        \"sender\",\n        \"recipient\",\n        \"amount0\",\n        \"amount1\",\n        \"sqrtPriceX96\",\n        \"liquidity\",\n        \"tick\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"Address\",\n        \"I256\",\n        \"I256\",\n        \"U256\",\n        \"U256\",\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"Mint\",\n      \"fieldNames\": [\n        \"sender\",\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\",\n        \"liquidity\",\n        \"amount0\",\n        \"amount1\",\n        \"timestamp\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"Address\",\n        \"I256\",\n        \"I256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"Burn\",\n      \"fieldNames\": [\n        \"operator\",\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\",\n        \"liquidity\",\n        \"amount0\",\n        \"amount1\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"Address\",\n        \"I256\",\n        \"I256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"Collect\",\n      \"fieldNames\": [\n        \"operator\",\n        \"recipient\",\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\",\n        \"amount0\",\n        \"amount1\",\n        \"amount2\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"Address\",\n        \"Address\",\n        \"I256\",\n        \"I256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"Fees\",\n      \"fieldNames\": [\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\",\n        \"amount0\",\n        \"amount1\",\n        \"amount2\",\n        \"timestamp\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"I256\",\n        \"I256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"CollectProtocol\",\n      \"fieldNames\": [\n        \"sender\",\n        \"recipient\",\n        \"amount0\",\n        \"amount1\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"Address\",\n        \"U256\",\n        \"U256\"\n      ]\n    }\n  ],\n  \"functions\": [\n    {\n      \"name\": \"getCollectionUri\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"totalSupply\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"nftByIndex\",\n      \"paramNames\": [\n        \"index\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"INFT\"\n      ]\n    },\n    {\n      \"name\": \"validateNFT\",\n      \"paramNames\": [\n        \"nftId\",\n        \"nftIndex\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"getSqrtRatioAtTick\",\n      \"paramNames\": [\n        \"tick\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getTickAtSqrtRatio\",\n      \"paramNames\": [\n        \"sqrtPriceX96\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"computeSwapStep\",\n      \"paramNames\": [\n        \"sqrtRatioCurrentX96\",\n        \"sqrtRatioTargetX96\",\n        \"liquidity_\",\n        \"amountRemaining\",\n        \"feePips\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"I256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"divRoundingUp\",\n      \"paramNames\": [\n        \"x\",\n        \"y\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getNextSqrtPriceFromAmount0RoundingUp\",\n      \"paramNames\": [\n        \"sqrtPX96\",\n        \"liquidity_\",\n        \"amount\",\n        \"add\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"Bool\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getNextSqrtPriceFromAmount1RoundingDown\",\n      \"paramNames\": [\n        \"sqrtPX96\",\n        \"liquidity_\",\n        \"amount\",\n        \"add\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"Bool\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getNextSqrtPriceFromInput\",\n      \"paramNames\": [\n        \"sqrtPX96\",\n        \"liquidity_\",\n        \"amountIn\",\n        \"zeroForOne\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"Bool\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getNextSqrtPriceFromOutput\",\n      \"paramNames\": [\n        \"sqrtPX96\",\n        \"liquidity_\",\n        \"amountOut\",\n        \"zeroForOne\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"Bool\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getAmount0DeltaEx\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"liquidityDelta\",\n        \"roundUp\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"Bool\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getAmount0Delta\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"liquidityDelta\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"getAmount1DeltaEx\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"liquidityDelta\",\n        \"roundUp\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"Bool\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getAmount1Delta\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"liquidityDelta\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"mulDiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDivRoundingUp\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"wordPath\",\n      \"paramNames\": [\n        \"compressed\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getWord\",\n      \"paramNames\": [\n        \"compressed\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"BitmapWord\"\n      ]\n    },\n    {\n      \"name\": \"getWordOrTemplate\",\n      \"paramNames\": [\n        \"compressed\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"BitmapWord\"\n      ]\n    },\n    {\n      \"name\": \"flipTick\",\n      \"paramNames\": [\n        \"tick\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"nextInitializedTickWithinOneWord\",\n      \"paramNames\": [\n        \"tick\",\n        \"zeroForOne\"\n      ],\n      \"paramTypes\": [\n        \"I256\",\n        \"Bool\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\",\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"positionPath\",\n      \"paramNames\": [\n        \"o\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"positionContractId\",\n      \"paramNames\": [\n        \"pool\",\n        \"o\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Pool\",\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"configPath\",\n      \"paramNames\": [\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"poolPath\",\n      \"paramNames\": [\n        \"factory\",\n        \"tokens\",\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"PoolFactory\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"poolContractId\",\n      \"paramNames\": [\n        \"factory\",\n        \"tokens\",\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"PoolFactory\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"checkTicks\",\n      \"paramNames\": [\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"tickPath\",\n      \"paramNames\": [\n        \"tick\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"toTick\",\n      \"paramNames\": [\n        \"tick\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"Tick\"\n      ]\n    },\n    {\n      \"name\": \"getTick\",\n      \"paramNames\": [\n        \"tick\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"Tick\",\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"toPosition\",\n      \"paramNames\": [\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"Position\"\n      ]\n    },\n    {\n      \"name\": \"getPosition\",\n      \"paramNames\": [\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"Position\",\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"getFeeGrowthInside\",\n      \"paramNames\": [\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Tick\",\n        \"Tick\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"[U256;3]\"\n      ]\n    },\n    {\n      \"name\": \"updatePosition\",\n      \"paramNames\": [\n        \"position\",\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\",\n        \"liquidityDelta\"\n      ],\n      \"paramTypes\": [\n        \"Position\",\n        \"Address\",\n        \"I256\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"[U256;3]\"\n      ]\n    },\n    {\n      \"name\": \"modifyPosition\",\n      \"paramNames\": [\n        \"position\",\n        \"params\"\n      ],\n      \"paramTypes\": [\n        \"Position\",\n        \"ModifyPositionParams\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\",\n        \"I256\",\n        \"[U256;3]\"\n      ]\n    },\n    {\n      \"name\": \"mint\",\n      \"paramNames\": [\n        \"payer\",\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\",\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"Address\",\n        \"I256\",\n        \"I256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"burn\",\n      \"paramNames\": [\n        \"operator\",\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\",\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"Address\",\n        \"I256\",\n        \"I256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"collect\",\n      \"paramNames\": [\n        \"operator\",\n        \"recipient\",\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\",\n        \"maxAmounts\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"Address\",\n        \"Address\",\n        \"I256\",\n        \"I256\",\n        \"[U256;3]\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"[U256;3]\"\n      ]\n    },\n    {\n      \"name\": \"withdraw\",\n      \"paramNames\": [\n        \"recipient\",\n        \"amounts\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"[U256;3]\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"simulateSwap\",\n      \"paramNames\": [\n        \"zeroForOne\",\n        \"amountSpecified\",\n        \"data\",\n        \"maxSteps\"\n      ],\n      \"paramTypes\": [\n        \"Bool\",\n        \"I256\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        true,\n        false,\n        true\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"swap\",\n      \"paramNames\": [\n        \"payer\",\n        \"recipient\",\n        \"token\",\n        \"zeroForOne\",\n        \"amountSpecified\",\n        \"sqrtPriceLimitX96\",\n        \"data\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"Address\",\n        \"ByteVec\",\n        \"Bool\",\n        \"I256\",\n        \"U256\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\",\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"pop\",\n      \"paramNames\": [\n        \"data\",\n        \"t\",\n        \"exactInput\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\",\n        \"Bool\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"Bool\",\n        \"U256\",\n        \"Pool\",\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"swapExactOut\",\n      \"paramNames\": [\n        \"p\",\n        \"refRewards\"\n      ],\n      \"paramTypes\": [\n        \"SwapParams\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"swapExactIn\",\n      \"paramNames\": [\n        \"p\",\n        \"refRewards\"\n      ],\n      \"paramTypes\": [\n        \"SwapParams\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"getSqrtPricesX96\",\n      \"paramNames\": [\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"updateReward\",\n      \"paramNames\": [\n        \"index\",\n        \"blockTime\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"updateRewards\",\n      \"paramNames\": [\n        \"blockTime\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"extendRewards\",\n      \"paramNames\": [\n        \"payer\",\n        \"index\",\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"setRewardParams\",\n      \"paramNames\": [\n        \"payer\",\n        \"index\",\n        \"openTime\",\n        \"endTime\",\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"collectProtocolFees\",\n      \"paramNames\": [\n        \"recipient\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"positionInfo\",\n      \"paramNames\": [\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\",\n        \"acc\",\n        \"iacc0\",\n        \"iacc1\",\n        \"t0\",\n        \"acct0\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"I256\",\n        \"I256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"PositionInfo\"\n      ]\n    },\n    {\n      \"name\": \"getTokenUri\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    }\n  ],\n  \"constants\": [\n    {\n      \"name\": \"MAX_PIPS\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"1000000\"\n      }\n    }\n  ],\n  \"enums\": [\n    {\n      \"name\": \"TickMathError\",\n      \"fields\": [\n        {\n          \"name\": \"SqrtPriceX96OutOfBounds\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"201\"\n          }\n        },\n        {\n          \"name\": \"TickOutOfBounds\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"202\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"SqrtPriceMathError\",\n      \"fields\": [\n        {\n          \"name\": \"SqrtFromAmountOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"221\"\n          }\n        },\n        {\n          \"name\": \"QuotientTooHigh\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"222\"\n          }\n        },\n        {\n          \"name\": \"PriceZero\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"223\"\n          }\n        },\n        {\n          \"name\": \"NoLiquidity\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"224\"\n          }\n        },\n        {\n          \"name\": \"PriceNotFitIn160\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"225\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"FullMathError\",\n      \"fields\": [\n        {\n          \"name\": \"MulDivOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"351\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"TickBitmapError\",\n      \"fields\": [\n        {\n          \"name\": \"TickNotAligned\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"301\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"PathPrefixes\",\n      \"fields\": [\n        {\n          \"name\": \"Tick\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"Position\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"Word\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"PoolError\",\n      \"fields\": [\n        {\n          \"name\": \"TLU\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"102\"\n          }\n        },\n        {\n          \"name\": \"TLM\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"103\"\n          }\n        },\n        {\n          \"name\": \"TUM\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"104\"\n          }\n        },\n        {\n          \"name\": \"AS\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"105\"\n          }\n        },\n        {\n          \"name\": \"SPL\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"106\"\n          }\n        },\n        {\n          \"name\": \"NP\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"107\"\n          }\n        },\n        {\n          \"name\": \"UnauthorizedMint\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"108\"\n          }\n        },\n        {\n          \"name\": \"NFTNotPartOfCollection\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"109\"\n          }\n        },\n        {\n          \"name\": \"NFTByIndexNotSupported\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"110\"\n          }\n        },\n        {\n          \"name\": \"UnauthorizedRewardSender\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"111\"\n          }\n        },\n        {\n          \"name\": \"InvalidRewardParams\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"112\"\n          }\n        },\n        {\n          \"name\": \"DexAccountNotFound\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"113\"\n          }\n        },\n        {\n          \"name\": \"InvalidRewardIndex\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"114\"\n          }\n        },\n        {\n          \"name\": \"RewardPeriodEnded\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"115\"\n          }\n        },\n        {\n          \"name\": \"ZeroRewardAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"116\"\n          }\n        }\n      ]\n    }\n  ],\n  \"stdInterfaceId\": \"0002\"\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as PoolConfigContractJson } from \"../PoolConfig.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace PoolConfigTypes {\n  export type Fields = {\n    config: types.Config;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    get: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<types.Config>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    get: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  PoolConfigInstance,\n  PoolConfigTypes.Fields\n> {\n  encodeFields(fields: PoolConfigTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  at(address: string): PoolConfigInstance {\n    return new PoolConfigInstance(address);\n  }\n\n  tests = {\n    get: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<PoolConfigTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<types.Config>> => {\n      return testMethod(this, \"get\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: PoolConfigTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const PoolConfig = new Factory(\n  Contract.fromJson(\n    PoolConfigContractJson,\n    \"\",\n    \"aa0838a7a189126cf0627d909b65ba3cfc692813db3d5ccd950763a87d52a0d6\",\n    types.AllStructs\n  )\n);\nregisterContract(PoolConfig);\n\n// Use this class to interact with the blockchain\nexport class PoolConfigInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<PoolConfigTypes.State> {\n    return fetchContractState(PoolConfig, this);\n  }\n\n  view = {\n    get: async (\n      params?: PoolConfigTypes.CallMethodParams<\"get\">\n    ): Promise<PoolConfigTypes.CallMethodResult<\"get\">> => {\n      return callMethod(\n        PoolConfig,\n        this,\n        \"get\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    get: async (\n      params: PoolConfigTypes.SignExecuteMethodParams<\"get\">\n    ): Promise<PoolConfigTypes.SignExecuteMethodResult<\"get\">> => {\n      return signExecuteMethod(PoolConfig, this, \"get\", params);\n    },\n  };\n\n  async multicall<Calls extends PoolConfigTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<PoolConfigTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends PoolConfigTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<PoolConfigTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | PoolConfigTypes.MultiCallParams\n      | PoolConfigTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      PoolConfig,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"PoolConfig\",\n  \"bytecode\": \"030112010000000305d3bda4d814ce00ce01ce0202\",\n  \"codeHash\": \"aa0838a7a189126cf0627d909b65ba3cfc692813db3d5ccd950763a87d52a0d6\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"config\"\n    ],\n    \"types\": [\n      \"Config\"\n    ],\n    \"isMutable\": [\n      false\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"get\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"Config\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": []\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as PoolFactoryContractJson } from \"../PoolFactory.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace PoolFactoryTypes {\n  export type Fields = {\n    owner: Address;\n    poolTemplate: HexString;\n    positionTemplate: HexString;\n    tickTemplate: HexString;\n    wordTemplate: HexString;\n    poolConfigTemplate: HexString;\n    dexAccountTemplate: HexString;\n    nextConfigIndex: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export type ConfigCreatedEvent = ContractEvent<{ index: bigint }>;\n  export type PoolCreatedEvent = ContractEvent<{\n    id: HexString;\n    token0: HexString;\n    token1: HexString;\n    configIndex: bigint;\n  }>;\n  export type FeeTierEnabledEvent = ContractEvent<{\n    fee: bigint;\n    tickSpacing: bigint;\n    index: bigint;\n  }>;\n\n  export interface CallMethodTable {\n    configPath: {\n      params: CallContractParams<{ configIndex_: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    poolPath: {\n      params: CallContractParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    poolContractId: {\n      params: CallContractParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    tickSpacingToMaxLiquidityPerTick: {\n      params: CallContractParams<{ tickSpacing: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    createConfig: {\n      params: CallContractParams<{ config: types.Config }>;\n      result: CallContractResult<bigint>;\n    };\n    create: {\n      params: CallContractParams<{\n        token0: HexString;\n        token1: HexString;\n        configIndex: bigint;\n        sqrtPriceX96: bigint;\n        rewardToken: HexString;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    collectProtocolFees: {\n      params: CallContractParams<{\n        recipient: Address;\n        configIndex: bigint;\n        token0: HexString;\n        token1: HexString;\n      }>;\n      result: CallContractResult<null>;\n    };\n    setRewardParams: {\n      params: CallContractParams<{\n        configIndex: bigint;\n        token0: HexString;\n        token1: HexString;\n        payer: Address;\n        tokenId: HexString;\n        index: bigint;\n        openTime: bigint;\n        endTime: bigint;\n        amount: bigint;\n      }>;\n      result: CallContractResult<null>;\n    };\n    upgrate: {\n      params: CallContractParams<{\n        newBytecode: HexString;\n        newEncodedImmFields: HexString;\n        newEncodedMutFields: HexString;\n      }>;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    configPath: {\n      params: SignExecuteContractMethodParams<{ configIndex_: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    poolPath: {\n      params: SignExecuteContractMethodParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    poolContractId: {\n      params: SignExecuteContractMethodParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    tickSpacingToMaxLiquidityPerTick: {\n      params: SignExecuteContractMethodParams<{ tickSpacing: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    createConfig: {\n      params: SignExecuteContractMethodParams<{ config: types.Config }>;\n      result: SignExecuteScriptTxResult;\n    };\n    create: {\n      params: SignExecuteContractMethodParams<{\n        token0: HexString;\n        token1: HexString;\n        configIndex: bigint;\n        sqrtPriceX96: bigint;\n        rewardToken: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    collectProtocolFees: {\n      params: SignExecuteContractMethodParams<{\n        recipient: Address;\n        configIndex: bigint;\n        token0: HexString;\n        token1: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    setRewardParams: {\n      params: SignExecuteContractMethodParams<{\n        configIndex: bigint;\n        token0: HexString;\n        token1: HexString;\n        payer: Address;\n        tokenId: HexString;\n        index: bigint;\n        openTime: bigint;\n        endTime: bigint;\n        amount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    upgrate: {\n      params: SignExecuteContractMethodParams<{\n        newBytecode: HexString;\n        newEncodedImmFields: HexString;\n        newEncodedMutFields: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  PoolFactoryInstance,\n  PoolFactoryTypes.Fields\n> {\n  encodeFields(fields: PoolFactoryTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  eventIndex = { ConfigCreated: 0, PoolCreated: 1, FeeTierEnabled: 2 };\n  consts = {\n    FactoryError: {\n      InvalidTokenOrder: BigInt(\"701\"),\n      UnauthorizedRewardSender: BigInt(\"702\"),\n      UnauthorizedFeeCollector: BigInt(\"703\"),\n    },\n  };\n\n  at(address: string): PoolFactoryInstance {\n    return new PoolFactoryInstance(address);\n  }\n\n  tests = {\n    configPath: async (\n      params: TestContractParamsWithoutMaps<\n        PoolFactoryTypes.Fields,\n        { configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"configPath\", params, getContractByCodeHash);\n    },\n    poolPath: async (\n      params: TestContractParamsWithoutMaps<\n        PoolFactoryTypes.Fields,\n        { factory: HexString; tokens: HexString; configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"poolPath\", params, getContractByCodeHash);\n    },\n    poolContractId: async (\n      params: TestContractParamsWithoutMaps<\n        PoolFactoryTypes.Fields,\n        { factory: HexString; tokens: HexString; configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"poolContractId\", params, getContractByCodeHash);\n    },\n    tickSpacingToMaxLiquidityPerTick: async (\n      params: TestContractParamsWithoutMaps<\n        PoolFactoryTypes.Fields,\n        { tickSpacing: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"tickSpacingToMaxLiquidityPerTick\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    createConfig: async (\n      params: TestContractParamsWithoutMaps<\n        PoolFactoryTypes.Fields,\n        { config: types.Config }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"createConfig\", params, getContractByCodeHash);\n    },\n    create: async (\n      params: TestContractParamsWithoutMaps<\n        PoolFactoryTypes.Fields,\n        {\n          token0: HexString;\n          token1: HexString;\n          configIndex: bigint;\n          sqrtPriceX96: bigint;\n          rewardToken: HexString;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"create\", params, getContractByCodeHash);\n    },\n    collectProtocolFees: async (\n      params: TestContractParamsWithoutMaps<\n        PoolFactoryTypes.Fields,\n        {\n          recipient: Address;\n          configIndex: bigint;\n          token0: HexString;\n          token1: HexString;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"collectProtocolFees\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    setRewardParams: async (\n      params: TestContractParamsWithoutMaps<\n        PoolFactoryTypes.Fields,\n        {\n          configIndex: bigint;\n          token0: HexString;\n          token1: HexString;\n          payer: Address;\n          tokenId: HexString;\n          index: bigint;\n          openTime: bigint;\n          endTime: bigint;\n          amount: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"setRewardParams\", params, getContractByCodeHash);\n    },\n    upgrate: async (\n      params: TestContractParamsWithoutMaps<\n        PoolFactoryTypes.Fields,\n        {\n          newBytecode: HexString;\n          newEncodedImmFields: HexString;\n          newEncodedMutFields: HexString;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"upgrate\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: PoolFactoryTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const PoolFactory = new Factory(\n  Contract.fromJson(\n    PoolFactoryContractJson,\n    \"\",\n    \"4f2990418f84360134e2fe3c2732c0ad191b52d772a8406ae9afe6e87c427bf3\",\n    types.AllStructs\n  )\n);\nregisterContract(PoolFactory);\n\n// Use this class to interact with the blockchain\nexport class PoolFactoryInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<PoolFactoryTypes.State> {\n    return fetchContractState(PoolFactory, this);\n  }\n\n  async getContractEventsCurrentCount(): Promise<number> {\n    return getContractEventsCurrentCount(this.address);\n  }\n\n  subscribeConfigCreatedEvent(\n    options: EventSubscribeOptions<PoolFactoryTypes.ConfigCreatedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      PoolFactory.contract,\n      this,\n      options,\n      \"ConfigCreated\",\n      fromCount\n    );\n  }\n\n  subscribePoolCreatedEvent(\n    options: EventSubscribeOptions<PoolFactoryTypes.PoolCreatedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      PoolFactory.contract,\n      this,\n      options,\n      \"PoolCreated\",\n      fromCount\n    );\n  }\n\n  subscribeFeeTierEnabledEvent(\n    options: EventSubscribeOptions<PoolFactoryTypes.FeeTierEnabledEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      PoolFactory.contract,\n      this,\n      options,\n      \"FeeTierEnabled\",\n      fromCount\n    );\n  }\n\n  subscribeAllEvents(\n    options: EventSubscribeOptions<\n      | PoolFactoryTypes.ConfigCreatedEvent\n      | PoolFactoryTypes.PoolCreatedEvent\n      | PoolFactoryTypes.FeeTierEnabledEvent\n    >,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvents(\n      PoolFactory.contract,\n      this,\n      options,\n      fromCount\n    );\n  }\n\n  view = {\n    configPath: async (\n      params: PoolFactoryTypes.CallMethodParams<\"configPath\">\n    ): Promise<PoolFactoryTypes.CallMethodResult<\"configPath\">> => {\n      return callMethod(\n        PoolFactory,\n        this,\n        \"configPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    poolPath: async (\n      params: PoolFactoryTypes.CallMethodParams<\"poolPath\">\n    ): Promise<PoolFactoryTypes.CallMethodResult<\"poolPath\">> => {\n      return callMethod(\n        PoolFactory,\n        this,\n        \"poolPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    poolContractId: async (\n      params: PoolFactoryTypes.CallMethodParams<\"poolContractId\">\n    ): Promise<PoolFactoryTypes.CallMethodResult<\"poolContractId\">> => {\n      return callMethod(\n        PoolFactory,\n        this,\n        \"poolContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    tickSpacingToMaxLiquidityPerTick: async (\n      params: PoolFactoryTypes.CallMethodParams<\"tickSpacingToMaxLiquidityPerTick\">\n    ): Promise<\n      PoolFactoryTypes.CallMethodResult<\"tickSpacingToMaxLiquidityPerTick\">\n    > => {\n      return callMethod(\n        PoolFactory,\n        this,\n        \"tickSpacingToMaxLiquidityPerTick\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    createConfig: async (\n      params: PoolFactoryTypes.CallMethodParams<\"createConfig\">\n    ): Promise<PoolFactoryTypes.CallMethodResult<\"createConfig\">> => {\n      return callMethod(\n        PoolFactory,\n        this,\n        \"createConfig\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    create: async (\n      params: PoolFactoryTypes.CallMethodParams<\"create\">\n    ): Promise<PoolFactoryTypes.CallMethodResult<\"create\">> => {\n      return callMethod(\n        PoolFactory,\n        this,\n        \"create\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    collectProtocolFees: async (\n      params: PoolFactoryTypes.CallMethodParams<\"collectProtocolFees\">\n    ): Promise<PoolFactoryTypes.CallMethodResult<\"collectProtocolFees\">> => {\n      return callMethod(\n        PoolFactory,\n        this,\n        \"collectProtocolFees\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    setRewardParams: async (\n      params: PoolFactoryTypes.CallMethodParams<\"setRewardParams\">\n    ): Promise<PoolFactoryTypes.CallMethodResult<\"setRewardParams\">> => {\n      return callMethod(\n        PoolFactory,\n        this,\n        \"setRewardParams\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    upgrate: async (\n      params: PoolFactoryTypes.CallMethodParams<\"upgrate\">\n    ): Promise<PoolFactoryTypes.CallMethodResult<\"upgrate\">> => {\n      return callMethod(\n        PoolFactory,\n        this,\n        \"upgrate\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    configPath: async (\n      params: PoolFactoryTypes.SignExecuteMethodParams<\"configPath\">\n    ): Promise<PoolFactoryTypes.SignExecuteMethodResult<\"configPath\">> => {\n      return signExecuteMethod(PoolFactory, this, \"configPath\", params);\n    },\n    poolPath: async (\n      params: PoolFactoryTypes.SignExecuteMethodParams<\"poolPath\">\n    ): Promise<PoolFactoryTypes.SignExecuteMethodResult<\"poolPath\">> => {\n      return signExecuteMethod(PoolFactory, this, \"poolPath\", params);\n    },\n    poolContractId: async (\n      params: PoolFactoryTypes.SignExecuteMethodParams<\"poolContractId\">\n    ): Promise<PoolFactoryTypes.SignExecuteMethodResult<\"poolContractId\">> => {\n      return signExecuteMethod(PoolFactory, this, \"poolContractId\", params);\n    },\n    tickSpacingToMaxLiquidityPerTick: async (\n      params: PoolFactoryTypes.SignExecuteMethodParams<\"tickSpacingToMaxLiquidityPerTick\">\n    ): Promise<\n      PoolFactoryTypes.SignExecuteMethodResult<\"tickSpacingToMaxLiquidityPerTick\">\n    > => {\n      return signExecuteMethod(\n        PoolFactory,\n        this,\n        \"tickSpacingToMaxLiquidityPerTick\",\n        params\n      );\n    },\n    createConfig: async (\n      params: PoolFactoryTypes.SignExecuteMethodParams<\"createConfig\">\n    ): Promise<PoolFactoryTypes.SignExecuteMethodResult<\"createConfig\">> => {\n      return signExecuteMethod(PoolFactory, this, \"createConfig\", params);\n    },\n    create: async (\n      params: PoolFactoryTypes.SignExecuteMethodParams<\"create\">\n    ): Promise<PoolFactoryTypes.SignExecuteMethodResult<\"create\">> => {\n      return signExecuteMethod(PoolFactory, this, \"create\", params);\n    },\n    collectProtocolFees: async (\n      params: PoolFactoryTypes.SignExecuteMethodParams<\"collectProtocolFees\">\n    ): Promise<\n      PoolFactoryTypes.SignExecuteMethodResult<\"collectProtocolFees\">\n    > => {\n      return signExecuteMethod(\n        PoolFactory,\n        this,\n        \"collectProtocolFees\",\n        params\n      );\n    },\n    setRewardParams: async (\n      params: PoolFactoryTypes.SignExecuteMethodParams<\"setRewardParams\">\n    ): Promise<PoolFactoryTypes.SignExecuteMethodResult<\"setRewardParams\">> => {\n      return signExecuteMethod(PoolFactory, this, \"setRewardParams\", params);\n    },\n    upgrate: async (\n      params: PoolFactoryTypes.SignExecuteMethodParams<\"upgrate\">\n    ): Promise<PoolFactoryTypes.SignExecuteMethodResult<\"upgrate\">> => {\n      return signExecuteMethod(PoolFactory, this, \"upgrate\", params);\n    },\n  };\n\n  async multicall<Calls extends PoolFactoryTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<PoolFactoryTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends PoolFactoryTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<PoolFactoryTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | PoolFactoryTypes.MultiCallParams\n      | PoolFactoryTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      PoolFactory,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"PoolFactory\",\n  \"bytecode\": \"08090a1f403540a040ed41ce41f5422b424500000101010316004002000003040109160016020000cc17031601160344020000030401091600160116020001170316001603cc020000010401403a12bff276187a7a16003a7a05294b033a224a023a90160021170112800d89e87a7a16003a7a05294b033a904a023a22160021170216021601207a7a16003a7a05294b033a904a023a223d0d2a170313ccffffffffffffffffffffffffffffffff16032d0201000307014028d31c03e050b4ce00451341937b16001601160213036413006417041703a0001705a000000017061606ce0516031604c118a0000d2aa1000516055e07160116001605601605020100054020014079d3530365c2160071160171311342bd7b16020000cb17050c0f1605010017081707170616060003170916030d0dce010105170a1603160a0c170d170c170b0c0c0c0c0c0c0c0c0c171a171917181717171617151714171317120c0c0c171d171c171b0c0c171f171eb1ce02ce06ce03ce0416021600160116041607160616091406414c50480002130d640c160b160c160d0c16121613161416151616161716181619161a161b161c161d161e161f131364170f170eb116001601441602000117101610ce01160e160fc1171106161116001601160261161102010004050012d32d2d48cdb4ce00451342bf7bb1160216034416010002170416000d0c160401330103090a001ad3132dd93db4ce00451342be7bb11601160244160000021709160316041608a316031605160616071608110c1609013201000303000ad3333a48b8b4ce00451341937b160016011602bb\",\n  \"codeHash\": \"4f2990418f84360134e2fe3c2732c0ad191b52d772a8406ae9afe6e87c427bf3\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"owner\",\n      \"poolTemplate\",\n      \"positionTemplate\",\n      \"tickTemplate\",\n      \"wordTemplate\",\n      \"poolConfigTemplate\",\n      \"dexAccountTemplate\",\n      \"nextConfigIndex\"\n    ],\n    \"types\": [\n      \"Address\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      true\n    ]\n  },\n  \"eventsSig\": [\n    {\n      \"name\": \"ConfigCreated\",\n      \"fieldNames\": [\n        \"index\"\n      ],\n      \"fieldTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"PoolCreated\",\n      \"fieldNames\": [\n        \"id\",\n        \"token0\",\n        \"token1\",\n        \"configIndex\"\n      ],\n      \"fieldTypes\": [\n        \"ByteVec\",\n        \"ByteVec\",\n        \"ByteVec\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"FeeTierEnabled\",\n      \"fieldNames\": [\n        \"fee\",\n        \"tickSpacing\",\n        \"index\"\n      ],\n      \"fieldTypes\": [\n        \"U256\",\n        \"I256\",\n        \"U256\"\n      ]\n    }\n  ],\n  \"functions\": [\n    {\n      \"name\": \"configPath\",\n      \"paramNames\": [\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"poolPath\",\n      \"paramNames\": [\n        \"factory\",\n        \"tokens\",\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"PoolFactory\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"poolContractId\",\n      \"paramNames\": [\n        \"factory\",\n        \"tokens\",\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"PoolFactory\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"tickSpacingToMaxLiquidityPerTick\",\n      \"paramNames\": [\n        \"tickSpacing\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"createConfig\",\n      \"paramNames\": [\n        \"config\"\n      ],\n      \"paramTypes\": [\n        \"Config\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"create\",\n      \"paramNames\": [\n        \"token0\",\n        \"token1\",\n        \"configIndex\",\n        \"sqrtPriceX96\",\n        \"rewardToken\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\",\n        \"U256\",\n        \"U256\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"Pool\"\n      ]\n    },\n    {\n      \"name\": \"collectProtocolFees\",\n      \"paramNames\": [\n        \"recipient\",\n        \"configIndex\",\n        \"token0\",\n        \"token1\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\",\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"setRewardParams\",\n      \"paramNames\": [\n        \"configIndex\",\n        \"token0\",\n        \"token1\",\n        \"payer\",\n        \"tokenId\",\n        \"index\",\n        \"openTime\",\n        \"endTime\",\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"ByteVec\",\n        \"ByteVec\",\n        \"Address\",\n        \"ByteVec\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"upgrate\",\n      \"paramNames\": [\n        \"newBytecode\",\n        \"newEncodedImmFields\",\n        \"newEncodedMutFields\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"FactoryError\",\n      \"fields\": [\n        {\n          \"name\": \"InvalidTokenOrder\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"701\"\n          }\n        },\n        {\n          \"name\": \"UnauthorizedRewardSender\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"702\"\n          }\n        },\n        {\n          \"name\": \"UnauthorizedFeeCollector\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"703\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as PoolUserContractJson } from \"../PoolUser.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace PoolUserTypes {\n  export type Fields = {\n    token0: HexString;\n    token1: HexString;\n    token2: HexString;\n    pool0: HexString;\n    pool1: HexString;\n    pool2: HexString;\n    pool3: HexString;\n    factory: HexString;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    deploy: {\n      params: CallContractParams<{\n        counter: bigint;\n        payer: Address;\n        pool_: HexString;\n        position_: HexString;\n        tick_: HexString;\n        word_: HexString;\n        factory_: HexString;\n        config_: HexString;\n        dexAccount_: HexString;\n      }>;\n      result: CallContractResult<\n        [\n          HexString,\n          HexString,\n          HexString,\n          HexString,\n          HexString,\n          HexString,\n          HexString,\n          HexString\n        ]\n      >;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    deploy: {\n      params: SignExecuteContractMethodParams<{\n        counter: bigint;\n        payer: Address;\n        pool_: HexString;\n        position_: HexString;\n        tick_: HexString;\n        word_: HexString;\n        factory_: HexString;\n        config_: HexString;\n        dexAccount_: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<PoolUserInstance, PoolUserTypes.Fields> {\n  encodeFields(fields: PoolUserTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  at(address: string): PoolUserInstance {\n    return new PoolUserInstance(address);\n  }\n\n  tests = {\n    deploy: async (\n      params: TestContractParamsWithoutMaps<\n        PoolUserTypes.Fields,\n        {\n          counter: bigint;\n          payer: Address;\n          pool_: HexString;\n          position_: HexString;\n          tick_: HexString;\n          word_: HexString;\n          factory_: HexString;\n          config_: HexString;\n          dexAccount_: HexString;\n        }\n      >\n    ): Promise<\n      TestContractResultWithoutMaps<\n        [\n          HexString,\n          HexString,\n          HexString,\n          HexString,\n          HexString,\n          HexString,\n          HexString,\n          HexString\n        ]\n      >\n    > => {\n      return testMethod(this, \"deploy\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: PoolUserTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const PoolUser = new Factory(\n  Contract.fromJson(\n    PoolUserContractJson,\n    \"\",\n    \"9e1114eb366a5aaf1730e3b16068a672c09da46c4e5111267129c5a0bceeaa97\",\n    types.AllStructs\n  )\n);\nregisterContract(PoolUser);\n\n// Use this class to interact with the blockchain\nexport class PoolUserInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<PoolUserTypes.State> {\n    return fetchContractState(PoolUser, this);\n  }\n\n  view = {\n    deploy: async (\n      params: PoolUserTypes.CallMethodParams<\"deploy\">\n    ): Promise<PoolUserTypes.CallMethodResult<\"deploy\">> => {\n      return callMethod(\n        PoolUser,\n        this,\n        \"deploy\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    deploy: async (\n      params: PoolUserTypes.SignExecuteMethodParams<\"deploy\">\n    ): Promise<PoolUserTypes.SignExecuteMethodResult<\"deploy\">> => {\n      return signExecuteMethod(PoolUser, this, \"deploy\", params);\n    },\n  };\n\n  async multicall<Calls extends PoolUserTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<PoolUserTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends PoolUserTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<PoolUserTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | PoolUserTypes.MultiCallParams\n      | PoolUserTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      PoolUser,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"PoolUser\",\n  \"bytecode\": \"08014198010009140840b7d30719041916000c304c09a000a001a002a003a004a005a006a00702b21301640c130164170a170914010016051609160a13c41bc16d674ec800001601c9a10014010116051609160a13c41bc16d674ec800001601c9a10114010216051609160a13c41bc16d674ec800001601c9a102b21602160316041605160716081307640c130164170c170b1401031606160b160cc1a107060c0c0f0da0070104170d061341f40c0f0da0070104170e06134bb80c0f0da0070104170f061367100c0f0da00701041710a00071a00171334c06a0001711a001a1001611a101a00171a00271334c06a0011712a002a1011612a102a00071a00171334c06a0001713a001a1001613a101cda000160d13c9010000000000000000000000001400110da0070105a103a000a001160e13c9010000000000000000000000001400110da0070105a104a000a002160f13c9010000000000000000000000001400110da0070105a105a001a002161013c9010000000000000000000000001400110da0070105a106a000a001a002a003a004a005a006a00702\",\n  \"codeHash\": \"9e1114eb366a5aaf1730e3b16068a672c09da46c4e5111267129c5a0bceeaa97\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"token0\",\n      \"token1\",\n      \"token2\",\n      \"pool0\",\n      \"pool1\",\n      \"pool2\",\n      \"pool3\",\n      \"factory\"\n    ],\n    \"types\": [\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"Pool\",\n      \"Pool\",\n      \"Pool\",\n      \"Pool\",\n      \"PoolFactory\"\n    ],\n    \"isMutable\": [\n      true,\n      true,\n      true,\n      true,\n      true,\n      true,\n      true,\n      true\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"deploy\",\n      \"paramNames\": [\n        \"counter\",\n        \"payer\",\n        \"pool_\",\n        \"position_\",\n        \"tick_\",\n        \"word_\",\n        \"factory_\",\n        \"config_\",\n        \"dexAccount_\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"Address\",\n        \"ByteVec\",\n        \"ByteVec\",\n        \"ByteVec\",\n        \"ByteVec\",\n        \"ByteVec\",\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\",\n        \"ByteVec\",\n        \"ByteVec\",\n        \"Pool\",\n        \"Pool\",\n        \"Pool\",\n        \"Pool\",\n        \"PoolFactory\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": []\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as PositionContractJson } from \"../Position.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace PositionTypes {\n  export type Fields = {\n    parent: Address;\n    nftIndex: bigint;\n    liquidity: bigint;\n    growthsInside: [bigint, bigint, bigint];\n    tokensOwed: [bigint, bigint, bigint];\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    getTokenUri: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getCollectionIndex: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<[HexString, bigint]>;\n    };\n    mulDiv: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    mulDivRoundingUp: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    update: {\n      params: CallContractParams<{\n        liquidityDelta: bigint;\n        growths: [bigint, bigint, bigint];\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint]>;\n    };\n    deposit: {\n      params: CallContractParams<{ amount0: bigint; amount1: bigint }>;\n      result: CallContractResult<null>;\n    };\n    collect: {\n      params: CallContractParams<{ maxAmounts: [bigint, bigint, bigint] }>;\n      result: CallContractResult<[bigint, bigint, bigint]>;\n    };\n    getState: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<[bigint, [bigint, bigint, bigint]]>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    getTokenUri: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getCollectionIndex: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDiv: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDivRoundingUp: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    update: {\n      params: SignExecuteContractMethodParams<{\n        liquidityDelta: bigint;\n        growths: [bigint, bigint, bigint];\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    deposit: {\n      params: SignExecuteContractMethodParams<{\n        amount0: bigint;\n        amount1: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    collect: {\n      params: SignExecuteContractMethodParams<{\n        maxAmounts: [bigint, bigint, bigint];\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getState: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<PositionInstance, PositionTypes.Fields> {\n  encodeFields(fields: PositionTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  consts = {\n    FullMathError: { MulDivOverflow: BigInt(\"351\") },\n    PositionError: { NotParent: BigInt(\"901\") },\n  };\n\n  at(address: string): PositionInstance {\n    return new PositionInstance(address);\n  }\n\n  tests = {\n    getTokenUri: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<PositionTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getTokenUri\", params, getContractByCodeHash);\n    },\n    getCollectionIndex: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<PositionTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<[HexString, bigint]>> => {\n      return testMethod(\n        this,\n        \"getCollectionIndex\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: TestContractParamsWithoutMaps<\n        PositionTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"mulDiv\", params, getContractByCodeHash);\n    },\n    mulDivRoundingUp: async (\n      params: TestContractParamsWithoutMaps<\n        PositionTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"mulDivRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    update: async (\n      params: TestContractParamsWithoutMaps<\n        PositionTypes.Fields,\n        { liquidityDelta: bigint; growths: [bigint, bigint, bigint] }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint, bigint]>> => {\n      return testMethod(this, \"update\", params, getContractByCodeHash);\n    },\n    deposit: async (\n      params: TestContractParamsWithoutMaps<\n        PositionTypes.Fields,\n        { amount0: bigint; amount1: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"deposit\", params, getContractByCodeHash);\n    },\n    collect: async (\n      params: TestContractParamsWithoutMaps<\n        PositionTypes.Fields,\n        { maxAmounts: [bigint, bigint, bigint] }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint, bigint]>> => {\n      return testMethod(this, \"collect\", params, getContractByCodeHash);\n    },\n    getState: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<PositionTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<\n      TestContractResultWithoutMaps<[bigint, [bigint, bigint, bigint]]>\n    > => {\n      return testMethod(this, \"getState\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: PositionTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const Position = new Factory(\n  Contract.fromJson(\n    PositionContractJson,\n    \"\",\n    \"893257ca0a6b91cb3976f1cdb74a6b56f8a9f0d54a8034e22e8281dd33c6f313\",\n    types.AllStructs\n  )\n);\nregisterContract(Position);\n\n// Use this class to interact with the blockchain\nexport class PositionInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<PositionTypes.State> {\n    return fetchContractState(Position, this);\n  }\n\n  view = {\n    getTokenUri: async (\n      params?: PositionTypes.CallMethodParams<\"getTokenUri\">\n    ): Promise<PositionTypes.CallMethodResult<\"getTokenUri\">> => {\n      return callMethod(\n        Position,\n        this,\n        \"getTokenUri\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getCollectionIndex: async (\n      params?: PositionTypes.CallMethodParams<\"getCollectionIndex\">\n    ): Promise<PositionTypes.CallMethodResult<\"getCollectionIndex\">> => {\n      return callMethod(\n        Position,\n        this,\n        \"getCollectionIndex\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: PositionTypes.CallMethodParams<\"mulDiv\">\n    ): Promise<PositionTypes.CallMethodResult<\"mulDiv\">> => {\n      return callMethod(\n        Position,\n        this,\n        \"mulDiv\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDivRoundingUp: async (\n      params: PositionTypes.CallMethodParams<\"mulDivRoundingUp\">\n    ): Promise<PositionTypes.CallMethodResult<\"mulDivRoundingUp\">> => {\n      return callMethod(\n        Position,\n        this,\n        \"mulDivRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    update: async (\n      params: PositionTypes.CallMethodParams<\"update\">\n    ): Promise<PositionTypes.CallMethodResult<\"update\">> => {\n      return callMethod(\n        Position,\n        this,\n        \"update\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    deposit: async (\n      params: PositionTypes.CallMethodParams<\"deposit\">\n    ): Promise<PositionTypes.CallMethodResult<\"deposit\">> => {\n      return callMethod(\n        Position,\n        this,\n        \"deposit\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    collect: async (\n      params: PositionTypes.CallMethodParams<\"collect\">\n    ): Promise<PositionTypes.CallMethodResult<\"collect\">> => {\n      return callMethod(\n        Position,\n        this,\n        \"collect\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getState: async (\n      params?: PositionTypes.CallMethodParams<\"getState\">\n    ): Promise<PositionTypes.CallMethodResult<\"getState\">> => {\n      return callMethod(\n        Position,\n        this,\n        \"getState\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    getTokenUri: async (\n      params: PositionTypes.SignExecuteMethodParams<\"getTokenUri\">\n    ): Promise<PositionTypes.SignExecuteMethodResult<\"getTokenUri\">> => {\n      return signExecuteMethod(Position, this, \"getTokenUri\", params);\n    },\n    getCollectionIndex: async (\n      params: PositionTypes.SignExecuteMethodParams<\"getCollectionIndex\">\n    ): Promise<PositionTypes.SignExecuteMethodResult<\"getCollectionIndex\">> => {\n      return signExecuteMethod(Position, this, \"getCollectionIndex\", params);\n    },\n    mulDiv: async (\n      params: PositionTypes.SignExecuteMethodParams<\"mulDiv\">\n    ): Promise<PositionTypes.SignExecuteMethodResult<\"mulDiv\">> => {\n      return signExecuteMethod(Position, this, \"mulDiv\", params);\n    },\n    mulDivRoundingUp: async (\n      params: PositionTypes.SignExecuteMethodParams<\"mulDivRoundingUp\">\n    ): Promise<PositionTypes.SignExecuteMethodResult<\"mulDivRoundingUp\">> => {\n      return signExecuteMethod(Position, this, \"mulDivRoundingUp\", params);\n    },\n    update: async (\n      params: PositionTypes.SignExecuteMethodParams<\"update\">\n    ): Promise<PositionTypes.SignExecuteMethodResult<\"update\">> => {\n      return signExecuteMethod(Position, this, \"update\", params);\n    },\n    deposit: async (\n      params: PositionTypes.SignExecuteMethodParams<\"deposit\">\n    ): Promise<PositionTypes.SignExecuteMethodResult<\"deposit\">> => {\n      return signExecuteMethod(Position, this, \"deposit\", params);\n    },\n    collect: async (\n      params: PositionTypes.SignExecuteMethodParams<\"collect\">\n    ): Promise<PositionTypes.SignExecuteMethodResult<\"collect\">> => {\n      return signExecuteMethod(Position, this, \"collect\", params);\n    },\n    getState: async (\n      params: PositionTypes.SignExecuteMethodParams<\"getState\">\n    ): Promise<PositionTypes.SignExecuteMethodResult<\"getState\">> => {\n      return signExecuteMethod(Position, this, \"getState\", params);\n    },\n  };\n\n  async multicall<Calls extends PositionTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<PositionTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends PositionTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<PositionTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | PositionTypes.MultiCallParams\n      | PositionTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      Position,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"Position\",\n  \"bytecode\": \"0a0819402c410e413141d741f84276428a01000001010ece007a494d470d13216217000c0d160001350201000000020ace007a494d470d132162ce01020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200021703160016011602870c334c0416030d2a0216030201000409034062d379a1c203b4ce00451343857ba0003f16001f3d17040c0c0c1707170617050c170816080f314c403ea0000c334c403516087a0f314d0d2a7816087a0f314d0d2ac32ba00013cd0100000000000000000000000000000000000216087a0f314d112a7916087a0f314d102ac316087a0f314d112a782a16087a0f314d102ac416080d2a17084a7fbe160116021603a103a102a1011604a1001605160616070201000202000ed3b478489ab4ce00451343857ba00416002aa104a00516012aa10501000308034056d3ad05a194b4ce00451343857b0c0c0c1705170417030c170616060f314c404016067a0f314d7816067a0f314d102ac3334c0916067a0f314d102ac34a0616067a0f314d781707160716067a0f314d0f2a7916067a0f314d102ac316072b16067a0f314d102ac416060d2a17064a7fbc16031604160502010000000406d3f97c255fa000a001a002a00302\",\n  \"codeHash\": \"893257ca0a6b91cb3976f1cdb74a6b56f8a9f0d54a8034e22e8281dd33c6f313\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"parent\",\n      \"nftIndex\",\n      \"liquidity\",\n      \"growthsInside\",\n      \"tokensOwed\",\n      \"__stdInterfaceId\"\n    ],\n    \"types\": [\n      \"Address\",\n      \"U256\",\n      \"U256\",\n      \"[U256;3]\",\n      \"[U256;3]\",\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      true,\n      true,\n      true,\n      false\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"getTokenUri\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getCollectionIndex\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDivRoundingUp\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"update\",\n      \"paramNames\": [\n        \"liquidityDelta\",\n        \"growths\"\n      ],\n      \"paramTypes\": [\n        \"I256\",\n        \"[U256;3]\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"[U256;3]\"\n      ]\n    },\n    {\n      \"name\": \"deposit\",\n      \"paramNames\": [\n        \"amount0\",\n        \"amount1\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"collect\",\n      \"paramNames\": [\n        \"maxAmounts\"\n      ],\n      \"paramTypes\": [\n        \"[U256;3]\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"[U256;3]\"\n      ]\n    },\n    {\n      \"name\": \"getState\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\",\n        \"[U256;3]\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"FullMathError\",\n      \"fields\": [\n        {\n          \"name\": \"MulDivOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"351\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"PositionError\",\n      \"fields\": [\n        {\n          \"name\": \"NotParent\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"901\"\n          }\n        }\n      ]\n    }\n  ],\n  \"stdInterfaceId\": \"0003\"\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as PositionManagerContractJson } from \"../PositionManager.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace PositionManagerTypes {\n  export type Fields = {\n    parent: HexString;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    addLiquidity: {\n      params: CallContractParams<{\n        payer: Address;\n        p: types.ModifyLiquidityParams;\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint, HexString]>;\n    };\n    getLiquidityForAmount0: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getLiquidityForAmount1: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount1: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getLiquidityForAmounts: {\n      params: CallContractParams<{\n        sqrtRatioX96: bigint;\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n        amount1: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getAmount0ForLiquidity: {\n      params: CallContractParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidity: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    mulDiv: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    mulDivRoundingUp: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    configPath: {\n      params: CallContractParams<{ configIndex_: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    poolPath: {\n      params: CallContractParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    poolContractId: {\n      params: CallContractParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    positionPath: {\n      params: CallContractParams<{\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    positionContractId: {\n      params: CallContractParams<{\n        pool: HexString;\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    increaseLiquidity: {\n      params: CallContractParams<{\n        payer: Address;\n        p: types.ModifyLiquidityParams;\n      }>;\n      result: CallContractResult<null>;\n    };\n    decreaseLiquidity: {\n      params: CallContractParams<{\n        operator: Address;\n        liquidity: bigint;\n        p: types.DecreaseLiquidityParams;\n      }>;\n      result: CallContractResult<null>;\n    };\n    collect: {\n      params: CallContractParams<{\n        operator: Address;\n        liquidity: bigint;\n        p: types.CollectParams;\n      }>;\n      result: CallContractResult<null>;\n    };\n    getSqrtPricesX96: {\n      params: CallContractParams<{\n        pool: HexString;\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint, bigint]>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    addLiquidity: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        p: types.ModifyLiquidityParams;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getLiquidityForAmount0: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getLiquidityForAmount1: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount1: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getLiquidityForAmounts: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioX96: bigint;\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        amount0: bigint;\n        amount1: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getAmount0ForLiquidity: {\n      params: SignExecuteContractMethodParams<{\n        sqrtRatioAX96: bigint;\n        sqrtRatioBX96: bigint;\n        liquidity: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDiv: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDivRoundingUp: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    configPath: {\n      params: SignExecuteContractMethodParams<{ configIndex_: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    poolPath: {\n      params: SignExecuteContractMethodParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    poolContractId: {\n      params: SignExecuteContractMethodParams<{\n        factory: HexString;\n        tokens: HexString;\n        configIndex_: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    positionPath: {\n      params: SignExecuteContractMethodParams<{\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    positionContractId: {\n      params: SignExecuteContractMethodParams<{\n        pool: HexString;\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    increaseLiquidity: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        p: types.ModifyLiquidityParams;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    decreaseLiquidity: {\n      params: SignExecuteContractMethodParams<{\n        operator: Address;\n        liquidity: bigint;\n        p: types.DecreaseLiquidityParams;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    collect: {\n      params: SignExecuteContractMethodParams<{\n        operator: Address;\n        liquidity: bigint;\n        p: types.CollectParams;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getSqrtPricesX96: {\n      params: SignExecuteContractMethodParams<{\n        pool: HexString;\n        owner: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  PositionManagerInstance,\n  PositionManagerTypes.Fields\n> {\n  encodeFields(fields: PositionManagerTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  consts = {\n    LiquidityManagmentError: {\n      MintSlippage: BigInt(\"850\"),\n      BurnSlippage: BigInt(\"851\"),\n    },\n    FullMathError: { MulDivOverflow: BigInt(\"351\") },\n    PathPrefixes: {\n      Tick: BigInt(\"0\"),\n      Position: BigInt(\"1\"),\n      Word: BigInt(\"2\"),\n    },\n  };\n\n  at(address: string): PositionManagerInstance {\n    return new PositionManagerInstance(address);\n  }\n\n  tests = {\n    addLiquidity: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { payer: Address; p: types.ModifyLiquidityParams }\n      >\n    ): Promise<\n      TestContractResultWithoutMaps<[bigint, bigint, bigint, HexString]>\n    > => {\n      return testMethod(this, \"addLiquidity\", params, getContractByCodeHash);\n    },\n    getLiquidityForAmount0: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; amount0: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getLiquidityForAmount0\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmount1: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; amount1: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getLiquidityForAmount1\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmounts: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        {\n          sqrtRatioX96: bigint;\n          sqrtRatioAX96: bigint;\n          sqrtRatioBX96: bigint;\n          amount0: bigint;\n          amount1: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getLiquidityForAmounts\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount0ForLiquidity: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { sqrtRatioAX96: bigint; sqrtRatioBX96: bigint; liquidity: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getAmount0ForLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"mulDiv\", params, getContractByCodeHash);\n    },\n    mulDivRoundingUp: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"mulDivRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    configPath: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"configPath\", params, getContractByCodeHash);\n    },\n    poolPath: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { factory: HexString; tokens: HexString; configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"poolPath\", params, getContractByCodeHash);\n    },\n    poolContractId: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { factory: HexString; tokens: HexString; configIndex_: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"poolContractId\", params, getContractByCodeHash);\n    },\n    positionPath: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { o: Address; tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"positionPath\", params, getContractByCodeHash);\n    },\n    positionContractId: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { pool: HexString; o: Address; tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(\n        this,\n        \"positionContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    increaseLiquidity: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { payer: Address; p: types.ModifyLiquidityParams }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"increaseLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    decreaseLiquidity: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        {\n          operator: Address;\n          liquidity: bigint;\n          p: types.DecreaseLiquidityParams;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(\n        this,\n        \"decreaseLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    collect: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        { operator: Address; liquidity: bigint; p: types.CollectParams }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"collect\", params, getContractByCodeHash);\n    },\n    getSqrtPricesX96: async (\n      params: TestContractParamsWithoutMaps<\n        PositionManagerTypes.Fields,\n        {\n          pool: HexString;\n          owner: Address;\n          tickLower: bigint;\n          tickUpper: bigint;\n        }\n      >\n    ): Promise<\n      TestContractResultWithoutMaps<[bigint, bigint, bigint, bigint]>\n    > => {\n      return testMethod(\n        this,\n        \"getSqrtPricesX96\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  stateForTest(\n    initFields: PositionManagerTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const PositionManager = new Factory(\n  Contract.fromJson(\n    PositionManagerContractJson,\n    \"\",\n    \"ab39514b7b087164d46e689fc18e1793c9aa0c677ece80b18439df6526c09698\",\n    types.AllStructs\n  )\n);\nregisterContract(PositionManager);\n\n// Use this class to interact with the blockchain\nexport class PositionManagerInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<PositionManagerTypes.State> {\n    return fetchContractState(PositionManager, this);\n  }\n\n  view = {\n    addLiquidity: async (\n      params: PositionManagerTypes.CallMethodParams<\"addLiquidity\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"addLiquidity\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"addLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmount0: async (\n      params: PositionManagerTypes.CallMethodParams<\"getLiquidityForAmount0\">\n    ): Promise<\n      PositionManagerTypes.CallMethodResult<\"getLiquidityForAmount0\">\n    > => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"getLiquidityForAmount0\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmount1: async (\n      params: PositionManagerTypes.CallMethodParams<\"getLiquidityForAmount1\">\n    ): Promise<\n      PositionManagerTypes.CallMethodResult<\"getLiquidityForAmount1\">\n    > => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"getLiquidityForAmount1\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getLiquidityForAmounts: async (\n      params: PositionManagerTypes.CallMethodParams<\"getLiquidityForAmounts\">\n    ): Promise<\n      PositionManagerTypes.CallMethodResult<\"getLiquidityForAmounts\">\n    > => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"getLiquidityForAmounts\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getAmount0ForLiquidity: async (\n      params: PositionManagerTypes.CallMethodParams<\"getAmount0ForLiquidity\">\n    ): Promise<\n      PositionManagerTypes.CallMethodResult<\"getAmount0ForLiquidity\">\n    > => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"getAmount0ForLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: PositionManagerTypes.CallMethodParams<\"mulDiv\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"mulDiv\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"mulDiv\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDivRoundingUp: async (\n      params: PositionManagerTypes.CallMethodParams<\"mulDivRoundingUp\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"mulDivRoundingUp\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"mulDivRoundingUp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    configPath: async (\n      params: PositionManagerTypes.CallMethodParams<\"configPath\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"configPath\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"configPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    poolPath: async (\n      params: PositionManagerTypes.CallMethodParams<\"poolPath\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"poolPath\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"poolPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    poolContractId: async (\n      params: PositionManagerTypes.CallMethodParams<\"poolContractId\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"poolContractId\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"poolContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionPath: async (\n      params: PositionManagerTypes.CallMethodParams<\"positionPath\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"positionPath\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"positionPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionContractId: async (\n      params: PositionManagerTypes.CallMethodParams<\"positionContractId\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"positionContractId\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"positionContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    increaseLiquidity: async (\n      params: PositionManagerTypes.CallMethodParams<\"increaseLiquidity\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"increaseLiquidity\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"increaseLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    decreaseLiquidity: async (\n      params: PositionManagerTypes.CallMethodParams<\"decreaseLiquidity\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"decreaseLiquidity\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"decreaseLiquidity\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    collect: async (\n      params: PositionManagerTypes.CallMethodParams<\"collect\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"collect\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"collect\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getSqrtPricesX96: async (\n      params: PositionManagerTypes.CallMethodParams<\"getSqrtPricesX96\">\n    ): Promise<PositionManagerTypes.CallMethodResult<\"getSqrtPricesX96\">> => {\n      return callMethod(\n        PositionManager,\n        this,\n        \"getSqrtPricesX96\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    addLiquidity: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"addLiquidity\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"addLiquidity\">\n    > => {\n      return signExecuteMethod(PositionManager, this, \"addLiquidity\", params);\n    },\n    getLiquidityForAmount0: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"getLiquidityForAmount0\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"getLiquidityForAmount0\">\n    > => {\n      return signExecuteMethod(\n        PositionManager,\n        this,\n        \"getLiquidityForAmount0\",\n        params\n      );\n    },\n    getLiquidityForAmount1: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"getLiquidityForAmount1\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"getLiquidityForAmount1\">\n    > => {\n      return signExecuteMethod(\n        PositionManager,\n        this,\n        \"getLiquidityForAmount1\",\n        params\n      );\n    },\n    getLiquidityForAmounts: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"getLiquidityForAmounts\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"getLiquidityForAmounts\">\n    > => {\n      return signExecuteMethod(\n        PositionManager,\n        this,\n        \"getLiquidityForAmounts\",\n        params\n      );\n    },\n    getAmount0ForLiquidity: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"getAmount0ForLiquidity\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"getAmount0ForLiquidity\">\n    > => {\n      return signExecuteMethod(\n        PositionManager,\n        this,\n        \"getAmount0ForLiquidity\",\n        params\n      );\n    },\n    mulDiv: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"mulDiv\">\n    ): Promise<PositionManagerTypes.SignExecuteMethodResult<\"mulDiv\">> => {\n      return signExecuteMethod(PositionManager, this, \"mulDiv\", params);\n    },\n    mulDivRoundingUp: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"mulDivRoundingUp\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"mulDivRoundingUp\">\n    > => {\n      return signExecuteMethod(\n        PositionManager,\n        this,\n        \"mulDivRoundingUp\",\n        params\n      );\n    },\n    configPath: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"configPath\">\n    ): Promise<PositionManagerTypes.SignExecuteMethodResult<\"configPath\">> => {\n      return signExecuteMethod(PositionManager, this, \"configPath\", params);\n    },\n    poolPath: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"poolPath\">\n    ): Promise<PositionManagerTypes.SignExecuteMethodResult<\"poolPath\">> => {\n      return signExecuteMethod(PositionManager, this, \"poolPath\", params);\n    },\n    poolContractId: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"poolContractId\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"poolContractId\">\n    > => {\n      return signExecuteMethod(PositionManager, this, \"poolContractId\", params);\n    },\n    positionPath: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"positionPath\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"positionPath\">\n    > => {\n      return signExecuteMethod(PositionManager, this, \"positionPath\", params);\n    },\n    positionContractId: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"positionContractId\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"positionContractId\">\n    > => {\n      return signExecuteMethod(\n        PositionManager,\n        this,\n        \"positionContractId\",\n        params\n      );\n    },\n    increaseLiquidity: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"increaseLiquidity\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"increaseLiquidity\">\n    > => {\n      return signExecuteMethod(\n        PositionManager,\n        this,\n        \"increaseLiquidity\",\n        params\n      );\n    },\n    decreaseLiquidity: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"decreaseLiquidity\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"decreaseLiquidity\">\n    > => {\n      return signExecuteMethod(\n        PositionManager,\n        this,\n        \"decreaseLiquidity\",\n        params\n      );\n    },\n    collect: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"collect\">\n    ): Promise<PositionManagerTypes.SignExecuteMethodResult<\"collect\">> => {\n      return signExecuteMethod(PositionManager, this, \"collect\", params);\n    },\n    getSqrtPricesX96: async (\n      params: PositionManagerTypes.SignExecuteMethodParams<\"getSqrtPricesX96\">\n    ): Promise<\n      PositionManagerTypes.SignExecuteMethodResult<\"getSqrtPricesX96\">\n    > => {\n      return signExecuteMethod(\n        PositionManager,\n        this,\n        \"getSqrtPricesX96\",\n        params\n      );\n    },\n  };\n\n  async multicall<Calls extends PositionManagerTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<PositionManagerTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends PositionManagerTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<PositionManagerTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | PositionManagerTypes.MultiCallParams\n      | PositionManagerTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      PositionManager,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"PositionManager\",\n  \"bytecode\": \"0110409a40c840ec413e416c424e4271427b429042a642bc42d7431a438e43ec444d01030b16044051d39b20ce13ce00160116024416030009170b160516060e0f160b012e170e170d170c160c160d160e160716080003170f160b160416051606000b171016001610a5171116001601a5171216001602a5171316007a7a16011612a316021613a316101611a31600160416051606160f110e160b01251715171416141609347a4c04181615160a341343527b160f16141615160b0201000304010dd3b8a5f4fb1600160113c9010000000000000000000000000005170316021603160116002b000502010003030108d364be47fc160213c901000000000000000000000000160116002b00050201000507014027d345f12d7a16001601324c061601160216030001024a1c16001602314c13160016021603000117051601160016040002170616051606314c0216054a011606024a0516011602160400020201000304010ed374e08b3b160213c9010000000000000000000000002c160116002b160100051703160316002d020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200051703160016011602870c334c0416030d2a0216030200000101010316004002000003040109160016020007cc17031601160344020000030401091600160116020008170316001603cc02010003030108d37afb14100d1600160116021304640201000405010ad35b19984c160116021603000a170416001604cc0201030b0d004021d3259c1e8816001601a5170b16001602a5170c16007a1601160ba31602160ca31600160116021603160416051606160716081609160a00001818181801030a0e004041d35060929cce00160216034416040009170a160a160516061607000b170b1600160b0da316001605160616071601110e160a0126170d170c160c1608347a4c0418160d1609341343537b1600160b0da3160016051605160616070c0d360c0d360c0d3613080f160a012718181801030b0d004032d3ee4d9e3ace00160216034416040009170b160b160516071608000b170c1600160c0da316001605160716081601110e160b012618181600160c0da3160016061605160716081609160a0c0d3613080f160b012718181801000409044034d341eff2fd1600160116021603000b17040c17051604c54b041605d12a170516020d0d1600011ec54b041605d12a170516030d0d1600011ec54b041605d12a1705160216030e0f1600012e170817071706160616071608160502\",\n  \"codeHash\": \"ab39514b7b087164d46e689fc18e1793c9aa0c677ece80b18439df6526c09698\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"parent\"\n    ],\n    \"types\": [\n      \"PoolFactory\"\n    ],\n    \"isMutable\": [\n      false\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"addLiquidity\",\n      \"paramNames\": [\n        \"payer\",\n        \"p\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"ModifyLiquidityParams\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"Pool\"\n      ]\n    },\n    {\n      \"name\": \"getLiquidityForAmount0\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"amount0\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getLiquidityForAmount1\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"amount1\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getLiquidityForAmounts\",\n      \"paramNames\": [\n        \"sqrtRatioX96\",\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"amount0\",\n        \"amount1\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getAmount0ForLiquidity\",\n      \"paramNames\": [\n        \"sqrtRatioAX96\",\n        \"sqrtRatioBX96\",\n        \"liquidity\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"mulDivRoundingUp\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"configPath\",\n      \"paramNames\": [\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"poolPath\",\n      \"paramNames\": [\n        \"factory\",\n        \"tokens\",\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"PoolFactory\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"poolContractId\",\n      \"paramNames\": [\n        \"factory\",\n        \"tokens\",\n        \"configIndex_\"\n      ],\n      \"paramTypes\": [\n        \"PoolFactory\",\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"positionPath\",\n      \"paramNames\": [\n        \"o\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"positionContractId\",\n      \"paramNames\": [\n        \"pool\",\n        \"o\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Pool\",\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"increaseLiquidity\",\n      \"paramNames\": [\n        \"payer\",\n        \"p\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"ModifyLiquidityParams\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"decreaseLiquidity\",\n      \"paramNames\": [\n        \"operator\",\n        \"liquidity\",\n        \"p\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\",\n        \"DecreaseLiquidityParams\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"collect\",\n      \"paramNames\": [\n        \"operator\",\n        \"liquidity\",\n        \"p\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\",\n        \"CollectParams\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"getSqrtPricesX96\",\n      \"paramNames\": [\n        \"pool\",\n        \"owner\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Pool\",\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"LiquidityManagmentError\",\n      \"fields\": [\n        {\n          \"name\": \"MintSlippage\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"850\"\n          }\n        },\n        {\n          \"name\": \"BurnSlippage\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"851\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"FullMathError\",\n      \"fields\": [\n        {\n          \"name\": \"MulDivOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"351\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"PathPrefixes\",\n      \"fields\": [\n        {\n          \"name\": \"Tick\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"Position\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"Word\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as TestTokenContractJson } from \"../TestToken.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace TestTokenTypes {\n  export type Fields = {\n    symbol: HexString;\n    name: HexString;\n    decimals: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    getSymbol: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getName: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getDecimals: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    getTotalSupply: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    getSymbol: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getName: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getDecimals: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getTotalSupply: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  TestTokenInstance,\n  TestTokenTypes.Fields\n> {\n  encodeFields(fields: TestTokenTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  at(address: string): TestTokenInstance {\n    return new TestTokenInstance(address);\n  }\n\n  tests = {\n    getSymbol: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TestTokenTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getSymbol\", params, getContractByCodeHash);\n    },\n    getName: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TestTokenTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getName\", params, getContractByCodeHash);\n    },\n    getDecimals: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TestTokenTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"getDecimals\", params, getContractByCodeHash);\n    },\n    getTotalSupply: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TestTokenTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"getTotalSupply\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: TestTokenTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const TestToken = new Factory(\n  Contract.fromJson(\n    TestTokenContractJson,\n    \"\",\n    \"32d99ee24650d37c7111a9cc02ed2694b608e2d1b52301d27c6b28abc9ba94e9\",\n    types.AllStructs\n  )\n);\nregisterContract(TestToken);\n\n// Use this class to interact with the blockchain\nexport class TestTokenInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<TestTokenTypes.State> {\n    return fetchContractState(TestToken, this);\n  }\n\n  view = {\n    getSymbol: async (\n      params?: TestTokenTypes.CallMethodParams<\"getSymbol\">\n    ): Promise<TestTokenTypes.CallMethodResult<\"getSymbol\">> => {\n      return callMethod(\n        TestToken,\n        this,\n        \"getSymbol\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getName: async (\n      params?: TestTokenTypes.CallMethodParams<\"getName\">\n    ): Promise<TestTokenTypes.CallMethodResult<\"getName\">> => {\n      return callMethod(\n        TestToken,\n        this,\n        \"getName\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getDecimals: async (\n      params?: TestTokenTypes.CallMethodParams<\"getDecimals\">\n    ): Promise<TestTokenTypes.CallMethodResult<\"getDecimals\">> => {\n      return callMethod(\n        TestToken,\n        this,\n        \"getDecimals\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getTotalSupply: async (\n      params?: TestTokenTypes.CallMethodParams<\"getTotalSupply\">\n    ): Promise<TestTokenTypes.CallMethodResult<\"getTotalSupply\">> => {\n      return callMethod(\n        TestToken,\n        this,\n        \"getTotalSupply\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    getSymbol: async (\n      params: TestTokenTypes.SignExecuteMethodParams<\"getSymbol\">\n    ): Promise<TestTokenTypes.SignExecuteMethodResult<\"getSymbol\">> => {\n      return signExecuteMethod(TestToken, this, \"getSymbol\", params);\n    },\n    getName: async (\n      params: TestTokenTypes.SignExecuteMethodParams<\"getName\">\n    ): Promise<TestTokenTypes.SignExecuteMethodResult<\"getName\">> => {\n      return signExecuteMethod(TestToken, this, \"getName\", params);\n    },\n    getDecimals: async (\n      params: TestTokenTypes.SignExecuteMethodParams<\"getDecimals\">\n    ): Promise<TestTokenTypes.SignExecuteMethodResult<\"getDecimals\">> => {\n      return signExecuteMethod(TestToken, this, \"getDecimals\", params);\n    },\n    getTotalSupply: async (\n      params: TestTokenTypes.SignExecuteMethodParams<\"getTotalSupply\">\n    ): Promise<TestTokenTypes.SignExecuteMethodResult<\"getTotalSupply\">> => {\n      return signExecuteMethod(TestToken, this, \"getTotalSupply\", params);\n    },\n  };\n\n  async multicall<Calls extends TestTokenTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<TestTokenTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends TestTokenTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<TestTokenTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | TestTokenTypes.MultiCallParams\n      | TestTokenTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      TestToken,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"TestToken\",\n  \"bytecode\": \"040409121b4025010000000102ce0002010000000102ce0102010000000102ce02020100000001040c0d3602\",\n  \"codeHash\": \"32d99ee24650d37c7111a9cc02ed2694b608e2d1b52301d27c6b28abc9ba94e9\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"symbol\",\n      \"name\",\n      \"decimals\",\n      \"__stdInterfaceId\"\n    ],\n    \"types\": [\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"getSymbol\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getName\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getDecimals\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getTotalSupply\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [],\n  \"stdInterfaceId\": \"0001\"\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as TickContractJson } from \"../Tick.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace TickTypes {\n  export type Fields = {\n    parent: Address;\n    tick: bigint;\n    liquidityGross: bigint;\n    liquidityNet: bigint;\n    feeGrowthsOutside: [bigint, bigint, bigint];\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    update: {\n      params: CallContractParams<{\n        maxLiquidity: bigint;\n        liquidityDelta: bigint;\n        upper: boolean;\n      }>;\n      result: CallContractResult<boolean>;\n    };\n    feeGrowthBelow: {\n      params: CallContractParams<{\n        tickCurrent: bigint;\n        globalGrowths: [bigint, bigint, bigint];\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint]>;\n    };\n    feeGrowthAbove: {\n      params: CallContractParams<{\n        tickCurrent: bigint;\n        globalGrowths: [bigint, bigint, bigint];\n      }>;\n      result: CallContractResult<[bigint, bigint, bigint]>;\n    };\n    clear: {\n      params: CallContractParams<{ payer: Address }>;\n      result: CallContractResult<null>;\n    };\n    cross: {\n      params: CallContractParams<{\n        globalGrowths: [bigint, bigint, bigint];\n        zeroForOne: boolean;\n        feeGrowthGlobalX128: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    getLiquidityNet: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    update: {\n      params: SignExecuteContractMethodParams<{\n        maxLiquidity: bigint;\n        liquidityDelta: bigint;\n        upper: boolean;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    feeGrowthBelow: {\n      params: SignExecuteContractMethodParams<{\n        tickCurrent: bigint;\n        globalGrowths: [bigint, bigint, bigint];\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    feeGrowthAbove: {\n      params: SignExecuteContractMethodParams<{\n        tickCurrent: bigint;\n        globalGrowths: [bigint, bigint, bigint];\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    clear: {\n      params: SignExecuteContractMethodParams<{ payer: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    cross: {\n      params: SignExecuteContractMethodParams<{\n        globalGrowths: [bigint, bigint, bigint];\n        zeroForOne: boolean;\n        feeGrowthGlobalX128: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getLiquidityNet: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<TickInstance, TickTypes.Fields> {\n  encodeFields(fields: TickTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  consts = {\n    TickError: {\n      NotParent: BigInt(\"801\"),\n      LO: BigInt(\"802\"),\n      LS: BigInt(\"803\"),\n    },\n  };\n\n  at(address: string): TickInstance {\n    return new TickInstance(address);\n  }\n\n  tests = {\n    update: async (\n      params: TestContractParamsWithoutMaps<\n        TickTypes.Fields,\n        { maxLiquidity: bigint; liquidityDelta: bigint; upper: boolean }\n      >\n    ): Promise<TestContractResultWithoutMaps<boolean>> => {\n      return testMethod(this, \"update\", params, getContractByCodeHash);\n    },\n    feeGrowthBelow: async (\n      params: TestContractParamsWithoutMaps<\n        TickTypes.Fields,\n        { tickCurrent: bigint; globalGrowths: [bigint, bigint, bigint] }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint, bigint]>> => {\n      return testMethod(this, \"feeGrowthBelow\", params, getContractByCodeHash);\n    },\n    feeGrowthAbove: async (\n      params: TestContractParamsWithoutMaps<\n        TickTypes.Fields,\n        { tickCurrent: bigint; globalGrowths: [bigint, bigint, bigint] }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, bigint, bigint]>> => {\n      return testMethod(this, \"feeGrowthAbove\", params, getContractByCodeHash);\n    },\n    clear: async (\n      params: TestContractParamsWithoutMaps<\n        TickTypes.Fields,\n        { payer: Address }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"clear\", params, getContractByCodeHash);\n    },\n    cross: async (\n      params: TestContractParamsWithoutMaps<\n        TickTypes.Fields,\n        {\n          globalGrowths: [bigint, bigint, bigint];\n          zeroForOne: boolean;\n          feeGrowthGlobalX128: bigint;\n        }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"cross\", params, getContractByCodeHash);\n    },\n    getLiquidityNet: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TickTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"getLiquidityNet\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(initFields: TickTypes.Fields, asset?: Asset, address?: string) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const Tick = new Factory(\n  Contract.fromJson(\n    TickContractJson,\n    \"\",\n    \"1373551ca890d886980b8d33277d7ed7a2c9f7665d77a1e893a1f2554d10d4b1\",\n    types.AllStructs\n  )\n);\nregisterContract(Tick);\n\n// Use this class to interact with the blockchain\nexport class TickInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<TickTypes.State> {\n    return fetchContractState(Tick, this);\n  }\n\n  view = {\n    update: async (\n      params: TickTypes.CallMethodParams<\"update\">\n    ): Promise<TickTypes.CallMethodResult<\"update\">> => {\n      return callMethod(Tick, this, \"update\", params, getContractByCodeHash);\n    },\n    feeGrowthBelow: async (\n      params: TickTypes.CallMethodParams<\"feeGrowthBelow\">\n    ): Promise<TickTypes.CallMethodResult<\"feeGrowthBelow\">> => {\n      return callMethod(\n        Tick,\n        this,\n        \"feeGrowthBelow\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    feeGrowthAbove: async (\n      params: TickTypes.CallMethodParams<\"feeGrowthAbove\">\n    ): Promise<TickTypes.CallMethodResult<\"feeGrowthAbove\">> => {\n      return callMethod(\n        Tick,\n        this,\n        \"feeGrowthAbove\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    clear: async (\n      params: TickTypes.CallMethodParams<\"clear\">\n    ): Promise<TickTypes.CallMethodResult<\"clear\">> => {\n      return callMethod(Tick, this, \"clear\", params, getContractByCodeHash);\n    },\n    cross: async (\n      params: TickTypes.CallMethodParams<\"cross\">\n    ): Promise<TickTypes.CallMethodResult<\"cross\">> => {\n      return callMethod(Tick, this, \"cross\", params, getContractByCodeHash);\n    },\n    getLiquidityNet: async (\n      params?: TickTypes.CallMethodParams<\"getLiquidityNet\">\n    ): Promise<TickTypes.CallMethodResult<\"getLiquidityNet\">> => {\n      return callMethod(\n        Tick,\n        this,\n        \"getLiquidityNet\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    update: async (\n      params: TickTypes.SignExecuteMethodParams<\"update\">\n    ): Promise<TickTypes.SignExecuteMethodResult<\"update\">> => {\n      return signExecuteMethod(Tick, this, \"update\", params);\n    },\n    feeGrowthBelow: async (\n      params: TickTypes.SignExecuteMethodParams<\"feeGrowthBelow\">\n    ): Promise<TickTypes.SignExecuteMethodResult<\"feeGrowthBelow\">> => {\n      return signExecuteMethod(Tick, this, \"feeGrowthBelow\", params);\n    },\n    feeGrowthAbove: async (\n      params: TickTypes.SignExecuteMethodParams<\"feeGrowthAbove\">\n    ): Promise<TickTypes.SignExecuteMethodResult<\"feeGrowthAbove\">> => {\n      return signExecuteMethod(Tick, this, \"feeGrowthAbove\", params);\n    },\n    clear: async (\n      params: TickTypes.SignExecuteMethodParams<\"clear\">\n    ): Promise<TickTypes.SignExecuteMethodResult<\"clear\">> => {\n      return signExecuteMethod(Tick, this, \"clear\", params);\n    },\n    cross: async (\n      params: TickTypes.SignExecuteMethodParams<\"cross\">\n    ): Promise<TickTypes.SignExecuteMethodResult<\"cross\">> => {\n      return signExecuteMethod(Tick, this, \"cross\", params);\n    },\n    getLiquidityNet: async (\n      params: TickTypes.SignExecuteMethodParams<\"getLiquidityNet\">\n    ): Promise<TickTypes.SignExecuteMethodResult<\"getLiquidityNet\">> => {\n      return signExecuteMethod(Tick, this, \"getLiquidityNet\", params);\n    },\n  };\n\n  async multicall<Calls extends TickTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<TickTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends TickTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<TickTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends TickTypes.MultiCallParams | TickTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(Tick, this, callss, getContractByCodeHash);\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"Tick\",\n  \"bytecode\": \"0706405140a340f5410b416541730100030601402ad344ba8eddb4ce00451343217ba000170316033f16011f1704160405291343237b16043d170516051600321343227b1605a10016024c04a0011601204a03a00116011fa10116050c2f0201000405034032d3cfc5e9a41600ce01294c05a002a003a004024a40280c170416040f314c1e16047a0f314d0d2a7816047a0f314d0e2ac32b16047a0f314d0d2a7916040d2a17044a7fde1601160216030201000405034032d36efb0f181600ce01264c05a002a003a004024a40280c170416040f314c1e16047a0f314d0d2a7816047a0f314d0e2ac32b16047a0f314d0d2a7916040d2a17044a7fde16011602160302010201010008d3b0cd421fb4ce00451343217b1600b001000506014035d336cb1526b4ce00451343217b16034c03160417004a02160417010c170516050f314c1a16057a0f314d7816057a0f314d0e2ac32b16057a0f314d7916050d2a17054a22160016011602a104a103a102a00102010000000103d3602bc55da00102\",\n  \"codeHash\": \"1373551ca890d886980b8d33277d7ed7a2c9f7665d77a1e893a1f2554d10d4b1\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"parent\",\n      \"tick\",\n      \"liquidityGross\",\n      \"liquidityNet\",\n      \"feeGrowthsOutside\"\n    ],\n    \"types\": [\n      \"Address\",\n      \"I256\",\n      \"U256\",\n      \"I256\",\n      \"[U256;3]\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      true,\n      true,\n      true\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"update\",\n      \"paramNames\": [\n        \"maxLiquidity\",\n        \"liquidityDelta\",\n        \"upper\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"I256\",\n        \"Bool\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"feeGrowthBelow\",\n      \"paramNames\": [\n        \"tickCurrent\",\n        \"globalGrowths\"\n      ],\n      \"paramTypes\": [\n        \"I256\",\n        \"[U256;3]\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"[U256;3]\"\n      ]\n    },\n    {\n      \"name\": \"feeGrowthAbove\",\n      \"paramNames\": [\n        \"tickCurrent\",\n        \"globalGrowths\"\n      ],\n      \"paramTypes\": [\n        \"I256\",\n        \"[U256;3]\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"[U256;3]\"\n      ]\n    },\n    {\n      \"name\": \"clear\",\n      \"paramNames\": [\n        \"payer\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"cross\",\n      \"paramNames\": [\n        \"globalGrowths\",\n        \"zeroForOne\",\n        \"feeGrowthGlobalX128\"\n      ],\n      \"paramTypes\": [\n        \"[U256;3]\",\n        \"Bool\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        true,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"getLiquidityNet\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"TickError\",\n      \"fields\": [\n        {\n          \"name\": \"NotParent\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"801\"\n          }\n        },\n        {\n          \"name\": \"LO\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"802\"\n          }\n        },\n        {\n          \"name\": \"LS\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"803\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as TickBitmapTestContractJson } from \"../TickBitmapTest.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace TickBitmapTestTypes {\n  export type Fields = {\n    wordTemplate: HexString;\n    tickSpacing: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    wordPath: {\n      params: CallContractParams<{ compressed: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    getWord: {\n      params: CallContractParams<{ compressed: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    getWordOrTemplate: {\n      params: CallContractParams<{ compressed: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    flipTick: {\n      params: CallContractParams<{ tick: bigint }>;\n      result: CallContractResult<null>;\n    };\n    nextInitializedTickWithinOneWord: {\n      params: CallContractParams<{ tick: bigint; zeroForOne: boolean }>;\n      result: CallContractResult<[bigint, boolean]>;\n    };\n    positionPath: {\n      params: CallContractParams<{\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    positionContractId: {\n      params: CallContractParams<{\n        pool: HexString;\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    deploy: {\n      params: CallContractParams<{\n        payer: Address;\n        word: HexString;\n        ts: bigint;\n      }>;\n      result: CallContractResult<HexString>;\n    };\n    flipTick_: {\n      params: CallContractParams<{ tick: bigint }>;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    wordPath: {\n      params: SignExecuteContractMethodParams<{ compressed: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getWord: {\n      params: SignExecuteContractMethodParams<{ compressed: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getWordOrTemplate: {\n      params: SignExecuteContractMethodParams<{ compressed: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    flipTick: {\n      params: SignExecuteContractMethodParams<{ tick: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    nextInitializedTickWithinOneWord: {\n      params: SignExecuteContractMethodParams<{\n        tick: bigint;\n        zeroForOne: boolean;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    positionPath: {\n      params: SignExecuteContractMethodParams<{\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    positionContractId: {\n      params: SignExecuteContractMethodParams<{\n        pool: HexString;\n        o: Address;\n        tickLower: bigint;\n        tickUpper: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    deploy: {\n      params: SignExecuteContractMethodParams<{\n        payer: Address;\n        word: HexString;\n        ts: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    flipTick_: {\n      params: SignExecuteContractMethodParams<{ tick: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  TickBitmapTestInstance,\n  TickBitmapTestTypes.Fields\n> {\n  encodeFields(fields: TickBitmapTestTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  consts = {\n    TickBitmapError: { TickNotAligned: BigInt(\"301\") },\n    PathPrefixes: {\n      Tick: BigInt(\"0\"),\n      Position: BigInt(\"1\"),\n      Word: BigInt(\"2\"),\n    },\n  };\n\n  at(address: string): TickBitmapTestInstance {\n    return new TickBitmapTestInstance(address);\n  }\n\n  tests = {\n    wordPath: async (\n      params: TestContractParamsWithoutMaps<\n        TickBitmapTestTypes.Fields,\n        { compressed: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"wordPath\", params, getContractByCodeHash);\n    },\n    getWord: async (\n      params: TestContractParamsWithoutMaps<\n        TickBitmapTestTypes.Fields,\n        { compressed: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getWord\", params, getContractByCodeHash);\n    },\n    getWordOrTemplate: async (\n      params: TestContractParamsWithoutMaps<\n        TickBitmapTestTypes.Fields,\n        { compressed: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(\n        this,\n        \"getWordOrTemplate\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    flipTick: async (\n      params: TestContractParamsWithoutMaps<\n        TickBitmapTestTypes.Fields,\n        { tick: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"flipTick\", params, getContractByCodeHash);\n    },\n    nextInitializedTickWithinOneWord: async (\n      params: TestContractParamsWithoutMaps<\n        TickBitmapTestTypes.Fields,\n        { tick: bigint; zeroForOne: boolean }\n      >\n    ): Promise<TestContractResultWithoutMaps<[bigint, boolean]>> => {\n      return testMethod(\n        this,\n        \"nextInitializedTickWithinOneWord\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionPath: async (\n      params: TestContractParamsWithoutMaps<\n        TickBitmapTestTypes.Fields,\n        { o: Address; tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"positionPath\", params, getContractByCodeHash);\n    },\n    positionContractId: async (\n      params: TestContractParamsWithoutMaps<\n        TickBitmapTestTypes.Fields,\n        { pool: HexString; o: Address; tickLower: bigint; tickUpper: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(\n        this,\n        \"positionContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    deploy: async (\n      params: TestContractParamsWithoutMaps<\n        TickBitmapTestTypes.Fields,\n        { payer: Address; word: HexString; ts: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"deploy\", params, getContractByCodeHash);\n    },\n    flipTick_: async (\n      params: TestContractParamsWithoutMaps<\n        TickBitmapTestTypes.Fields,\n        { tick: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"flipTick_\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: TickBitmapTestTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const TickBitmapTest = new Factory(\n  Contract.fromJson(\n    TickBitmapTestContractJson,\n    \"\",\n    \"5cb6cce5c5b8adb88a18a993227d51465e3e54b5a34936cafc51100725724b54\",\n    types.AllStructs\n  )\n);\nregisterContract(TickBitmapTest);\n\n// Use this class to interact with the blockchain\nexport class TickBitmapTestInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<TickBitmapTestTypes.State> {\n    return fetchContractState(TickBitmapTest, this);\n  }\n\n  view = {\n    wordPath: async (\n      params: TickBitmapTestTypes.CallMethodParams<\"wordPath\">\n    ): Promise<TickBitmapTestTypes.CallMethodResult<\"wordPath\">> => {\n      return callMethod(\n        TickBitmapTest,\n        this,\n        \"wordPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getWord: async (\n      params: TickBitmapTestTypes.CallMethodParams<\"getWord\">\n    ): Promise<TickBitmapTestTypes.CallMethodResult<\"getWord\">> => {\n      return callMethod(\n        TickBitmapTest,\n        this,\n        \"getWord\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getWordOrTemplate: async (\n      params: TickBitmapTestTypes.CallMethodParams<\"getWordOrTemplate\">\n    ): Promise<TickBitmapTestTypes.CallMethodResult<\"getWordOrTemplate\">> => {\n      return callMethod(\n        TickBitmapTest,\n        this,\n        \"getWordOrTemplate\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    flipTick: async (\n      params: TickBitmapTestTypes.CallMethodParams<\"flipTick\">\n    ): Promise<TickBitmapTestTypes.CallMethodResult<\"flipTick\">> => {\n      return callMethod(\n        TickBitmapTest,\n        this,\n        \"flipTick\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    nextInitializedTickWithinOneWord: async (\n      params: TickBitmapTestTypes.CallMethodParams<\"nextInitializedTickWithinOneWord\">\n    ): Promise<\n      TickBitmapTestTypes.CallMethodResult<\"nextInitializedTickWithinOneWord\">\n    > => {\n      return callMethod(\n        TickBitmapTest,\n        this,\n        \"nextInitializedTickWithinOneWord\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionPath: async (\n      params: TickBitmapTestTypes.CallMethodParams<\"positionPath\">\n    ): Promise<TickBitmapTestTypes.CallMethodResult<\"positionPath\">> => {\n      return callMethod(\n        TickBitmapTest,\n        this,\n        \"positionPath\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    positionContractId: async (\n      params: TickBitmapTestTypes.CallMethodParams<\"positionContractId\">\n    ): Promise<TickBitmapTestTypes.CallMethodResult<\"positionContractId\">> => {\n      return callMethod(\n        TickBitmapTest,\n        this,\n        \"positionContractId\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    deploy: async (\n      params: TickBitmapTestTypes.CallMethodParams<\"deploy\">\n    ): Promise<TickBitmapTestTypes.CallMethodResult<\"deploy\">> => {\n      return callMethod(\n        TickBitmapTest,\n        this,\n        \"deploy\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    flipTick_: async (\n      params: TickBitmapTestTypes.CallMethodParams<\"flipTick_\">\n    ): Promise<TickBitmapTestTypes.CallMethodResult<\"flipTick_\">> => {\n      return callMethod(\n        TickBitmapTest,\n        this,\n        \"flipTick_\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    wordPath: async (\n      params: TickBitmapTestTypes.SignExecuteMethodParams<\"wordPath\">\n    ): Promise<TickBitmapTestTypes.SignExecuteMethodResult<\"wordPath\">> => {\n      return signExecuteMethod(TickBitmapTest, this, \"wordPath\", params);\n    },\n    getWord: async (\n      params: TickBitmapTestTypes.SignExecuteMethodParams<\"getWord\">\n    ): Promise<TickBitmapTestTypes.SignExecuteMethodResult<\"getWord\">> => {\n      return signExecuteMethod(TickBitmapTest, this, \"getWord\", params);\n    },\n    getWordOrTemplate: async (\n      params: TickBitmapTestTypes.SignExecuteMethodParams<\"getWordOrTemplate\">\n    ): Promise<\n      TickBitmapTestTypes.SignExecuteMethodResult<\"getWordOrTemplate\">\n    > => {\n      return signExecuteMethod(\n        TickBitmapTest,\n        this,\n        \"getWordOrTemplate\",\n        params\n      );\n    },\n    flipTick: async (\n      params: TickBitmapTestTypes.SignExecuteMethodParams<\"flipTick\">\n    ): Promise<TickBitmapTestTypes.SignExecuteMethodResult<\"flipTick\">> => {\n      return signExecuteMethod(TickBitmapTest, this, \"flipTick\", params);\n    },\n    nextInitializedTickWithinOneWord: async (\n      params: TickBitmapTestTypes.SignExecuteMethodParams<\"nextInitializedTickWithinOneWord\">\n    ): Promise<\n      TickBitmapTestTypes.SignExecuteMethodResult<\"nextInitializedTickWithinOneWord\">\n    > => {\n      return signExecuteMethod(\n        TickBitmapTest,\n        this,\n        \"nextInitializedTickWithinOneWord\",\n        params\n      );\n    },\n    positionPath: async (\n      params: TickBitmapTestTypes.SignExecuteMethodParams<\"positionPath\">\n    ): Promise<TickBitmapTestTypes.SignExecuteMethodResult<\"positionPath\">> => {\n      return signExecuteMethod(TickBitmapTest, this, \"positionPath\", params);\n    },\n    positionContractId: async (\n      params: TickBitmapTestTypes.SignExecuteMethodParams<\"positionContractId\">\n    ): Promise<\n      TickBitmapTestTypes.SignExecuteMethodResult<\"positionContractId\">\n    > => {\n      return signExecuteMethod(\n        TickBitmapTest,\n        this,\n        \"positionContractId\",\n        params\n      );\n    },\n    deploy: async (\n      params: TickBitmapTestTypes.SignExecuteMethodParams<\"deploy\">\n    ): Promise<TickBitmapTestTypes.SignExecuteMethodResult<\"deploy\">> => {\n      return signExecuteMethod(TickBitmapTest, this, \"deploy\", params);\n    },\n    flipTick_: async (\n      params: TickBitmapTestTypes.SignExecuteMethodParams<\"flipTick_\">\n    ): Promise<TickBitmapTestTypes.SignExecuteMethodResult<\"flipTick_\">> => {\n      return signExecuteMethod(TickBitmapTest, this, \"flipTick_\", params);\n    },\n  };\n\n  async multicall<Calls extends TickBitmapTestTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<TickBitmapTestTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends TickBitmapTestTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<TickBitmapTestTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | TickBitmapTestTypes.MultiCallParams\n      | TickBitmapTestTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      TickBitmapTest,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"TickBitmapTest\",\n  \"bytecode\": \"02091e4050406c409f410041164131415941680000010101120e16007a7a1241003a7a05294b033a904a023a221302640200000105011b1600000017011601cb17021602c54c02160202b21301640c130164170417031601ce0016031604c11816020200000103010d1600000017011601cb17021602c54c02160202ce000200000103001e1600ce0123052413412d7b16007a7ace013a7a05294b033a904a023a22170116010001170216010d0c160201020000020602403016007a7ace013a7a05294b033a904a023a2216014c02054a01061f170216020002170316021601ce010f0e1603010317051704160412bff27618264c0212bff276181704160412800d89e8284c0212800d89e817041604160502010003030108d37afb14100d1600160116021304640201000405010ad35b19984c1601160216030005170416001604cc02010303060113d3b7624ae716011602130264130064170417031600d1a2b116031604af1705160502010001010003d3a2f62a8d16000003\",\n  \"codeHash\": \"5cb6cce5c5b8adb88a18a993227d51465e3e54b5a34936cafc51100725724b54\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"wordTemplate\",\n      \"tickSpacing\"\n    ],\n    \"types\": [\n      \"ByteVec\",\n      \"I256\"\n    ],\n    \"isMutable\": [\n      false,\n      false\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"wordPath\",\n      \"paramNames\": [\n        \"compressed\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getWord\",\n      \"paramNames\": [\n        \"compressed\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"BitmapWord\"\n      ]\n    },\n    {\n      \"name\": \"getWordOrTemplate\",\n      \"paramNames\": [\n        \"compressed\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"BitmapWord\"\n      ]\n    },\n    {\n      \"name\": \"flipTick\",\n      \"paramNames\": [\n        \"tick\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"nextInitializedTickWithinOneWord\",\n      \"paramNames\": [\n        \"tick\",\n        \"zeroForOne\"\n      ],\n      \"paramTypes\": [\n        \"I256\",\n        \"Bool\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\",\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"positionPath\",\n      \"paramNames\": [\n        \"o\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"positionContractId\",\n      \"paramNames\": [\n        \"pool\",\n        \"o\",\n        \"tickLower\",\n        \"tickUpper\"\n      ],\n      \"paramTypes\": [\n        \"Pool\",\n        \"Address\",\n        \"I256\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"deploy\",\n      \"paramNames\": [\n        \"payer\",\n        \"word\",\n        \"ts\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"BitmapWord\",\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"TickBitmapTest\"\n      ]\n    },\n    {\n      \"name\": \"flipTick_\",\n      \"paramNames\": [\n        \"tick\"\n      ],\n      \"paramTypes\": [\n        \"I256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"TickBitmapError\",\n      \"fields\": [\n        {\n          \"name\": \"TickNotAligned\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"301\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"PathPrefixes\",\n      \"fields\": [\n        {\n          \"name\": \"Tick\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"Position\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"Word\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  ExecutableScript,\n  ExecuteScriptParams,\n  ExecuteScriptResult,\n  Script,\n  SignerProvider,\n  HexString,\n} from \"@alephium/web3\";\nimport { getContractByCodeHash } from \"./contracts\";\nimport { default as CreateConfigScriptJson } from \"../CreateConfig.ral.json\";\nimport { default as CreateLiquidPoolScriptJson } from \"../CreateLiquidPool.ral.json\";\nimport { default as PoolRouterDemoScriptJson } from \"../PoolRouterDemo.ral.json\";\nimport { default as SwapWithoutAccountScriptJson } from \"../SwapWithoutAccount.ral.json\";\nimport * as types from \"./types\";\n\nexport const CreateConfig = new ExecutableScript<{\n  factory: HexString;\n  tickSpacing: bigint;\n  fee: bigint;\n  feeProtocol: bigint;\n  configIndex: bigint;\n}>(\n  Script.fromJson(CreateConfigScriptJson, \"\", types.AllStructs),\n  getContractByCodeHash\n);\n\nexport const CreateLiquidPool = new ExecutableScript<{\n  factory: HexString;\n  token0: HexString;\n  token1: HexString;\n  configIndex: bigint;\n  sqrtPriceX96: bigint;\n  rewardToken: HexString;\n  tickLower: bigint;\n  tickUpper: bigint;\n  liquidity: bigint;\n  amount0: bigint;\n  amount1: bigint;\n}>(\n  Script.fromJson(CreateLiquidPoolScriptJson, \"\", types.AllStructs),\n  getContractByCodeHash\n);\n\nexport const PoolRouterDemo = new ExecutableScript<{\n  pool_: HexString;\n  position_: HexString;\n  tick_: HexString;\n  word_: HexString;\n  factory_: HexString;\n  user_: HexString;\n  config_: HexString;\n  dexAccount_: HexString;\n  counter: bigint;\n}>(\n  Script.fromJson(PoolRouterDemoScriptJson, \"\", types.AllStructs),\n  getContractByCodeHash\n);\n\nexport const SwapWithoutAccount = new ExecutableScript<{\n  dexAccount: HexString;\n  pool: HexString;\n  tokenIn: HexString;\n  tokenOut: HexString;\n  zeroForOne: boolean;\n  amountSpecified: bigint;\n  sqrtPriceLimitX96: bigint;\n  data: HexString;\n}>(\n  Script.fromJson(SwapWithoutAccountScriptJson, \"\", types.AllStructs),\n  getContractByCodeHash\n);\n","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"CreateConfig\",\n  \"bytecodeTemplate\": \"01010300010011{0}{4}40cc17001600c5194c08{1}{2}{3}0f0d{0}010418\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"factory\",\n      \"tickSpacing\",\n      \"fee\",\n      \"feeProtocol\",\n      \"configIndex\"\n    ],\n    \"types\": [\n      \"PoolFactory\",\n      \"I256\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"CreateLiquidPool\",\n  \"bytecodeTemplate\": \"0101030002001fb41700{1}{2}{3}{4}{5}110d{0}0105170116007a{1}{9}a3{2}{10}a316001600{6}{7}{8}110e160101251818\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"factory\",\n      \"token0\",\n      \"token1\",\n      \"configIndex\",\n      \"sqrtPriceX96\",\n      \"rewardToken\",\n      \"tickLower\",\n      \"tickUpper\",\n      \"liquidity\",\n      \"amount0\",\n      \"amount1\"\n    ],\n    \"types\": [\n      \"PoolFactory\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"U256\",\n      \"ByteVec\",\n      \"I256\",\n      \"I256\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"PoolRouterDemo\",\n  \"bytecodeTemplate\": \"010103004026004270b41700{8}1600{0}{1}{2}{3}{4}{6}{7}13091308{5}010017081707170617051704170317021701{8}0c2f4c405016000d0c{7}010116007a13c40de0b6b3a7640000a2160113c40de0b6b3a7640000a3160016000b0613800f4240110e16040125181816007a160113c40de0b6b3a7640000a3160213c40de0b6b3a7640000a3160016000b0613800f4240110e16050125181816007a160113c40de0b6b3a7640000a3160313c40de0b6b3a7640000a3160016000b0613800f4240110e16060125181816007a160213c40de0b6b3a7640000a3160313c40de0b6b3a7640000a3160016000b0613800f4240110e1607012518180c6717090d67170a0e67170b0f67170c{8}0d2f4c403ecd16010d13c9010000000000000000000000001400110d16080105170d16007a13c40de0b6b3a7640000a2160113c40de0b6b3a7640000a3160016000b0613800f4240110e160d012518181400170e16001602a5170f1600160113c40de0b6b3a7640000a316001600160203120a13c101000276a30d2a160e13070e1605012a181816001602a5160f2b0c331343e97b{8}0e2f4c40241603160c44171016001603a517111600160113c40de0b6b3a7640000a316001600160303120a13c101000276a30d2a161013070e1605012a181816001603a516112b0c331343ea7b{8}0f2f4c40241601160b44171216001601a517131600160213c40de0b6b3a7640000a316001600160103120a13c101000276a30d2a161213070e1607012a181816001601a516132b0c331343eb7b{8}102f4c40241602160a44171416001602a517151600160313c40de0b6b3a7640000a316001600160204120a13d0fffd8963efd1fc6a506488495d951d5263988d260d2b161413070e1606012a181816001602a516152b0c331343ec7b{8}112f4c40221400171616001601a517171600160213c40de0b6b3a7640000a316001600160104120a13d0fffd8963efd1fc6a506488495d951d5263988d260d2b161613070e1605012a181816001601a516172b0c331343ed7b{8}13062f4c40221400171816001602a517191600160113c40de0b6b3a7640000a316001600160103123613c101000276a30d2a161813070e1605012a181816001602a516192b130a2f1343ee7b{8}13072f4c40241601160a44171a16001603a5171b1600160113c40de0b6b3a7640000a316001600160103123613c101000276a30d2a161a13070e1607012a181816001603a5161b2b130a2f1343f07b{8}13082f4c40241601160b44171c16001602a5171d1600160113c40de0b6b3a7640000a316001600160104123613d0fffd8963efd1fc6a506488495d951d5263988d260d2b161c13070e1607012a181816001602a5161d2b130a2f1343f07b{8}13092f4c40241602160a44171e16001603a5171f1600160213c40de0b6b3a7640000a316001600160203123613c101000276a30d2a161e13070e1606012a181816001603a5161f2b130a2f1343f07b{8}130a2f4c40221400172016001601a517211600160213c40de0b6b3a7640000a316001600160204123613d0fffd8963efd1fc6a506488495d951d5263988d260d2b162013070e1605012a181816001601a516212b130a2f1343ee7b{8}130b2f4c40271601160b44cd44160944172216001602a51723160013c40de0b6b3a7640000a216001600cd04123613d0fffd8963efd1fc6a506488495d951d5263988d260d2b162213070e1607012a181816001602a516232b130a2f1343f07b{8}130c2f4c40261601160b44cd4416094417241600a417251600160213c40de0b6b3a7640000a316001600cd03120a13c101000276a30d2a162413070e1607012a18181600a416252b0c331343eb7b\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"pool_\",\n      \"position_\",\n      \"tick_\",\n      \"word_\",\n      \"factory_\",\n      \"user_\",\n      \"config_\",\n      \"dexAccount_\",\n      \"counter\"\n    ],\n    \"types\": [\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.3.0\",\n  \"name\": \"SwapWithoutAccount\",\n  \"bytecodeTemplate\": \"010103000400402cb41700{0}160047cc17011601c5194c0516000d0c{0}d465b302f9{5}3d1702{5}05264c02{2}4a01{3}17031600{2}1602a3160016001603{4}{5}{6}{7}13070e{1}012a1818\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"dexAccount\",\n      \"pool\",\n      \"tokenIn\",\n      \"tokenOut\",\n      \"zeroForOne\",\n      \"amountSpecified\",\n      \"sqrtPriceLimitX96\",\n      \"data\"\n    ],\n    \"types\": [\n      \"IDexAccount\",\n      \"Pool\",\n      \"ByteVec\",\n      \"ByteVec\",\n      \"Bool\",\n      \"I256\",\n      \"U256\",\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"deployerAddress\": \"16j6oMwCc768CSjXst5ftHwyu7gUn6PvCX7YVvAQWWbZ2\",\n  \"contracts\": {\n    \"Pool\": {\n      \"txId\": \"932959166b40a3eb2c2077fc9cd71b6cdea8d6d20a817541f5bb07087df18b49\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a2145cc34020403609124023403843b747b34916493049ca4a3c4a6c4a9c4ad04afc4b3b4b674c494c6c4c8a4cbc4cd84d0b4d6c4d824d9d4da74dbc4dd24df94e064e1b4e714e854eef4f5f4feb508b512f51b45206524e535c562056ae572f57af57c5589258af597a5a125a4b5bfe5c55010000000102140002010000000102a0000201000101010716000c3413406e7bce0102010002030008160100021702160016024113406d7b0000010301413816000c3f264c061600057c203d4a0216003d1701160112800d89e83d321340ca7b16010d380c304c0213ccfffcb933bd6fad37aa2d162d1a5940014a0113cd0100000000000000000000000000000000170216010e380c304c06160213ccfff97272373d413259a46990580e213a2c1340803c4a0116021702160110380c304c06160213ccfff2e50f5f656932ef12357cf3c7fdcc2c1340803c4a011602170216011308380c304c06160213ccffe5caca7e10e4e61c3624eaa0941cd02c1340803c4a011602170216011310380c304c06160213ccffcb9843d60f6159c9db58835c9266442c1340803c4a011602170216011320380c304c06160213ccff973b41fa98c081472e6896dfb254c02c1340803c4a01160217021601134040380c304c06160213ccff2ea16466c96a3843ec78b326b528612c1340803c4a01160217021601134080380c304c06160213ccfe5dee046a99a2a811c461f1969c30532c1340803c4a01160217021601134100380c304c06160213ccfcbe86c7900a88aedcffc83b479aa3a42c1340803c4a01160217021601134200380c304c06160213ccf987a7253ac413176f2b074cf7815e542c1340803c4a01160217021601134400380c304c06160213ccf3392b0822b70005940c7a398e4b70f32c1340803c4a01160217021601134800380c304c06160213cce7159475a2c29b7443b29c7fa6e889d92c1340803c4a01160217021601135000380c304c06160213ccd097f3bdfd2022b8845ad8f792aa58252c1340803c4a01160217021601136000380c304c06160213cca9f746462d870fdf8a65dc1f90e061e52c1340803c4a011602170216011380004000380c304c06160213cc70d869a156d2a1b890bb3df62baf32f72c1340803c4a011602170216011380008000380c304c06160213cc31be135f97d08fd981231505542fcfa62c1340803c4a011602170216011380010000380c304c06160213cc09aa508b5b7a84e1c677de54f3e99bc92c1340803c4a011602170216011380020000380c304c06160213cb5d6af8dedb81196699c329225ee6042c1340803c4a011602170216011380040000380c304c06160213ca2216e584f5fa1ea926041bedfe982c1340803c4a011602170216011380080000380c304c06160213c8048a170391f7dc42444e8fa22c1340803c4a0116021702160005284c060c0d3616022d4a0116021702160213c1010000000091020100010b0141f2d3c6eb44f3160013c101000276a3347a4c0418160013d0fffd8963efd1fc6a506488495d951d5263988d26311340c97b160013203b1701160117020c1703160213cd01000000000000000000000000000000000d2b334c08160313408039170316021340803c1702160213c50100000000000000000d2b334c08160313404039170316021340403c1702160213c101000000000d2b334c0816031320391703160213203c17021602138000ffff334c0816031310391703160213103c170216021340ff334c0816031308391703160213083c17021602130f334c081603103917031602103c170216020f334c0816030e39170316020e3c170216020d334c0416030d3917031603134080344c071601160313407f2b3c17024a06160113407f16032b3b17021603134080314c0e0c0d3613407f2b16032a0c0d361340403c384a0316031340802b1340403b17040c1705160216022c13407f3c170216021340803c170516041605133f3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133e3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133d3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133c3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133b3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133a3b391704160216053c1702160216022c13407f3c170216021340803c17051604160513393b391704160216053c1702160216022c13407f3c170216021340803c17051604160513383b391704160216053c1702160216022c13407f3c170216021340803c17051604160513373b391704160216053c1702160216022c13407f3c170216021340803c17051604160513363b391704160216053c1702160216022c13407f3c170216021340803c17051604160513353b391704160216053c1702160216022c13407f3c170216021340803c17051604160513343b391704160216053c1702160216022c13407f3c170216021340803c17051604160513333b391704160216053c1702160216022c13407f3c170216021340803c17051604160513323b391704160413c63627a301d71055774c85371706160613dcfffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc556351340803c1707160613ccdb2df09e81959a81455e260799a0632f351340803c170816071380800000314c0316073f4a0616071380ffffff383f128100000020170916081380800000314c0316083f4a0616081380ffffff383f128100000020170a1609160a244c031609024a0a160a00041600324c03160a024a021609020000050d0440c5160016013417051603052917060c17070c17080c17090c170a16064c402316033d13800f424016042b13800f42400010170b16054c0616011600160203000c4a0516001601160203000e1707160b1607344c0216014a0516001602160b1605000a17094a402216054c0616011600160204000e4a0516001601160204000c17081603057c203d1608344c0216014a09160016021603057c203d1605000b1709160116092f170c16054c1e160c7a4c021816064c0216074a0516091600160203000c1707160c7a4c03181606194c0216084a0516091600160204000e17084a1d160c7a4c021816064c0216074a0516001609160203000e1707160c7a4c03181606194c0216084a0516001609160204000c17081606197a4c0818160316083f057c20284c061603057c203d170816067a4c041816091601304c0616033d16072b170a4a071607160413800f424016042b0011170a160916071608160a0200000202010e160016012d160016012e0c2f4c020c4a010d2a020000040901404916020c2f4c0216000216011340603b17041602160037170516034c1c160516022d16002f4c0d1604160535170616061604344c051604160016060011021604160416002d16022a0007024a1d160516022d16002f7a4c041816041605331340dd7b160416052b170716041600160700111708160813d1010000000000000000000000000000000000000000311340e17b1608020000040701402116034c11160213c901000000000000000000000000160100101704160016042a1705160513d1010000000000000000000000000000000000000000311340e17b1605024a0e160213c90100000000000000000000000016010011170616001606331340de7b160016062b0200000404011916000c331340df7b16010c331340e07b16034c07160016011602030008024a061600160116020300090200000404011916000c331340df7b16010c331340e07b16034c07160016011602040009024a061600160116020400080200000406011916021340603b1704160116002b170516034c08160416051601001116000007024a07160416051601001016002d0200000303011b16020b274c0f160016011602057c203d04000c3f057c20024a081600160116023d03000c3f02000004050111160116002b170416034c061602160413c9010000000000000000000000000011024a051602160413c90100000000000000000000000000100200000303011b160205264c0f160016011602057c203d04000e3f057c20024a081600160116023d03000e3f020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200101703160016011602870c334c0416030d2a021603020000010101120e16007a7a1241003a7a05294b033a904a023a221302640200000105011b1600001217011601cb17021602c54c02160202b21301640c130164170417031601ce0416031604c11816020200000103010d1600001217011601cb17021602c54c02160202ce040200000103001e1600ce0a23052413412d7b16007a7ace0a3a7a05294b033a904a023a22170116010013170216010d0c160201020000020602403016007a7ace0a3a7a05294b033a904a023a2216014c02054a01061f170216020014170316021601ce0a0f0e1603010317051704160412bff27618264c0212bff276181704160412800d89e8284c0212800d89e817041604160502010003030108d37afb14100d1600160116021304640201000405010ad35b19984c1601160216030017170416001604cc0200000101010316004002000003040109160016020019cc1703160116034402000003040109160016011602001a170316001603cc0200000202000f16001601261340667b160012bff27618291340677b160112800d89e8271340687b0000010101050c160013026402010001020107d30949c5981600001d17011601cb02000001080240301600001d17011601cb17021602c54c03160204021600a002274c04a00ea00fa0104a030c0c0c170517041703b216001302640c05160316041605130564170717061601ce0316061607c11816020302000003040108160016011602001717031603cb020000030d024039160016011602001717031603cb17041604c54c03160404020c0c0c1709170817070c0c0c170c170b170ab2a0001406414c504800031303640c160716081609160a160b160c13076417061705a0000d2aa1001603ce01160516060d1600c9181604030200000209034047a002a00ea00fa010100f16000101170417031702a002a00ea00fa010100f160101021707170617050c170816080f314c402716087a0f314d130e2ac316087a0f314d0e2a782b16087a0f314d112a783616087a0f314d0e2a7916080d2a17084a7fd5160216031604020000051103404b1602001f170617051603001f17081707ce0b1604040f0d160501001709ce0b1604030f0d16070100170a16097a4b021816064c0216020015160a7a4b021816084c0216030015160516070022170d170c170b1604160b160c160d100f160001041710170f170e16094c0516010d0c16050103160a4c0516010d0c16070103160e160f1610020003050f05405416021603001c560030160016011602160316040023170717061705160405254c403ca004170816020004170916030004170aa0021602264c0b1609160a1604000d170b160b0516051606160702a0021603264c16a001160a1604000d170c1609a0011604000f170d16083f16041f3da104160c160d160516061607021609160a1604000f170e05160e1605160616070205051605160616070201070513024056d3e58379f416011602160300211706170516064c0d16040c2f170716071913406b7b160016014513406c7b16011602160316043f170b170a170917081600160516064c020c4a010da3160516081609160a160b00241710170f170e170d170c160c3d1711160d3d17121600ce061611ac1600ce071612ac1207160116021603160e160f161056750916001601160216031604161116125676161116120201030511024048d39d5023b316011602160316043f057c20170817071706170516011602160300201709160016090da3160916051606160716080024170e170d170c170b170a160a057c203d170f160b057c203d1710160f16100e0c160901051207160116021603160c160d160e56750a16001601160216031604160f161075160f1610020103080c034027d3417830ee160216031604002017081605160616070f0f16080106170b170a1709160016080da316011609160a160b00281206160016011602160316041609160a160b761609160a160b020001040800402ece06ce07ce081706170517040c170716070f314c402216077a0f314d0d2a780c334c12160016077a0f314d102a7816077a0f314d0d2a78ab16070d2a17074a7fda01000418004097d34c88990ba0011704a0021705a00417061601052817070517081605160019001618170906160900045e16030c334c407c16030d2b1703160516000016170b170a160a0004170c1604160c16061601ce0900061710170f170e170d16074c0d1601160e16102a3f2017011608160f3f2017084a0c1601160f3f1f17011608160e16102a3f1f1708160b4c17160a001e17110c0d16110105171216004c051612057c204a011612171316063f16131f3d170616004c04160a06204a01160a1705160d170407160416065f160105244c1f1602430c2f4c0102160016071c4c02ce074a01ce061714160216141607002b171717161817151615160816171603100c16160129024a7f80010307403402416dd3d6407a21160405251340697b560030160405281707a001a002a003170a1709170816034c0c16051608317a4c0418160513c101000276a33313406a7b4a0b16051608337a4c0418160513d0fffd8963efd1fc6a506488495d951d5263988d263113406a7ba00416034c04160a13102e4a03160a103c170c170b1604051608160916034c02a00e4a01a00f160b0c1713171217111710170f170e170d160d05257a4c0418160f1605304c409b1610160300161715171416140004171616034c0416161605314a031616160533171716174c0216054a0116161718160f16181612160dce090006171c171b171a1719160f161416151616161a161b161c1723172217211720171f171e171d1619170f16074c0d160d162116232a3f20170d160e16223f20170e4a0c160d16223f1f170d160e162116232a3f1f170e160c0c334c041623160c2d4a010c1724161316242a171316120c334c091611162316242b13cd0100000000000000000000000000000000161200102a1711160f16202f4c4027161f4c1c161e001e1725a00ea00fa01016031611110d16250104172616034c051626057c204a011626172716123f16271f3d171216034c04161e06204a01161e17104a07160f161d304c03160f000517104a7f5b160fa1011610a1021612a1041613130a2d1728161316282b171316034c071611a10ea01116132aa1114a061611a10fa01216132aa1121604160d201729160e172a160316071d4c041629172a160e172916034c0e160016011602ce0616293dce07162a057c203d16064a0d160016011602ce07162a3dce061629057c203d1606173217311730172f172e172d172c172b16074c0f1600162e162fa3162b162c162d162e162f1630163116321628002d4a1216001602a51733160016021633a3162b162c162d162e162f1630163116321628002c08160016011629162aa001a004a002751629162a020000030d04404116000c13206217030e170416001320132016042a62170516056d1706160171160371311707160716021c170816084c0413c101000276a30d2a4a0313d0fffd8963efd1fc6a506488495d951d5263988d260d2b17091600132016042a16004362170a16074c0416011603444a031603160144170bce00160b1606001b170c16081609160c160a020001091000404716031602414c1e160016031604acce02160047cc1709ce00ce06ce0744ce05001a170a160016031608a3160016031608160a0c110c160901004a40211607160304002b170e170d170c170b16001602a5170f16001602160fa31600b21602160b16043f057c20160c160e13070e160d012a1818160116051606ab00010910004046160016031604acce02160147cc17091609c51340717b1609170ace00ce06ce0744ce05001a170b160016031608a3160016031608160b0c110c160a010016051602414c05160116051606ab4a1a1607160503002b170f170e170d170cb216051606a3b216011602160c16063f160d160f13070e160e012a1818010002020307d3c62bf5cfa0011600000416010004020000020800408716007a0f314d0f2c112ac3170216007a0f314d0f2c112a0d2ac3170316020c2f7a4b041816011602327a4b041816031602324c0102a0040c304c404f160116022b170416007a0f314d0f2c112a0e2ac31705160316022b170616041606314c0516041605160600104a011605170716007a0f314d130e2ac3160713cd0100000000000000000000000000000000a00400102a16007a0f314d130e2ac416007a0f314d0f2c112a0e2ac316072b16007a0f314d0f2c112a0e2ac4160116007a0f314d0f2c112ac400000102000e0c170116010f314c0816011600002f16010d2a17014a340107030a004096d34ca91e1416010f311340727b16020c331340747bce06ce07ce0817051704170316017a0f314d0f2a7817065617071607003016017a0f314d0f2c112a0e2ac3170816017a0f314d0f2c112a0d2ac31607337a4c041816080c331340737b16017a0f314d0f2c112a0d2ac316072b1709160716017a0f314d0f2c112ac416017a0f314d0f2c112a0d2ac316091602160800102a16017a0f314d0f2c112a0d2ac416017a0f314d0f2c112a0e2ac316022a16017a0f314d0f2c112a0e2ac4160016061602ac0107050a004065d375c252e5b4ce00774513406f7b16010f311340727b16040c331340747b56170516021605334c0216024a011605170616061603311340707b16050030ce06ce07ce08170917081707160616017a0f314d0f2c112ac4160316017a0f314d0f2c112a0d2ac416017a0f314d0f2c112a0e2ac316042a16017a0f314d0f2c112a0e2ac4160016017a0f314d13072a781604ac01020103001cd3960b26b3b3ce00411341937ba0111701a01217021600ce061601ab1600ce071602ab0ca1110ca1121208b41600160116026101000840270840d1d300611b5f1601001e17081602001e17091600160116020020170a0c10160a0107170e170d170c170b16081609002217111710170f160100041712160200041713051714051715160b3f1716a0021601264c06161216131616000d17144a14a0021602264c0ba00116131616000d17141612a0011616000f17154a05161216131616000f17150c0c0c171917181717160b0c334c40290c171a161a0f314c4023161a7a0f314d130f2a78161a7a0f314d130c2a782b171b161b160b13cd01000000000000000000000000000000000010161a7a0f314d13172a79161a0d2a171a4a7fd905171c05171d56171e161e16062b171f1607161f2a17201603160b161f2c2a3f1721a0021601264c06161216131621000d171c4a14a0021602264c0ba00116131621000d171c1612a0011621000f171d4a05161216131621000f171da001a00113c901000000000000000000000000001017221622161c3d13c9010000000000000000000000000010161d3d2a1723160416172a1724160516182a17251622162413c901000000000000000000000000001016252a17261614161516171618161916231626162002010000000103d3ee6a5cd514404868747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f616c65706869756d2f746f6b656e2d6c6973742f6d61737465722f636f72652f6d2e6a736f6e021440210d0300030003000300030002000300030003000200010002000306414c50480002144027130200020001000200020002000200020002000200020002000200020002000200020002000200ad1880011b61c1174876e80001aaa31a3b3722037e844bc099df513d12f02e8b210506057f8f94f0f5f358f2564fa231500002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c408c2b82bb8e2faf600551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"12e3d4d172dfd22aa1ced149b5e134ba3d51f6996ad978a8d290b83312a3bc64625ad5893ae3908cd9aa17fa604b438745cc6eaf03f683891ca451d2a579650a\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 72545,\n      \"blockHash\": \"00000030b7fbb927463ff88b344ee9c599e3fdeb2e1e71d8def4f67584fc3160\",\n      \"codeHash\": \"e4a151da3170e11f0ba79c2a408b1cdf3d83cd8e63d53031d5c48785bd5b49b7\",\n      \"contractInstance\": {\n        \"address\": \"24qJqJr6rz4e87csMdBASWhCttozkCjaywjd1EEeatPzP\",\n        \"contractId\": \"96b8f1ef4c5deb38b3543216eaf21b988d0e700148857f87ef2bc014306b4d00\",\n        \"groupIndex\": 0\n      }\n    },\n    \"Position\": {\n      \"txId\": \"7132ff283c41fbf7b4b9c07f7134629987ec4d7a8494b4258578be21bc46e309\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a214429b0a0819402c410e413141d741f84276428a01000001010ece007a494d470d13216217000c0d160001350201000000020ace007a494d470d132162ce01020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200021703160016011602870c334c0416030d2a0216030201000409034062d379a1c203b4ce00451343857ba0003f16001f3d17040c0c0c1707170617050c170816080f314c403ea0000c334c403516087a0f314d0d2a7816087a0f314d0d2ac32ba00013cd0100000000000000000000000000000000000216087a0f314d112a7916087a0f314d102ac316087a0f314d112a782a16087a0f314d102ac416080d2a17084a7fbe160116021603a103a102a1011604a1001605160616070201000202000ed3b478489ab4ce00451343857ba00416002aa104a00516012aa10501000308034056d3ad05a194b4ce00451343857b0c0c0c1705170417030c170616060f314c404016067a0f314d7816067a0f314d102ac3334c0916067a0f314d102ac34a0616067a0f314d781707160716067a0f314d0f2a7916067a0f314d102ac316072b16067a0f314d102ac416060d2a17064a7fbc16031604160502010000000406d3f97c255fa000a001a002a0030214402d030403000000000000000000000000000000000000000000000000000000000000000002000306414c50480003140f070200020002000200020002000200ad188000e544c1174876e80001aaa31a3b355a1c2a5a3a7f882a32ad9e397ae612ccab22ecd42e27cb976b3af5f72678420002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c4074a98b1be3b5af600551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"07dbd1371500dbe6e77d4b86e1857fc9d6f3f9c1a63577c8d59d0536a539a81c660f7a7f8dc445545c50795a97ad1a061dc005563dd4ecd0d5a06d9faa2b2056\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58692,\n      \"blockHash\": \"0000004aad9966d0eca1bbf9b3513714f7d373f1652664b1a9107b1381209fc0\",\n      \"codeHash\": \"e41d13dfcf3ff0f5c5d6e38ac4d01f757ead1861e7d2d5bf07c835a6317aeb36\",\n      \"contractInstance\": {\n        \"address\": \"26A5tQw7gQkyiB9pXKdTTVqj9CfC9c44P69V2298wX4H5\",\n        \"contractId\": \"aa64075b8153cae814221291f102ae6e7ab756d4d53ddf86d9e3ec8296afb200\",\n        \"groupIndex\": 0\n      }\n    },\n    \"Tick\": {\n      \"txId\": \"bb0ccba7e77196fac2a3961b188524929141b3e579557282d0f6321ec450bb1e\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a21441810706405140a340f5410b416541730100030601402ad344ba8eddb4ce00451343217ba000170316033f16011f1704160405291343237b16043d170516051600321343227b1605a10016024c04a0011601204a03a00116011fa10116050c2f0201000405034032d3cfc5e9a41600ce01294c05a002a003a004024a40280c170416040f314c1e16047a0f314d0d2a7816047a0f314d0e2ac32b16047a0f314d0d2a7916040d2a17044a7fde1601160216030201000405034032d36efb0f181600ce01264c05a002a003a004024a40280c170416040f314c1e16047a0f314d0d2a7816047a0f314d0e2ac32b16047a0f314d0d2a7916040d2a17044a7fde16011602160302010201010008d3b0cd421fb4ce00451343217b1600b001000506014035d336cb1526b4ce00451343217b16034c03160417004a02160417010c170516050f314c1a16057a0f314d7816057a0f314d0e2ac32b16057a0f314d7916050d2a17054a22160016011602a104a103a102a00102010000000103d3602bc55da0010214402502040300000000000000000000000000000000000000000000000000000000000000000100140b0502000100020002000200ad188000e2bec1174876e80001aaa31a3b60f7c2b3cea2e09460824a0ed8615c621f945bb31658bc8586cf847a1cb9cc170002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c405d2b3f89fa12af600551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"db7a94df5640b6861f3fbe3afb9d6615765de3c563e98eaeff0dfb4c6d188f133fe90bfdbc865e830bd99fb20f1ad4c996ef79c112a955aef4c1f34757e8bf59\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58046,\n      \"blockHash\": \"00000080b51a3c5379e910eb41f4eae093bf3df7c9e3550570472ec4befb1900\",\n      \"codeHash\": \"a3a857d9b52fea681f09b73760c8b2a0f637889c23c230911683dc1da4f32c04\",\n      \"contractInstance\": {\n        \"address\": \"27ddwybgRZ3pwx8qSxC5om9YHdzJJp12m595Wom85bLQo\",\n        \"contractId\": \"c04ea64505b40f987898116ed2a7448d6ea21f97c0540fb66dbe9d9cbc995f00\",\n        \"groupIndex\": 0\n      }\n    },\n    \"BitmapWord\": {\n      \"txId\": \"49415e25a3e54fba679595df2614b6e63557815b7320c96ec2027c23a7d5b52a\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a21442b6020540d641c941e7429442aa0000010201406516000c301340967b0c1701160013cd0100000000000000000000000000000000344c0816001340803c170016011340802a1701160013c5010000000000000000344c0816001340403c170016011340402a1701160013c10100000000344c08160013203c1700160113202a170116001380010000344c08160013103c1700160113102a17011600134100344c08160013083c1700160113082a170116001310344c081600103c17001601102a1701160010344c0816000e3c170016010e2a170116000e344c0416010d2a17011601020000010201407c16000c301340977b1340ff1701160013ccffffffffffffffffffffffffffffffff380c334c0516011340802b17014a0416001340803c1700160013c4ffffffffffffffff380c334c0516011340402b17014a0416001340403c1700160013c0ffffffff380c334c05160113202b17014a04160013203c17001600138000ffff380c334c05160113102b17014a04160013103c170016001340ff380c334c05160113082b17014a04160013083c17001600130f380c334c051601102b17014a041600103c170016000f380c334c0516010e2b17014a0416000e3c170016000d380c334c0416010d2b170116010201000101000dd3ff38d2a3ce00b4451341937ba0000d160000043b3aa1000100030f024064d327ef6f9f16014c40301600000417030d16033b0d2b0d16033b2a1704a000160438170516050c30170616064c0e16001603160500002b3f20160221170716071606024a0a160016033f20160221170816081606024a40311600000417090d16093b0d2b0c0d363a170aa000160a38170b160b0c30170c160c4c0e1600160b000116092b3f1f160221170d160d160c024a0c16001240ff16093f201f160221170e160e160c020000010101091600124100231241001f124100233d0214402301040300000000000000000000000000000000000000000000000000000000000000001403010200ad188000e47ec1174876e80001aaa31a3b0c2c51ffa0bbf1f3ef61e8c0ec0c7147d85026d9d20a6226af59f2239abf75080002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c4045aa680b0f0faf600551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"0c0bd87d0a81b0d1c24dbd1a7139029baac0de5b029887f97c2474bd9550b7541724ec92799912903a4f6adb4a0bc336baaf3b18cf44d446c053b5ec8bb70f2b\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58494,\n      \"blockHash\": \"000000066bd668a7b3983ac93bab34b7b10cc0b925796aa985b8d00e3c9768d0\",\n      \"codeHash\": \"136e9e4d258309171e8dfb22499a72f626715e0b59933d1a049efa0aa3a12474\",\n      \"contractInstance\": {\n        \"address\": \"22DkvTg3YMuGQLHNC9xT86AoZRGb6B9Vnnq315UaXhBzo\",\n        \"contractId\": \"6fe6292b0ddb8d3ea99c6d34be75d25cd0e361fbf834ccfe834b3fc15abf9700\",\n        \"groupIndex\": 0\n      }\n    },\n    \"PoolConfig\": {\n      \"txId\": \"439d8b0370212537a9619e457204e23baafee1b885bc118a903ce0b238e5525d\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a21415030112010000000305d3bda4d814ce00ce01ce0202140703010002000200140100ad188000df3cc1174876e80001aaa31a3b5aeda1d8d88ef3bbf630a68fc9d4622831854b448edf0e9206c1fb51d9be89210002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c402e31373c3709af600551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"f630a361b0d13ca87eed7e820ec9d9d1d4d08dfde71cabcebebd254bcd78cc1f773df6c77899755aa4c59a452ece3601f704ec64f0306a2553661c9b719b9db6\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 57148,\n      \"blockHash\": \"0000008e28e5f513edacb4af42523c85959558e00c4bf7a1faeee0c982a50a90\",\n      \"codeHash\": \"a3767c513c0303c26970effa39737253d05a04ef162381703194b14ec501a98f\",\n      \"contractInstance\": {\n        \"address\": \"xBur314cQPHCd1DPxq3XiE7KVEwsThJYJemNzPuhocNb\",\n        \"contractId\": \"33fe576fce516b3abf9f0135019f7609e86966f8a7ffb8dd3228bf4a55460c00\",\n        \"groupIndex\": 0\n      }\n    },\n    \"DexAccount\": {\n      \"txId\": \"7099482e5b9cb2debfa7e918b26cba2a6ae124855be3750202bb018ced1ac4d2\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a21440f20505404b409940b240ca40e60103050800402cd3bd481528b417051600ce0116011602aa16047a0e314dc3170616064313202f4c1816047a0e314dc31603cc17071605160777467a4c0418a0020c304c04a0020d2ba10201000106004029d365b302f9b41701160149191341f47b160047cb17021602c54c06ce000d0d160201024a01ce00170316011603130264a000a001a00213036417051704160147b116041605c11801000101010ad358cbdacfa0020c2f4c03ce00024a0216000201030101000ad3511324a7b4b1a50d2f1341937b1600a10201030202000cd375472acbb4b1a50d2f1341937b16001601a101a100144045020400551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e7810400551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e781140703030003000200ad188000e13cc1174876e80001aaa31a3bdccd1b961c872fa04dbb0435e5e064c1429d8a58979295c869d4a91b677ee6990002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c4016b51d5e8203af600551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"dc50545c66889c1de031dc77daa434e2400683a82d22f3ef49c67f800e6e4a2c641ed332c18646af853c1f1997f3710a308a5f0e866b60601f559384607255b8\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 57660,\n      \"blockHash\": \"000000b1d3d5bc050fb1b8fa20fb27b2c41b2934ad816cded5647ef51575cd80\",\n      \"codeHash\": \"6794ba94e0bbd9a742f21c9a53f85ea82851424d1fb551d8fb373685e7b5ed18\",\n      \"contractInstance\": {\n        \"address\": \"27eRBiCgrzbA7cEqHLRhRp2nS4rVaWZ7uYHQJnE6YAL5u\",\n        \"contractId\": \"c081cc852039373625ffc15467b5a7b780271b5a5535926ff63308f507ecf000\",\n        \"groupIndex\": 0\n      }\n    },\n    \"PoolFactory\": {\n      \"txId\": \"3ce4fb7e27d6e1813e9585ac8285348fcdc56a99bb5fe9496d5a45635f9ad461\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a214425708090a1f403540a040ed41ce41f5422b424500000101010316004002000003040109160016020000cc17031601160344020000030401091600160116020001170316001603cc020000010401403a12bff276187a7a16003a7a05294b033a224a023a90160021170112800d89e87a7a16003a7a05294b033a904a023a22160021170216021601207a7a16003a7a05294b033a904a023a223d0d2a170313ccffffffffffffffffffffffffffffffff16032d0201000307014028d31c03e050b4ce00451341937b16001601160213036413006417041703a0001705a000000017061606ce0516031604c118a0000d2aa1000516055e07160116001605601605020100054020014079d3530365c2160071160171311342bd7b16020000cb17050c0f1605010017081707170616060003170916030d0dce010105170a1603160a0c170d170c170b0c0c0c0c0c0c0c0c0c171a171917181717171617151714171317120c0c0c171d171c171b0c0c171f171eb1ce02ce06ce03ce0416021600160116041607160616091406414c50480002130d640c160b160c160d0c16121613161416151616161716181619161a161b161c161d161e161f131364170f170eb116001601441602000117101610ce01160e160fc1171106161116001601160261161102010004050012d32d2d48cdb4ce00451342bf7bb1160216034416010002170416000d0c160401330103090a001ad3132dd93db4ce00451342be7bb11601160244160000021709160316041608a316031605160616071608110c1609013201000303000ad3333a48b8b4ce00451341937b160016011602bb1440f5070400551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78103402096b8f1ef4c5deb38b3543216eaf21b988d0e700148857f87ef2bc014306b4d00034020aa64075b8153cae814221291f102ae6e7ab756d4d53ddf86d9e3ec8296afb200034020c04ea64505b40f987898116ed2a7448d6ea21f97c0540fb66dbe9d9cbc995f000340206fe6292b0ddb8d3ea99c6d34be75d25cd0e361fbf834ccfe834b3fc15abf970003402033fe576fce516b3abf9f0135019f7609e86966f8a7ffb8dd3228bf4a55460c00034020c081cc852039373625ffc15467b5a7b780271b5a5535926ff63308f507ecf0001403010200ad188000e552c1174876e80002aaa31a3bb2111a4dc4143194bf44b696e5c6eecbaf4272a02e7edaabb7025dc77273a8a90002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a194aaa31a3bb185643b6f8a5716e670718195d56500243c0c96ccf516ccb520b8ab35f399940301c4a012811bfc071e8800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"9ccc6314f5dff3ea4d967fff6df1f883fbffc2e20e94928edcbe11716f6d05ee635dff88aba42e3f790818e894aae0b202398feb32e008f5178a072bef515583\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58706,\n      \"blockHash\": \"00000036110d5fdb6744694fabeb48e407cffc72997f126e2693050523d1a940\",\n      \"codeHash\": \"0e35acea6952e02d53c110d652cdcf6c2cf87bdfeada04befdb9b057ac85a11c\",\n      \"contractInstance\": {\n        \"address\": \"26qgWds3DgK4Z4Djge64n8W6d9ZeYvdGNbsTdii2N2ByH\",\n        \"contractId\": \"b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf100\",\n        \"groupIndex\": 0\n      }\n    },\n    \"PositionManager\": {\n      \"txId\": \"25a92f7a45a4237619e72346dfb2a0d8cc582ef5f266ef7f0c4a954da260c8f6\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a214446f0110409a40c840ec413e416c424e4271427b429042a642bc42d7431a438e43ec444d01030b16044051d39b20ce13ce00160116024416030009170b160516060e0f160b012e170e170d170c160c160d160e160716080003170f160b160416051606000b171016001610a5171116001601a5171216001602a5171316007a7a16011612a316021613a316101611a31600160416051606160f110e160b01251715171416141609347a4c04181615160a341343527b160f16141615160b0201000304010dd3b8a5f4fb1600160113c9010000000000000000000000000005170316021603160116002b000502010003030108d364be47fc160213c901000000000000000000000000160116002b00050201000507014027d345f12d7a16001601324c061601160216030001024a1c16001602314c13160016021603000117051601160016040002170616051606314c0216054a011606024a0516011602160400020201000304010ed374e08b3b160213c9010000000000000000000000002c160116002b160100051703160316002d020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200051703160016011602870c334c0416030d2a0216030200000101010316004002000003040109160016020007cc17031601160344020000030401091600160116020008170316001603cc02010003030108d37afb14100d1600160116021304640201000405010ad35b19984c160116021603000a170416001604cc0201030b0d004021d3259c1e8816001601a5170b16001602a5170c16007a1601160ba31602160ca31600160116021603160416051606160716081609160a00001818181801030a0e004041d35060929cce00160216034416040009170a160a160516061607000b170b1600160b0da316001605160616071601110e160a0126170d170c160c1608347a4c0418160d1609341343537b1600160b0da3160016051605160616070c0d360c0d360c0d3613080f160a012718181801030b0d004032d3ee4d9e3ace00160216034416040009170b160b160516071608000b170c1600160c0da316001605160716081601110e160b012618181600160c0da3160016061605160716081609160a0c0d3613080f160b012718181801000409044034d341eff2fd1600160116021603000b17040c17051604c54b041605d12a170516020d0d1600011ec54b041605d12a170516030d0d1600011ec54b041605d12a1705160216030e0f1600012e17081707170616061607160816050214402401034020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf100140100ad188000e7cfc1174876e80001aaa31a3b36b0bc6c246195842b2a888ecaa56a1bd6a3e94b840d21b7a9ea51534361e8a70002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c49e9a266cbaff868800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"b77da41e01a3862e3fea0b9a3a58b3507275353e97847776dbd7006a1292b62e1441a1da2af6af570d47b0b05dc59a59cb4d4c7d141523fbe48701d013f1c428\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 59343,\n      \"blockHash\": \"000000bb64c6de0fd3e6453d7a021407787f50f60e989a9e2e40dc4e9fd886a0\",\n      \"codeHash\": \"a3262fd42be249f2241268f2a3b5a2de9e6fb4374f48fcad60c824a9aec559aa\",\n      \"contractInstance\": {\n        \"address\": \"23niYfpKCYJRM4qXBCXQxW8vuGA185QLpQsxYJb68rkSK\",\n        \"contractId\": \"8733540697ca46ddc66c0c538c5a201f0851dd729993c1e5e7de17c6ca3f3000\",\n        \"groupIndex\": 0\n      }\n    }\n  },\n  \"scripts\": {\n    \"CreateConfig:CreateConfig0\": {\n      \"signature\": \"95d88304507ca98cedce63cf4462948acfba331e705708b64638b95c45a6ed133cc4f0b21d2de36b27dc640037aac27faad6da0fab9da80ab9e226b6a86ede87\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"00010101010300010011144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000c40cc17001600c5194c08060c0c0f0d144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000104188000e0e9c1174876e80001aaa31a3b6b4fbbd9b77682eff3fdc63b25a15342264a1616185ffab0a7039769edb9a6cd0002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c49d226c5b5e3c5e8800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"gasAmount\": 57577,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"4a3da68dafeebdf90405a318580b33505bd2f7ebf3d2bc86aedf8faa94f9744f\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"24zEovLCVJpYrjRdFJqZ8Zi1LTZzQmwM1vUJh2rPTYK7d\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"000000071e2f5ce81071b18e9211a05e05dc0970de114c0fbdbe12a2306b1e10\",\n      \"codeHash\": \"4ab499d346b0dcf71f9c0cac69ac409ec9b05871616160442abdfac721281d74\"\n    },\n    \"CreateConfig:CreateConfig1\": {\n      \"signature\": \"621a2bd49bdd9799408f9a3d09ed53ae8c5ec5fbf02bc58ac3dd79a98076bf9275a34d7a485a8775e4b56d419acec4c6c467fd6f846c19290c24163a3682f4c8\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"00010101010300010011144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000d40cc17001600c5194c08071343e80c0f0d144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000104188000e0ecc1174876e80001aaa31a3ba985b5a654b0b4fedb6ff13fea8bb95fb607b10556124b59c64571c29f305c640002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c49baab20428147e8800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"gasAmount\": 57580,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"8c43d35cf4245a1741120056e04260a97484f23656e721991b6ea653a5e49625\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"2BqWJ78ep8qqcNJ3MLvXms1r5vbs7TKp1XbaiBXb9Wrs1\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"000000c85e8bac0ab648b08174a36df3a9266ff3c2169cfc43dd3e2c3664a9e0\",\n      \"codeHash\": \"6c57c8a7a7c7d53bb42921f1c2ac7003bc08d592e2c677c4efd74b059abbef33\"\n    },\n    \"CreateConfig:CreateConfig2\": {\n      \"signature\": \"445697991593d84980722b782627f5b5a6aebc38345a338b37633ebc574e0e2714c98aeaf74457a22c7bfc8326d99781bfbe60c00c6439ce5181e1f1123a306d\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"00010101010300010011144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000e40cc17001600c5194c08081347d00c0f0d144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000104188000e0ecc1174876e80001aaa31a3beb352f28913400315a82ad1e04ee22c609a1be3d3fb617b0ae308c1fe784796e0002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c49a32f7acf1ec9e8800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"gasAmount\": 57580,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"68c2e0c9e96b7c25a31578033a3b8ab5a63646f6493894eb9e9ac604b3ebefe1\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"2ArtT7RmibE7Hb5VBo9xDyYn7mGZk5WymFPrXwoFxZXcj\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"000000365eb515a8830fe9c3b080c5675f0cb445193625fad1821f2d912e2750\",\n      \"codeHash\": \"131c73fe4e38cb084bed35806122ea23d73c8fd8224fbc5ade17ee8eb4a505e5\"\n    },\n    \"CreateConfig:CreateConfig3\": {\n      \"signature\": \"f773602934078df30738308c068bbe6aef034569e641fe9a09b73ce24521d728615ce5aa03b0aa8f4baad35461ae88985b1c1706db773de2edacf8c9871c28b6\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"00010101010300010011144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000f40cc17001600c5194c0809134bb80c0f0d144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000104188000e0ecc1174876e80001aaa31a3bf743087ff9358501462aa08999e5bbfaa8f52be889b8019f6389bb7520f103f20002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c498bb3d55bbc4be8800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"gasAmount\": 57580,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"1f3343aec9b4b4e7c311acd82f7cd1bf22ca90e5f81160ef1b9bcf6239fa5060\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"224KShDpNTBoHpoXdFySWKzfZV4K4fzeJpu6QQnawuH4s\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"0000000eddeeb1563eb0b62c8e95ccb37e2973dd25a44b5efcbbcd2472dfc570\",\n      \"codeHash\": \"56cc1d4421f4f23043899b7a0373b591a761b29975087688cdd0bd3f00808bbc\"\n    },\n    \"CreateConfig:CreateConfig4\": {\n      \"signature\": \"e26b67750a9fdbef0612d73957e11244a280b009c5b54f662956ba714091efa904ee53c0475f735b091def0500836dc7541ca5c6d1b8942fe4917d1f24fadcfc\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"00010101010300010011144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1001040cc17001600c5194c080a134fa00c0f0d144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000104188000e0ecc1174876e80001aaa31a3b5720d76bd307754c5981b82d6f25053a11c933d0fa478ccdeaf99552263728dc0002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c4974382fe859cde8800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"gasAmount\": 57580,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"e840e41ea902b011bbe949f94545426699fcc7a953ce502c86c440ba331d5993\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"297o6U8udc82YWUx3PNnGn55kNAyfjpwHHiGUvcVbr5yy\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"00000005ac0a2906039b53792fe59ecf73bc0046be85fe581e48128746915ac0\",\n      \"codeHash\": \"cb2358ca6af3369fb99c381105861978b5db82f85424102882a46270b93e0c53\"\n    },\n    \"CreateConfig:CreateConfig5\": {\n      \"signature\": \"b75ee406002e7e83c67ff2fed440e34bab62b4efc2849b6d0ca8a4fec6ded4c600beb892de5eba46c63137e739d2bdb848391ac2d6724cd7a60ed270be6d9883\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"00010101010300010011144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1001140cc17001600c5194c0812061353880c0f0d144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000104188000e0edc1174876e80001aaa31a3b21c3cb2e99ed2d7f04a6d23911d3bd655195098defd223452262376e99b285ab0002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c495cbc89006fe168800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"gasAmount\": 57581,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"603c3a6f3ce39bbf0fc10856b7040c8ed2f161ed3b8d4484e8f694612e0a4ad2\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"222HwgmBpLyFbs3AjCKbzbF92EfBRsyJnkRxu4xHQvpLX\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"0000002e3c2d3880c281df7c87cc82ec6617e0a5ecebee589e1ecd6d7b1df790\",\n      \"codeHash\": \"be4cec7139b1145c9c64a4b7c7c0a53e006393e78f08289e4fd4ae47a0cab758\"\n    },\n    \"CreateConfig:CreateConfig6\": {\n      \"signature\": \"dab6743edd435549b4fd7179eb7c6df79de0220b3886ca65728d20781b6d571b4352c49d514f6fb35d4e0040126f22d94b3df81fb9b670308d5eda710821ab4f\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"00010101010300010011144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf100130640cc17001600c5194c0812071357700c0f0d144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000104188000e0eec1174876e80001aaa31a3bdc2a0b550a49cea44d0edb260a642a3734daba9b41d30831eb148b073af8db7e0002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c494540e0a3fe8668800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"gasAmount\": 57582,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"3ffac49413eec60226fa6c69247fb65c10a21abaa21f5c2fdba566cc11281d6c\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"wrBRUYSa8GuKDL5UcTrnrfGSRiikrf372sw8rQTUF4Aj\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"00000048670d6ec9c18df00e64e82303acf6732e6f2bb9205d88a6a93884c0b0\",\n      \"codeHash\": \"c191c582f147334644dd3026d938869e34f42d8872556661e09f6b3fb77c180a\"\n    },\n    \"CreateConfig:CreateConfig7\": {\n      \"signature\": \"66e3dd9fbb3d9619fb750b71406009c7edf4c7c2387877c1b9a1c0fc7c3ae9a8318f634a06b528663b1f4bd46e06fa348a0622ae80b8549b35ee87ce07b0de4f\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"00010101010300010011144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf100130740cc17001600c5194c081208135b580c0f0d144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000104188000e0eec1174876e80001aaa31a3b6b5657b97915c24e9bef497962e7b189f25cbc49f765b3d00ea37e89eb026e4e0002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c492dc538478d2b68800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"gasAmount\": 57582,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"2d7d228802e20762b20cef01fbcf1b6463e17778c70b3814a7e8ea767d408b6a\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"26pJYvKQLfLiqDAd7tJbtmdqrZvZx1tMvbZ1YAuD42cWj\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"0000007cfb61273fd897c5e41f55488d40cd5b23539c3f12bf840c415a2d7ae0\",\n      \"codeHash\": \"38287a150e698cd14e9a732e1683155d5991af5e51dad6da946798935f695acb\"\n    },\n    \"CreateConfig:CreateConfig8\": {\n      \"signature\": \"38b5bbbb318e9bfb2110c683c477dd009d99ebc3303d131fd00723a19ed8dc1e62bbc91250e4dbc0947c0e085257ea5a0c077f156fcd29a85431443188d7cf0d\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"00010101010300010011144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf100130840cc17001600c5194c081209135f400c0f0d144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000104188000e0eec1174876e80001aaa31a3b75c027d222bd96fdac6bb47915a339fb5bf5dc6a749e28840c9e8ab32616eae00002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c4916498feb1bd068800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"gasAmount\": 57582,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"3976ca6f53010f4ee68028313e9204a15409a509893b5fec5aec2dd37013e15e\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"28VtFdmDsmXx4ZuNSJPfL4BmfdFZ6GJMuQMMmGdVeS3iw\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"000000bb9372daf2ba4e1c89564877a54d559fc21edfea5293a119a6871b2f70\",\n      \"codeHash\": \"975f7925440f30ad8a98fed86a2ab63b04d95217a28092a7781bbe1ecd40d7b7\"\n    },\n    \"CreateConfig:CreateConfig9\": {\n      \"signature\": \"1750ab1becc014726ab696c8733054544f115e8db24183cf8229d23bfb46ba3f4113e34e508e9cc35a6564ae51b5d4da34a2743990b8a7c781509c76907c581c\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"00010101010300010011144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf100130940cc17001600c5194c08120a1363280c0f0d144020b488d493ae86dc82da6ba93156c6c68a751bb2093438d29b12dc3f6b2dfbf1000104188000e0eec1174876e80001aaa31a3bdf0ad6a5685a16a93e6f227e7835c34f06769786e5f9116124998f7eef4d115d0002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c48fecde78eaa7568800551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"gasAmount\": 57582,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"aedc03098e4eb813475753842081027a2a86aea428fa8e0298f1f6e5c806ddeb\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"266AHYY8dLvi3BdhdBYiyXbct6pTbzCxrSHqqGvESnWsZ\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"000000db4c4b21215b5c09a5c800e77f22434c633c09033cfcb5ef93f95ab270\",\n      \"codeHash\": \"630837e8f671616373514acb6cd4e6a24c2f68f1f2a13cacf71349fdfbe1f197\"\n    }\n  },\n  \"migrations\": {}\n}","{\n  \"deployerAddress\": \"1DrDyTr9RpRsQnDnXo2YRiPzPW4ooHX5LLoqXrqfMrpQH\",\n  \"contracts\": {\n    \"Pool\": {\n      \"txId\": \"679083e77c2b71bf55816f328146c37529b679bfbc3b6e024a96091848847753\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a2145c6a4020403509124023403843b747b34916493049ca4a3c4a6c4a9c4ad04afc4b3b4b674c494c6c4c8a4cbc4cd84d0b4d6c4d824d9d4da74dbc4dd24df94e064e1b4e714e854eef4f5f4feb508b512f51b45206524e535c562056ae572f57af57c5589258af597a5a125a4b5bfe010000000102140002010000000102a0000201000101010716000c3413406e7bce0102010002030008160100021702160016024113406d7b0000010301413816000c3f264c061600057c203d4a0216003d1701160112800d89e83d321340ca7b16010d380c304c0213ccfffcb933bd6fad37aa2d162d1a5940014a0113cd0100000000000000000000000000000000170216010e380c304c06160213ccfff97272373d413259a46990580e213a2c1340803c4a0116021702160110380c304c06160213ccfff2e50f5f656932ef12357cf3c7fdcc2c1340803c4a011602170216011308380c304c06160213ccffe5caca7e10e4e61c3624eaa0941cd02c1340803c4a011602170216011310380c304c06160213ccffcb9843d60f6159c9db58835c9266442c1340803c4a011602170216011320380c304c06160213ccff973b41fa98c081472e6896dfb254c02c1340803c4a01160217021601134040380c304c06160213ccff2ea16466c96a3843ec78b326b528612c1340803c4a01160217021601134080380c304c06160213ccfe5dee046a99a2a811c461f1969c30532c1340803c4a01160217021601134100380c304c06160213ccfcbe86c7900a88aedcffc83b479aa3a42c1340803c4a01160217021601134200380c304c06160213ccf987a7253ac413176f2b074cf7815e542c1340803c4a01160217021601134400380c304c06160213ccf3392b0822b70005940c7a398e4b70f32c1340803c4a01160217021601134800380c304c06160213cce7159475a2c29b7443b29c7fa6e889d92c1340803c4a01160217021601135000380c304c06160213ccd097f3bdfd2022b8845ad8f792aa58252c1340803c4a01160217021601136000380c304c06160213cca9f746462d870fdf8a65dc1f90e061e52c1340803c4a011602170216011380004000380c304c06160213cc70d869a156d2a1b890bb3df62baf32f72c1340803c4a011602170216011380008000380c304c06160213cc31be135f97d08fd981231505542fcfa62c1340803c4a011602170216011380010000380c304c06160213cc09aa508b5b7a84e1c677de54f3e99bc92c1340803c4a011602170216011380020000380c304c06160213cb5d6af8dedb81196699c329225ee6042c1340803c4a011602170216011380040000380c304c06160213ca2216e584f5fa1ea926041bedfe982c1340803c4a011602170216011380080000380c304c06160213c8048a170391f7dc42444e8fa22c1340803c4a0116021702160005284c060c0d3616022d4a0116021702160213c1010000000091020100010b0141f2d3c6eb44f3160013c101000276a3347a4c0418160013d0fffd8963efd1fc6a506488495d951d5263988d26311340c97b160013203b1701160117020c1703160213cd01000000000000000000000000000000000d2b334c08160313408039170316021340803c1702160213c50100000000000000000d2b334c08160313404039170316021340403c1702160213c101000000000d2b334c0816031320391703160213203c17021602138000ffff334c0816031310391703160213103c170216021340ff334c0816031308391703160213083c17021602130f334c081603103917031602103c170216020f334c0816030e39170316020e3c170216020d334c0416030d3917031603134080344c071601160313407f2b3c17024a06160113407f16032b3b17021603134080314c0e0c0d3613407f2b16032a0c0d361340403c384a0316031340802b1340403b17040c1705160216022c13407f3c170216021340803c170516041605133f3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133e3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133d3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133c3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133b3b391704160216053c1702160216022c13407f3c170216021340803c170516041605133a3b391704160216053c1702160216022c13407f3c170216021340803c17051604160513393b391704160216053c1702160216022c13407f3c170216021340803c17051604160513383b391704160216053c1702160216022c13407f3c170216021340803c17051604160513373b391704160216053c1702160216022c13407f3c170216021340803c17051604160513363b391704160216053c1702160216022c13407f3c170216021340803c17051604160513353b391704160216053c1702160216022c13407f3c170216021340803c17051604160513343b391704160216053c1702160216022c13407f3c170216021340803c17051604160513333b391704160216053c1702160216022c13407f3c170216021340803c17051604160513323b391704160413c63627a301d71055774c85371706160613dcfffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc556351340803c1707160613ccdb2df09e81959a81455e260799a0632f351340803c170816071380800000314c0316073f4a0616071380ffffff383f128100000020170916081380800000314c0316083f4a0616081380ffffff383f128100000020170a1609160a244c031609024a0a160a00041600324c03160a024a021609020000050d0440c5160016013417051603052917060c17070c17080c17090c170a16064c402316033d13800f424016042b13800f42400010170b16054c0616011600160203000c4a0516001601160203000e1707160b1607344c0216014a0516001602160b1605000a17094a402216054c0616011600160204000e4a0516001601160204000c17081603057c203d1608344c0216014a09160016021603057c203d1605000b1709160116092f170c16054c1e160c7a4c021816064c0216074a0516091600160203000c1707160c7a4c03181606194c0216084a0516091600160204000e17084a1d160c7a4c021816064c0216074a0516001609160203000e1707160c7a4c03181606194c0216084a0516001609160204000c17081606197a4c0818160316083f057c20284c061603057c203d170816067a4c041816091601304c0616033d16072b170a4a071607160413800f424016042b0011170a160916071608160a0200000202010e160016012d160016012e0c2f4c020c4a010d2a020000040901404916020c2f4c0216000216011340603b17041602160037170516034c1c160516022d16002f4c0d1604160535170616061604344c051604160016060011021604160416002d16022a0007024a1d160516022d16002f7a4c041816041605331340dd7b160416052b170716041600160700111708160813d1010000000000000000000000000000000000000000311340e17b1608020000040701402116034c11160213c901000000000000000000000000160100101704160016042a1705160513d1010000000000000000000000000000000000000000311340e17b1605024a0e160213c90100000000000000000000000016010011170616001606331340de7b160016062b0200000404011916000c331340df7b16010c331340e07b16034c07160016011602030008024a061600160116020300090200000404011916000c331340df7b16010c331340e07b16034c07160016011602040009024a061600160116020400080200000406011916021340603b1704160116002b170516034c08160416051601001116000007024a07160416051601001016002d0200000303011b16020b274c0f160016011602057c203d04000c3f057c20024a081600160116023d03000c3f02000004050111160116002b170416034c061602160413c9010000000000000000000000000011024a051602160413c90100000000000000000000000000100200000303011b160205264c0f160016011602057c203d04000e3f057c20024a081600160116023d03000e3f020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200101703160016011602870c334c0416030d2a021603020000010101120e16007a7a1241003a7a05294b033a904a023a221302640200000105011b1600001217011601cb17021602c54c02160202b21301640c130164170417031601ce0416031604c11816020200000103010d1600001217011601cb17021602c54c02160202ce040200000103001e1600ce0a23052413412d7b16007a7ace0a3a7a05294b033a904a023a22170116010013170216010d0c160201020000020602403016007a7ace0a3a7a05294b033a904a023a2216014c02054a01061f170216020014170316021601ce0a0f0e1603010317051704160412bff27618264c0212bff276181704160412800d89e8284c0212800d89e817041604160502010003030108d37afb14100d1600160116021304640201000405010ad35b19984c1601160216030017170416001604cc0200000101010316004002000003040109160016020019cc1703160116034402000003040109160016011602001a170316001603cc0200000202000f16001601261340667b160012bff27618291340677b160112800d89e8271340687b0000010101050c160013026402010001020107d30949c5981600001d17011601cb02000001080240301600001d17011601cb17021602c54c03160204021600a002274c04a00ea00fa0104a030c0c0c170517041703b216001302640c05160316041605130564170717061601ce0316061607c11816020302000003040108160016011602001717031603cb020000030d024039160016011602001717031603cb17041604c54c03160404020c0c0c1709170817070c0c0c170c170b170ab2a0001406414c504800031303640c160716081609160a160b160c13076417061705a0000d2aa1001603ce01160516060d1600c9181604030200000209034047a002a00ea00fa010100f16000101170417031702a002a00ea00fa010100f160101021707170617050c170816080f314c402716087a0f314d130e2ac316087a0f314d0e2a782b16087a0f314d112a783616087a0f314d0e2a7916080d2a17084a7fd5160216031604020000051103404b1602001f170617051603001f17081707ce0b1604040f0d160501001709ce0b1604030f0d16070100170a16097a4b021816064c0216020015160a7a4b021816084c0216030015160516070022170d170c170b1604160b160c160d100f160001041710170f170e16094c0516010d0c16050103160a4c0516010d0c16070103160e160f1610020003050f05405416021603001c560030160016011602160316040023170717061705160405254c403ca004170816020004170916030004170aa0021602264c0b1609160a1604000d170b160b0516051606160702a0021603264c16a001160a1604000d170c1609a0011604000f170d16083f16041f3da104160c160d160516061607021609160a1604000f170e05160e1605160616070205051605160616070201070513024056d3e58379f416011602160300211706170516064c0d16040c2f170716071913406b7b160016014513406c7b16011602160316043f170b170a170917081600160516064c020c4a010da3160516081609160a160b00241710170f170e170d170c160c3d1711160d3d17121600ce061611ac1600ce071612ac1207160116021603160e160f161056750916001601160216031604161116125676161116120201030511024048d39d5023b316011602160316043f057c20170817071706170516011602160300201709160016090da3160916051606160716080024170e170d170c170b170a160a057c203d170f160b057c203d1710160f16100e0c160901051207160116021603160c160d160e56750a16001601160216031604160f161075160f1610020103080c034027d3417830ee160216031604002017081605160616070f0f16080106170b170a1709160016080da316011609160a160b00281206160016011602160316041609160a160b761609160a160b020001040800402ece06ce07ce081706170517040c170716070f314c402216077a0f314d0d2a780c334c12160016077a0f314d102a7816077a0f314d0d2a78ab16070d2a17074a7fda01000418004097d34c88990ba0011704a0021705a00417061601052817070517081605160019001618170906160900045e16030c334c407c16030d2b1703160516000016170b170a160a0004170c1604160c16061601ce0900061710170f170e170d16074c0d1601160e16102a3f2017011608160f3f2017084a0c1601160f3f1f17011608160e16102a3f1f1708160b4c17160a001e17110c0d16110105171216004c051612057c204a011612171316063f16131f3d170616004c04160a06204a01160a1705160d170407160416065f160105244c1f1602430c2f4c0102160016071c4c02ce074a01ce061714160216141607002b171717161817151615160816171603100c16160129024a7f80010307403402416dd3d6407a21160405251340697b560030160405281707a001a002a003170a1709170816034c0c16051608317a4c0418160513c101000276a33313406a7b4a0b16051608337a4c0418160513d0fffd8963efd1fc6a506488495d951d5263988d263113406a7ba00416034c04160a13102e4a03160a103c170c170b1604051608160916034c02a00e4a01a00f160b0c1713171217111710170f170e170d160d05257a4c0418160f1605304c409b1610160300161715171416140004171616034c0416161605314a031616160533171716174c0216054a0116161718160f16181612160dce090006171c171b171a1719160f161416151616161a161b161c1723172217211720171f171e171d1619170f16074c0d160d162116232a3f20170d160e16223f20170e4a0c160d16223f1f170d160e162116232a3f1f170e160c0c334c041623160c2d4a010c1724161316242a171316120c334c091611162316242b13cd0100000000000000000000000000000000161200102a1711160f16202f4c4027161f4c1c161e001e1725a00ea00fa01016031611110d16250104172616034c051626057c204a011626172716123f16271f3d171216034c04161e06204a01161e17104a07160f161d304c03160f000517104a7f5b160fa1011610a1021612a1041613130a2d1728161316282b171316034c071611a10ea01116132aa1114a061611a10fa01216132aa1121604160d201729160e172a160316071d4c041629172a160e172916034c0e160016011602ce0616293dce07162a057c203d16064a0d160016011602ce07162a3dce061629057c203d1606173217311730172f172e172d172c172b16074c0f1600162e162fa3162b162c162d162e162f1630163116321628002d4a1216001602a51733160016021633a3162b162c162d162e162f1630163116321628002c08160016011629162aa001a004a002751629162a020000030d04404116000c13206217030e170416001320132016042a62170516056d1706160171160371311707160716021c170816084c0413c101000276a30d2a4a0313d0fffd8963efd1fc6a506488495d951d5263988d260d2b17091600132016042a16004362170a16074c0416011603444a031603160144170bce00160b1606001b170c16081609160c160a020001091000404716031602414c1e160016031604acce02160047cc1709ce00ce06ce0744ce05001a170a160016031608a3160016031608160a0c110c160901004a40211607160304002b170e170d170c170b16001602a5170f16001602160fa31600b21602160b16043f057c20160c160e13070e160d012a1818160116051606ab00010910004046160016031604acce02160147cc17091609c51340717b1609170ace00ce06ce0744ce05001a170b160016031608a3160016031608160b0c110c160a010016051602414c05160116051606ab4a1a1607160503002b170f170e170d170cb216051606a3b216011602160c16063f160d160f13070e160e012a1818010002020307d3c62bf5cfa0011600000416010004020000020800408716007a0f314d0f2c112ac3170216007a0f314d0f2c112a0d2ac3170316020c2f7a4b041816011602327a4b041816031602324c0102a0040c304c404f160116022b170416007a0f314d0f2c112a0e2ac31705160316022b170616041606314c0516041605160600104a011605170716007a0f314d130e2ac3160713cd0100000000000000000000000000000000a00400102a16007a0f314d130e2ac416007a0f314d0f2c112a0e2ac316072b16007a0f314d0f2c112a0e2ac4160116007a0f314d0f2c112ac400000102000e0c170116010f314c0816011600002f16010d2a17014a340107030a004096d34ca91e1416010f311340727b16020c331340747bce06ce07ce0817051704170316017a0f314d0f2a7817065617071607003016017a0f314d0f2c112a0e2ac3170816017a0f314d0f2c112a0d2ac31607337a4c041816080c331340737b16017a0f314d0f2c112a0d2ac316072b1709160716017a0f314d0f2c112ac416017a0f314d0f2c112a0d2ac316091602160800102a16017a0f314d0f2c112a0d2ac416017a0f314d0f2c112a0e2ac316022a16017a0f314d0f2c112a0e2ac4160016061602ac0107050a004065d375c252e5b4ce00774513406f7b16010f311340727b16040c331340747b56170516021605334c0216024a011605170616061603311340707b16050030ce06ce07ce08170917081707160616017a0f314d0f2c112ac4160316017a0f314d0f2c112a0d2ac416017a0f314d0f2c112a0e2ac316042a16017a0f314d0f2c112a0e2ac4160016017a0f314d13072a781604ac01020103001cd3960b26b3b3ce00411341937ba0111701a01217021600ce061601ab1600ce071602ab0ca1110ca1121208b41600160116026101000840270840d1d300611b5f1601001e17081602001e17091600160116020020170a0c10160a0107170e170d170c170b16081609002217111710170f160100041712160200041713051714051715160b3f1716a0021601264c06161216131616000d17144a14a0021602264c0ba00116131616000d17141612a0011616000f17154a05161216131616000f17150c0c0c171917181717160b0c334c40290c171a161a0f314c4023161a7a0f314d130f2a78161a7a0f314d130c2a782b171b161b160b13cd01000000000000000000000000000000000010161a7a0f314d13172a79161a0d2a171a4a7fd905171c05171d56171e161e16062b171f1607161f2a17201603160b161f2c2a3f1721a0021601264c06161216131621000d171c4a14a0021602264c0ba00116131621000d171c1612a0011621000f171d4a05161216131621000f171da001a00113c901000000000000000000000000001017221622161c3d13c9010000000000000000000000000010161d3d2a1723160416172a1724160516182a17251622162413c901000000000000000000000000001016252a172616141615161716181619162316261620021440210d0300030003000300030002000300030003000200010002000306414c50480002144027130200020001000200020002000200020002000200020002000200020002000200020002000200ad1880011aafc1174876e8000137a4444740c9154e7f571b29f47c7d93de1a6afce0ee3918f2630a868d4c015977269a81000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c406070832059b680000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"41ab84eac3e6f62616c3e8afc9c29e06cc7fba59a9640b97c470a2cfb7f0d11833ef57fb36989c4b5c362184b50e830a74560b925c4adc94b0964a9f41768356\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 72367,\n      \"blockHash\": \"4d47dd6cf64f35687ef8feecd53fc4df79dc82f575eb77f65994fb8d41f8adf0\",\n      \"codeHash\": \"c49cf329e8847e20ba8e262407de56e66b03ad1761510dfa08581044914fa5eb\",\n      \"contractInstance\": {\n        \"address\": \"uermu1A4UyXXNXtkTxqVobmUzsrstYXNHqRxxFuGfVCs\",\n        \"contractId\": \"0e527d65f488e70fcf3618e96013355547e8cacd3f56a1b95f14b40aa241ed00\",\n        \"groupIndex\": 0\n      }\n    },\n    \"Position\": {\n      \"txId\": \"f27ac1ca3dec2f41afb9004948ac2ca5028e2088b495437e6cabace335ab7b5e\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a214428a0a08091c40fe412141c741e84266427a01000000010214000201000000020ace007a494d470d132162ce01020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200021703160016011602870c334c0416030d2a0216030201000409034062d379a1c203b4ce00451343857ba0003f16001f3d17040c0c0c1707170617050c170816080f314c403ea0000c334c403516087a0f314d0d2a7816087a0f314d0d2ac32ba00013cd0100000000000000000000000000000000000216087a0f314d112a7916087a0f314d102ac316087a0f314d112a782a16087a0f314d102ac416080d2a17084a7fbe160116021603a103a102a1011604a1001605160616070201000202000ed3b478489ab4ce00451343857ba00416002aa104a00516012aa10501000308034056d3ad05a194b4ce00451343857b0c0c0c1705170417030c170616060f314c404016067a0f314d7816067a0f314d102ac3334c0916067a0f314d102ac34a0616067a0f314d781707160716067a0f314d0f2a7916067a0f314d102ac316072b16067a0f314d102ac416060d2a17064a7fbc16031604160502010000000406d3f97c255fa000a001a002a0030214402d030403000000000000000000000000000000000000000000000000000000000000000002000306414c50480003140f070200020002000200020002000200ad188000e522c1174876e8000137a44447e5b84f16c907398f54c8184a0f9bbd1229ade998e58229db3c089ddbc34ed109000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c4048eebcfaabe980000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"f315995408ed9b1187188b3d5f42203bb8c8eec9beaea67502e2896131d258f01f0c10a34838f36d12166c720f5daf1a099a6dc2a87d138e446b19623f243669\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58658,\n      \"blockHash\": \"2004c19da6de04f32c916814c2636fb8b965fed8b14066ef1a01b7807fffa970\",\n      \"codeHash\": \"2a56af5ded37a8003984377e33b58575d441f323541b78e26abf2659b520e2e3\",\n      \"contractInstance\": {\n        \"address\": \"26az8J8TD3gzVj481zs6UK2fNDvByojgZVEt1cjGLBYsq\",\n        \"contractId\": \"b0c5090f18458a2023ef92ff5669c203d6dcfc5c615f0185f3818e28e354dd00\",\n        \"groupIndex\": 0\n      }\n    },\n    \"Tick\": {\n      \"txId\": \"14752370615a65ce5267d5751ffc67f4e2f702ade381fecda172d2d2cd78ef18\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a21441810706405140a340f5410b416541730100030601402ad344ba8eddb4ce00451343217ba000170316033f16011f1704160405291343237b16043d170516051600321343227b1605a10016024c04a0011601204a03a00116011fa10116050c2f0201000405034032d3cfc5e9a41600ce01294c05a002a003a004024a40280c170416040f314c1e16047a0f314d0d2a7816047a0f314d0e2ac32b16047a0f314d0d2a7916040d2a17044a7fde1601160216030201000405034032d36efb0f181600ce01264c05a002a003a004024a40280c170416040f314c1e16047a0f314d0d2a7816047a0f314d0e2ac32b16047a0f314d0d2a7916040d2a17044a7fde16011602160302010201010008d3b0cd421fb4ce00451343217b1600b001000506014035d336cb1526b4ce00451343217b16034c03160417004a02160417010c170516050f314c1a16057a0f314d7816057a0f314d0e2ac32b16057a0f314d7916050d2a17054a22160016011602a104a103a102a00102010000000103d3602bc55da0010214402502040300000000000000000000000000000000000000000000000000000000000000000100140b0502000100020002000200ad188000e2bec1174876e8000137a444474b56af6fc30023c09560f69fb947a63dd67ce0849d0128651427a12fa5d57638000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c4031707168c24680000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"677ed83c471d1918ec08f41a4e8f0333a6aafefbda3c8c27d68c23adacbaa7c4088a3009cbc18b0cc26a562a146adadbdb84918ca5a2c6df6b064cfb4b9f90d2\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58046,\n      \"blockHash\": \"48da0a3fb12413788b56fb56e1f0902c53d6dc60654d1eb2c03e8147b058a210\",\n      \"codeHash\": \"a3a857d9b52fea681f09b73760c8b2a0f637889c23c230911683dc1da4f32c04\",\n      \"contractInstance\": {\n        \"address\": \"xjnNf9wUVZwPBmfZvTgazvETmd1KE9LssBMHCAvJPN8P\",\n        \"contractId\": \"3c287a934691eaf52cf9536729a3ed698aff90f7d32cd4abe0cdac8bb3692900\",\n        \"groupIndex\": 0\n      }\n    },\n    \"BitmapWord\": {\n      \"txId\": \"f7297b261ef45362c80b8365ff9f56e7af9115af31dad14c23e4afae27b5ab64\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a21442b6020540d641c941e7429442aa0000010201406516000c301340967b0c1701160013cd0100000000000000000000000000000000344c0816001340803c170016011340802a1701160013c5010000000000000000344c0816001340403c170016011340402a1701160013c10100000000344c08160013203c1700160113202a170116001380010000344c08160013103c1700160113102a17011600134100344c08160013083c1700160113082a170116001310344c081600103c17001601102a1701160010344c0816000e3c170016010e2a170116000e344c0416010d2a17011601020000010201407c16000c301340977b1340ff1701160013ccffffffffffffffffffffffffffffffff380c334c0516011340802b17014a0416001340803c1700160013c4ffffffffffffffff380c334c0516011340402b17014a0416001340403c1700160013c0ffffffff380c334c05160113202b17014a04160013203c17001600138000ffff380c334c05160113102b17014a04160013103c170016001340ff380c334c05160113082b17014a04160013083c17001600130f380c334c051601102b17014a041600103c170016000f380c334c0516010e2b17014a0416000e3c170016000d380c334c0416010d2b170116010201000101000dd3ff38d2a3ce00b4451341937ba0000d160000043b3aa1000100030f024064d327ef6f9f16014c40301600000417030d16033b0d2b0d16033b2a1704a000160438170516050c30170616064c0e16001603160500002b3f20160221170716071606024a0a160016033f20160221170816081606024a40311600000417090d16093b0d2b0c0d363a170aa000160a38170b160b0c30170c160c4c0e1600160b000116092b3f1f160221170d160d160c024a0c16001240ff16093f201f160221170e160e160c020000010101091600124100231241001f124100233d0214402301040300000000000000000000000000000000000000000000000000000000000000001403010200ad188000e47ec1174876e8000137a44447dbaba182d264fd646cdf2e40b9a316f448086e17bf22bfb5901531b5d6bb0668000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c4019ef99e9d74380000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"43b84a389c7b3968a3dda3e9c8484afc6845a6c9fc22195cd64b7f1cc452af0a1db8ed2f4abb016984941bf06491419614a2e72f5de1a3bccbd48c7e38a76508\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58494,\n      \"blockHash\": \"46ec252c75891cb3ca8db732ff9379ad989e7b16b7b7acaf3ea5d6880c173220\",\n      \"codeHash\": \"136e9e4d258309171e8dfb22499a72f626715e0b59933d1a049efa0aa3a12474\",\n      \"contractInstance\": {\n        \"address\": \"2AKCEFXysWPXNgxiJ45UyTrLaUWf8bP4RsuoHCUSZndmH\",\n        \"contractId\": \"e8282cb84fe206ccea5b5b94473441bad3da632e48b286e21e1a8467331e1300\",\n        \"groupIndex\": 0\n      }\n    },\n    \"PoolConfig\": {\n      \"txId\": \"761de3c7d8f9fea2fba21cefcac60c8546b488912276836ff30a86558c34d230\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a21415030112010000000305d3bda4d814ce00ce01ce0202140703010002000200140100ad188000df3cc1174876e8000137a444472adaa8521c175c6443816f9e4d69fdb6f63608df0f62b0f7e2244521a879c1e7000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c3276691aff3d80000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"b1d6088896627c808c3def57df80fdc80c8c50670e936e98de88624ccb490963151740fa8ff51211f292b8c9f46b82289e1d02d555ef8c9abeee0dda619b79c0\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 57148,\n      \"blockHash\": \"038aea9f20395b6452518f01ee45b53b1ee3f963f952e111018fa837f309e790\",\n      \"codeHash\": \"a3767c513c0303c26970effa39737253d05a04ef162381703194b14ec501a98f\",\n      \"contractInstance\": {\n        \"address\": \"26rk2sA4Sq4pXQtCX5pnFjhHDByNwAYF8d8Q7CteNLS95\",\n        \"contractId\": \"b4ce64824ca288f6a1774b5d0939711ba1ddeffff3b7cead0f28ca7f2cfe0800\",\n        \"groupIndex\": 0\n      }\n    },\n    \"DexAccount\": {\n      \"txId\": \"d64bb37c1951bc9ef127fdd12981445ed350c87d43f0df541148d9158d3cbd7b\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a21440f20505404b409940b240ca40e60103050800402cd3bd481528b417051600ce0116011602aa16047a0e314dc3170616064313202f4c1816047a0e314dc31603cc17071605160777467a4c0418a0020c304c04a0020d2ba10201000106004029d365b302f9b41701160149191341f47b160047cb17021602c54c06ce000d0d160201024a01ce00170316011603130264a000a001a00213036417051704160147b116041605c11801000101010ad358cbdacfa0020c2f4c03ce00024a0216000201030101000ad3511324a7b4b1a50d2f1341937b1600a10201030202000cd375472acbb4b1a50d2f1341937b16001601a101a100144045020400bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a0400bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a140703030003000200ad188000e13cc1174876e8000237a44447da31564f9ff39f6a9c8f6798b33c6db1b102ca24741bca7c81da3b4c071cc9d1000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b037a44447d3f4a5230c3f314ffe3e19387c9092a0c77f3b0fc5ad4f75dd9845f8994814c70301c6d3c170af39c6bd6a180000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"8c5f0e6276354d1f9db3ad41f03862a5faba333ee5a40398f0bcd8e14cd7968a2c039e2990ce489305b5ac8c47ed59a7b1b7492b6d63f4a5c3b11f194ed8ec66\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 57660,\n      \"blockHash\": \"46a1b9bc9ef72ef0ebd5c677e5242801df275fc8844951c6bc12b455a78b09f0\",\n      \"codeHash\": \"9ad9d41db87585370fca660e09c959922f022402dbf0d0ee529bc21f83836da7\",\n      \"contractInstance\": {\n        \"address\": \"zyhNdbUHuomvZQ23C2dQfEZHUq1LSyJWUpAUSgQWhnqV\",\n        \"contractId\": \"5d7054776b72ade627e5fe0f5780a299dd1afdbdd4a9fe328e53e1460a2ee000\",\n        \"groupIndex\": 0\n      }\n    },\n    \"PoolFactory\": {\n      \"txId\": \"f1823ca6922c35e151791e4738430611631743de784f3c35f53e9cf04ecd9807\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a214425708090a1f403540a040ed41ce41f5422b424500000101010316004002000003040109160016020000cc17031601160344020000030401091600160116020001170316001603cc020000010401403a12bff276187a7a16003a7a05294b033a224a023a90160021170112800d89e87a7a16003a7a05294b033a904a023a22160021170216021601207a7a16003a7a05294b033a904a023a223d0d2a170313ccffffffffffffffffffffffffffffffff16032d0201000307014028d31c03e050b4ce00451341937b16001601160213036413006417041703a0001705a000000017061606ce0516031604c118a0000d2aa1000516055e07160116001605601605020100054020014079d3530365c2160071160171311342bd7b16020000cb17050c0f1605010017081707170616060003170916030d0dce010105170a1603160a0c170d170c170b0c0c0c0c0c0c0c0c0c171a171917181717171617151714171317120c0c0c171d171c171b0c0c171f171eb1ce02ce06ce03ce0416021600160116041607160616091406414c50480002130d640c160b160c160d0c16121613161416151616161716181619161a161b161c161d161e161f131364170f170eb116001601441602000117101610ce01160e160fc1171106161116001601160261161102010004050012d32d2d48cdb4ce00451342bf7bb1160216034416010002170416000d0c160401330103090a001ad3132dd93db4ce00451342be7bb11601160244160000021709160316041608a316031605160616071608110c1609013201000303000ad3333a48b8b4ce00451341937b160016011602bb1440f5070400bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a0340200e527d65f488e70fcf3618e96013355547e8cacd3f56a1b95f14b40aa241ed00034020b0c5090f18458a2023ef92ff5669c203d6dcfc5c615f0185f3818e28e354dd000340203c287a934691eaf52cf9536729a3ed698aff90f7d32cd4abe0cdac8bb3692900034020e8282cb84fe206ccea5b5b94473441bad3da632e48b286e21e1a8467331e1300034020b4ce64824ca288f6a1774b5d0939711ba1ddeffff3b7cead0f28ca7f2cfe08000340205d7054776b72ade627e5fe0f5780a299dd1afdbdd4a9fe328e53e1460a2ee0001403010200ad188000e552c1174876e8000137a444478ce34d5c3402a72d472b08f3ef2c0e111c3d708e5ceb341c86273cba24341d6f000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c16f371906cc41c80000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"378fe88f1f0ffed7ba5e288ede60c8c9461d3853d607cc5f572334f060c0ce3b6fb949e05733d450800b45839a9775e5a290cfe14856db92466f3e3294b8c91c\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58706,\n      \"blockHash\": \"05f639d8c41250189028a6cc1bd2cb221a4bc2df23d94a8ae2dd755729ea2440\",\n      \"codeHash\": \"4071b77a85da548e6b3afe3808b0f40b86ea445fe666a0472deceb3af9a5312f\",\n      \"contractInstance\": {\n        \"address\": \"yJNj915oRppwvXogNkvUw4SQwYGeoqmU9SC9dxBaD8h5\",\n        \"contractId\": \"4481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f7200\",\n        \"groupIndex\": 0\n      }\n    },\n    \"PositionManager\": {\n      \"txId\": \"12c9506dc147baf40f1f87ef4956bbbe7bdd7515df32f6936a66d09d579f086d\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a214446f0110409a40c840ec413e416c424e4271427b429042a642bc42d7431a438e43ec444d01030b16044051d39b20ce13ce00160116024416030009170b160516060e0f160b012e170e170d170c160c160d160e160716080003170f160b160416051606000b171016001610a5171116001601a5171216001602a5171316007a7a16011612a316021613a316101611a31600160416051606160f110e160b01251715171416141609347a4c04181615160a341343527b160f16141615160b0201000304010dd3b8a5f4fb1600160113c9010000000000000000000000000005170316021603160116002b000502010003030108d364be47fc160213c901000000000000000000000000160116002b00050201000507014027d345f12d7a16001601324c061601160216030001024a1c16001602314c13160016021603000117051601160016040002170616051606314c0216054a011606024a0516011602160400020201000304010ed374e08b3b160213c9010000000000000000000000002c160116002b160100051703160316002d020000030901408d160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816041608370200000304011216001601160200051703160016011602870c334c0416030d2a0216030200000101010316004002000003040109160016020007cc17031601160344020000030401091600160116020008170316001603cc02010003030108d37afb14100d1600160116021304640201000405010ad35b19984c160116021603000a170416001604cc0201030b0d004021d3259c1e8816001601a5170b16001602a5170c16007a1601160ba31602160ca31600160116021603160416051606160716081609160a00001818181801030a0e004041d35060929cce00160216034416040009170a160a160516061607000b170b1600160b0da316001605160616071601110e160a0126170d170c160c1608347a4c0418160d1609341343537b1600160b0da3160016051605160616070c0d360c0d360c0d3613080f160a012718181801030b0d004032d3ee4d9e3ace00160216034416040009170b160b160516071608000b170c1600160c0da316001605160716081601110e160b012618181600160c0da3160016061605160716081609160a0c0d3613080f160b012718181801000409044034d341eff2fd1600160116021603000b17040c17051604c54b041605d12a170516020d0d1600011ec54b041605d12a170516030d0d1600011ec54b041605d12a1705160216030e0f1600012e170817071706160616071608160502144024010340204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f7200140100ad188000e7cfc1174876e8000137a444475d0a030edd828683b77e18c629eb305cedaef79007c9009536f5addab118cd49000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c16dbebe578b3a300000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"084990842c7ff02a90ca2324caf5457b439a204fda9aada23192a29e065d3b4950b12301e5f01ab94e5dc14236aa69424d03cb193982709f74c68d88098e4b20\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 59343,\n      \"blockHash\": \"3090e92f8db3b7e33fb36402522193362e42dabf5bd319604db68e7b08dafa20\",\n      \"codeHash\": \"2011fefccf2fc09efe620e9f41d94137e9db1a3f435abbed305e3b8bd50fc61d\",\n      \"contractInstance\": {\n        \"address\": \"xRkwG8KJiZjGBz9csoDFF1wX1pX94tPWdahwZbSVNMJo\",\n        \"contractId\": \"378a65ff89053ed1b974084747604b6c000e51ca3360a1090066e929ad9eb900\",\n        \"groupIndex\": 0\n      }\n    }\n  },\n  \"scripts\": {\n    \"CreateConfig:CreateConfig0\": {\n      \"signature\": \"f99dbb590e95dec534b5ac44058375648129ee8a0612b4902e401721a1098df077e70d8033b308805a8b2a66c0d1248fa7a98b3e6e4b24a2a2f8b578d8022b2e\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"000401010103000100111440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000c40cc17001600c5194c08060c0c0f0d1440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000104188000e0e9c1174876e8000137a44447adecd18d802beae7a1952447fe48c98168eea661c2118f664937cf00cebfe94d000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c16c4704462e77080000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"gasAmount\": 57577,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"7b2efd661c56e0399c07aea509bff044d47a8a0188ef99a906e0bd106599ca72\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"2BVE7xQu4AtoJ1hehQU2XFAMevaM8ToAUjeF6AbBwHP4T\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"18e8b89ab0abf6dbdafd6ffa2d193da03a05a846335c58f6957c2b5d1b30c4c0\",\n      \"codeHash\": \"dc0e582d72a0818d6ad6547b8a7e5f3924f6a99b7ec4acaec110a16be7fe41ea\"\n    },\n    \"CreateConfig:CreateConfig1\": {\n      \"signature\": \"ac30ffdb4f65adf8cc1fa191d772969f19757ee2126e25ddd33e80930b01044b368400dbf9653e7ac2429dec79e09ab570bb3cdec6bd045de9b6bb7066da476d\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"000401010103000100111440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000d40cc17001600c5194c08071343e80c0f0d1440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000104188000e0ecc1174876e8000137a44447fc7366980a0d6da52c81a3d598853bb3c69096e899c63a8d4d196952417b4613000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c16acf49eef84f280000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"gasAmount\": 57580,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"b93f84bc5b751cb71a2e1989d8b780885c7914d28794e11945397b82a113c247\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"zmcMrPRoFnLLQC7dUvvVMEhtQGGqfwmq8iC71uSX3i7H\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"2e0567d43083962b09c08925176ebad959365835d56e420fa88c43cb66bc51a0\",\n      \"codeHash\": \"8160acc80ce5edaae2fec483ad0c65bd9f8241e31abe8a5334d9894e653cb9ce\"\n    },\n    \"CreateConfig:CreateConfig2\": {\n      \"signature\": \"df9bdf1fcdbd37fbf2d6b829526c558241ffa148c72afa4e2a8181d5bda453be7a3be24dec7350fc49cdb9abec6bfbfeed232e5e310aca615f3634f954074b6d\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"000401010103000100111440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000e40cc17001600c5194c08081347d00c0f0d1440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000104188000e0ecc1174876e8000137a4444704fa862cdc155e10e13e38f24407c27278073eb5b5f38297f6b00b3bf6bc3280000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c169578f97c227480000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"gasAmount\": 57580,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"6dbead763fc235e277d19b5f6b274ece43b7594d38a582e5dd556ab97fe5d1b7\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"22bWsRSarTQT3RrqtBmLjoarQYTMHJkGzpS2As9ZK1E1D\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"0d85cf09b445d564fb9ef4b4ba8e1ce2297dcdcd1b74fb55bdf107b0216624f0\",\n      \"codeHash\": \"59285bb05a86762c214504193253d2c10e5880455c2d8f907b11530c3f2f6c93\"\n    },\n    \"CreateConfig:CreateConfig3\": {\n      \"signature\": \"95444b0d409a3d2bb6f445fe1908bcdac0e9f042ed02f1d64857ee3719eb8b40498ddcbe669fff2d73390a6f0ce2fcd6120acd0484b333035ea0ac9bc278a09f\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"000401010103000100111440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000f40cc17001600c5194c0809134bb80c0f0d1440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000104188000e0ecc1174876e8000137a444474a957f4fee1a25bf3a2aca33c947c594ce0050cfaea7c7e99eef8c04338c60a0000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c167dfd5408bff680000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"gasAmount\": 57580,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"95729bdd865ef50674d6d05b5adb714d1e92e0ae21da5d7d263b56da98f4f935\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"23YmZ4DM64drhbm1cwVZ7tQsf93hw1nMrRHCnRbB9kfpB\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"135036fbf5dff46aa6e3bf68273ebd582bdc1608097deaf9c8390463bb747950\",\n      \"codeHash\": \"abe62237560f16192bd76c7492409020bd0231bfe780da0ad4704a63ca820676\"\n    },\n    \"CreateConfig:CreateConfig4\": {\n      \"signature\": \"45d01c441ea72cc64538dddfae4232221f793ed522ed03fda21eaed5fbadf28b2d7d7566de90a956c519d09eaec9431b43570d97ec354d911dbb34d38f9f7091\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"000401010103000100111440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72001040cc17001600c5194c080a134fa00c0f0d1440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000104188000e0ecc1174876e8000137a444479a36136c68a6d7037843737d708631056d64fe93ad9e8bd506d3c86e8f6891bf000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c166681ae955d7880000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"gasAmount\": 57580,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"01f5a6048f8170f1c7378d4d0bbdde778c303b9fe15467b6c83e14686bb5906c\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"23PugDfGgvpjwhD71QGP5iSg7PKFjAU94AiSFTz1mihm1\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"14b6dc51e59c646652e5482258d3cb8fe25f9ac8ade324a6e04619bf8cd345a0\",\n      \"codeHash\": \"e6a041b836d92ec25aebe5f68809cc6fd399ae76d74f8d2ba229c9d36161f9be\"\n    },\n    \"CreateConfig:CreateConfig5\": {\n      \"signature\": \"512039a704608a1f6a5a56fde376699d0fa102ad911c5e09c5a87522ddcdfa2b23db0527d41ce94de85dfd87b43356a2ceeed1f3226fe28739e529810f9a015f\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"000401010103000100111440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72001140cc17001600c5194c0812061353880c0f0d1440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000104188000e0edc1174876e8000137a4444743056c18fb961e2f7b19e5c629111b872efc3ba85922d15771891ff7bc553a28000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c164f0607ad738c00000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"gasAmount\": 57581,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"c431653cf154672fd724980fd3cfb2214f8b7711a1a72fe4b6b300e89e663373\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"22Zy89z8UewRcuRiSjJtmucpVDuKgECm8aUHq6T9beSaT\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"44ff24784a2a769112cab512e27de62a917e6ffee877253d427c2e0fd80e89f0\",\n      \"codeHash\": \"b378a05b142b05281e843aa0b5c3bb42706fb020f3af6635b37bd0744a22178d\"\n    },\n    \"CreateConfig:CreateConfig6\": {\n      \"signature\": \"d51d9f7698c8192ab4e053f2da5c21b56edeab39e54e73ebae2abdded1c9801b280a7d16daebc9c99f17f03a936bbb54d8dcbe534e888447e2c0bad2809652ef\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"000401010103000100111440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f7200130640cc17001600c5194c0812071357700c0f0d1440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000104188000e0eec1174876e8000137a4444700368ac57f31110dd77598f5355333a027151438a99f4de212fa07142cf29f11000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c16378a5f51023100000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"gasAmount\": 57582,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"be04bf0ba6347aa45967047249ee25ba3d30cb983f60de93db5583477b200ecb\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"uVCiQizbRAktKWnCzNKcyRsdhZwJTnBEWoKhq3FuqvoZ\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"19c7322412f986cadec59abd86fae1f8d6f5d85a633224572700afb7dc3b2360\",\n      \"codeHash\": \"b89de99c7ce8702675970707fd8b87fc7a0ac066cea3eb0b5e3b16f736659158\"\n    },\n    \"CreateConfig:CreateConfig7\": {\n      \"signature\": \"7add8e93ca31dfc1326337f3219e513984dcc1b6d24569fe6702b8e3cb99606b5653aa4fd410571aee2fac20ba50eba233d734914547984ddffd5337d7a0e1a0\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"000401010103000100111440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f7200130740cc17001600c5194c081208135b580c0f0d1440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000104188000e0eec1174876e8000137a4444736a4b9dfecab49822e3534fa8fa3c8e4f8eb0a594d27c73878d427e62898736e000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c16200eb6f490d600000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"gasAmount\": 57582,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"dab9e0ab6f37cff618ff6e353d792550deee5a521fdbf7b00651a80371d080a3\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"26DqDUH6rFMxyViSgQJnN5UpBadhePGNmFAeEH3zwY5K5\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"215c12f556337c28bc35f07476b811e47d94bf5e134f3eb9e11eb22d52101440\",\n      \"codeHash\": \"01eac7d98d221623a35c9353ec2bf23e5e5939f575902e60a9cddd7f8bdb1f57\"\n    },\n    \"CreateConfig:CreateConfig8\": {\n      \"signature\": \"bbe36f4316930693443aa3344d2069264dc83c361b641305a973ca62f8be23997636af578d60da8d676384fdd1bc4c0047d8431c3ccfd3db4b156a05430216cf\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"000401010103000100111440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f7200130840cc17001600c5194c081209135f400c0f0d1440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000104188000e0eec1174876e8000137a44447d1d3db976215eea804c1d16791099a6635dec09e6081eafa0f6ccd5cf6576906000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c1608930e981f7b00000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"gasAmount\": 57582,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"999d8fc17cbf47ccf00f05ad46cad1f6631c90308498c581d734a152eded3fce\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"28Uw5Y3TgySVu1mT4ZiNun6fseJsScndDbmUQWRefwA2K\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"4003fc1f3e65f535d16fb12f14eb93aeae8331057fd8ee0c581d19f0d95091d0\",\n      \"codeHash\": \"402efb10fa7ed7821b6a2195ef97c0c0b5466f6f5ddb1b693d88b3bb82581210\"\n    },\n    \"CreateConfig:CreateConfig9\": {\n      \"signature\": \"bafe7cb5c313c299489eb59de89445c2d63b5fa665f36c8d7e4d17ff1e84cd4807bcbe9dac85d55c09231b47e2f9366e6176ec1bcbc8820bf0e0ca757eefeae2\",\n      \"type\": \"BuildSimpleExecuteScriptTxResult\",\n      \"fromGroup\": 0,\n      \"toGroup\": 0,\n      \"unsignedTx\": \"000401010103000100111440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f7200130940cc17001600c5194c08120a1363280c0f0d1440204481e86adb5f44d22cff22caa4880db50984487752ffb7edb43f4c90bf0f72000104188000e0eec1174876e8000137a44447a99f1f5b7458f3bf6825fb9894176124181c3d1ecc21252500aea415d149281a000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6d3c15f117663bae2000000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"gasAmount\": 57582,\n      \"gasPrice\": \"100000000000\",\n      \"txId\": \"8cda3ab3c260c1f159169d2d5d6f9c5846144be4c7c015875708e2429c461c20\",\n      \"simulationResult\": {\n        \"contractInputs\": [],\n        \"generatedOutputs\": [\n          {\n            \"address\": \"22jjAh9fYB5Anycmp2dvoxtzZfpjwpE13GV3wksws4fFd\",\n            \"attoAlphAmount\": \"100000000000000000\",\n            \"tokens\": []\n          }\n        ]\n      },\n      \"groupIndex\": 0,\n      \"blockHash\": \"4005a3f0e3a6ffda87802b0d0d36606fd880791dbd1b9fd60678ac81e6725be0\",\n      \"codeHash\": \"c96d60d43cb24d5e54dee4fdc59a4919d081bc43a4a8bff71a7327e21c138ee7\"\n    }\n  },\n  \"migrations\": {}\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  RunScriptResult,\n  DeployContractExecutionResult,\n  NetworkId,\n} from \"@alephium/web3\";\nimport {\n  Pool,\n  PoolInstance,\n  Position,\n  PositionInstance,\n  Tick,\n  TickInstance,\n  BitmapWord,\n  BitmapWordInstance,\n  PoolConfig,\n  PoolConfigInstance,\n  DexAccount,\n  DexAccountInstance,\n  PoolFactory,\n  PoolFactoryInstance,\n  PositionManager,\n  PositionManagerInstance,\n} from \".\";\nimport { default as testnetDeployments } from \"../../deployments/.deployments.testnet.json\";\nimport { default as devnetDeployments } from \"../../deployments/.deployments.devnet.json\";\n\nexport type Deployments = {\n  deployerAddress: string;\n  contracts: {\n    Pool: DeployContractExecutionResult<PoolInstance>;\n    Position: DeployContractExecutionResult<PositionInstance>;\n    Tick: DeployContractExecutionResult<TickInstance>;\n    BitmapWord: DeployContractExecutionResult<BitmapWordInstance>;\n    PoolConfig: DeployContractExecutionResult<PoolConfigInstance>;\n    DexAccount: DeployContractExecutionResult<DexAccountInstance>;\n    PoolFactory: DeployContractExecutionResult<PoolFactoryInstance>;\n    PositionManager: DeployContractExecutionResult<PositionManagerInstance>;\n  };\n  scripts: {\n    CreateConfig_CreateConfig0: RunScriptResult;\n    CreateConfig_CreateConfig1: RunScriptResult;\n    CreateConfig_CreateConfig2: RunScriptResult;\n    CreateConfig_CreateConfig3: RunScriptResult;\n    CreateConfig_CreateConfig4: RunScriptResult;\n    CreateConfig_CreateConfig5: RunScriptResult;\n    CreateConfig_CreateConfig6: RunScriptResult;\n    CreateConfig_CreateConfig7: RunScriptResult;\n    CreateConfig_CreateConfig8: RunScriptResult;\n    CreateConfig_CreateConfig9: RunScriptResult;\n  };\n};\n\nfunction toDeployments(json: any): Deployments {\n  const contracts = {\n    Pool: {\n      ...json.contracts[\"Pool\"],\n      contractInstance: Pool.at(\n        json.contracts[\"Pool\"].contractInstance.address\n      ),\n    },\n    Position: {\n      ...json.contracts[\"Position\"],\n      contractInstance: Position.at(\n        json.contracts[\"Position\"].contractInstance.address\n      ),\n    },\n    Tick: {\n      ...json.contracts[\"Tick\"],\n      contractInstance: Tick.at(\n        json.contracts[\"Tick\"].contractInstance.address\n      ),\n    },\n    BitmapWord: {\n      ...json.contracts[\"BitmapWord\"],\n      contractInstance: BitmapWord.at(\n        json.contracts[\"BitmapWord\"].contractInstance.address\n      ),\n    },\n    PoolConfig: {\n      ...json.contracts[\"PoolConfig\"],\n      contractInstance: PoolConfig.at(\n        json.contracts[\"PoolConfig\"].contractInstance.address\n      ),\n    },\n    DexAccount: {\n      ...json.contracts[\"DexAccount\"],\n      contractInstance: DexAccount.at(\n        json.contracts[\"DexAccount\"].contractInstance.address\n      ),\n    },\n    PoolFactory: {\n      ...json.contracts[\"PoolFactory\"],\n      contractInstance: PoolFactory.at(\n        json.contracts[\"PoolFactory\"].contractInstance.address\n      ),\n    },\n    PositionManager: {\n      ...json.contracts[\"PositionManager\"],\n      contractInstance: PositionManager.at(\n        json.contracts[\"PositionManager\"].contractInstance.address\n      ),\n    },\n  };\n  return {\n    ...json,\n    contracts: contracts as Deployments[\"contracts\"],\n    scripts: {\n      CreateConfig_CreateConfig0: json.scripts[\"CreateConfig:CreateConfig0\"],\n      CreateConfig_CreateConfig1: json.scripts[\"CreateConfig:CreateConfig1\"],\n      CreateConfig_CreateConfig2: json.scripts[\"CreateConfig:CreateConfig2\"],\n      CreateConfig_CreateConfig3: json.scripts[\"CreateConfig:CreateConfig3\"],\n      CreateConfig_CreateConfig4: json.scripts[\"CreateConfig:CreateConfig4\"],\n      CreateConfig_CreateConfig5: json.scripts[\"CreateConfig:CreateConfig5\"],\n      CreateConfig_CreateConfig6: json.scripts[\"CreateConfig:CreateConfig6\"],\n      CreateConfig_CreateConfig7: json.scripts[\"CreateConfig:CreateConfig7\"],\n      CreateConfig_CreateConfig8: json.scripts[\"CreateConfig:CreateConfig8\"],\n      CreateConfig_CreateConfig9: json.scripts[\"CreateConfig:CreateConfig9\"],\n    },\n  };\n}\n\nexport function loadDeployments(\n  networkId: NetworkId,\n  deployerAddress?: string\n): Deployments {\n  const deployments =\n    networkId === \"testnet\"\n      ? testnetDeployments\n      : networkId === \"devnet\"\n      ? devnetDeployments\n      : undefined;\n  if (deployments === undefined) {\n    throw Error(\"The contract has not been deployed to the \" + networkId);\n  }\n  const allDeployments: any[] = Array.isArray(deployments)\n    ? deployments\n    : [deployments];\n  if (deployerAddress === undefined) {\n    if (allDeployments.length > 1) {\n      throw Error(\n        \"The contract has been deployed multiple times on \" +\n          networkId +\n          \", please specify the deployer address\"\n      );\n    } else {\n      return toDeployments(allDeployments[0]);\n    }\n  }\n  const result = allDeployments.find(\n    (d) => d.deployerAddress === deployerAddress\n  );\n  if (result === undefined) {\n    throw Error(\"The contract deployment result does not exist\");\n  }\n  return toDeployments(result);\n}\n","import {\n  binToHex,\n  contractIdFromAddress,\n  encodePrimitiveValues,\n  groupOfAddress,\n  isGrouplessAddressWithoutGroupIndex,\n  subContractId,\n} from '@alephium/web3';\nimport { Pool } from 'clmm/artifacts/ts/Pool';\nimport { TickUtils } from './tick';\nimport type { LiquidityDistribution } from './types';\nimport { ClmmLiquidityUtils } from './liquidity';\nimport { MathUtil } from '../common/math';\n\nfunction normalizeAddress(address: string, group: number): string {\n  return isGrouplessAddressWithoutGroupIndex(address) ? `${address}:${group}` : address;\n}\n\nexport class PoolUtils {\n  static getPositionId(\n    poolAddress: string,\n    owner: string,\n    tickLower: bigint,\n    tickUpper: bigint,\n  ): string {\n    const group = groupOfAddress(poolAddress);\n    const poolId = binToHex(contractIdFromAddress(poolAddress));\n    const normalizedOwner = normalizeAddress(owner, group);\n    const path = encodePrimitiveValues([\n      { type: 'U256', value: Pool.consts.PathPrefixes.Position },\n      { type: 'Address', value: normalizedOwner },\n      { type: 'I256', value: tickLower },\n      { type: 'I256', value: tickUpper },\n    ]);\n    return subContractId(poolId, binToHex(path), group);\n  }\n\n  static computeSwapStep(\n    sqrtPriceX96: bigint,\n    sqrtPriceTargetX96: bigint,\n    liquidity: bigint,\n    amount: bigint,\n    feePips: bigint,\n  ): [bigint, bigint, bigint, bigint] {\n    const zeroForOne = sqrtPriceX96 < sqrtPriceTargetX96;\n    const exactIn = amount > 0n;\n    let amountIn = 0n;\n    let amountOut = 0n;\n    let feeAmount = 0n;\n    let sqrtPriceNextX96 = 0n;\n    if (exactIn) {\n      amountIn = -ClmmLiquidityUtils.getAmountDelta(\n        sqrtPriceX96,\n        sqrtPriceTargetX96,\n        -liquidity,\n        zeroForOne,\n      );\n      const amountRemainingLessFee = MathUtil.divFloor(\n        amount * (Pool.consts.MAX_PIPS - feePips),\n        Pool.consts.MAX_PIPS,\n      );\n      const sqrtPriceRealTargetX96 = TickUtils.getNextSqrtPrice(\n        sqrtPriceX96,\n        liquidity,\n        amountRemainingLessFee,\n        zeroForOne,\n      );\n      sqrtPriceNextX96 =\n        amountRemainingLessFee >= amountIn ? sqrtPriceTargetX96 : sqrtPriceRealTargetX96;\n    } else {\n      amountOut = ClmmLiquidityUtils.getAmountDelta(\n        sqrtPriceTargetX96,\n        sqrtPriceX96,\n        liquidity,\n        zeroForOne,\n      );\n      const sqrtPriceRealTargetX96 = TickUtils.getNextSqrtPrice(\n        sqrtPriceX96,\n        liquidity,\n        amount,\n        zeroForOne,\n      );\n      sqrtPriceNextX96 = -amount >= amountOut ? sqrtPriceTargetX96 : sqrtPriceRealTargetX96;\n    }\n    const max = sqrtPriceTargetX96 == sqrtPriceNextX96;\n    if (zeroForOne) {\n      const amountIn2 = -ClmmLiquidityUtils.getAmountDelta(\n        sqrtPriceNextX96,\n        sqrtPriceX96,\n        -liquidity,\n        zeroForOne,\n      );\n      const amountOut2 = ClmmLiquidityUtils.getAmountDelta(\n        sqrtPriceNextX96,\n        sqrtPriceX96,\n        liquidity,\n        zeroForOne,\n      );\n      amountIn = max && exactIn ? amountIn : amountIn2;\n      amountOut = max && !exactIn ? amountOut : amountOut2;\n    } else {\n      const amountIn2 = -ClmmLiquidityUtils.getAmountDelta(\n        sqrtPriceX96,\n        sqrtPriceNextX96,\n        -liquidity,\n        zeroForOne,\n      );\n      const amountOut2 = ClmmLiquidityUtils.getAmountDelta(\n        sqrtPriceX96,\n        sqrtPriceNextX96,\n        liquidity,\n        zeroForOne,\n      );\n      amountIn = max && exactIn ? amountIn : amountIn2;\n      amountOut = max && !exactIn ? amountOut : amountOut2;\n    }\n    if (!exactIn && amount > -amountOut) amountOut = -amount;\n\n    if (exactIn && sqrtPriceNextX96 != sqrtPriceTargetX96) {\n      feeAmount = amount - amountIn;\n    } else {\n      feeAmount = MathUtil.divFloor(amountIn * feePips, Pool.consts.MAX_PIPS - feePips);\n    }\n\n    return [sqrtPriceNextX96, amountIn, amountOut, feeAmount];\n  }\n\n  static offlineSwap(\n    liqDist: LiquidityDistribution,\n    amountSpecified: bigint,\n    sqrtPriceX96: bigint,\n  ): bigint {\n    const exactIn = amountSpecified > 0n;\n    let amountCalculated = 0n;\n    for (const row of liqDist.rows) {\n      const [sqrtPriceNextX96, amountIn, amountOut, feeAmount] = this.computeSwapStep(\n        sqrtPriceX96,\n        row.sqrtPriceX96,\n        liqDist.liquidity,\n        amountSpecified,\n        liqDist.fee,\n      );\n      if (exactIn) {\n        amountSpecified -= amountIn + feeAmount;\n        amountCalculated -= amountOut;\n      } else {\n        amountSpecified += amountOut;\n        amountCalculated += amountIn + feeAmount;\n      }\n      sqrtPriceX96 = sqrtPriceNextX96;\n    }\n    return amountCalculated;\n  }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nexport const MIN_TICK = BigInt(\"-887272\");\nexport const MAX_TICK = BigInt(\"887272\");\nexport const MIN_SQRT_RATIO = BigInt(\"4295128739\");\nexport const MAX_SQRT_RATIO = BigInt(\n  \"1461446703485210103287273052203988822378723970342\"\n);\nexport const Q128 = BigInt(\"340282366920938463463374607431768211456\");\nexport const U128_MAX = BigInt(\"340282366920938463463374607431768211455\");\nexport const Q64 = BigInt(\"18446744073709551616\");\nexport const Q32 = BigInt(\"4294967296\");\nexport const Q96 = BigInt(\"79228162514264337593543950336\");\nexport const Q160 = BigInt(\"1461501637330902918203684832716283019655932542976\");\nexport const MAX_REWARDS = BigInt(\"3\");\n","export const U256_MAX = 2n ** 256n - 1n;\n\n// Default \"unlimited\" amount for CLMM calculations\n// This ensures the other amount is always the limiting factor\nexport const UNLIMITED_AMOUNT = 2n ** 128n - 1n; // uint128 max\n\nexport { MAX_TICK, MIN_TICK } from 'clmm/artifacts/ts/constants';\n","import {\n  MAX_SQRT_RATIO,\n  MAX_TICK,\n  MIN_SQRT_RATIO,\n  MIN_TICK,\n  Q128,\n  Q32,\n  Q64,\n  Q96,\n} from 'clmm/artifacts/ts/constants';\nimport { U256_MAX } from './constants';\nimport Decimal from 'decimal.js';\nimport { MathUtil } from '../common/math';\nimport { BPS } from '../common/constants';\nimport type { TokenInfo } from '@alephium/token-list';\n\nexport class TickUtils {\n  static getSqrtRatioAtTick(tick: bigint): bigint {\n    const absTick = tick < 0n ? -tick : tick;\n    if (absTick > MAX_TICK) {\n      throw new Error(`TickOutOfBounds: ${tick}`);\n    }\n\n    let ratio = (absTick & 0x1n) !== 0n ? 0xfffcb933bd6fad37aa2d162d1a594001n : Q128;\n\n    if ((absTick & 0x2n) !== 0n) ratio = (ratio * 0xfff97272373d413259a46990580e213an) >> 128n;\n    if ((absTick & 0x4n) !== 0n) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdccn) >> 128n;\n    if ((absTick & 0x8n) !== 0n) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0n) >> 128n;\n    if ((absTick & 0x10n) !== 0n) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644n) >> 128n;\n    if ((absTick & 0x20n) !== 0n) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0n) >> 128n;\n    if ((absTick & 0x40n) !== 0n) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861n) >> 128n;\n    if ((absTick & 0x80n) !== 0n) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053n) >> 128n;\n    if ((absTick & 0x100n) !== 0n) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4n) >> 128n;\n    if ((absTick & 0x200n) !== 0n) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54n) >> 128n;\n    if ((absTick & 0x400n) !== 0n) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3n) >> 128n;\n    if ((absTick & 0x800n) !== 0n) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9n) >> 128n;\n    if ((absTick & 0x1000n) !== 0n) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825n) >> 128n;\n    if ((absTick & 0x2000n) !== 0n) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5n) >> 128n;\n    if ((absTick & 0x4000n) !== 0n) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7n) >> 128n;\n    if ((absTick & 0x8000n) !== 0n) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6n) >> 128n;\n    if ((absTick & 0x10000n) !== 0n) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9n) >> 128n;\n    if ((absTick & 0x20000n) !== 0n) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604n) >> 128n;\n    if ((absTick & 0x40000n) !== 0n) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98n) >> 128n;\n    if ((absTick & 0x80000n) !== 0n) ratio = (ratio * 0x48a170391f7dc42444e8fa2n) >> 128n;\n\n    if (tick > 0n) {\n      ratio = U256_MAX / ratio;\n    }\n\n    return ratio >> 32n;\n  }\n\n  static getTickAtSqrtRatio(sqrtPriceX96: bigint): bigint {\n    if (sqrtPriceX96 < MIN_SQRT_RATIO || sqrtPriceX96 >= MAX_SQRT_RATIO) {\n      throw new Error('SqrtPriceX96OutOfBounds');\n    }\n\n    const ratio = sqrtPriceX96 << 32n;\n    let r = ratio;\n    let msb = 0n;\n\n    if (r > Q128 - 1n) {\n      msb |= 0x80n;\n      r >>= 0x80n;\n    }\n    if (r > Q64 - 1n) {\n      msb |= 0x40n;\n      r >>= 0x40n;\n    }\n    if (r > Q32 - 1n) {\n      msb |= 0x20n;\n      r >>= 0x20n;\n    }\n    if (r > 0xffffn) {\n      msb |= 0x10n;\n      r >>= 0x10n;\n    }\n    if (r > 0xffn) {\n      msb |= 0x8n;\n      r >>= 0x8n;\n    }\n    if (r > 0xfn) {\n      msb |= 0x4n;\n      r >>= 0x4n;\n    }\n    if (r > 0x3n) {\n      msb |= 0x2n;\n      r >>= 0x2n;\n    }\n    if (r > 0x1n) {\n      msb |= 0x1n;\n    }\n\n    if (msb >= 128n) {\n      r = ratio >> (msb - 127n);\n    } else {\n      r = ratio << (127n - msb);\n    }\n\n    let log_2 = (msb - 128n) << 64n;\n\n    for (let i = 63n; i >= 50n; i--) {\n      r = (r * r) >> 127n;\n      const f = r >> 128n;\n      log_2 |= f << i;\n      r >>= f;\n    }\n\n    const log_sqrt10001 = log_2 * 255738958999603826347141n;\n\n    const tickLow = (log_sqrt10001 - 3402992956809132418596140100660247210n) >> 128n;\n    const tickHi = (log_sqrt10001 + 291339464771989622907027621153398088495n) >> 128n;\n\n    if (tickLow === tickHi) {\n      return tickLow;\n    } else {\n      if (this.getSqrtRatioAtTick(tickHi) <= sqrtPriceX96) {\n        return tickHi;\n      } else {\n        return tickLow;\n      }\n    }\n  }\n\n  static priceToSqrtPriceX96(\n    price: Decimal.Value,\n    token0Decimal: number,\n    token1Decimal: number,\n  ): bigint {\n    const priceDecimal = new Decimal(price);\n    if (!priceDecimal.isFinite() || priceDecimal.lte(0)) {\n      throw new Error('Invalid price input');\n    }\n\n    const token0Unit = 10n ** BigInt(token0Decimal);\n    const token1Amount = BigInt(\n      priceDecimal\n        .mul(10n ** BigInt(token1Decimal))\n        .floor()\n        .toFixed(),\n    );\n    return this.priceSqrt(token1Amount, token0Unit);\n  }\n\n  static sqrtPriceX96ToPrice(\n    sqrtPriceX96: bigint,\n    token0Decimal: number,\n    token1Decimal: number,\n  ): number {\n    if (sqrtPriceX96 < 0n) {\n      throw new Error('Invalid sqrtPriceX96');\n    }\n\n    const sqrtPriceDecimal = new Decimal(sqrtPriceX96.toString());\n    const q96Decimal = new Decimal(Q96.toString());\n    let priceDecimal = sqrtPriceDecimal.div(q96Decimal).pow(2);\n\n    const exponentDiff = token0Decimal - token1Decimal;\n    if (exponentDiff !== 0) {\n      const factor = new Decimal(10).pow(Math.abs(exponentDiff));\n      priceDecimal = exponentDiff > 0 ? priceDecimal.mul(factor) : priceDecimal.div(factor);\n    }\n\n    if (!priceDecimal.isFinite()) {\n      throw new Error('Price overflow');\n    }\n\n    return priceDecimal.toNumber();\n  }\n\n  static getAlignedTick(\n    price: number,\n    token0Decimal: number,\n    token1Decimal: number,\n    tickSpacing: bigint,\n  ): bigint {\n    const sqrtPriceX96 = this.priceToSqrtPriceX96(price, token0Decimal, token1Decimal);\n    const tick0 = this.getTickAtSqrtRatio(sqrtPriceX96);\n\n    return MathUtil.alphCeil(tick0, tickSpacing) * tickSpacing;\n  }\n\n  static getNextTick(\n    tick: bigint,\n    tickSpacing: bigint,\n    tokenBase: TokenInfo,\n    tokenQuote: TokenInfo,\n    baseIn: boolean,\n    isAdd: boolean,\n  ): bigint {\n    const reverse = tokenBase.id > tokenQuote.id == baseIn;\n    const delta = isAdd == reverse ? tickSpacing : -tickSpacing;\n    return tick + delta;\n  }\n\n  static getAlignedPrice(\n    priceIn: number,\n    tokenBase: TokenInfo,\n    tokenQuote: TokenInfo,\n    tickSpacing: bigint,\n    baseIn: boolean,\n  ): { tick: bigint; price: number } {\n    const reverse = tokenBase.id > tokenQuote.id == baseIn;\n    const [token0, token1] = reverse ? [tokenQuote, tokenBase] : [tokenBase, tokenQuote];\n\n    const rawPrice = reverse ? 1 / priceIn : priceIn;\n    const tick = this.getAlignedTick(rawPrice, token0.decimals, token1.decimals, tickSpacing);\n    return this.getPriceFromTick(tick, tokenBase, tokenQuote, baseIn);\n  }\n\n  static getPriceFromTick(\n    tick: bigint,\n    tokenBase: TokenInfo,\n    tokenQuote: TokenInfo,\n    baseIn: boolean,\n  ): { tick: bigint; price: number } {\n    const reverse = tokenBase.id > tokenQuote.id == baseIn;\n    const [token0, token1] = reverse ? [tokenQuote, tokenBase] : [tokenBase, tokenQuote];\n\n    const sqrtPriceX96 = this.getSqrtRatioAtTick(tick);\n    const alignedPrice = this.sqrtPriceX96ToPrice(sqrtPriceX96, token0.decimals, token1.decimals);\n    const price = reverse ? 1 / alignedPrice : alignedPrice;\n    return { tick, price };\n  }\n\n  static getMinPriceFromTick(\n    tokenBase: TokenInfo,\n    tokenQuote: TokenInfo,\n    tickSpacing: bigint,\n    baseIn: boolean,\n  ): { tick: bigint; price: number } {\n    const reverse = tokenBase.id > tokenQuote.id == baseIn;\n    const rawTick = reverse ? MAX_TICK : MIN_TICK;\n    const tick = (rawTick / tickSpacing) * tickSpacing;\n    return this.getPriceFromTick(tick, tokenBase, tokenQuote, baseIn);\n  }\n\n  static getMaxPriceFromTick(\n    tokenBase: TokenInfo,\n    tokenQuote: TokenInfo,\n    tickSpacing: bigint,\n    baseIn: boolean,\n  ): { tick: bigint; price: number } {\n    const reverse = tokenBase.id > tokenQuote.id == baseIn;\n    const rawTick = reverse ? MIN_TICK : MAX_TICK;\n    const tick = (rawTick / tickSpacing) * tickSpacing;\n    return this.getPriceFromTick(tick, tokenBase, tokenQuote, baseIn);\n  }\n\n  static getNextSqrtPrice(\n    sqrtPriceX96: bigint,\n    liquidity: bigint,\n    amount: bigint,\n    zeroForOne: boolean,\n  ): bigint {\n    if (zeroForOne) {\n      return this.getNextSqrtPriceFromAmount0(sqrtPriceX96, liquidity, amount);\n    } else {\n      return this.getNextSqrtPriceFromAmount1(sqrtPriceX96, liquidity, amount);\n    }\n  }\n\n  static getNextSqrtPriceFromAmount0(\n    sqrtPriceX96: bigint,\n    liquidity: bigint,\n    amount: bigint,\n  ): bigint {\n    const numerator1 = liquidity * Q96;\n    const product = amount * sqrtPriceX96;\n    if (product >= numerator1) {\n      throw new Error('Amount0 exceeds available liquidity for the swap');\n    }\n    const denominator = numerator1 - product;\n    return MathUtil.alphDiv(numerator1 * sqrtPriceX96, denominator);\n  }\n\n  static getNextSqrtPriceFromAmount1(\n    sqrtPriceX96: bigint,\n    liquidity: bigint,\n    amount: bigint,\n  ): bigint {\n    const quotient = MathUtil.alphDiv(amount * Q96, liquidity);\n    return sqrtPriceX96 + quotient;\n  }\n\n  static getSqrtPriceLimitX96(sqrtPriceX96: bigint, slippage: bigint, zeroForOne: boolean): bigint {\n    if (slippage <= 0n || slippage >= BPS) {\n      throw new Error('slippageBps must be in (0, 10000)');\n    }\n\n    const [minBound, maxBound] = this.getSqrtPriceX96Bounds(sqrtPriceX96, slippage);\n    let limit = zeroForOne ? minBound : maxBound;\n\n    if (zeroForOne) {\n      if (limit >= sqrtPriceX96) limit = sqrtPriceX96 - 1n;\n      if (limit <= MIN_SQRT_RATIO) limit = MIN_SQRT_RATIO + 1n;\n    } else {\n      if (limit <= sqrtPriceX96) limit = sqrtPriceX96 + 1n;\n      if (limit >= MAX_SQRT_RATIO) limit = MAX_SQRT_RATIO - 1n;\n    }\n    return limit;\n  }\n\n  // Compute slippage bounds for a given sqrt price\n  // The slippage is in bps.\n  // Returns [minSqrtPriceX96, maxSqrtPriceX96], where:\n  //   min = floor(sqrtPriceX96 * sqrt(1 - slippage))\n  //   max = ceil(sqrtPriceX96 * sqrt(1 + slippage))\n  // `slippage` is bps: e.g., 100 for 1%, 30 for 0.3%\n  static getSqrtPriceX96Bounds(sqrtPriceX96: bigint, slippage: bigint): [bigint, bigint] {\n    if (slippage < 0n || slippage >= BPS) {\n      throw new Error('Invalid slippageBps; must be in [0, 10000)');\n    }\n    const numMinus = (BPS - slippage) * Q128;\n    const numPlus = (BPS + slippage) * Q128;\n    const den = BPS * Q128;\n    const factorMinusQ96 = MathUtil.mulDivFloor(\n      MathUtil.sqrt(numMinus) * Q96,\n      1n,\n      MathUtil.sqrt(den),\n    );\n    const factorPlusQ96 = MathUtil.mulDivFloor(\n      MathUtil.sqrt(numPlus) * Q96,\n      1n,\n      MathUtil.sqrt(den),\n    );\n    const minSqrtPriceX96 = MathUtil.mulDivFloor(sqrtPriceX96, factorMinusQ96, Q96);\n    const maxSqrtPriceX96 = (sqrtPriceX96 * factorPlusQ96 + Q96 - 1n) / Q96;\n    return [minSqrtPriceX96, maxSqrtPriceX96];\n  }\n\n  private static priceSqrt(r1: bigint, r0: bigint): bigint {\n    return MathUtil.sqrt(MathUtil.divFloor(r1 * Q96 * Q96, r0));\n  }\n}\n","import type { TokenInfo } from '@alephium/token-list';\nimport { TickUtils } from './tick';\nimport { MathUtil } from '../common/math';\nimport { Q96 } from 'clmm/artifacts/ts/constants';\nimport type { GetPositionAmountsFromPriceProps, GetPositionAmountsFromPriceReturn } from './types';\n\nexport class ClmmLiquidityUtils {\n  static getPositionAmountsFromPrice(\n    p: GetPositionAmountsFromPriceProps,\n  ): GetPositionAmountsFromPriceReturn {\n    if (p.amountBase === 0n || p.amountQuote === 0n) {\n      return { newAmountBase: 0n, newAmountQuote: 0n, liquidity: 0n };\n    }\n    const amounts = [p.amountBase, p.amountQuote];\n    const sqrts = [\n      TickUtils.getSqrtRatioAtTick(p.lowerTick),\n      TickUtils.getSqrtRatioAtTick(p.upperTick),\n    ];\n    const reverse1 = p.lowerTick > p.upperTick;\n    if (reverse1) {\n      sqrts.reverse();\n    }\n    const reverse2 = p.tokenBaseId > p.tokenQuoteId;\n    if (reverse2) {\n      amounts.reverse();\n    }\n    const [amount0, amount1, liquidity] = this.getAmountsAndLiquidityAtSqrtPrice(\n      p.sqrtRatioX96,\n      sqrts[0],\n      sqrts[1],\n      amounts[0],\n      amounts[1],\n    );\n    return reverse2\n      ? { newAmountBase: amount1, newAmountQuote: amount0, liquidity }\n      : { newAmountBase: amount0, newAmountQuote: amount1, liquidity };\n  }\n\n  static getAmountsAndLiquidityAtPrice(\n    currentPrice: number,\n    token0: TokenInfo,\n    token1: TokenInfo,\n    lowerTick: bigint,\n    upperTick: bigint,\n    amount0: bigint,\n    amount1: bigint,\n  ): [bigint, bigint, bigint] {\n    const sqrtRatioX96 = TickUtils.priceToSqrtPriceX96(\n      currentPrice,\n      token0.decimals,\n      token1.decimals,\n    );\n    const sqrtRatioAX96 = TickUtils.getSqrtRatioAtTick(lowerTick);\n    const sqrtRatioBX96 = TickUtils.getSqrtRatioAtTick(upperTick);\n    return this.getAmountsAndLiquidityAtSqrtPrice(\n      sqrtRatioX96,\n      sqrtRatioAX96,\n      sqrtRatioBX96,\n      amount0,\n      amount1,\n    );\n  }\n\n  static getAmountsAndLiquidityAtSqrtPrice(\n    sqrtRatioX96: bigint,\n    sqrtRatioAX96: bigint,\n    sqrtRatioBX96: bigint,\n    amount0: bigint,\n    amount1: bigint,\n  ): [bigint, bigint, bigint] {\n    const liquidity = this.getLiquidityFromAmounts(\n      sqrtRatioX96,\n      sqrtRatioAX96,\n      sqrtRatioBX96,\n      amount0,\n      amount1,\n    );\n    const [a0, a1] = this.getAmountsForLiquidity(\n      sqrtRatioX96,\n      sqrtRatioAX96,\n      sqrtRatioBX96,\n      -liquidity,\n    );\n    return [-a0, -a1, liquidity];\n  }\n\n  static getAmountsForLiquidity(\n    sqrtRatioX96: bigint,\n    sqrtRatioAX96: bigint,\n    sqrtRatioBX96: bigint,\n    liquidity: bigint,\n  ): [bigint, bigint] {\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\n      const amount0 = this.getToken0Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity);\n      return [amount0, 0n];\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\n      const amount0 = this.getToken0Delta(sqrtRatioX96, sqrtRatioBX96, liquidity);\n      const amount1 = this.getToken1Delta(sqrtRatioAX96, sqrtRatioX96, liquidity);\n      return [amount0, amount1];\n    } else {\n      const amount1 = this.getToken1Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity);\n      return [0n, amount1];\n    }\n  }\n\n  static getLiquidityFromAmounts(\n    sqrtRatioX96: bigint,\n    sqrtRatioAX96: bigint,\n    sqrtRatioBX96: bigint,\n    amount0: bigint,\n    amount1: bigint,\n  ): bigint {\n    if (sqrtRatioX96 < sqrtRatioAX96) {\n      return this.getLiquidityFromToken0(sqrtRatioAX96, sqrtRatioBX96, amount0);\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\n      const liquidity0 = this.getLiquidityFromToken0(sqrtRatioX96, sqrtRatioBX96, amount0);\n      const liquidity1 = this.getLiquidityFromToken1(sqrtRatioAX96, sqrtRatioX96, amount1);\n      return liquidity0 < liquidity1 ? liquidity0 : liquidity1;\n    } else {\n      return this.getLiquidityFromToken1(sqrtRatioAX96, sqrtRatioBX96, amount1);\n    }\n  }\n\n  static getLiquidityFromToken0(\n    sqrtRatioAX96: bigint,\n    sqrtRatioBX96: bigint,\n    amount0: bigint,\n  ): bigint {\n    const intermediate = MathUtil.alphDiv(sqrtRatioAX96 * sqrtRatioBX96, Q96);\n    return MathUtil.alphDiv(amount0 * intermediate, sqrtRatioBX96 - sqrtRatioAX96);\n  }\n\n  static getLiquidityFromToken1(\n    sqrtRatioAX96: bigint,\n    sqrtRatioBX96: bigint,\n    amount1: bigint,\n  ): bigint {\n    return MathUtil.alphDiv(amount1 * Q96, sqrtRatioBX96 - sqrtRatioAX96);\n  }\n\n  static getAmountDelta(\n    sqrtRatioAX96: bigint,\n    sqrtRatioBX96: bigint,\n    liquidity: bigint,\n    zeroForOne: boolean,\n  ): bigint {\n    if (zeroForOne) {\n      return this.getToken0Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity);\n    } else {\n      return this.getToken1Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity);\n    }\n  }\n\n  static getToken0Delta(sqrtRatioAX96: bigint, sqrtRatioBX96: bigint, liquidity: bigint): bigint {\n    const numerator1 = liquidity * Q96;\n    const numerator2 = sqrtRatioBX96 - sqrtRatioAX96;\n    return MathUtil.alphDiv(numerator1 * numerator2, sqrtRatioBX96 * sqrtRatioAX96);\n  }\n\n  static getToken1Delta(sqrtRatioAX96: bigint, sqrtRatioBX96: bigint, liquidity: bigint): bigint {\n    return MathUtil.alphDiv(liquidity * (sqrtRatioBX96 - sqrtRatioAX96), Q96);\n  }\n}\n","import Decimal from 'decimal.js';\n\nexport type NumericLike = Decimal | bigint | number | string | undefined | null;\n\nexport class NumericUtils {\n  static decimalFrom(value: NumericLike): Decimal {\n    if (value === undefined || value === null) {\n      return new Decimal(0);\n    }\n    if (Decimal.isDecimal(value)) {\n      return value;\n    }\n    if (typeof value === 'bigint') {\n      return new Decimal(value.toString());\n    }\n    return new Decimal(value);\n  }\n\n  static decimalToString(value: Decimal): string {\n    if (!value.isFinite()) {\n      return value.toString();\n    }\n    return value.toFixed(value.decimalPlaces());\n  }\n\n  static scaleDecimal(value: NumericLike, decimals: number): Decimal {\n    if (decimals < 0) {\n      throw new Error('Decimals must be non-negative');\n    }\n    if (decimals === 0) {\n      return this.decimalFrom(value);\n    }\n    return this.decimalFrom(value).div(new Decimal(10).pow(decimals));\n  }\n\n  static scaleToString(value: NumericLike, decimals: number): string {\n    return this.decimalToString(this.scaleDecimal(value, decimals));\n  }\n\n  static numericToString(value: NumericLike): string {\n    return this.decimalToString(this.decimalFrom(value));\n  }\n\n  static numericToBigInt(value: NumericLike): bigint {\n    if (value === undefined || value === null) {\n      return 0n;\n    }\n    if (typeof value === 'bigint') {\n      return value;\n    }\n\n    const decimalValue = this.decimalFrom(value);\n\n    if (!decimalValue.isFinite()) {\n      throw new Error('Cannot convert non-finite value to bigint');\n    }\n\n    if (!decimalValue.isInteger()) {\n      throw new Error('Cannot convert non-integer value to bigint');\n    }\n\n    return BigInt(decimalValue.toFixed(0));\n  }\n}\n","import type { TokenInfo } from '@alephium/token-list';\nimport ModuleBase from '../moduleBase';\nimport type { Zeta } from '../zeta';\nimport { TokenListFetchError } from '../common/error';\n\ninterface TokenCache {\n  tokens: TokenInfo[];\n  lastFetched: Date;\n}\n\ntype TokenListResponse = {\n  tokens: TokenInfo[];\n};\n\nexport class TokenModule extends ModuleBase {\n  private cache?: TokenCache;\n  private readonly cacheTimeMs: number;\n\n  constructor(\n    scope: Zeta,\n    private readonly cacheTimeDays: number = 1,\n  ) {\n    super({ scope, moduleName: 'TokenModule' });\n\n    this.scope = scope;\n    this.cacheTimeMs = cacheTimeDays * 24 * 60 * 60 * 1000;\n  }\n\n  async getTokens(): Promise<TokenInfo[]> {\n    if (this.isCacheValid()) {\n      return this.cache!.tokens;\n    }\n\n    try {\n      return await this.fetchTokens();\n    } catch (error) {\n      if (this.cache) {\n        const reason = error instanceof Error ? error.message : String(error);\n        this.logInfo(`Failed to refresh token list, using cached copy. Reason: ${reason}`);\n        return this.cache.tokens;\n      }\n      this.logAndThrowError(`Failed to refresh token list`, error);\n    }\n  }\n\n  async getTokenById(id: string): Promise<TokenInfo> {\n    const tokenInfo = await this.getTokenInfoBy((token) => token.id === id);\n    if (!tokenInfo) {\n      throw new Error(`Unknown token, id not found in token list: ${id}`);\n    }\n    return tokenInfo;\n  }\n\n  async getTokenBySymbol(symbol: string): Promise<TokenInfo> {\n    const tokenInfo = await this.getTokenInfoBy((token) => token.symbol === symbol);\n    if (!tokenInfo) {\n      throw new Error(`Unknown token, symbol not found in token list: ${symbol}`);\n    }\n    return tokenInfo;\n  }\n\n  async getTokenInfoBy(fn: (token: TokenInfo) => boolean): Promise<TokenInfo | undefined> {\n    const tokenInfoz = await this.getTokens();\n    return tokenInfoz.find(fn);\n  }\n\n  async fetchTokens(): Promise<TokenInfo[]> {\n    try {\n      const response = await fetch(this.scope.tokenListUrl);\n      if (!response.ok) {\n        throw new TokenListFetchError(this.scope.tokenListUrl, { status: response.status });\n      }\n      const payload: unknown = await response.json();\n      const tokens = this.extractTokens(payload);\n      this.cache = {\n        tokens,\n        lastFetched: new Date(),\n      };\n\n      return tokens;\n    } catch (error) {\n      if (error instanceof TokenListFetchError) {\n        this.logAndThrowError(`Failed to fetch token list`, error);\n      }\n\n      this.logAndThrowError(\n        `Failed to fetch token list`,\n        new TokenListFetchError(this.scope.tokenListUrl, {\n          cause: error,\n        }),\n      );\n    }\n  }\n\n  private isCacheValid(): boolean {\n    if (!this.cache) {\n      return false;\n    }\n\n    const now = new Date();\n    const timeDiff = now.getTime() - this.cache.lastFetched.getTime();\n    return timeDiff < this.cacheTimeMs;\n  }\n\n  private extractTokens(payload: unknown): TokenInfo[] {\n    if (!this.validateTokenListResponse(payload)) {\n      throw new Error('Invalid token list payload received from token list endpoint');\n    }\n    return payload.tokens;\n  }\n\n  private validateTokenListResponse(value: unknown): value is TokenListResponse {\n    if (typeof value !== 'object' || value === null) {\n      return false;\n    }\n    const tokens = (value as { tokens?: unknown }).tokens;\n    if (!Array.isArray(tokens)) {\n      return false;\n    }\n    return tokens.every((token) => this.validateTokenInfo(token));\n  }\n\n  private validateTokenInfo(value: unknown): value is TokenInfo {\n    if (typeof value !== 'object' || value === null) {\n      return false;\n    }\n\n    const token = value as Partial<TokenInfo>;\n\n    const requiredStringFields: Array<keyof TokenInfo> = [\n      'id',\n      'name',\n      'symbol',\n      'description',\n      'logoURI',\n    ];\n\n    if (requiredStringFields.some((field) => typeof token[field] !== 'string')) {\n      return false;\n    }\n\n    const { decimals, originChain, unchainedLogoURI } = token;\n\n    if (\n      typeof decimals !== 'number' ||\n      !Number.isInteger(decimals) ||\n      decimals < 0 ||\n      decimals > 255\n    ) {\n      return false;\n    }\n\n    if (originChain !== undefined && typeof originChain !== 'string') {\n      return false;\n    }\n\n    if (unchainedLogoURI !== undefined && typeof unchainedLogoURI !== 'string') {\n      return false;\n    }\n\n    return true;\n  }\n}\n","import type { ExecuteScriptResult, HexString } from '@alephium/web3';\nimport {\n  MINIMAL_CONTRACT_DEPOSIT,\n  addressFromContractId,\n  addressToBytes,\n  binToHex,\n  codec,\n  groupOfAddress,\n  isGrouplessAddressWithoutGroupIndex,\n  subContractId,\n} from '@alephium/web3';\nimport type {\n  AlphUnstakeVaultInstance,\n  AlphUnstakeVaultTypes,\n  GovernanceDemoInstance,\n  RewardSharingVaultInstance,\n  XAlphStakeVaultInstance,\n  XAlphStakeVaultTypes,\n  XAlphTokenInstance,\n  XAlphTokenTypes,\n} from 'staking/artifacts/ts';\nimport {\n  AlphStakeAndLock,\n  AlphUnstakeVault,\n  GovernanceDemo,\n  RewardSharingVault,\n  XAlphStakeVault,\n  XAlphToken,\n  XAlphUnlockAndStartUnstake,\n} from 'staking/artifacts/ts';\nimport { loadDeployments } from 'staking/artifacts/ts/deployments';\nimport ModuleBase from '../moduleBase';\nimport type { Zeta } from '../zeta';\nimport type { StakeVaultUserInfo, StakingConfig } from './types';\nimport { decodeContractIdList, decodeU256List } from './utils';\nimport type { StakingSettings } from './settings';\nimport { getStakingSettings } from './settings';\n\nexport class StakingModule extends ModuleBase {\n  private config: StakingConfig;\n  private xAlphTokenContract: XAlphTokenInstance;\n  private stakeVaultContract: XAlphStakeVaultInstance;\n\n  constructor(scope: Zeta) {\n    super({ scope, moduleName: 'StakingModule' });\n\n    this.config = this.loadStakingConfig();\n    this.xAlphTokenContract = XAlphToken.at(addressFromContractId(this.config.xAlphTokenId));\n    this.stakeVaultContract = XAlphStakeVault.at(\n      addressFromContractId(this.config.xAlphStakeVaultId),\n    );\n  }\n\n  setConfig(config: StakingConfig): void {\n    this.config = config;\n    this.xAlphTokenContract = XAlphToken.at(addressFromContractId(config.xAlphTokenId));\n    this.stakeVaultContract = XAlphStakeVault.at(addressFromContractId(config.xAlphStakeVaultId));\n  }\n\n  getConfig(): StakingConfig {\n    return this.config;\n  }\n\n  getXAlphToken(): XAlphTokenInstance {\n    return this.xAlphTokenContract;\n  }\n\n  getStakeVault(): XAlphStakeVaultInstance {\n    return this.stakeVaultContract;\n  }\n\n  getRewardSharingVault(contractId: string): RewardSharingVaultInstance {\n    return RewardSharingVault.at(addressFromContractId(contractId));\n  }\n\n  getGovernanceContract(contractId: string): GovernanceDemoInstance {\n    return GovernanceDemo.at(addressFromContractId(contractId));\n  }\n\n  async getXAlphTokenState(): Promise<XAlphTokenTypes.State> {\n    return this.xAlphTokenContract.fetchState();\n  }\n\n  async getStakeVaultState(): Promise<XAlphStakeVaultTypes.State> {\n    return this.stakeVaultContract.fetchState();\n  }\n\n  async stakeAlph(amount: bigint): Promise<XAlphTokenTypes.SignExecuteMethodResult<'stake'>> {\n    this.ensurePositiveAmount(amount, 'Stake amount');\n    return this.xAlphTokenContract.transact.stake({\n      signer: this.scope.signer,\n      args: { amount },\n      attoAlphAmount: amount + MINIMAL_CONTRACT_DEPOSIT,\n    });\n  }\n\n  async startUnstake(\n    amount: bigint,\n  ): Promise<XAlphTokenTypes.SignExecuteMethodResult<'startUnstake'>> {\n    this.ensurePositiveAmount(amount, 'Unstake amount');\n    return this.xAlphTokenContract.transact.startUnstake({\n      signer: this.scope.signer,\n      args: { amount },\n      tokens: [{ id: this.config.xAlphTokenId, amount }],\n    });\n  }\n\n  async claimUnstaked(\n    vaultIndex: bigint,\n    amount: bigint,\n  ): Promise<XAlphTokenTypes.SignExecuteMethodResult<'claimUnstaked'>> {\n    this.ensurePositiveAmount(amount, 'Claim amount');\n    return this.xAlphTokenContract.transact.claimUnstaked({\n      signer: this.scope.signer,\n      args: {\n        vaultIndex,\n        amount,\n      },\n    });\n  }\n\n  async stakeXAlph(amount: bigint): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<'stake'>> {\n    this.ensurePositiveAmount(amount, 'Stake amount');\n    return this.stakeVaultContract.transact.stake({\n      signer: this.scope.signer,\n      args: { amount },\n      tokens: [{ id: this.config.xAlphTokenId, amount }],\n      attoAlphAmount: MINIMAL_CONTRACT_DEPOSIT,\n    });\n  }\n\n  async unstakeXAlph(\n    amount: bigint,\n  ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<'unstake'>> {\n    this.ensurePositiveAmount(amount, 'Unstake amount');\n    return this.stakeVaultContract.transact.unstake({\n      signer: this.scope.signer,\n      args: { amount },\n      attoAlphAmount: MINIMAL_CONTRACT_DEPOSIT,\n    });\n  }\n\n  async stakeAndLockAlph(amount: bigint): Promise<ExecuteScriptResult> {\n    return AlphStakeAndLock.execute({\n      signer: this.scope.signer,\n      initialFields: {\n        xAlphToken: this.xAlphTokenContract.contractId,\n        xAlphStakeVault: this.stakeVaultContract.contractId,\n        amount,\n      },\n      attoAlphAmount: amount + MINIMAL_CONTRACT_DEPOSIT,\n    });\n  }\n\n  async unlockAndStartUnstake(amount: bigint): Promise<ExecuteScriptResult> {\n    return XAlphUnlockAndStartUnstake.execute({\n      signer: this.scope.signer,\n      initialFields: {\n        xAlphToken: this.xAlphTokenContract.contractId,\n        xAlphStakeVault: this.stakeVaultContract.contractId,\n        amount,\n      },\n      attoAlphAmount: MINIMAL_CONTRACT_DEPOSIT,\n    });\n  }\n\n  getAlphUnstakeVault(userAddress: string, vaultIndex: bigint): AlphUnstakeVaultInstance {\n    const userHex = binToHex(addressToBytes(userAddress));\n    const indexHex = binToHex(codec.u256Codec.encode(vaultIndex));\n    const contractId = subContractId(\n      this.config.xAlphTokenId,\n      `${userHex}${indexHex}`,\n      groupOfAddress(this.config.xAlphTokenAddress),\n    );\n    return AlphUnstakeVault.at(addressFromContractId(contractId));\n  }\n\n  async getAlphUnstakeVaultState(\n    userAddress: string,\n    vaultIndex: bigint,\n  ): Promise<AlphUnstakeVaultTypes.State> {\n    return this.getAlphUnstakeVault(userAddress, vaultIndex).fetchState();\n  }\n\n  async connectToDapp(\n    contractId: string,\n    merkleProof: HexString,\n  ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<'connectToDapp'>> {\n    return this.stakeVaultContract.transact.connectToDapp({\n      signer: this.scope.signer,\n      args: { contractId, merkleProof },\n      attoAlphAmount: MINIMAL_CONTRACT_DEPOSIT,\n    });\n  }\n\n  async disconnectFromDapp(\n    contractId: string,\n  ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<'disconnectFromDapp'>> {\n    return this.stakeVaultContract.transact.disconnectFromDapp({\n      signer: this.scope.signer,\n      args: { contractId },\n      attoAlphAmount: MINIMAL_CONTRACT_DEPOSIT,\n    });\n  }\n\n  async getUserStakeVaultInfo(address: string): Promise<StakeVaultUserInfo> {\n    let stakerAddress = address;\n    if (isGrouplessAddressWithoutGroupIndex(address)) {\n      stakerAddress = `${address}:${this.stakeVaultContract.groupIndex}`;\n    }\n    const result = await this.stakeVaultContract.view.getUserStakingInfo({\n      args: { user: stakerAddress },\n    });\n    return {\n      amount: result.returns.amount,\n      connectedDapps: decodeContractIdList(result.returns.connectedDapps),\n    };\n  }\n\n  async isUserStaking(address: string): Promise<boolean> {\n    const result = await this.stakeVaultContract.view.isStaking({ args: { user: address } });\n    return result.returns;\n  }\n\n  async getUserWeight(address: string): Promise<bigint> {\n    const result = await this.stakeVaultContract.view.getWeight({ args: { user: address } });\n    return result.returns;\n  }\n\n  async getActiveUnstakeVaultIndexes(address: string): Promise<bigint[]> {\n    const result = await this.xAlphTokenContract.view.getActiveUnstakeVaultIndexes({\n      args: { caller: address },\n    });\n    return decodeU256List(result.returns);\n  }\n\n  async getClaimableAmount(address: string, vaultIndex: bigint): Promise<bigint> {\n    const result = await this.xAlphTokenContract.view.getClaimableAmount({\n      args: { user: address, vaultIndex },\n    });\n    return result.returns;\n  }\n\n  getSettings(): StakingSettings {\n    return getStakingSettings(this.scope.network.id);\n  }\n\n  private loadStakingConfig(): StakingConfig {\n    const networkId = this.scope.network.id;\n    try {\n      const deployments = loadDeployments(networkId);\n      const alphUnstakeVault = deployments.contracts.AlphUnstakeVault.contractInstance;\n      const xAlphToken = deployments.contracts.XAlphToken.contractInstance;\n      const stakeVault = deployments.contracts.XAlphStakeVault.contractInstance;\n      const rewardVault = deployments.contracts.RewardSharingVault.contractInstance;\n      const governance = deployments.contracts.GovernanceDemo.contractInstance;\n      return {\n        groupIndex: stakeVault.groupIndex,\n        alphUnstakeVaultTemplateId: alphUnstakeVault.contractId,\n        xAlphTokenId: xAlphToken.contractId,\n        xAlphTokenAddress: xAlphToken.address,\n        xAlphStakeVaultId: stakeVault.contractId,\n        xAlphStakeVaultAddress: stakeVault.address,\n        rewardSharingTemplateId: rewardVault.contractId,\n        governanceDemoTemplateId: governance.contractId,\n      };\n    } catch (error) {\n      this.logAndThrowError(`Failed to load staking deployments on ${networkId}`, error);\n    }\n  }\n\n  private ensurePositiveAmount(amount: bigint, label: string): void {\n    if (amount <= 0n) {\n      throw new Error(`${label} must be greater than zero`);\n    }\n  }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nexport * from \"./AlphUnstakeVault\";\nexport * from \"./FullMathTest\";\nexport * from \"./GovernanceDemo\";\nexport * from \"./RewardSharingVault\";\nexport * from \"./TestDynamicArrayByteVec32\";\nexport * from \"./TestDynamicSortedArrayForU256\";\nexport * from \"./TestMerkleProof\";\nexport * from \"./XAlphStakeVault\";\nexport * from \"./XAlphToken\";\nexport * from \"./contracts\";\nexport * from \"./scripts\";\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as AlphUnstakeVaultContractJson } from \"../AlphUnstakeVault.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace AlphUnstakeVaultTypes {\n  export type Fields = {\n    xalphToken: HexString;\n    unstakerAddress: Address;\n    totalUnstakeAmount: bigint;\n    unstakeStartTime: bigint;\n    unstakeDuration: bigint;\n    withdrawnAmount: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export interface CallMethodTable {\n    mulDiv: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    getTotalUnstakeAmount: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    getClaimableAmount: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    claim: {\n      params: CallContractParams<{ amount: bigint }>;\n      result: CallContractResult<boolean>;\n    };\n    destroy: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    mulDiv: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getTotalUnstakeAmount: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getClaimableAmount: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    claim: {\n      params: SignExecuteContractMethodParams<{ amount: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    destroy: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  AlphUnstakeVaultInstance,\n  AlphUnstakeVaultTypes.Fields\n> {\n  encodeFields(fields: AlphUnstakeVaultTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  consts = {\n    FullMathError: { DivByZero: BigInt(\"350\"), MulDivOverflow: BigInt(\"351\") },\n    ErrorCodes: {\n      InvalidCaller: BigInt(\"20\"),\n      InsufficientClaimableAmount: BigInt(\"21\"),\n      InvalidUnstakeDuration: BigInt(\"22\"),\n      InvalidTimestamp: BigInt(\"23\"),\n    },\n  };\n\n  at(address: string): AlphUnstakeVaultInstance {\n    return new AlphUnstakeVaultInstance(address);\n  }\n\n  tests = {\n    mulDiv: async (\n      params: TestContractParamsWithoutMaps<\n        AlphUnstakeVaultTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"mulDiv\", params, getContractByCodeHash);\n    },\n    getTotalUnstakeAmount: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<AlphUnstakeVaultTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getTotalUnstakeAmount\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getClaimableAmount: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<AlphUnstakeVaultTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(\n        this,\n        \"getClaimableAmount\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    claim: async (\n      params: TestContractParamsWithoutMaps<\n        AlphUnstakeVaultTypes.Fields,\n        { amount: bigint }\n      >\n    ): Promise<TestContractResultWithoutMaps<boolean>> => {\n      return testMethod(this, \"claim\", params, getContractByCodeHash);\n    },\n    destroy: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<AlphUnstakeVaultTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"destroy\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: AlphUnstakeVaultTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const AlphUnstakeVault = new Factory(\n  Contract.fromJson(\n    AlphUnstakeVaultContractJson,\n    \"\",\n    \"5216c458f360d0f51f5e2109a760814ff97eab76f546adc835eb318c6cbc5256\",\n    types.AllStructs\n  )\n);\nregisterContract(AlphUnstakeVault);\n\n// Use this class to interact with the blockchain\nexport class AlphUnstakeVaultInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<AlphUnstakeVaultTypes.State> {\n    return fetchContractState(AlphUnstakeVault, this);\n  }\n\n  view = {\n    mulDiv: async (\n      params: AlphUnstakeVaultTypes.CallMethodParams<\"mulDiv\">\n    ): Promise<AlphUnstakeVaultTypes.CallMethodResult<\"mulDiv\">> => {\n      return callMethod(\n        AlphUnstakeVault,\n        this,\n        \"mulDiv\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getTotalUnstakeAmount: async (\n      params?: AlphUnstakeVaultTypes.CallMethodParams<\"getTotalUnstakeAmount\">\n    ): Promise<\n      AlphUnstakeVaultTypes.CallMethodResult<\"getTotalUnstakeAmount\">\n    > => {\n      return callMethod(\n        AlphUnstakeVault,\n        this,\n        \"getTotalUnstakeAmount\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getClaimableAmount: async (\n      params?: AlphUnstakeVaultTypes.CallMethodParams<\"getClaimableAmount\">\n    ): Promise<\n      AlphUnstakeVaultTypes.CallMethodResult<\"getClaimableAmount\">\n    > => {\n      return callMethod(\n        AlphUnstakeVault,\n        this,\n        \"getClaimableAmount\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    claim: async (\n      params: AlphUnstakeVaultTypes.CallMethodParams<\"claim\">\n    ): Promise<AlphUnstakeVaultTypes.CallMethodResult<\"claim\">> => {\n      return callMethod(\n        AlphUnstakeVault,\n        this,\n        \"claim\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    destroy: async (\n      params?: AlphUnstakeVaultTypes.CallMethodParams<\"destroy\">\n    ): Promise<AlphUnstakeVaultTypes.CallMethodResult<\"destroy\">> => {\n      return callMethod(\n        AlphUnstakeVault,\n        this,\n        \"destroy\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    mulDiv: async (\n      params: AlphUnstakeVaultTypes.SignExecuteMethodParams<\"mulDiv\">\n    ): Promise<AlphUnstakeVaultTypes.SignExecuteMethodResult<\"mulDiv\">> => {\n      return signExecuteMethod(AlphUnstakeVault, this, \"mulDiv\", params);\n    },\n    getTotalUnstakeAmount: async (\n      params: AlphUnstakeVaultTypes.SignExecuteMethodParams<\"getTotalUnstakeAmount\">\n    ): Promise<\n      AlphUnstakeVaultTypes.SignExecuteMethodResult<\"getTotalUnstakeAmount\">\n    > => {\n      return signExecuteMethod(\n        AlphUnstakeVault,\n        this,\n        \"getTotalUnstakeAmount\",\n        params\n      );\n    },\n    getClaimableAmount: async (\n      params: AlphUnstakeVaultTypes.SignExecuteMethodParams<\"getClaimableAmount\">\n    ): Promise<\n      AlphUnstakeVaultTypes.SignExecuteMethodResult<\"getClaimableAmount\">\n    > => {\n      return signExecuteMethod(\n        AlphUnstakeVault,\n        this,\n        \"getClaimableAmount\",\n        params\n      );\n    },\n    claim: async (\n      params: AlphUnstakeVaultTypes.SignExecuteMethodParams<\"claim\">\n    ): Promise<AlphUnstakeVaultTypes.SignExecuteMethodResult<\"claim\">> => {\n      return signExecuteMethod(AlphUnstakeVault, this, \"claim\", params);\n    },\n    destroy: async (\n      params: AlphUnstakeVaultTypes.SignExecuteMethodParams<\"destroy\">\n    ): Promise<AlphUnstakeVaultTypes.SignExecuteMethodResult<\"destroy\">> => {\n      return signExecuteMethod(AlphUnstakeVault, this, \"destroy\", params);\n    },\n  };\n\n  async multicall<Calls extends AlphUnstakeVaultTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<AlphUnstakeVaultTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends AlphUnstakeVaultTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<AlphUnstakeVaultTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | AlphUnstakeVaultTypes.MultiCallParams\n      | AlphUnstakeVaultTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      AlphUnstakeVault,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"AlphUnstakeVault\",\n  \"bytecode\": \"060540ea40f841384172418c0000030901409216020c3013415e7b160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e160216083736371708160416083702010000000103d3f10c9d97ce020201000003014020d3223281b2ce040c3313167b5617001600ce033413177b1600ce032b1701ce0217021601ce04314c0516021601ce04000017021602a0002b0201020102011fd30e00e856b417011601ce0077457a4b04181601ce014513147b160000023213157bce011600a8a00016002aa100a000ce022f0201020001000bd38e18691cb417001600ce00774513147bce01b0\",\n  \"codeHash\": \"5216c458f360d0f51f5e2109a760814ff97eab76f546adc835eb318c6cbc5256\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"xalphToken\",\n      \"unstakerAddress\",\n      \"totalUnstakeAmount\",\n      \"unstakeStartTime\",\n      \"unstakeDuration\",\n      \"withdrawnAmount\"\n    ],\n    \"types\": [\n      \"XAlphToken\",\n      \"Address\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      true\n    ]\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"mulDiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getTotalUnstakeAmount\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getClaimableAmount\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"claim\",\n      \"paramNames\": [\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"destroy\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"FullMathError\",\n      \"fields\": [\n        {\n          \"name\": \"DivByZero\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"350\"\n          }\n        },\n        {\n          \"name\": \"MulDivOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"351\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"InvalidCaller\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"20\"\n          }\n        },\n        {\n          \"name\": \"InsufficientClaimableAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"21\"\n          }\n        },\n        {\n          \"name\": \"InvalidUnstakeDuration\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"22\"\n          }\n        },\n        {\n          \"name\": \"InvalidTimestamp\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"23\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, ContractFactory } from \"@alephium/web3\";\n\nlet contracts: ContractFactory<any>[] | undefined = undefined;\n\nexport function getAllContracts(): ContractFactory<any>[] {\n  return contracts ?? [];\n}\n\nexport function registerContract(factory: ContractFactory<any>) {\n  if (contracts === undefined) {\n    contracts = [factory];\n  } else {\n    contracts.push(factory);\n  }\n}\nexport function getContractByCodeHash(codeHash: string): Contract {\n  const c = contracts?.find((c) => c.contract.hasCodeHash(codeHash));\n  if (c === undefined) {\n    throw new Error(\"Unknown code with code hash: \" + codeHash);\n  }\n  return c.contract;\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Address, HexString, Val, Struct } from \"@alephium/web3\";\nimport { default as allStructsJson } from \"../structs.ral.json\";\nexport const AllStructs = allStructsJson.map((json) => Struct.fromJson(json));\nexport interface UserRewardSharingInfo extends Record<string, Val> {\n  amount: bigint;\n  rewardPerToken: bigint;\n}\nexport interface UserStakingInfo extends Record<string, Val> {\n  amount: bigint;\n  connectedDapps: HexString;\n}\nexport interface VoteInfo extends Record<string, Val> {\n  proposalVoted: bigint;\n  amount: bigint;\n}\n","[\n  {\n    \"name\": \"VoteInfo\",\n    \"fieldNames\": [\n      \"proposalVoted\",\n      \"amount\"\n    ],\n    \"fieldTypes\": [\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      true,\n      true\n    ]\n  },\n  {\n    \"name\": \"UserRewardSharingInfo\",\n    \"fieldNames\": [\n      \"amount\",\n      \"rewardPerToken\"\n    ],\n    \"fieldTypes\": [\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      true,\n      true\n    ]\n  },\n  {\n    \"name\": \"UserStakingInfo\",\n    \"fieldNames\": [\n      \"amount\",\n      \"connectedDapps\"\n    ],\n    \"fieldTypes\": [\n      \"U256\",\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      true,\n      true\n    ]\n  }\n]","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as FullMathTestContractJson } from \"../utils/FullMathTest.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace FullMathTestTypes {\n  export type State = Omit<ContractState<any>, \"fields\">;\n\n  export interface CallMethodTable {\n    mulDiv: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    mulDiv: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<FullMathTestInstance, {}> {\n  encodeFields() {\n    return encodeContractFields({}, this.contract.fieldsSig, types.AllStructs);\n  }\n\n  consts = {\n    FullMathError: { DivByZero: BigInt(\"350\"), MulDivOverflow: BigInt(\"351\") },\n  };\n\n  at(address: string): FullMathTestInstance {\n    return new FullMathTestInstance(address);\n  }\n\n  tests = {\n    mulDiv: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { a: bigint; b: bigint; denominator: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"mulDiv\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(initFields: {}, asset?: Asset, address?: string) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const FullMathTest = new Factory(\n  Contract.fromJson(\n    FullMathTestContractJson,\n    \"\",\n    \"fd74df789eb5974e11dfa74960ba1323e0530fe5e1fe0aa43a6c3c9bf9ee1d98\",\n    types.AllStructs\n  )\n);\nregisterContract(FullMathTest);\n\n// Use this class to interact with the blockchain\nexport class FullMathTestInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<FullMathTestTypes.State> {\n    return fetchContractState(FullMathTest, this);\n  }\n\n  view = {\n    mulDiv: async (\n      params: FullMathTestTypes.CallMethodParams<\"mulDiv\">\n    ): Promise<FullMathTestTypes.CallMethodResult<\"mulDiv\">> => {\n      return callMethod(\n        FullMathTest,\n        this,\n        \"mulDiv\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    mulDiv: async (\n      params: FullMathTestTypes.SignExecuteMethodParams<\"mulDiv\">\n    ): Promise<FullMathTestTypes.SignExecuteMethodResult<\"mulDiv\">> => {\n      return signExecuteMethod(FullMathTest, this, \"mulDiv\", params);\n    },\n  };\n\n  async multicall<Calls extends FullMathTestTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<FullMathTestTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends FullMathTestTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<FullMathTestTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | FullMathTestTypes.MultiCallParams\n      | FullMathTestTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      FullMathTest,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"FullMathTest\",\n  \"bytecode\": \"000140ea0000030901409216020c3013415e7b160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e160216083736371708160416083702\",\n  \"codeHash\": \"fd74df789eb5974e11dfa74960ba1323e0530fe5e1fe0aa43a6c3c9bf9ee1d98\",\n  \"fieldsSig\": {\n    \"names\": [],\n    \"types\": [],\n    \"isMutable\": []\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"mulDiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"FullMathError\",\n      \"fields\": [\n        {\n          \"name\": \"DivByZero\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"350\"\n          }\n        },\n        {\n          \"name\": \"MulDivOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"351\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as GovernanceDemoContractJson } from \"../examples/GovernanceDemo.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\nimport { RalphMap } from \"@alephium/web3\";\n\n// Custom types for the contract\nexport namespace GovernanceDemoTypes {\n  export type Fields = {\n    xalphStakeVault: HexString;\n    proposalOptions: [bigint, bigint, bigint, bigint];\n    owner: Address;\n    totalVotedAmount: bigint;\n    votingStartTime: bigint;\n    votingEndTime: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export type VotingStartedEvent = ContractEvent<{ votingStartTime: bigint }>;\n  export type VoteCastEvent = ContractEvent<{\n    voter: Address;\n    proposalVoted: bigint;\n    amount: bigint;\n  }>;\n  export type VotingEndedEvent = ContractEvent<{ votingEndTime: bigint }>;\n\n  export interface CallMethodTable {\n    onStake: {\n      params: CallContractParams<{ user: Address; addedAmount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    onUnstake: {\n      params: CallContractParams<{ user: Address; removedAmount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    startVoting: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<null>;\n    };\n    endVoting: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<null>;\n    };\n    getProposalOptions: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<[bigint, bigint, bigint, bigint]>;\n    };\n    getUserVote: {\n      params: CallContractParams<{ user: Address }>;\n      result: CallContractResult<types.VoteInfo>;\n    };\n    getProposalVotes: {\n      params: CallContractParams<{ proposal: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    getTotalVotedAmount: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    vote: {\n      params: CallContractParams<{ proposal: bigint }>;\n      result: CallContractResult<null>;\n    };\n    isVotingStarted: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<boolean>;\n    };\n    isVotingEnded: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<boolean>;\n    };\n    isVotingActive: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<boolean>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    onStake: {\n      params: SignExecuteContractMethodParams<{\n        user: Address;\n        addedAmount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    onUnstake: {\n      params: SignExecuteContractMethodParams<{\n        user: Address;\n        removedAmount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    startVoting: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    endVoting: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getProposalOptions: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getUserVote: {\n      params: SignExecuteContractMethodParams<{ user: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getProposalVotes: {\n      params: SignExecuteContractMethodParams<{ proposal: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getTotalVotedAmount: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    vote: {\n      params: SignExecuteContractMethodParams<{ proposal: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    isVotingStarted: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    isVotingEnded: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    isVotingActive: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n\n  export type Maps = {\n    userVotes?: Map<Address, types.VoteInfo>;\n    proposalVotes?: Map<bigint, bigint>;\n  };\n}\n\nclass Factory extends ContractFactory<\n  GovernanceDemoInstance,\n  GovernanceDemoTypes.Fields\n> {\n  encodeFields(fields: GovernanceDemoTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  eventIndex = { VotingStarted: 0, VoteCast: 1, VotingEnded: 2 };\n  consts = {\n    ErrorCodes: {\n      AssetAddressCallerOnly: BigInt(\"0\"),\n      UserNotStaked: BigInt(\"1\"),\n      InvalidVoteProposal: BigInt(\"2\"),\n      VotingNotStarted: BigInt(\"3\"),\n      VotingAlreadyStarted: BigInt(\"4\"),\n      VotingAlreadyEnded: BigInt(\"5\"),\n      AlreadyVoted: BigInt(\"6\"),\n      OwnerOnly: BigInt(\"7\"),\n      StakeVaultCallerOnly: BigInt(\"8\"),\n    },\n  };\n\n  at(address: string): GovernanceDemoInstance {\n    return new GovernanceDemoInstance(address);\n  }\n\n  tests = {\n    onStake: async (\n      params: TestContractParams<\n        GovernanceDemoTypes.Fields,\n        { user: Address; addedAmount: bigint },\n        GovernanceDemoTypes.Maps\n      >\n    ): Promise<TestContractResult<null, GovernanceDemoTypes.Maps>> => {\n      return testMethod(this, \"onStake\", params, getContractByCodeHash);\n    },\n    onUnstake: async (\n      params: TestContractParams<\n        GovernanceDemoTypes.Fields,\n        { user: Address; removedAmount: bigint },\n        GovernanceDemoTypes.Maps\n      >\n    ): Promise<TestContractResult<null, GovernanceDemoTypes.Maps>> => {\n      return testMethod(this, \"onUnstake\", params, getContractByCodeHash);\n    },\n    startVoting: async (\n      params: Omit<\n        TestContractParams<\n          GovernanceDemoTypes.Fields,\n          never,\n          GovernanceDemoTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResult<null, GovernanceDemoTypes.Maps>> => {\n      return testMethod(this, \"startVoting\", params, getContractByCodeHash);\n    },\n    endVoting: async (\n      params: Omit<\n        TestContractParams<\n          GovernanceDemoTypes.Fields,\n          never,\n          GovernanceDemoTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResult<null, GovernanceDemoTypes.Maps>> => {\n      return testMethod(this, \"endVoting\", params, getContractByCodeHash);\n    },\n    getProposalOptions: async (\n      params: Omit<\n        TestContractParams<\n          GovernanceDemoTypes.Fields,\n          never,\n          GovernanceDemoTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<\n      TestContractResult<\n        [bigint, bigint, bigint, bigint],\n        GovernanceDemoTypes.Maps\n      >\n    > => {\n      return testMethod(\n        this,\n        \"getProposalOptions\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getUserVote: async (\n      params: TestContractParams<\n        GovernanceDemoTypes.Fields,\n        { user: Address },\n        GovernanceDemoTypes.Maps\n      >\n    ): Promise<\n      TestContractResult<types.VoteInfo, GovernanceDemoTypes.Maps>\n    > => {\n      return testMethod(this, \"getUserVote\", params, getContractByCodeHash);\n    },\n    getProposalVotes: async (\n      params: TestContractParams<\n        GovernanceDemoTypes.Fields,\n        { proposal: bigint },\n        GovernanceDemoTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, GovernanceDemoTypes.Maps>> => {\n      return testMethod(\n        this,\n        \"getProposalVotes\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getTotalVotedAmount: async (\n      params: Omit<\n        TestContractParams<\n          GovernanceDemoTypes.Fields,\n          never,\n          GovernanceDemoTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResult<bigint, GovernanceDemoTypes.Maps>> => {\n      return testMethod(\n        this,\n        \"getTotalVotedAmount\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    vote: async (\n      params: TestContractParams<\n        GovernanceDemoTypes.Fields,\n        { proposal: bigint },\n        GovernanceDemoTypes.Maps\n      >\n    ): Promise<TestContractResult<null, GovernanceDemoTypes.Maps>> => {\n      return testMethod(this, \"vote\", params, getContractByCodeHash);\n    },\n    isVotingStarted: async (\n      params: Omit<\n        TestContractParams<\n          GovernanceDemoTypes.Fields,\n          never,\n          GovernanceDemoTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResult<boolean, GovernanceDemoTypes.Maps>> => {\n      return testMethod(this, \"isVotingStarted\", params, getContractByCodeHash);\n    },\n    isVotingEnded: async (\n      params: Omit<\n        TestContractParams<\n          GovernanceDemoTypes.Fields,\n          never,\n          GovernanceDemoTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResult<boolean, GovernanceDemoTypes.Maps>> => {\n      return testMethod(this, \"isVotingEnded\", params, getContractByCodeHash);\n    },\n    isVotingActive: async (\n      params: Omit<\n        TestContractParams<\n          GovernanceDemoTypes.Fields,\n          never,\n          GovernanceDemoTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResult<boolean, GovernanceDemoTypes.Maps>> => {\n      return testMethod(this, \"isVotingActive\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: GovernanceDemoTypes.Fields,\n    asset?: Asset,\n    address?: string,\n    maps?: GovernanceDemoTypes.Maps\n  ) {\n    return this.stateForTest_(initFields, asset, address, maps);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const GovernanceDemo = new Factory(\n  Contract.fromJson(\n    GovernanceDemoContractJson,\n    \"=6-2+e2=2+c=1-5=2-2=1-3+0=3-1+2=2-1+7=4+7=1+2f1=1-2=1+ff=2-1+c=3-1+d=3-2+e343f3=13-1+a=339-1+b=34+7a7e0214696e73657274206174206d617020706174683a2000=26-2+60=353-1+b=38+7a7e021472656d6f7665206174206d617020706174683a2000=19-1+5=91-1+6=48+7a7e0214696e73657274206174206d617020706174683a2000=25-1+6=878\",\n    \"551e89bdda9d4514effbfebcd14d1383bcfb9a8e1c10b78fda75c33aca894624\",\n    types.AllStructs\n  )\n);\nregisterContract(GovernanceDemo);\n\n// Use this class to interact with the blockchain\nexport class GovernanceDemoInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  maps = {\n    userVotes: new RalphMap<Address, types.VoteInfo>(\n      GovernanceDemo.contract,\n      this.contractId,\n      \"userVotes\"\n    ),\n    proposalVotes: new RalphMap<bigint, bigint>(\n      GovernanceDemo.contract,\n      this.contractId,\n      \"proposalVotes\"\n    ),\n  };\n\n  async fetchState(): Promise<GovernanceDemoTypes.State> {\n    return fetchContractState(GovernanceDemo, this);\n  }\n\n  async getContractEventsCurrentCount(): Promise<number> {\n    return getContractEventsCurrentCount(this.address);\n  }\n\n  subscribeVotingStartedEvent(\n    options: EventSubscribeOptions<GovernanceDemoTypes.VotingStartedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      GovernanceDemo.contract,\n      this,\n      options,\n      \"VotingStarted\",\n      fromCount\n    );\n  }\n\n  subscribeVoteCastEvent(\n    options: EventSubscribeOptions<GovernanceDemoTypes.VoteCastEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      GovernanceDemo.contract,\n      this,\n      options,\n      \"VoteCast\",\n      fromCount\n    );\n  }\n\n  subscribeVotingEndedEvent(\n    options: EventSubscribeOptions<GovernanceDemoTypes.VotingEndedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      GovernanceDemo.contract,\n      this,\n      options,\n      \"VotingEnded\",\n      fromCount\n    );\n  }\n\n  subscribeAllEvents(\n    options: EventSubscribeOptions<\n      | GovernanceDemoTypes.VotingStartedEvent\n      | GovernanceDemoTypes.VoteCastEvent\n      | GovernanceDemoTypes.VotingEndedEvent\n    >,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvents(\n      GovernanceDemo.contract,\n      this,\n      options,\n      fromCount\n    );\n  }\n\n  view = {\n    onStake: async (\n      params: GovernanceDemoTypes.CallMethodParams<\"onStake\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"onStake\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"onStake\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    onUnstake: async (\n      params: GovernanceDemoTypes.CallMethodParams<\"onUnstake\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"onUnstake\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"onUnstake\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    startVoting: async (\n      params?: GovernanceDemoTypes.CallMethodParams<\"startVoting\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"startVoting\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"startVoting\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    endVoting: async (\n      params?: GovernanceDemoTypes.CallMethodParams<\"endVoting\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"endVoting\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"endVoting\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getProposalOptions: async (\n      params?: GovernanceDemoTypes.CallMethodParams<\"getProposalOptions\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"getProposalOptions\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"getProposalOptions\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getUserVote: async (\n      params: GovernanceDemoTypes.CallMethodParams<\"getUserVote\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"getUserVote\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"getUserVote\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getProposalVotes: async (\n      params: GovernanceDemoTypes.CallMethodParams<\"getProposalVotes\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"getProposalVotes\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"getProposalVotes\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getTotalVotedAmount: async (\n      params?: GovernanceDemoTypes.CallMethodParams<\"getTotalVotedAmount\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"getTotalVotedAmount\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"getTotalVotedAmount\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    vote: async (\n      params: GovernanceDemoTypes.CallMethodParams<\"vote\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"vote\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"vote\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    isVotingStarted: async (\n      params?: GovernanceDemoTypes.CallMethodParams<\"isVotingStarted\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"isVotingStarted\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"isVotingStarted\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    isVotingEnded: async (\n      params?: GovernanceDemoTypes.CallMethodParams<\"isVotingEnded\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"isVotingEnded\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"isVotingEnded\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    isVotingActive: async (\n      params?: GovernanceDemoTypes.CallMethodParams<\"isVotingActive\">\n    ): Promise<GovernanceDemoTypes.CallMethodResult<\"isVotingActive\">> => {\n      return callMethod(\n        GovernanceDemo,\n        this,\n        \"isVotingActive\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    onStake: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"onStake\">\n    ): Promise<GovernanceDemoTypes.SignExecuteMethodResult<\"onStake\">> => {\n      return signExecuteMethod(GovernanceDemo, this, \"onStake\", params);\n    },\n    onUnstake: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"onUnstake\">\n    ): Promise<GovernanceDemoTypes.SignExecuteMethodResult<\"onUnstake\">> => {\n      return signExecuteMethod(GovernanceDemo, this, \"onUnstake\", params);\n    },\n    startVoting: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"startVoting\">\n    ): Promise<GovernanceDemoTypes.SignExecuteMethodResult<\"startVoting\">> => {\n      return signExecuteMethod(GovernanceDemo, this, \"startVoting\", params);\n    },\n    endVoting: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"endVoting\">\n    ): Promise<GovernanceDemoTypes.SignExecuteMethodResult<\"endVoting\">> => {\n      return signExecuteMethod(GovernanceDemo, this, \"endVoting\", params);\n    },\n    getProposalOptions: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"getProposalOptions\">\n    ): Promise<\n      GovernanceDemoTypes.SignExecuteMethodResult<\"getProposalOptions\">\n    > => {\n      return signExecuteMethod(\n        GovernanceDemo,\n        this,\n        \"getProposalOptions\",\n        params\n      );\n    },\n    getUserVote: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"getUserVote\">\n    ): Promise<GovernanceDemoTypes.SignExecuteMethodResult<\"getUserVote\">> => {\n      return signExecuteMethod(GovernanceDemo, this, \"getUserVote\", params);\n    },\n    getProposalVotes: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"getProposalVotes\">\n    ): Promise<\n      GovernanceDemoTypes.SignExecuteMethodResult<\"getProposalVotes\">\n    > => {\n      return signExecuteMethod(\n        GovernanceDemo,\n        this,\n        \"getProposalVotes\",\n        params\n      );\n    },\n    getTotalVotedAmount: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"getTotalVotedAmount\">\n    ): Promise<\n      GovernanceDemoTypes.SignExecuteMethodResult<\"getTotalVotedAmount\">\n    > => {\n      return signExecuteMethod(\n        GovernanceDemo,\n        this,\n        \"getTotalVotedAmount\",\n        params\n      );\n    },\n    vote: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"vote\">\n    ): Promise<GovernanceDemoTypes.SignExecuteMethodResult<\"vote\">> => {\n      return signExecuteMethod(GovernanceDemo, this, \"vote\", params);\n    },\n    isVotingStarted: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"isVotingStarted\">\n    ): Promise<\n      GovernanceDemoTypes.SignExecuteMethodResult<\"isVotingStarted\">\n    > => {\n      return signExecuteMethod(GovernanceDemo, this, \"isVotingStarted\", params);\n    },\n    isVotingEnded: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"isVotingEnded\">\n    ): Promise<\n      GovernanceDemoTypes.SignExecuteMethodResult<\"isVotingEnded\">\n    > => {\n      return signExecuteMethod(GovernanceDemo, this, \"isVotingEnded\", params);\n    },\n    isVotingActive: async (\n      params: GovernanceDemoTypes.SignExecuteMethodParams<\"isVotingActive\">\n    ): Promise<\n      GovernanceDemoTypes.SignExecuteMethodResult<\"isVotingActive\">\n    > => {\n      return signExecuteMethod(GovernanceDemo, this, \"isVotingActive\", params);\n    },\n  };\n\n  async multicall<Calls extends GovernanceDemoTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<GovernanceDemoTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends GovernanceDemoTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<GovernanceDemoTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | GovernanceDemoTypes.MultiCallParams\n      | GovernanceDemoTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      GovernanceDemo,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"GovernanceDemo\",\n  \"bytecode\": \"090c40c9419741f54217422b426c42a642b44382438d439843a801000206004058d3926b380bb417021602ce00774513087b140a5f5f6d61705f5f305f5f16004744cbc54c403f0c0d0d140a5f5f6d61705f5f305f5f16004744cb1705160501010d0d0d1605010117041703000b7a4c041816030c304c180c0d0d140a5f5f6d61705f5f315f5f16034044cb010116012a0c0e0c140a5f5f6d61705f5f315f5f16034044cb0102a00016012aa100160416012a0d0e0c140a5f5f6d61705f5f305f5f16004744cb01024a09ca140a5f5f6d61705f5f305f5f16004744b10c1601d201020100020700405ed365b06caeb417021602ce00774513087b140a5f5f6d61705f5f305f5f16004744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1706160601010d0d0d1606010117041703160416012b170516050d0e0c140a5f5f6d61705f5f305f5f16004744cb0102000b7a4c041816030c304c180c0d0d140a5f5f6d61705f5f315f5f16034044cb010116012b0c0e0c140a5f5f6d61705f5f315f5f16034044cb0102a00016012ba10016050c2f4c09ca0d0c140a5f5f6d61705f5f305f5f16004744cb010301000002004033d3ecf99ab7b4ce054513077b000919107b000a19117b56a101ce01ce02ce03ce041017000c170116011600314c14ca140a5f5f6d61705f5f315f5f16017a10314d0d2acf4044b10cd2010116010d2a17014a2805a0015e010000000012d33919f580b4ce054513077b00090f7b000a19117b56a10207a0025e010000000406d3068539face01ce02ce03ce040201000102021ad344a25325140a5f5f6d61705f5f305f5f16004744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1701160101010d0d0d1601010102010001010116d32e30a67700090f7b140a5f5f6d61705f5f315f5f16004044cbc50e7b0c0d0d140a5f5f6d61705f5f315f5f16004044cb010102010000000103d33cfd4f9ea000020100010300405cd376a80ea2b417011601480c7b00090f7b000a19117b140a5f5f6d61705f5f315f5f16004044cbc50e7b140a5f5f6d61705f5f305f5f16014744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16014744cb01010c2f13067b0d0d0d140a5f5f6d61705f5f305f5f16014744cb01011702a00016022aa1000c0d0d140a5f5f6d61705f5f315f5f16004044cb010116022a0c0e0c140a5f5f6d61705f5f315f5f16004044cb010216000c0e0c140a5f5f6d61705f5f305f5f16014744cb01020616011600160260000000000104a0010c3002000000000104a0020c300200000000010700097a4c0318000a1902\",\n  \"codeHash\": \"1d77f89642f8b3bd6364388e7b9b8ad9d58815365d4e7a02a932fe65ab913078\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"xalphStakeVault\",\n      \"proposalOptions\",\n      \"owner\",\n      \"totalVotedAmount\",\n      \"votingStartTime\",\n      \"votingEndTime\"\n    ],\n    \"types\": [\n      \"XAlphStakeVault\",\n      \"[U256;4]\",\n      \"Address\",\n      \"U256\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      true,\n      true,\n      true\n    ]\n  },\n  \"eventsSig\": [\n    {\n      \"name\": \"VotingStarted\",\n      \"fieldNames\": [\n        \"votingStartTime\"\n      ],\n      \"fieldTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"VoteCast\",\n      \"fieldNames\": [\n        \"voter\",\n        \"proposalVoted\",\n        \"amount\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"VotingEnded\",\n      \"fieldNames\": [\n        \"votingEndTime\"\n      ],\n      \"fieldTypes\": [\n        \"U256\"\n      ]\n    }\n  ],\n  \"functions\": [\n    {\n      \"name\": \"onStake\",\n      \"paramNames\": [\n        \"user\",\n        \"addedAmount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"onUnstake\",\n      \"paramNames\": [\n        \"user\",\n        \"removedAmount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"startVoting\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"endVoting\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"getProposalOptions\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"[U256;4]\"\n      ]\n    },\n    {\n      \"name\": \"getUserVote\",\n      \"paramNames\": [\n        \"user\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"VoteInfo\"\n      ]\n    },\n    {\n      \"name\": \"getProposalVotes\",\n      \"paramNames\": [\n        \"proposal\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getTotalVotedAmount\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"vote\",\n      \"paramNames\": [\n        \"proposal\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"isVotingStarted\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"isVotingEnded\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"isVotingActive\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"Bool\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"AssetAddressCallerOnly\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"0\"\n          }\n        },\n        {\n          \"name\": \"UserNotStaked\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"1\"\n          }\n        },\n        {\n          \"name\": \"InvalidVoteProposal\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"2\"\n          }\n        },\n        {\n          \"name\": \"VotingNotStarted\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"3\"\n          }\n        },\n        {\n          \"name\": \"VotingAlreadyStarted\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"4\"\n          }\n        },\n        {\n          \"name\": \"VotingAlreadyEnded\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"5\"\n          }\n        },\n        {\n          \"name\": \"AlreadyVoted\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"6\"\n          }\n        },\n        {\n          \"name\": \"OwnerOnly\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"7\"\n          }\n        },\n        {\n          \"name\": \"StakeVaultCallerOnly\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"8\"\n          }\n        }\n      ]\n    }\n  ],\n  \"mapsSig\": {\n    \"names\": [\n      \"userVotes\",\n      \"proposalVotes\"\n    ],\n    \"types\": [\n      \"Map[Address,VoteInfo]\",\n      \"Map[U256,U256]\"\n    ]\n  }\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as RewardSharingVaultContractJson } from \"../examples/RewardSharingVault.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\nimport { RalphMap } from \"@alephium/web3\";\n\n// Custom types for the contract\nexport namespace RewardSharingVaultTypes {\n  export type Fields = {\n    stakeVault: HexString;\n    rewardTokenId: HexString;\n    totalAmountStaked: bigint;\n    rewardPerTokenCumulative: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export type StakedEvent = ContractEvent<{ staker: Address; amount: bigint }>;\n  export type UnstakedEvent = ContractEvent<{\n    staker: Address;\n    amount: bigint;\n  }>;\n  export type RewardDepositedEvent = ContractEvent<{\n    depositor: Address;\n    amount: bigint;\n  }>;\n  export type RewardClaimedEvent = ContractEvent<{\n    staker: Address;\n    amount: bigint;\n  }>;\n\n  export interface CallMethodTable {\n    onStake: {\n      params: CallContractParams<{ user: Address; newStakedAmount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    onUnstake: {\n      params: CallContractParams<{ user: Address; unstakedAmount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    mulDiv: {\n      params: CallContractParams<{ a: bigint; b: bigint; denominator: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    depositReward: {\n      params: CallContractParams<{ amount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    claimPendingRewards: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<null>;\n    };\n    claimUserPendingRewards: {\n      params: CallContractParams<{ user: Address }>;\n      result: CallContractResult<null>;\n    };\n    getUserPendingRewards: {\n      params: CallContractParams<{ user: Address }>;\n      result: CallContractResult<bigint>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    onStake: {\n      params: SignExecuteContractMethodParams<{\n        user: Address;\n        newStakedAmount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    onUnstake: {\n      params: SignExecuteContractMethodParams<{\n        user: Address;\n        unstakedAmount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    mulDiv: {\n      params: SignExecuteContractMethodParams<{\n        a: bigint;\n        b: bigint;\n        denominator: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    depositReward: {\n      params: SignExecuteContractMethodParams<{ amount: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    claimPendingRewards: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    claimUserPendingRewards: {\n      params: SignExecuteContractMethodParams<{ user: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getUserPendingRewards: {\n      params: SignExecuteContractMethodParams<{ user: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n\n  export type Maps = {\n    userRewardSharingInfo?: Map<Address, types.UserRewardSharingInfo>;\n  };\n}\n\nclass Factory extends ContractFactory<\n  RewardSharingVaultInstance,\n  RewardSharingVaultTypes.Fields\n> {\n  encodeFields(fields: RewardSharingVaultTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  eventIndex = { Staked: 0, Unstaked: 1, RewardDeposited: 2, RewardClaimed: 3 };\n  consts = {\n    SCALING_FACTOR: BigInt(\"1000000000000000000\"),\n    FullMathError: { DivByZero: BigInt(\"350\"), MulDivOverflow: BigInt(\"351\") },\n    ErrorCodes: {\n      StakeVaultCallerOnly: BigInt(\"40\"),\n      NoUserRewardSharingInfo: BigInt(\"41\"),\n      TotalStakedAmountIsZero: BigInt(\"42\"),\n      InvalidStakedAmount: BigInt(\"43\"),\n      InvalidUnstakedAmount: BigInt(\"44\"),\n    },\n  };\n\n  at(address: string): RewardSharingVaultInstance {\n    return new RewardSharingVaultInstance(address);\n  }\n\n  tests = {\n    onStake: async (\n      params: TestContractParams<\n        RewardSharingVaultTypes.Fields,\n        { user: Address; newStakedAmount: bigint },\n        RewardSharingVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, RewardSharingVaultTypes.Maps>> => {\n      return testMethod(this, \"onStake\", params, getContractByCodeHash);\n    },\n    onUnstake: async (\n      params: TestContractParams<\n        RewardSharingVaultTypes.Fields,\n        { user: Address; unstakedAmount: bigint },\n        RewardSharingVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, RewardSharingVaultTypes.Maps>> => {\n      return testMethod(this, \"onUnstake\", params, getContractByCodeHash);\n    },\n    mulDiv: async (\n      params: TestContractParams<\n        RewardSharingVaultTypes.Fields,\n        { a: bigint; b: bigint; denominator: bigint },\n        RewardSharingVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, RewardSharingVaultTypes.Maps>> => {\n      return testMethod(this, \"mulDiv\", params, getContractByCodeHash);\n    },\n    depositReward: async (\n      params: TestContractParams<\n        RewardSharingVaultTypes.Fields,\n        { amount: bigint },\n        RewardSharingVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, RewardSharingVaultTypes.Maps>> => {\n      return testMethod(this, \"depositReward\", params, getContractByCodeHash);\n    },\n    claimPendingRewards: async (\n      params: Omit<\n        TestContractParams<\n          RewardSharingVaultTypes.Fields,\n          never,\n          RewardSharingVaultTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResult<null, RewardSharingVaultTypes.Maps>> => {\n      return testMethod(\n        this,\n        \"claimPendingRewards\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    claimUserPendingRewards: async (\n      params: TestContractParams<\n        RewardSharingVaultTypes.Fields,\n        { user: Address },\n        RewardSharingVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, RewardSharingVaultTypes.Maps>> => {\n      return testMethod(\n        this,\n        \"claimUserPendingRewards\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getUserPendingRewards: async (\n      params: TestContractParams<\n        RewardSharingVaultTypes.Fields,\n        { user: Address },\n        RewardSharingVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, RewardSharingVaultTypes.Maps>> => {\n      return testMethod(\n        this,\n        \"getUserPendingRewards\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  stateForTest(\n    initFields: RewardSharingVaultTypes.Fields,\n    asset?: Asset,\n    address?: string,\n    maps?: RewardSharingVaultTypes.Maps\n  ) {\n    return this.stateForTest_(initFields, asset, address, maps);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const RewardSharingVault = new Factory(\n  Contract.fromJson(\n    RewardSharingVaultContractJson,\n    \"=6-2+d0=2-2+8=1-3=2-2+6e=2-1+a=3-2+bb42f2=2-2+50=13-1+6=235-1+7=74+7a7e0214696e73657274206174206d617020706174683a2000=55-1+8=173-1+c=38+7a7e021472656d6f7665206174206d617020706174683a2000=1004\",\n    \"ad1203de899174ecc3a6b2fdf1ea73664ad5ae8ae74b0113feb5404f15b96347\",\n    types.AllStructs\n  )\n);\nregisterContract(RewardSharingVault);\n\n// Use this class to interact with the blockchain\nexport class RewardSharingVaultInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  maps = {\n    userRewardSharingInfo: new RalphMap<Address, types.UserRewardSharingInfo>(\n      RewardSharingVault.contract,\n      this.contractId,\n      \"userRewardSharingInfo\"\n    ),\n  };\n\n  async fetchState(): Promise<RewardSharingVaultTypes.State> {\n    return fetchContractState(RewardSharingVault, this);\n  }\n\n  async getContractEventsCurrentCount(): Promise<number> {\n    return getContractEventsCurrentCount(this.address);\n  }\n\n  subscribeStakedEvent(\n    options: EventSubscribeOptions<RewardSharingVaultTypes.StakedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      RewardSharingVault.contract,\n      this,\n      options,\n      \"Staked\",\n      fromCount\n    );\n  }\n\n  subscribeUnstakedEvent(\n    options: EventSubscribeOptions<RewardSharingVaultTypes.UnstakedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      RewardSharingVault.contract,\n      this,\n      options,\n      \"Unstaked\",\n      fromCount\n    );\n  }\n\n  subscribeRewardDepositedEvent(\n    options: EventSubscribeOptions<RewardSharingVaultTypes.RewardDepositedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      RewardSharingVault.contract,\n      this,\n      options,\n      \"RewardDeposited\",\n      fromCount\n    );\n  }\n\n  subscribeRewardClaimedEvent(\n    options: EventSubscribeOptions<RewardSharingVaultTypes.RewardClaimedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      RewardSharingVault.contract,\n      this,\n      options,\n      \"RewardClaimed\",\n      fromCount\n    );\n  }\n\n  subscribeAllEvents(\n    options: EventSubscribeOptions<\n      | RewardSharingVaultTypes.StakedEvent\n      | RewardSharingVaultTypes.UnstakedEvent\n      | RewardSharingVaultTypes.RewardDepositedEvent\n      | RewardSharingVaultTypes.RewardClaimedEvent\n    >,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvents(\n      RewardSharingVault.contract,\n      this,\n      options,\n      fromCount\n    );\n  }\n\n  view = {\n    onStake: async (\n      params: RewardSharingVaultTypes.CallMethodParams<\"onStake\">\n    ): Promise<RewardSharingVaultTypes.CallMethodResult<\"onStake\">> => {\n      return callMethod(\n        RewardSharingVault,\n        this,\n        \"onStake\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    onUnstake: async (\n      params: RewardSharingVaultTypes.CallMethodParams<\"onUnstake\">\n    ): Promise<RewardSharingVaultTypes.CallMethodResult<\"onUnstake\">> => {\n      return callMethod(\n        RewardSharingVault,\n        this,\n        \"onUnstake\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    mulDiv: async (\n      params: RewardSharingVaultTypes.CallMethodParams<\"mulDiv\">\n    ): Promise<RewardSharingVaultTypes.CallMethodResult<\"mulDiv\">> => {\n      return callMethod(\n        RewardSharingVault,\n        this,\n        \"mulDiv\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    depositReward: async (\n      params: RewardSharingVaultTypes.CallMethodParams<\"depositReward\">\n    ): Promise<RewardSharingVaultTypes.CallMethodResult<\"depositReward\">> => {\n      return callMethod(\n        RewardSharingVault,\n        this,\n        \"depositReward\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    claimPendingRewards: async (\n      params?: RewardSharingVaultTypes.CallMethodParams<\"claimPendingRewards\">\n    ): Promise<\n      RewardSharingVaultTypes.CallMethodResult<\"claimPendingRewards\">\n    > => {\n      return callMethod(\n        RewardSharingVault,\n        this,\n        \"claimPendingRewards\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    claimUserPendingRewards: async (\n      params: RewardSharingVaultTypes.CallMethodParams<\"claimUserPendingRewards\">\n    ): Promise<\n      RewardSharingVaultTypes.CallMethodResult<\"claimUserPendingRewards\">\n    > => {\n      return callMethod(\n        RewardSharingVault,\n        this,\n        \"claimUserPendingRewards\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getUserPendingRewards: async (\n      params: RewardSharingVaultTypes.CallMethodParams<\"getUserPendingRewards\">\n    ): Promise<\n      RewardSharingVaultTypes.CallMethodResult<\"getUserPendingRewards\">\n    > => {\n      return callMethod(\n        RewardSharingVault,\n        this,\n        \"getUserPendingRewards\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    onStake: async (\n      params: RewardSharingVaultTypes.SignExecuteMethodParams<\"onStake\">\n    ): Promise<RewardSharingVaultTypes.SignExecuteMethodResult<\"onStake\">> => {\n      return signExecuteMethod(RewardSharingVault, this, \"onStake\", params);\n    },\n    onUnstake: async (\n      params: RewardSharingVaultTypes.SignExecuteMethodParams<\"onUnstake\">\n    ): Promise<\n      RewardSharingVaultTypes.SignExecuteMethodResult<\"onUnstake\">\n    > => {\n      return signExecuteMethod(RewardSharingVault, this, \"onUnstake\", params);\n    },\n    mulDiv: async (\n      params: RewardSharingVaultTypes.SignExecuteMethodParams<\"mulDiv\">\n    ): Promise<RewardSharingVaultTypes.SignExecuteMethodResult<\"mulDiv\">> => {\n      return signExecuteMethod(RewardSharingVault, this, \"mulDiv\", params);\n    },\n    depositReward: async (\n      params: RewardSharingVaultTypes.SignExecuteMethodParams<\"depositReward\">\n    ): Promise<\n      RewardSharingVaultTypes.SignExecuteMethodResult<\"depositReward\">\n    > => {\n      return signExecuteMethod(\n        RewardSharingVault,\n        this,\n        \"depositReward\",\n        params\n      );\n    },\n    claimPendingRewards: async (\n      params: RewardSharingVaultTypes.SignExecuteMethodParams<\"claimPendingRewards\">\n    ): Promise<\n      RewardSharingVaultTypes.SignExecuteMethodResult<\"claimPendingRewards\">\n    > => {\n      return signExecuteMethod(\n        RewardSharingVault,\n        this,\n        \"claimPendingRewards\",\n        params\n      );\n    },\n    claimUserPendingRewards: async (\n      params: RewardSharingVaultTypes.SignExecuteMethodParams<\"claimUserPendingRewards\">\n    ): Promise<\n      RewardSharingVaultTypes.SignExecuteMethodResult<\"claimUserPendingRewards\">\n    > => {\n      return signExecuteMethod(\n        RewardSharingVault,\n        this,\n        \"claimUserPendingRewards\",\n        params\n      );\n    },\n    getUserPendingRewards: async (\n      params: RewardSharingVaultTypes.SignExecuteMethodParams<\"getUserPendingRewards\">\n    ): Promise<\n      RewardSharingVaultTypes.SignExecuteMethodResult<\"getUserPendingRewards\">\n    > => {\n      return signExecuteMethod(\n        RewardSharingVault,\n        this,\n        \"getUserPendingRewards\",\n        params\n      );\n    },\n  };\n\n  async multicall<Calls extends RewardSharingVaultTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<RewardSharingVaultTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends RewardSharingVaultTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<RewardSharingVaultTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | RewardSharingVaultTypes.MultiCallParams\n      | RewardSharingVaultTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      RewardSharingVault,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"RewardSharingVault\",\n  \"bytecode\": \"040740b74152423c4277428942c0431e01000208004054d3926b380bb417021602ce00774513287b140a5f5f6d61705f5f305f5f16004744cbc54c40270c0d0d140a5f5f6d61705f5f305f5f16004744cb01011703160116032a16000d0ece00010d1707170616062f132b7b16000005160316012a0c0e0c140a5f5f6d61705f5f305f5f16004744cb01024a15160116000d0ece00010d1705170416042f132b7bca140a5f5f6d61705f5f305f5f16004744b11601a001d20102a00016012aa10005160016015f01000205004046d365b06caeb417021602ce00774513287b140a5f5f6d61705f5f305f5f16004744cbc513297b0c0d0d140a5f5f6d61705f5f305f5f16004744cb010117031601160332132c7b160316012b17041600000516040c2f4c0aca0d0c140a5f5f6d61705f5f305f5f16004744cb01034a0a16040c0e0c140a5f5f6d61705f5f305f5f16004744cb0102a00016012ba10006160016015f0000030901409216020c3013415e7b160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e160216083736371708160416083702010101030019d3fe1110a1a0000c33132a7bb417011601ce011600ac160013c40de0b6b3a7640000a00000021702a00116022aa10107160116005f010300010005d3a28b71d5b417001600000500020102001916000006170116010c334c081600ce011601ab08160016015fa0010d0e0c140a5f5f6d61705f5f305f5f16004744cb010201000105014024d31191a066140a5f5f6d61705f5f305f5f16004744cbc513297b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1704160401010d0d0d1604010117021701a00116022b17031601160313c40de0b6b3a7640000000202\",\n  \"codeHash\": \"8beaa8b570543344d4352cf8534bbc7df4591b4ecda97cfc3c30bc28dca5adb9\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"stakeVault\",\n      \"rewardTokenId\",\n      \"totalAmountStaked\",\n      \"rewardPerTokenCumulative\"\n    ],\n    \"types\": [\n      \"XAlphStakeVault\",\n      \"ByteVec\",\n      \"U256\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      true,\n      true\n    ]\n  },\n  \"eventsSig\": [\n    {\n      \"name\": \"Staked\",\n      \"fieldNames\": [\n        \"staker\",\n        \"amount\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"Unstaked\",\n      \"fieldNames\": [\n        \"staker\",\n        \"amount\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"RewardDeposited\",\n      \"fieldNames\": [\n        \"depositor\",\n        \"amount\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"RewardClaimed\",\n      \"fieldNames\": [\n        \"staker\",\n        \"amount\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\"\n      ]\n    }\n  ],\n  \"functions\": [\n    {\n      \"name\": \"onStake\",\n      \"paramNames\": [\n        \"user\",\n        \"newStakedAmount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"onUnstake\",\n      \"paramNames\": [\n        \"user\",\n        \"unstakedAmount\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"mulDiv\",\n      \"paramNames\": [\n        \"a\",\n        \"b\",\n        \"denominator\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        true\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"depositReward\",\n      \"paramNames\": [\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"claimPendingRewards\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"claimUserPendingRewards\",\n      \"paramNames\": [\n        \"user\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"getUserPendingRewards\",\n      \"paramNames\": [\n        \"user\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    }\n  ],\n  \"constants\": [\n    {\n      \"name\": \"SCALING_FACTOR\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"1000000000000000000\"\n      }\n    }\n  ],\n  \"enums\": [\n    {\n      \"name\": \"FullMathError\",\n      \"fields\": [\n        {\n          \"name\": \"DivByZero\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"350\"\n          }\n        },\n        {\n          \"name\": \"MulDivOverflow\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"351\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"StakeVaultCallerOnly\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"40\"\n          }\n        },\n        {\n          \"name\": \"NoUserRewardSharingInfo\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"41\"\n          }\n        },\n        {\n          \"name\": \"TotalStakedAmountIsZero\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"42\"\n          }\n        },\n        {\n          \"name\": \"InvalidStakedAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"43\"\n          }\n        },\n        {\n          \"name\": \"InvalidUnstakedAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"44\"\n          }\n        }\n      ]\n    }\n  ],\n  \"mapsSig\": {\n    \"names\": [\n      \"userRewardSharingInfo\"\n    ],\n    \"types\": [\n      \"Map[Address,UserRewardSharingInfo]\"\n    ]\n  }\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as TestDynamicArrayByteVec32ContractJson } from \"../utils/TestDynamicArrayByteVec32.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace TestDynamicArrayByteVec32Types {\n  export type State = Omit<ContractState<any>, \"fields\">;\n\n  export interface CallMethodTable {\n    get: {\n      params: CallContractParams<{ array: HexString; index: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    find: {\n      params: CallContractParams<{ array: HexString; value: HexString }>;\n      result: CallContractResult<bigint>;\n    };\n    remove: {\n      params: CallContractParams<{ array: HexString; value: HexString }>;\n      result: CallContractResult<HexString>;\n    };\n    push: {\n      params: CallContractParams<{ array: HexString; value: HexString }>;\n      result: CallContractResult<HexString>;\n    };\n    removeAt: {\n      params: CallContractParams<{ array: HexString; index: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    size: {\n      params: CallContractParams<{ array: HexString }>;\n      result: CallContractResult<bigint>;\n    };\n    empty: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    get: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        index: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    find: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    remove: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    push: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    removeAt: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        index: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    size: {\n      params: SignExecuteContractMethodParams<{ array: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    empty: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<TestDynamicArrayByteVec32Instance, {}> {\n  encodeFields() {\n    return encodeContractFields({}, this.contract.fieldsSig, types.AllStructs);\n  }\n\n  consts = {\n    IntByteLength: BigInt(\"32\"),\n    ErrorCode: {\n      InvalidArrayLength: BigInt(\"550\"),\n      IndexOutOfBound: BigInt(\"551\"),\n      InvalidByteVecLength: BigInt(\"552\"),\n    },\n  };\n\n  at(address: string): TestDynamicArrayByteVec32Instance {\n    return new TestDynamicArrayByteVec32Instance(address);\n  }\n\n  tests = {\n    get: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; index: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"get\", params, getContractByCodeHash);\n    },\n    find: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; value: HexString }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"find\", params, getContractByCodeHash);\n    },\n    remove: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; value: HexString }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"remove\", params, getContractByCodeHash);\n    },\n    push: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; value: HexString }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"push\", params, getContractByCodeHash);\n    },\n    removeAt: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; index: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"removeAt\", params, getContractByCodeHash);\n    },\n    size: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<never, { array: HexString }>,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"size\", params, getContractByCodeHash);\n    },\n    empty: async (\n      params?: Omit<\n        TestContractParamsWithoutMaps<never, never>,\n        \"args\" | \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(\n        this,\n        \"empty\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  stateForTest(initFields: {}, asset?: Asset, address?: string) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const TestDynamicArrayByteVec32 = new Factory(\n  Contract.fromJson(\n    TestDynamicArrayByteVec32ContractJson,\n    \"\",\n    \"594861ab1850f3d1872ee687c87ddfeca8746bfe5b9ade07fabc4ca27c56661c\",\n    types.AllStructs\n  )\n);\nregisterContract(TestDynamicArrayByteVec32);\n\n// Use this class to interact with the blockchain\nexport class TestDynamicArrayByteVec32Instance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<TestDynamicArrayByteVec32Types.State> {\n    return fetchContractState(TestDynamicArrayByteVec32, this);\n  }\n\n  view = {\n    get: async (\n      params: TestDynamicArrayByteVec32Types.CallMethodParams<\"get\">\n    ): Promise<TestDynamicArrayByteVec32Types.CallMethodResult<\"get\">> => {\n      return callMethod(\n        TestDynamicArrayByteVec32,\n        this,\n        \"get\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    find: async (\n      params: TestDynamicArrayByteVec32Types.CallMethodParams<\"find\">\n    ): Promise<TestDynamicArrayByteVec32Types.CallMethodResult<\"find\">> => {\n      return callMethod(\n        TestDynamicArrayByteVec32,\n        this,\n        \"find\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    remove: async (\n      params: TestDynamicArrayByteVec32Types.CallMethodParams<\"remove\">\n    ): Promise<TestDynamicArrayByteVec32Types.CallMethodResult<\"remove\">> => {\n      return callMethod(\n        TestDynamicArrayByteVec32,\n        this,\n        \"remove\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    push: async (\n      params: TestDynamicArrayByteVec32Types.CallMethodParams<\"push\">\n    ): Promise<TestDynamicArrayByteVec32Types.CallMethodResult<\"push\">> => {\n      return callMethod(\n        TestDynamicArrayByteVec32,\n        this,\n        \"push\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    removeAt: async (\n      params: TestDynamicArrayByteVec32Types.CallMethodParams<\"removeAt\">\n    ): Promise<TestDynamicArrayByteVec32Types.CallMethodResult<\"removeAt\">> => {\n      return callMethod(\n        TestDynamicArrayByteVec32,\n        this,\n        \"removeAt\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    size: async (\n      params: TestDynamicArrayByteVec32Types.CallMethodParams<\"size\">\n    ): Promise<TestDynamicArrayByteVec32Types.CallMethodResult<\"size\">> => {\n      return callMethod(\n        TestDynamicArrayByteVec32,\n        this,\n        \"size\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    empty: async (\n      params?: TestDynamicArrayByteVec32Types.CallMethodParams<\"empty\">\n    ): Promise<TestDynamicArrayByteVec32Types.CallMethodResult<\"empty\">> => {\n      return callMethod(\n        TestDynamicArrayByteVec32,\n        this,\n        \"empty\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    get: async (\n      params: TestDynamicArrayByteVec32Types.SignExecuteMethodParams<\"get\">\n    ): Promise<\n      TestDynamicArrayByteVec32Types.SignExecuteMethodResult<\"get\">\n    > => {\n      return signExecuteMethod(TestDynamicArrayByteVec32, this, \"get\", params);\n    },\n    find: async (\n      params: TestDynamicArrayByteVec32Types.SignExecuteMethodParams<\"find\">\n    ): Promise<\n      TestDynamicArrayByteVec32Types.SignExecuteMethodResult<\"find\">\n    > => {\n      return signExecuteMethod(TestDynamicArrayByteVec32, this, \"find\", params);\n    },\n    remove: async (\n      params: TestDynamicArrayByteVec32Types.SignExecuteMethodParams<\"remove\">\n    ): Promise<\n      TestDynamicArrayByteVec32Types.SignExecuteMethodResult<\"remove\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicArrayByteVec32,\n        this,\n        \"remove\",\n        params\n      );\n    },\n    push: async (\n      params: TestDynamicArrayByteVec32Types.SignExecuteMethodParams<\"push\">\n    ): Promise<\n      TestDynamicArrayByteVec32Types.SignExecuteMethodResult<\"push\">\n    > => {\n      return signExecuteMethod(TestDynamicArrayByteVec32, this, \"push\", params);\n    },\n    removeAt: async (\n      params: TestDynamicArrayByteVec32Types.SignExecuteMethodParams<\"removeAt\">\n    ): Promise<\n      TestDynamicArrayByteVec32Types.SignExecuteMethodResult<\"removeAt\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicArrayByteVec32,\n        this,\n        \"removeAt\",\n        params\n      );\n    },\n    size: async (\n      params: TestDynamicArrayByteVec32Types.SignExecuteMethodParams<\"size\">\n    ): Promise<\n      TestDynamicArrayByteVec32Types.SignExecuteMethodResult<\"size\">\n    > => {\n      return signExecuteMethod(TestDynamicArrayByteVec32, this, \"size\", params);\n    },\n    empty: async (\n      params: TestDynamicArrayByteVec32Types.SignExecuteMethodParams<\"empty\">\n    ): Promise<\n      TestDynamicArrayByteVec32Types.SignExecuteMethodResult<\"empty\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicArrayByteVec32,\n        this,\n        \"empty\",\n        params\n      );\n    },\n  };\n\n  async multicall<Calls extends TestDynamicArrayByteVec32Types.MultiCallParams>(\n    calls: Calls\n  ): Promise<TestDynamicArrayByteVec32Types.MultiCallResults<Calls>>;\n  async multicall<\n    Callss extends TestDynamicArrayByteVec32Types.MultiCallParams[]\n  >(\n    callss: Narrow<Callss>\n  ): Promise<TestDynamicArrayByteVec32Types.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | TestDynamicArrayByteVec32Types.MultiCallParams\n      | TestDynamicArrayByteVec32Types.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      TestDynamicArrayByteVec32,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"TestDynamicArrayByteVec32\",\n  \"bytecode\": \"00074028407340af40cc40fc411a4128010002030112d3545eacd4160116000005311342277b160113202c170216001602160213202a620201000204014028d3083a358916004313202e0c2f1342267b16014313202f1342287b1600000517020c170316031602314c0e1600160300001601414c0316033f0216030d2a17034a2e0b0201000203011fd3694941c216004313202e0c2f1342267b16014313202f1342287b160016010001170216020b244c031600024a05160016023d00040201000202010dd354ad273416004313202e0c2f1342267b160016014402010002030118d34b2e25b7160116000005311342277b160113202c170216000c1602621600160213202a16004362440201000101010ed30041471116004313202e0c2f1342267b16004313202d02010000000103d3676c3c33140002\",\n  \"codeHash\": \"594861ab1850f3d1872ee687c87ddfeca8746bfe5b9ade07fabc4ca27c56661c\",\n  \"fieldsSig\": {\n    \"names\": [],\n    \"types\": [],\n    \"isMutable\": []\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"get\",\n      \"paramNames\": [\n        \"array\",\n        \"index\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"find\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"remove\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"push\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"removeAt\",\n      \"paramNames\": [\n        \"array\",\n        \"index\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"size\",\n      \"paramNames\": [\n        \"array\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"empty\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    }\n  ],\n  \"constants\": [\n    {\n      \"name\": \"IntByteLength\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"32\"\n      }\n    }\n  ],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCode\",\n      \"fields\": [\n        {\n          \"name\": \"InvalidArrayLength\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"550\"\n          }\n        },\n        {\n          \"name\": \"IndexOutOfBound\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"551\"\n          }\n        },\n        {\n          \"name\": \"InvalidByteVecLength\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"552\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as TestDynamicSortedArrayForU256ContractJson } from \"../utils/TestDynamicSortedArrayForU256.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace TestDynamicSortedArrayForU256Types {\n  export type State = Omit<ContractState<any>, \"fields\">;\n\n  export interface CallMethodTable {\n    get: {\n      params: CallContractParams<{ array: HexString; index: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    find: {\n      params: CallContractParams<{ array: HexString; value: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    remove: {\n      params: CallContractParams<{ array: HexString; value: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    push: {\n      params: CallContractParams<{ array: HexString; value: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    binarySearch: {\n      params: CallContractParams<{\n        array: HexString;\n        value: bigint;\n        left: bigint;\n        right: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    removeAt: {\n      params: CallContractParams<{ array: HexString; index: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    size: {\n      params: CallContractParams<{ array: HexString }>;\n      result: CallContractResult<bigint>;\n    };\n    empty: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    get: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        index: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    find: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    remove: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    push: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    binarySearch: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: bigint;\n        left: bigint;\n        right: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    removeAt: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        index: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    size: {\n      params: SignExecuteContractMethodParams<{ array: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    empty: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  TestDynamicSortedArrayForU256Instance,\n  {}\n> {\n  encodeFields() {\n    return encodeContractFields({}, this.contract.fieldsSig, types.AllStructs);\n  }\n\n  consts = {\n    IntByteLength: BigInt(\"32\"),\n    ErrorCode: {\n      InvalidArrayLength: BigInt(\"550\"),\n      IndexOutOfBound: BigInt(\"551\"),\n      InvalidByteVecLength: BigInt(\"552\"),\n    },\n  };\n\n  at(address: string): TestDynamicSortedArrayForU256Instance {\n    return new TestDynamicSortedArrayForU256Instance(address);\n  }\n\n  tests = {\n    get: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; index: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"get\", params, getContractByCodeHash);\n    },\n    find: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; value: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"find\", params, getContractByCodeHash);\n    },\n    remove: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; value: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"remove\", params, getContractByCodeHash);\n    },\n    push: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; value: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"push\", params, getContractByCodeHash);\n    },\n    binarySearch: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; value: bigint; left: bigint; right: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"binarySearch\", params, getContractByCodeHash);\n    },\n    removeAt: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<\n          never,\n          { array: HexString; index: bigint }\n        >,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"removeAt\", params, getContractByCodeHash);\n    },\n    size: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<never, { array: HexString }>,\n        \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<bigint>> => {\n      return testMethod(this, \"size\", params, getContractByCodeHash);\n    },\n    empty: async (\n      params?: Omit<\n        TestContractParamsWithoutMaps<never, never>,\n        \"args\" | \"initialFields\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(\n        this,\n        \"empty\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  stateForTest(initFields: {}, asset?: Asset, address?: string) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const TestDynamicSortedArrayForU256 = new Factory(\n  Contract.fromJson(\n    TestDynamicSortedArrayForU256ContractJson,\n    \"\",\n    \"86f2584a16af632c63b6c1ead625d4d53f11b9a3f2d465010085bd740be281d3\",\n    types.AllStructs\n  )\n);\nregisterContract(TestDynamicSortedArrayForU256);\n\n// Use this class to interact with the blockchain\nexport class TestDynamicSortedArrayForU256Instance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<TestDynamicSortedArrayForU256Types.State> {\n    return fetchContractState(TestDynamicSortedArrayForU256, this);\n  }\n\n  view = {\n    get: async (\n      params: TestDynamicSortedArrayForU256Types.CallMethodParams<\"get\">\n    ): Promise<TestDynamicSortedArrayForU256Types.CallMethodResult<\"get\">> => {\n      return callMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"get\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    find: async (\n      params: TestDynamicSortedArrayForU256Types.CallMethodParams<\"find\">\n    ): Promise<TestDynamicSortedArrayForU256Types.CallMethodResult<\"find\">> => {\n      return callMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"find\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    remove: async (\n      params: TestDynamicSortedArrayForU256Types.CallMethodParams<\"remove\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.CallMethodResult<\"remove\">\n    > => {\n      return callMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"remove\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    push: async (\n      params: TestDynamicSortedArrayForU256Types.CallMethodParams<\"push\">\n    ): Promise<TestDynamicSortedArrayForU256Types.CallMethodResult<\"push\">> => {\n      return callMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"push\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    binarySearch: async (\n      params: TestDynamicSortedArrayForU256Types.CallMethodParams<\"binarySearch\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.CallMethodResult<\"binarySearch\">\n    > => {\n      return callMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"binarySearch\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    removeAt: async (\n      params: TestDynamicSortedArrayForU256Types.CallMethodParams<\"removeAt\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.CallMethodResult<\"removeAt\">\n    > => {\n      return callMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"removeAt\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    size: async (\n      params: TestDynamicSortedArrayForU256Types.CallMethodParams<\"size\">\n    ): Promise<TestDynamicSortedArrayForU256Types.CallMethodResult<\"size\">> => {\n      return callMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"size\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    empty: async (\n      params?: TestDynamicSortedArrayForU256Types.CallMethodParams<\"empty\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.CallMethodResult<\"empty\">\n    > => {\n      return callMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"empty\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    get: async (\n      params: TestDynamicSortedArrayForU256Types.SignExecuteMethodParams<\"get\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.SignExecuteMethodResult<\"get\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"get\",\n        params\n      );\n    },\n    find: async (\n      params: TestDynamicSortedArrayForU256Types.SignExecuteMethodParams<\"find\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.SignExecuteMethodResult<\"find\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"find\",\n        params\n      );\n    },\n    remove: async (\n      params: TestDynamicSortedArrayForU256Types.SignExecuteMethodParams<\"remove\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.SignExecuteMethodResult<\"remove\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"remove\",\n        params\n      );\n    },\n    push: async (\n      params: TestDynamicSortedArrayForU256Types.SignExecuteMethodParams<\"push\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.SignExecuteMethodResult<\"push\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"push\",\n        params\n      );\n    },\n    binarySearch: async (\n      params: TestDynamicSortedArrayForU256Types.SignExecuteMethodParams<\"binarySearch\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.SignExecuteMethodResult<\"binarySearch\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"binarySearch\",\n        params\n      );\n    },\n    removeAt: async (\n      params: TestDynamicSortedArrayForU256Types.SignExecuteMethodParams<\"removeAt\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.SignExecuteMethodResult<\"removeAt\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"removeAt\",\n        params\n      );\n    },\n    size: async (\n      params: TestDynamicSortedArrayForU256Types.SignExecuteMethodParams<\"size\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.SignExecuteMethodResult<\"size\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"size\",\n        params\n      );\n    },\n    empty: async (\n      params: TestDynamicSortedArrayForU256Types.SignExecuteMethodParams<\"empty\">\n    ): Promise<\n      TestDynamicSortedArrayForU256Types.SignExecuteMethodResult<\"empty\">\n    > => {\n      return signExecuteMethod(\n        TestDynamicSortedArrayForU256,\n        this,\n        \"empty\",\n        params\n      );\n    },\n  };\n\n  async multicall<\n    Calls extends TestDynamicSortedArrayForU256Types.MultiCallParams\n  >(\n    calls: Calls\n  ): Promise<TestDynamicSortedArrayForU256Types.MultiCallResults<Calls>>;\n  async multicall<\n    Callss extends TestDynamicSortedArrayForU256Types.MultiCallParams[]\n  >(\n    callss: Narrow<Callss>\n  ): Promise<TestDynamicSortedArrayForU256Types.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | TestDynamicSortedArrayForU256Types.MultiCallParams\n      | TestDynamicSortedArrayForU256Types.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      TestDynamicSortedArrayForU256,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"TestDynamicSortedArrayForU256\",\n  \"bytecode\": \"0008402d4056408840a640f341234141414f010002040115d3cee93194160116000006311342277b160113202c170216001602160213202a62170316037102010002030114d33cd5e72916004313202e0c2f1342267b16004313202d1702160016010c1602000402010002030119d32cabd28216004313202e0c2f1342267b160016010001170216020b244c031600024a05160016023d00050201000202010ed31bc25d3416004313202e0c2f1342267b160016016b44020000040601402a16021603344c020b02160216032a0e2d17041600160400001705160516012f4c0316043f0216051601314c091600160116040d2a16030004024a061600160116021604000402010002030118d34b2e25b7160116000006311342277b160113202c170216000c1602621600160213202a16004362440201000101010ed30041471116004313202e0c2f1342267b16004313202d02010000000103d3676c3c33140002\",\n  \"codeHash\": \"86f2584a16af632c63b6c1ead625d4d53f11b9a3f2d465010085bd740be281d3\",\n  \"fieldsSig\": {\n    \"names\": [],\n    \"types\": [],\n    \"isMutable\": []\n  },\n  \"eventsSig\": [],\n  \"functions\": [\n    {\n      \"name\": \"get\",\n      \"paramNames\": [\n        \"array\",\n        \"index\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"find\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"remove\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"push\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"binarySearch\",\n      \"paramNames\": [\n        \"array\",\n        \"value\",\n        \"left\",\n        \"right\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"removeAt\",\n      \"paramNames\": [\n        \"array\",\n        \"index\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"size\",\n      \"paramNames\": [\n        \"array\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"empty\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    }\n  ],\n  \"constants\": [\n    {\n      \"name\": \"IntByteLength\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"32\"\n      }\n    }\n  ],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCode\",\n      \"fields\": [\n        {\n          \"name\": \"InvalidArrayLength\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"550\"\n          }\n        },\n        {\n          \"name\": \"IndexOutOfBound\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"551\"\n          }\n        },\n        {\n          \"name\": \"InvalidByteVecLength\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"552\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as TestMerkleProofContractJson } from \"../utils/TestMerkleProof.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\n\n// Custom types for the contract\nexport namespace TestMerkleProofTypes {\n  export type Fields = {\n    merkleRoot: HexString;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export type UpdateRootEvent = ContractEvent<{\n    newMerkleRoot: HexString;\n    updatedBy: Address;\n  }>;\n\n  export interface CallMethodTable {\n    getMerkleRoot: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    updateRoot: {\n      params: CallContractParams<{ newMerkleRoot: HexString }>;\n      result: CallContractResult<null>;\n    };\n    verify: {\n      params: CallContractParams<{ proof: HexString; dataHash: HexString }>;\n      result: CallContractResult<boolean>;\n    };\n    hashPair: {\n      params: CallContractParams<{ a: HexString; b: HexString }>;\n      result: CallContractResult<HexString>;\n    };\n    hash: {\n      params: CallContractParams<{ dataToHash: HexString }>;\n      result: CallContractResult<HexString>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    getMerkleRoot: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    updateRoot: {\n      params: SignExecuteContractMethodParams<{ newMerkleRoot: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    verify: {\n      params: SignExecuteContractMethodParams<{\n        proof: HexString;\n        dataHash: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    hashPair: {\n      params: SignExecuteContractMethodParams<{ a: HexString; b: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    hash: {\n      params: SignExecuteContractMethodParams<{ dataToHash: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n}\n\nclass Factory extends ContractFactory<\n  TestMerkleProofInstance,\n  TestMerkleProofTypes.Fields\n> {\n  encodeFields(fields: TestMerkleProofTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  eventIndex = { UpdateRoot: 0 };\n  consts = {\n    MerkleProofErrorCodes: {\n      InvalidProofSize: BigInt(\"11001\"),\n      InvalidDataHash: BigInt(\"11002\"),\n      InvalidMerkleRoot: BigInt(\"11003\"),\n    },\n  };\n\n  at(address: string): TestMerkleProofInstance {\n    return new TestMerkleProofInstance(address);\n  }\n\n  tests = {\n    getMerkleRoot: async (\n      params: Omit<\n        TestContractParamsWithoutMaps<TestMerkleProofTypes.Fields, never>,\n        \"args\"\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"getMerkleRoot\", params, getContractByCodeHash);\n    },\n    updateRoot: async (\n      params: TestContractParamsWithoutMaps<\n        TestMerkleProofTypes.Fields,\n        { newMerkleRoot: HexString }\n      >\n    ): Promise<TestContractResultWithoutMaps<null>> => {\n      return testMethod(this, \"updateRoot\", params, getContractByCodeHash);\n    },\n    verify: async (\n      params: TestContractParamsWithoutMaps<\n        TestMerkleProofTypes.Fields,\n        { proof: HexString; dataHash: HexString }\n      >\n    ): Promise<TestContractResultWithoutMaps<boolean>> => {\n      return testMethod(this, \"verify\", params, getContractByCodeHash);\n    },\n    hashPair: async (\n      params: TestContractParamsWithoutMaps<\n        TestMerkleProofTypes.Fields,\n        { a: HexString; b: HexString }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"hashPair\", params, getContractByCodeHash);\n    },\n    hash: async (\n      params: TestContractParamsWithoutMaps<\n        TestMerkleProofTypes.Fields,\n        { dataToHash: HexString }\n      >\n    ): Promise<TestContractResultWithoutMaps<HexString>> => {\n      return testMethod(this, \"hash\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: TestMerkleProofTypes.Fields,\n    asset?: Asset,\n    address?: string\n  ) {\n    return this.stateForTest_(initFields, asset, address, undefined);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const TestMerkleProof = new Factory(\n  Contract.fromJson(\n    TestMerkleProofContractJson,\n    \"\",\n    \"a6d0eadb4c4fbe25c0155c0a2e31ba6cc7a993cd27b3f708c6af418af44a7c57\",\n    types.AllStructs\n  )\n);\nregisterContract(TestMerkleProof);\n\n// Use this class to interact with the blockchain\nexport class TestMerkleProofInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  async fetchState(): Promise<TestMerkleProofTypes.State> {\n    return fetchContractState(TestMerkleProof, this);\n  }\n\n  async getContractEventsCurrentCount(): Promise<number> {\n    return getContractEventsCurrentCount(this.address);\n  }\n\n  subscribeUpdateRootEvent(\n    options: EventSubscribeOptions<TestMerkleProofTypes.UpdateRootEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      TestMerkleProof.contract,\n      this,\n      options,\n      \"UpdateRoot\",\n      fromCount\n    );\n  }\n\n  view = {\n    getMerkleRoot: async (\n      params?: TestMerkleProofTypes.CallMethodParams<\"getMerkleRoot\">\n    ): Promise<TestMerkleProofTypes.CallMethodResult<\"getMerkleRoot\">> => {\n      return callMethod(\n        TestMerkleProof,\n        this,\n        \"getMerkleRoot\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    updateRoot: async (\n      params: TestMerkleProofTypes.CallMethodParams<\"updateRoot\">\n    ): Promise<TestMerkleProofTypes.CallMethodResult<\"updateRoot\">> => {\n      return callMethod(\n        TestMerkleProof,\n        this,\n        \"updateRoot\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    verify: async (\n      params: TestMerkleProofTypes.CallMethodParams<\"verify\">\n    ): Promise<TestMerkleProofTypes.CallMethodResult<\"verify\">> => {\n      return callMethod(\n        TestMerkleProof,\n        this,\n        \"verify\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    hashPair: async (\n      params: TestMerkleProofTypes.CallMethodParams<\"hashPair\">\n    ): Promise<TestMerkleProofTypes.CallMethodResult<\"hashPair\">> => {\n      return callMethod(\n        TestMerkleProof,\n        this,\n        \"hashPair\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    hash: async (\n      params: TestMerkleProofTypes.CallMethodParams<\"hash\">\n    ): Promise<TestMerkleProofTypes.CallMethodResult<\"hash\">> => {\n      return callMethod(\n        TestMerkleProof,\n        this,\n        \"hash\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    getMerkleRoot: async (\n      params: TestMerkleProofTypes.SignExecuteMethodParams<\"getMerkleRoot\">\n    ): Promise<\n      TestMerkleProofTypes.SignExecuteMethodResult<\"getMerkleRoot\">\n    > => {\n      return signExecuteMethod(TestMerkleProof, this, \"getMerkleRoot\", params);\n    },\n    updateRoot: async (\n      params: TestMerkleProofTypes.SignExecuteMethodParams<\"updateRoot\">\n    ): Promise<TestMerkleProofTypes.SignExecuteMethodResult<\"updateRoot\">> => {\n      return signExecuteMethod(TestMerkleProof, this, \"updateRoot\", params);\n    },\n    verify: async (\n      params: TestMerkleProofTypes.SignExecuteMethodParams<\"verify\">\n    ): Promise<TestMerkleProofTypes.SignExecuteMethodResult<\"verify\">> => {\n      return signExecuteMethod(TestMerkleProof, this, \"verify\", params);\n    },\n    hashPair: async (\n      params: TestMerkleProofTypes.SignExecuteMethodParams<\"hashPair\">\n    ): Promise<TestMerkleProofTypes.SignExecuteMethodResult<\"hashPair\">> => {\n      return signExecuteMethod(TestMerkleProof, this, \"hashPair\", params);\n    },\n    hash: async (\n      params: TestMerkleProofTypes.SignExecuteMethodParams<\"hash\">\n    ): Promise<TestMerkleProofTypes.SignExecuteMethodResult<\"hash\">> => {\n      return signExecuteMethod(TestMerkleProof, this, \"hash\", params);\n    },\n  };\n\n  async multicall<Calls extends TestMerkleProofTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<TestMerkleProofTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends TestMerkleProofTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<TestMerkleProofTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | TestMerkleProofTypes.MultiCallParams\n      | TestMerkleProofTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      TestMerkleProof,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"TestMerkleProof\",\n  \"bytecode\": \"01050e4027407b409b40a5010000000103d393f264e8a0000200000101000c16004313202f136afb7b1600a10005a000b45f0000020601402e16014313202f136afa7b160117021600431703160313202e0c2f136af97b0c170416041603314c1016001604160413202a6217051605160200031702160413202a17044a2c160271a000712f02000002020110160071160171314c05160016014400044a04160116004400040200000101010316004f02\",\n  \"codeHash\": \"a6d0eadb4c4fbe25c0155c0a2e31ba6cc7a993cd27b3f708c6af418af44a7c57\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"merkleRoot\"\n    ],\n    \"types\": [\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      true\n    ]\n  },\n  \"eventsSig\": [\n    {\n      \"name\": \"UpdateRoot\",\n      \"fieldNames\": [\n        \"newMerkleRoot\",\n        \"updatedBy\"\n      ],\n      \"fieldTypes\": [\n        \"ByteVec\",\n        \"Address\"\n      ]\n    }\n  ],\n  \"functions\": [\n    {\n      \"name\": \"getMerkleRoot\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"updateRoot\",\n      \"paramNames\": [\n        \"newMerkleRoot\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"verify\",\n      \"paramNames\": [\n        \"proof\",\n        \"dataHash\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"hashPair\",\n      \"paramNames\": [\n        \"a\",\n        \"b\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"hash\",\n      \"paramNames\": [\n        \"dataToHash\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    }\n  ],\n  \"constants\": [],\n  \"enums\": [\n    {\n      \"name\": \"MerkleProofErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"InvalidProofSize\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11001\"\n          }\n        },\n        {\n          \"name\": \"InvalidDataHash\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11002\"\n          }\n        },\n        {\n          \"name\": \"InvalidMerkleRoot\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11003\"\n          }\n        }\n      ]\n    }\n  ]\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as XAlphStakeVaultContractJson } from \"../XAlphStakeVault.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\nimport { RalphMap } from \"@alephium/web3\";\n\n// Custom types for the contract\nexport namespace XAlphStakeVaultTypes {\n  export type Fields = {\n    stakeTokenId: HexString;\n    maxConnectedDapps: bigint;\n    merkleRoot: HexString;\n    totalStakedAmount: bigint;\n    owner: Address;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export type UpdateRootEvent = ContractEvent<{\n    newMerkleRoot: HexString;\n    updatedBy: Address;\n  }>;\n  export type StakedEvent = ContractEvent<{ staker: Address; amount: bigint }>;\n  export type UnstakedEvent = ContractEvent<{\n    staker: Address;\n    amount: bigint;\n  }>;\n\n  export interface CallMethodTable {\n    get: {\n      params: CallContractParams<{ array: HexString; index: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    find: {\n      params: CallContractParams<{ array: HexString; value: HexString }>;\n      result: CallContractResult<bigint>;\n    };\n    remove: {\n      params: CallContractParams<{ array: HexString; value: HexString }>;\n      result: CallContractResult<HexString>;\n    };\n    push: {\n      params: CallContractParams<{ array: HexString; value: HexString }>;\n      result: CallContractResult<HexString>;\n    };\n    removeAt: {\n      params: CallContractParams<{ array: HexString; index: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    size: {\n      params: CallContractParams<{ array: HexString }>;\n      result: CallContractResult<bigint>;\n    };\n    empty: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getMerkleRoot: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    updateRoot: {\n      params: CallContractParams<{ newMerkleRoot: HexString }>;\n      result: CallContractResult<null>;\n    };\n    verify: {\n      params: CallContractParams<{ proof: HexString; dataHash: HexString }>;\n      result: CallContractResult<boolean>;\n    };\n    hashPair: {\n      params: CallContractParams<{ a: HexString; b: HexString }>;\n      result: CallContractResult<HexString>;\n    };\n    hash: {\n      params: CallContractParams<{ dataToHash: HexString }>;\n      result: CallContractResult<HexString>;\n    };\n    getStakeTokenId: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getUserStakingInfo: {\n      params: CallContractParams<{ user: Address }>;\n      result: CallContractResult<types.UserStakingInfo>;\n    };\n    isStaking: {\n      params: CallContractParams<{ user: Address }>;\n      result: CallContractResult<boolean>;\n    };\n    stake: {\n      params: CallContractParams<{ amount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    unstake: {\n      params: CallContractParams<{ amount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    connectToDapp: {\n      params: CallContractParams<{\n        contractId: HexString;\n        merkleProof: HexString;\n      }>;\n      result: CallContractResult<null>;\n    };\n    disconnectFromDapp: {\n      params: CallContractParams<{ contractId: HexString }>;\n      result: CallContractResult<null>;\n    };\n    getWeight: {\n      params: CallContractParams<{ user: Address }>;\n      result: CallContractResult<bigint>;\n    };\n    updateDappTemplatesWhitelistMerkleRoot: {\n      params: CallContractParams<{ newMerkleRoot: HexString }>;\n      result: CallContractResult<null>;\n    };\n    updateOwner: {\n      params: CallContractParams<{ newOwner: Address }>;\n      result: CallContractResult<null>;\n    };\n    verifyDappTemplatesWhiteListed: {\n      params: CallContractParams<{ proof: HexString; contractId: HexString }>;\n      result: CallContractResult<boolean>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    get: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        index: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    find: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    remove: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    push: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    removeAt: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        index: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    size: {\n      params: SignExecuteContractMethodParams<{ array: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    empty: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getMerkleRoot: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    updateRoot: {\n      params: SignExecuteContractMethodParams<{ newMerkleRoot: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    verify: {\n      params: SignExecuteContractMethodParams<{\n        proof: HexString;\n        dataHash: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    hashPair: {\n      params: SignExecuteContractMethodParams<{ a: HexString; b: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    hash: {\n      params: SignExecuteContractMethodParams<{ dataToHash: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getStakeTokenId: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getUserStakingInfo: {\n      params: SignExecuteContractMethodParams<{ user: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    isStaking: {\n      params: SignExecuteContractMethodParams<{ user: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    stake: {\n      params: SignExecuteContractMethodParams<{ amount: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    unstake: {\n      params: SignExecuteContractMethodParams<{ amount: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    connectToDapp: {\n      params: SignExecuteContractMethodParams<{\n        contractId: HexString;\n        merkleProof: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    disconnectFromDapp: {\n      params: SignExecuteContractMethodParams<{ contractId: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getWeight: {\n      params: SignExecuteContractMethodParams<{ user: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    updateDappTemplatesWhitelistMerkleRoot: {\n      params: SignExecuteContractMethodParams<{ newMerkleRoot: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    updateOwner: {\n      params: SignExecuteContractMethodParams<{ newOwner: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    verifyDappTemplatesWhiteListed: {\n      params: SignExecuteContractMethodParams<{\n        proof: HexString;\n        contractId: HexString;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n\n  export type Maps = { userStakingInfo?: Map<Address, types.UserStakingInfo> };\n}\n\nclass Factory extends ContractFactory<\n  XAlphStakeVaultInstance,\n  XAlphStakeVaultTypes.Fields\n> {\n  encodeFields(fields: XAlphStakeVaultTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  eventIndex = { UpdateRoot: 0, Staked: 1, Unstaked: 2 };\n  consts = {\n    IntByteLength: BigInt(\"32\"),\n    WEIGHT_SCALING_FACTOR: BigInt(\"1000000000000000000\"),\n    ErrorCode: {\n      InvalidArrayLength: BigInt(\"550\"),\n      IndexOutOfBound: BigInt(\"551\"),\n      InvalidByteVecLength: BigInt(\"552\"),\n    },\n    MerkleProofErrorCodes: {\n      InvalidProofSize: BigInt(\"11001\"),\n      InvalidDataHash: BigInt(\"11002\"),\n      InvalidMerkleRoot: BigInt(\"11003\"),\n    },\n    ErrorCodes: {\n      NotOwner: BigInt(\"300\"),\n      AssetAddressCallerOnly: BigInt(\"301\"),\n      NoStakingInfo: BigInt(\"302\"),\n      InsufficientStakedAmount: BigInt(\"303\"),\n      InvalidStakedAmount: BigInt(\"304\"),\n      InvalidUnstakedAmount: BigInt(\"305\"),\n      MaxConnectedDappsReached: BigInt(\"306\"),\n      DappAlreadyConnected: BigInt(\"307\"),\n      DappNotConnected: BigInt(\"308\"),\n      DappNotAllowed: BigInt(\"309\"),\n    },\n  };\n\n  at(address: string): XAlphStakeVaultInstance {\n    return new XAlphStakeVaultInstance(address);\n  }\n\n  tests = {\n    get: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { array: HexString; index: bigint },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"get\", params, getContractByCodeHash);\n    },\n    find: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { array: HexString; value: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"find\", params, getContractByCodeHash);\n    },\n    remove: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { array: HexString; value: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"remove\", params, getContractByCodeHash);\n    },\n    push: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { array: HexString; value: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"push\", params, getContractByCodeHash);\n    },\n    removeAt: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { array: HexString; index: bigint },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"removeAt\", params, getContractByCodeHash);\n    },\n    size: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { array: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"size\", params, getContractByCodeHash);\n    },\n    empty: async (\n      params: Omit<\n        TestContractParams<\n          XAlphStakeVaultTypes.Fields,\n          never,\n          XAlphStakeVaultTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResult<HexString, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"empty\", params, getContractByCodeHash);\n    },\n    getMerkleRoot: async (\n      params: Omit<\n        TestContractParams<\n          XAlphStakeVaultTypes.Fields,\n          never,\n          XAlphStakeVaultTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResult<HexString, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"getMerkleRoot\", params, getContractByCodeHash);\n    },\n    updateRoot: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { newMerkleRoot: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"updateRoot\", params, getContractByCodeHash);\n    },\n    verify: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { proof: HexString; dataHash: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<boolean, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"verify\", params, getContractByCodeHash);\n    },\n    hashPair: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { a: HexString; b: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"hashPair\", params, getContractByCodeHash);\n    },\n    hash: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { dataToHash: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"hash\", params, getContractByCodeHash);\n    },\n    getStakeTokenId: async (\n      params: Omit<\n        TestContractParams<\n          XAlphStakeVaultTypes.Fields,\n          never,\n          XAlphStakeVaultTypes.Maps\n        >,\n        \"args\"\n      >\n    ): Promise<TestContractResult<HexString, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"getStakeTokenId\", params, getContractByCodeHash);\n    },\n    getUserStakingInfo: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { user: Address },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<\n      TestContractResult<types.UserStakingInfo, XAlphStakeVaultTypes.Maps>\n    > => {\n      return testMethod(\n        this,\n        \"getUserStakingInfo\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    isStaking: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { user: Address },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<boolean, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"isStaking\", params, getContractByCodeHash);\n    },\n    stake: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { amount: bigint },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"stake\", params, getContractByCodeHash);\n    },\n    unstake: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { amount: bigint },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"unstake\", params, getContractByCodeHash);\n    },\n    connectToDapp: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { contractId: HexString; merkleProof: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"connectToDapp\", params, getContractByCodeHash);\n    },\n    disconnectFromDapp: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { contractId: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(\n        this,\n        \"disconnectFromDapp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getWeight: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { user: Address },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"getWeight\", params, getContractByCodeHash);\n    },\n    updateDappTemplatesWhitelistMerkleRoot: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { newMerkleRoot: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(\n        this,\n        \"updateDappTemplatesWhitelistMerkleRoot\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateOwner: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { newOwner: Address },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<null, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(this, \"updateOwner\", params, getContractByCodeHash);\n    },\n    verifyDappTemplatesWhiteListed: async (\n      params: TestContractParams<\n        XAlphStakeVaultTypes.Fields,\n        { proof: HexString; contractId: HexString },\n        XAlphStakeVaultTypes.Maps\n      >\n    ): Promise<TestContractResult<boolean, XAlphStakeVaultTypes.Maps>> => {\n      return testMethod(\n        this,\n        \"verifyDappTemplatesWhiteListed\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  stateForTest(\n    initFields: XAlphStakeVaultTypes.Fields,\n    asset?: Asset,\n    address?: string,\n    maps?: XAlphStakeVaultTypes.Maps\n  ) {\n    return this.stateForTest_(initFields, asset, address, maps);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const XAlphStakeVault = new Factory(\n  Contract.fromJson(\n    XAlphStakeVaultContractJson,\n    \"=66-2+29=1-3=1+22=1-1+4=1+d=2-2+43=2-2+92=2-2+a9=2-2+c0=2-2+d9=1166-2+61=323-1+b=34+7a7e0214696e73657274206174206d617020706174683a2000=55-1+d=297-1+c=38+7a7e021472656d6f7665206174206d617020706174683a2000=976\",\n    \"5a98904451536bfc5851ac53658d832b096d820da66892272b361692d7a31790\",\n    types.AllStructs\n  )\n);\nregisterContract(XAlphStakeVault);\n\n// Use this class to interact with the blockchain\nexport class XAlphStakeVaultInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  maps = {\n    userStakingInfo: new RalphMap<Address, types.UserStakingInfo>(\n      XAlphStakeVault.contract,\n      this.contractId,\n      \"userStakingInfo\"\n    ),\n  };\n\n  async fetchState(): Promise<XAlphStakeVaultTypes.State> {\n    return fetchContractState(XAlphStakeVault, this);\n  }\n\n  async getContractEventsCurrentCount(): Promise<number> {\n    return getContractEventsCurrentCount(this.address);\n  }\n\n  subscribeUpdateRootEvent(\n    options: EventSubscribeOptions<XAlphStakeVaultTypes.UpdateRootEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      XAlphStakeVault.contract,\n      this,\n      options,\n      \"UpdateRoot\",\n      fromCount\n    );\n  }\n\n  subscribeStakedEvent(\n    options: EventSubscribeOptions<XAlphStakeVaultTypes.StakedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      XAlphStakeVault.contract,\n      this,\n      options,\n      \"Staked\",\n      fromCount\n    );\n  }\n\n  subscribeUnstakedEvent(\n    options: EventSubscribeOptions<XAlphStakeVaultTypes.UnstakedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      XAlphStakeVault.contract,\n      this,\n      options,\n      \"Unstaked\",\n      fromCount\n    );\n  }\n\n  subscribeAllEvents(\n    options: EventSubscribeOptions<\n      | XAlphStakeVaultTypes.UpdateRootEvent\n      | XAlphStakeVaultTypes.StakedEvent\n      | XAlphStakeVaultTypes.UnstakedEvent\n    >,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvents(\n      XAlphStakeVault.contract,\n      this,\n      options,\n      fromCount\n    );\n  }\n\n  view = {\n    get: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"get\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"get\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"get\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    find: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"find\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"find\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"find\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    remove: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"remove\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"remove\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"remove\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    push: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"push\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"push\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"push\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    removeAt: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"removeAt\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"removeAt\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"removeAt\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    size: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"size\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"size\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"size\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    empty: async (\n      params?: XAlphStakeVaultTypes.CallMethodParams<\"empty\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"empty\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"empty\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getMerkleRoot: async (\n      params?: XAlphStakeVaultTypes.CallMethodParams<\"getMerkleRoot\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"getMerkleRoot\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"getMerkleRoot\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    updateRoot: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"updateRoot\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"updateRoot\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"updateRoot\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    verify: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"verify\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"verify\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"verify\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    hashPair: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"hashPair\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"hashPair\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"hashPair\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    hash: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"hash\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"hash\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"hash\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getStakeTokenId: async (\n      params?: XAlphStakeVaultTypes.CallMethodParams<\"getStakeTokenId\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"getStakeTokenId\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"getStakeTokenId\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getUserStakingInfo: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"getUserStakingInfo\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"getUserStakingInfo\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"getUserStakingInfo\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    isStaking: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"isStaking\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"isStaking\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"isStaking\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    stake: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"stake\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"stake\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"stake\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    unstake: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"unstake\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"unstake\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"unstake\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    connectToDapp: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"connectToDapp\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"connectToDapp\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"connectToDapp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    disconnectFromDapp: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"disconnectFromDapp\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"disconnectFromDapp\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"disconnectFromDapp\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getWeight: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"getWeight\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"getWeight\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"getWeight\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateDappTemplatesWhitelistMerkleRoot: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"updateDappTemplatesWhitelistMerkleRoot\">\n    ): Promise<\n      XAlphStakeVaultTypes.CallMethodResult<\"updateDappTemplatesWhitelistMerkleRoot\">\n    > => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"updateDappTemplatesWhitelistMerkleRoot\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    updateOwner: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"updateOwner\">\n    ): Promise<XAlphStakeVaultTypes.CallMethodResult<\"updateOwner\">> => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"updateOwner\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    verifyDappTemplatesWhiteListed: async (\n      params: XAlphStakeVaultTypes.CallMethodParams<\"verifyDappTemplatesWhiteListed\">\n    ): Promise<\n      XAlphStakeVaultTypes.CallMethodResult<\"verifyDappTemplatesWhiteListed\">\n    > => {\n      return callMethod(\n        XAlphStakeVault,\n        this,\n        \"verifyDappTemplatesWhiteListed\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    get: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"get\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"get\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"get\", params);\n    },\n    find: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"find\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"find\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"find\", params);\n    },\n    remove: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"remove\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"remove\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"remove\", params);\n    },\n    push: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"push\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"push\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"push\", params);\n    },\n    removeAt: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"removeAt\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"removeAt\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"removeAt\", params);\n    },\n    size: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"size\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"size\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"size\", params);\n    },\n    empty: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"empty\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"empty\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"empty\", params);\n    },\n    getMerkleRoot: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"getMerkleRoot\">\n    ): Promise<\n      XAlphStakeVaultTypes.SignExecuteMethodResult<\"getMerkleRoot\">\n    > => {\n      return signExecuteMethod(XAlphStakeVault, this, \"getMerkleRoot\", params);\n    },\n    updateRoot: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"updateRoot\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"updateRoot\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"updateRoot\", params);\n    },\n    verify: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"verify\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"verify\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"verify\", params);\n    },\n    hashPair: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"hashPair\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"hashPair\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"hashPair\", params);\n    },\n    hash: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"hash\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"hash\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"hash\", params);\n    },\n    getStakeTokenId: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"getStakeTokenId\">\n    ): Promise<\n      XAlphStakeVaultTypes.SignExecuteMethodResult<\"getStakeTokenId\">\n    > => {\n      return signExecuteMethod(\n        XAlphStakeVault,\n        this,\n        \"getStakeTokenId\",\n        params\n      );\n    },\n    getUserStakingInfo: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"getUserStakingInfo\">\n    ): Promise<\n      XAlphStakeVaultTypes.SignExecuteMethodResult<\"getUserStakingInfo\">\n    > => {\n      return signExecuteMethod(\n        XAlphStakeVault,\n        this,\n        \"getUserStakingInfo\",\n        params\n      );\n    },\n    isStaking: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"isStaking\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"isStaking\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"isStaking\", params);\n    },\n    stake: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"stake\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"stake\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"stake\", params);\n    },\n    unstake: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"unstake\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"unstake\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"unstake\", params);\n    },\n    connectToDapp: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"connectToDapp\">\n    ): Promise<\n      XAlphStakeVaultTypes.SignExecuteMethodResult<\"connectToDapp\">\n    > => {\n      return signExecuteMethod(XAlphStakeVault, this, \"connectToDapp\", params);\n    },\n    disconnectFromDapp: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"disconnectFromDapp\">\n    ): Promise<\n      XAlphStakeVaultTypes.SignExecuteMethodResult<\"disconnectFromDapp\">\n    > => {\n      return signExecuteMethod(\n        XAlphStakeVault,\n        this,\n        \"disconnectFromDapp\",\n        params\n      );\n    },\n    getWeight: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"getWeight\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"getWeight\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"getWeight\", params);\n    },\n    updateDappTemplatesWhitelistMerkleRoot: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"updateDappTemplatesWhitelistMerkleRoot\">\n    ): Promise<\n      XAlphStakeVaultTypes.SignExecuteMethodResult<\"updateDappTemplatesWhitelistMerkleRoot\">\n    > => {\n      return signExecuteMethod(\n        XAlphStakeVault,\n        this,\n        \"updateDappTemplatesWhitelistMerkleRoot\",\n        params\n      );\n    },\n    updateOwner: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"updateOwner\">\n    ): Promise<XAlphStakeVaultTypes.SignExecuteMethodResult<\"updateOwner\">> => {\n      return signExecuteMethod(XAlphStakeVault, this, \"updateOwner\", params);\n    },\n    verifyDappTemplatesWhiteListed: async (\n      params: XAlphStakeVaultTypes.SignExecuteMethodParams<\"verifyDappTemplatesWhiteListed\">\n    ): Promise<\n      XAlphStakeVaultTypes.SignExecuteMethodResult<\"verifyDappTemplatesWhiteListed\">\n    > => {\n      return signExecuteMethod(\n        XAlphStakeVault,\n        this,\n        \"verifyDappTemplatesWhiteListed\",\n        params\n      );\n    },\n  };\n\n  async multicall<Calls extends XAlphStakeVaultTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<XAlphStakeVaultTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends XAlphStakeVaultTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<XAlphStakeVaultTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | XAlphStakeVaultTypes.MultiCallParams\n      | XAlphStakeVaultTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      XAlphStakeVault,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"XAlphStakeVault\",\n  \"bytecode\": \"05174028407340af40cc40fc411a41284136414f41a341c341cd41db42234241431043f0448b451145604577458e45a7010002030112d3545eacd4160116000005311342277b160113202c170216001602160213202a620201000204014028d3083a358916004313202e0c2f1342267b16014313202f1342287b1600000517020c170316031602314c0e1600160300001601414c0316033f0216030d2a17034a2e0b0201000203011fd3694941c216004313202e0c2f1342267b16014313202f1342287b160016010001170216020b244c031600024a05160016023d00040201000202010dd354ad273416004313202e0c2f1342267b160016014402010002030118d34b2e25b7160116000005311342277b160113202c170216000c1602621600160213202a16004362440201000101010ed30041471116004313202e0c2f1342267b16004313202d02010000000103d3676c3c33140002010000000103d393f264e8a0000200000101000c16004313202f136afb7b1600a10005a000b45f0000020601402e16014313202f136afa7b160117021600431703160313202e0c2f136af97b0c170416041603314c1016001604160413202a62170516051602000a1702160413202a17044a2c160271a000712f02000002020110160071160171314c051600160144000b4a041601160044000b0200000101010316004f02010000000103d3b299f80ace000201000102021ed3f87904e4140a5f5f6d61705f5f305f5f16004744cbc5194c040c0006024a110c0d0d140a5f5f6d61705f5f305f5f16004744cb1701160101010d0d0d1601010102010001010108d32b875d11140a5f5f6d61705f5f305f5f16004744cbc5020101010800405fd3d63c543cb4170116014813412d7b16000c331341307b1601ce001600ac140a5f5f6d61705f5f305f5f16014744cbc54c40370c0d0d140a5f5f6d61705f5f305f5f16014744cb1707160701010d0d0d1607010117031702160216002a0c0e0c140a5f5f6d61705f5f305f5f16014744cb01021603000517040c170516051604314c0f1603160500001706160116000e0c1606d4926b380b16050d2a17054a2d4a09ca140a5f5f6d61705f5f305f5f16014744b116000006d20102a00116002aa10106160116005f0102010900406bd310bd129fb4170116014813412d7b140a5f5f6d61705f5f305f5f16014744cbc513412e7b16000c331341317b0c0d0d140a5f5f6d61705f5f305f5f16014744cb1708160801010d0d0d1608010117031702160216003413412f7b160216002b17041603000517050c170616061605314c0f1603160600001707160116000e0c1607d465b06cae16060d2a17064a2d16040c2f4c0aca0d0c140a5f5f6d61705f5f305f5f16014744cb01034a0a16040c0e0c140a5f5f6d61705f5f305f5f16014744cb01021601ce001600aba00116002ba10107160116005f01000206004045d3c5f91cb4b4170216024813412d7b1601160000161341357b140a5f5f6d61705f5f305f5f16024744cbc513412e7b0c0d0d140a5f5f6d61705f5f305f5f16024744cb1705160501010d0d0d160501011704170316040005ce01311341327b1604160000010b241341337b160216030e0c1600d4926b380b1604160000030d0e0c140a5f5f6d61705f5f305f5f16024744cb01020100010500403ad3b6398887b4170116014813412d7b140a5f5f6d61705f5f305f5f16014744cbc513412e7b0c0d0d140a5f5f6d61705f5f305f5f16014744cb1704160401010d0d0d16040101170317021603160000010b251341347b160116020e0c1600d465b06cae1603160000020d0e0c140a5f5f6d61705f5f305f5f16014744cb010201000101011fd3e5725392140a5f5f6d61705f5f305f5f16004744cbc5197a4b0418a0010c2f4c020c020c0d0d140a5f5f6d61705f5f305f5f16004744cb010113c40de0b6b3a76400002ca0012d02010001010008d3e5bf78dcb4a0024513412c7b16000008010001010008d34f58efe6b4a0024513412c7b1600a102010002030109d3af1ed9dd1601b9170216001602000b000902\",\n  \"codeHash\": \"06a6db7355978ed027d5a0d36573bf54cef4a67d503b270b8ede5870b3117c7b\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"stakeTokenId\",\n      \"maxConnectedDapps\",\n      \"merkleRoot\",\n      \"totalStakedAmount\",\n      \"owner\"\n    ],\n    \"types\": [\n      \"ByteVec\",\n      \"U256\",\n      \"ByteVec\",\n      \"U256\",\n      \"Address\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      true,\n      true,\n      true\n    ]\n  },\n  \"eventsSig\": [\n    {\n      \"name\": \"UpdateRoot\",\n      \"fieldNames\": [\n        \"newMerkleRoot\",\n        \"updatedBy\"\n      ],\n      \"fieldTypes\": [\n        \"ByteVec\",\n        \"Address\"\n      ]\n    },\n    {\n      \"name\": \"Staked\",\n      \"fieldNames\": [\n        \"staker\",\n        \"amount\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"Unstaked\",\n      \"fieldNames\": [\n        \"staker\",\n        \"amount\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\"\n      ]\n    }\n  ],\n  \"functions\": [\n    {\n      \"name\": \"get\",\n      \"paramNames\": [\n        \"array\",\n        \"index\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"find\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"remove\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"push\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"removeAt\",\n      \"paramNames\": [\n        \"array\",\n        \"index\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"size\",\n      \"paramNames\": [\n        \"array\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"empty\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getMerkleRoot\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"updateRoot\",\n      \"paramNames\": [\n        \"newMerkleRoot\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"verify\",\n      \"paramNames\": [\n        \"proof\",\n        \"dataHash\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"hashPair\",\n      \"paramNames\": [\n        \"a\",\n        \"b\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"hash\",\n      \"paramNames\": [\n        \"dataToHash\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getStakeTokenId\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getUserStakingInfo\",\n      \"paramNames\": [\n        \"user\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"UserStakingInfo\"\n      ]\n    },\n    {\n      \"name\": \"isStaking\",\n      \"paramNames\": [\n        \"user\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"Bool\"\n      ]\n    },\n    {\n      \"name\": \"stake\",\n      \"paramNames\": [\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"unstake\",\n      \"paramNames\": [\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"connectToDapp\",\n      \"paramNames\": [\n        \"contractId\",\n        \"merkleProof\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"disconnectFromDapp\",\n      \"paramNames\": [\n        \"contractId\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"getWeight\",\n      \"paramNames\": [\n        \"user\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"updateDappTemplatesWhitelistMerkleRoot\",\n      \"paramNames\": [\n        \"newMerkleRoot\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"updateOwner\",\n      \"paramNames\": [\n        \"newOwner\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"verifyDappTemplatesWhiteListed\",\n      \"paramNames\": [\n        \"proof\",\n        \"contractId\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"Bool\"\n      ]\n    }\n  ],\n  \"constants\": [\n    {\n      \"name\": \"IntByteLength\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"32\"\n      }\n    },\n    {\n      \"name\": \"WEIGHT_SCALING_FACTOR\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"1000000000000000000\"\n      }\n    }\n  ],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCode\",\n      \"fields\": [\n        {\n          \"name\": \"InvalidArrayLength\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"550\"\n          }\n        },\n        {\n          \"name\": \"IndexOutOfBound\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"551\"\n          }\n        },\n        {\n          \"name\": \"InvalidByteVecLength\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"552\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"MerkleProofErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"InvalidProofSize\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11001\"\n          }\n        },\n        {\n          \"name\": \"InvalidDataHash\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11002\"\n          }\n        },\n        {\n          \"name\": \"InvalidMerkleRoot\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11003\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"NotOwner\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"300\"\n          }\n        },\n        {\n          \"name\": \"AssetAddressCallerOnly\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"301\"\n          }\n        },\n        {\n          \"name\": \"NoStakingInfo\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"302\"\n          }\n        },\n        {\n          \"name\": \"InsufficientStakedAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"303\"\n          }\n        },\n        {\n          \"name\": \"InvalidStakedAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"304\"\n          }\n        },\n        {\n          \"name\": \"InvalidUnstakedAmount\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"305\"\n          }\n        },\n        {\n          \"name\": \"MaxConnectedDappsReached\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"306\"\n          }\n        },\n        {\n          \"name\": \"DappAlreadyConnected\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"307\"\n          }\n        },\n        {\n          \"name\": \"DappNotConnected\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"308\"\n          }\n        },\n        {\n          \"name\": \"DappNotAllowed\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"309\"\n          }\n        }\n      ]\n    }\n  ],\n  \"mapsSig\": {\n    \"names\": [\n      \"userStakingInfo\"\n    ],\n    \"types\": [\n      \"Map[Address,UserStakingInfo]\"\n    ]\n  }\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  Contract,\n  ContractState,\n  TestContractResult,\n  HexString,\n  ContractFactory,\n  EventSubscribeOptions,\n  EventSubscription,\n  CallContractParams,\n  CallContractResult,\n  TestContractParams,\n  ContractEvent,\n  subscribeContractEvent,\n  subscribeContractEvents,\n  testMethod,\n  callMethod,\n  multicallMethods,\n  fetchContractState,\n  Asset,\n  ContractInstance,\n  getContractEventsCurrentCount,\n  TestContractParamsWithoutMaps,\n  TestContractResultWithoutMaps,\n  SignExecuteContractMethodParams,\n  SignExecuteScriptTxResult,\n  signExecuteMethod,\n  addStdIdToFields,\n  encodeContractFields,\n  Narrow,\n} from \"@alephium/web3\";\nimport { default as XAlphTokenContractJson } from \"../XAlphToken.ral.json\";\nimport { getContractByCodeHash, registerContract } from \"./contracts\";\nimport * as types from \"./types\";\nimport { RalphMap } from \"@alephium/web3\";\n\n// Custom types for the contract\nexport namespace XAlphTokenTypes {\n  export type Fields = {\n    symbol: HexString;\n    name: HexString;\n    decimals: bigint;\n    unstakeVaultTemplateId: HexString;\n    maxActiveUnstakeRequestsPerUser: bigint;\n    unstakeDuration: bigint;\n    totalStaked: bigint;\n    lastUnstakeVaultIndex: bigint;\n  };\n\n  export type State = ContractState<Fields>;\n\n  export type StakedEvent = ContractEvent<{ to: Address; amount: bigint }>;\n  export type UnstakeScheduledEvent = ContractEvent<{\n    to: Address;\n    amount: bigint;\n  }>;\n\n  export interface CallMethodTable {\n    getSymbol: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getName: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    getDecimals: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    getTotalSupply: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<bigint>;\n    };\n    get: {\n      params: CallContractParams<{ array: HexString; index: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    find: {\n      params: CallContractParams<{ array: HexString; value: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    remove: {\n      params: CallContractParams<{ array: HexString; value: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    push: {\n      params: CallContractParams<{ array: HexString; value: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    binarySearch: {\n      params: CallContractParams<{\n        array: HexString;\n        value: bigint;\n        left: bigint;\n        right: bigint;\n      }>;\n      result: CallContractResult<bigint>;\n    };\n    removeAt: {\n      params: CallContractParams<{ array: HexString; index: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    size: {\n      params: CallContractParams<{ array: HexString }>;\n      result: CallContractResult<bigint>;\n    };\n    empty: {\n      params: Omit<CallContractParams<{}>, \"args\">;\n      result: CallContractResult<HexString>;\n    };\n    stake: {\n      params: CallContractParams<{ amount: bigint }>;\n      result: CallContractResult<null>;\n    };\n    startUnstake: {\n      params: CallContractParams<{ amount: bigint }>;\n      result: CallContractResult<HexString>;\n    };\n    getActiveUnstakeVaultIndexes: {\n      params: CallContractParams<{ caller: Address }>;\n      result: CallContractResult<HexString>;\n    };\n    getClaimableAmount: {\n      params: CallContractParams<{ user: Address; vaultIndex: bigint }>;\n      result: CallContractResult<bigint>;\n    };\n    claimUnstaked: {\n      params: CallContractParams<{ vaultIndex: bigint; amount: bigint }>;\n      result: CallContractResult<null>;\n    };\n  }\n  export type CallMethodParams<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"params\"];\n  export type CallMethodResult<T extends keyof CallMethodTable> =\n    CallMethodTable[T][\"result\"];\n  export type MultiCallParams = Partial<{\n    [Name in keyof CallMethodTable]: CallMethodTable[Name][\"params\"];\n  }>;\n  export type MultiCallResults<T extends MultiCallParams> = {\n    [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable\n      ? CallMethodTable[MaybeName][\"result\"]\n      : undefined;\n  };\n  export type MulticallReturnType<Callss extends MultiCallParams[]> = {\n    [index in keyof Callss]: MultiCallResults<Callss[index]>;\n  };\n\n  export interface SignExecuteMethodTable {\n    getSymbol: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getName: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getDecimals: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    getTotalSupply: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    get: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        index: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    find: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    remove: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    push: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    binarySearch: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        value: bigint;\n        left: bigint;\n        right: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    removeAt: {\n      params: SignExecuteContractMethodParams<{\n        array: HexString;\n        index: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    size: {\n      params: SignExecuteContractMethodParams<{ array: HexString }>;\n      result: SignExecuteScriptTxResult;\n    };\n    empty: {\n      params: Omit<SignExecuteContractMethodParams<{}>, \"args\">;\n      result: SignExecuteScriptTxResult;\n    };\n    stake: {\n      params: SignExecuteContractMethodParams<{ amount: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    startUnstake: {\n      params: SignExecuteContractMethodParams<{ amount: bigint }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getActiveUnstakeVaultIndexes: {\n      params: SignExecuteContractMethodParams<{ caller: Address }>;\n      result: SignExecuteScriptTxResult;\n    };\n    getClaimableAmount: {\n      params: SignExecuteContractMethodParams<{\n        user: Address;\n        vaultIndex: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n    claimUnstaked: {\n      params: SignExecuteContractMethodParams<{\n        vaultIndex: bigint;\n        amount: bigint;\n      }>;\n      result: SignExecuteScriptTxResult;\n    };\n  }\n  export type SignExecuteMethodParams<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"params\"];\n  export type SignExecuteMethodResult<T extends keyof SignExecuteMethodTable> =\n    SignExecuteMethodTable[T][\"result\"];\n\n  export type Maps = { userActiveUnstakeVaults?: Map<Address, HexString> };\n}\n\nclass Factory extends ContractFactory<\n  XAlphTokenInstance,\n  XAlphTokenTypes.Fields\n> {\n  encodeFields(fields: XAlphTokenTypes.Fields) {\n    return encodeContractFields(\n      addStdIdToFields(this.contract, fields),\n      this.contract.fieldsSig,\n      types.AllStructs\n    );\n  }\n\n  eventIndex = { Staked: 0, UnstakeScheduled: 1 };\n  consts = {\n    IntByteLength: BigInt(\"32\"),\n    ErrorCode: {\n      InvalidArrayLength: BigInt(\"550\"),\n      IndexOutOfBound: BigInt(\"551\"),\n      InvalidByteVecLength: BigInt(\"552\"),\n    },\n    ErrorCodes: {\n      AssetAddressCallerOnly: BigInt(\"10\"),\n      TooManyActiveUnstakeVaults: BigInt(\"11\"),\n      InvalidUnstakeDuration: BigInt(\"12\"),\n      NonExistantUnstakeVault: BigInt(\"13\"),\n      AmountMustBeGreaterThanZero: BigInt(\"14\"),\n    },\n  };\n\n  at(address: string): XAlphTokenInstance {\n    return new XAlphTokenInstance(address);\n  }\n\n  tests = {\n    getSymbol: async (\n      params: Omit<\n        TestContractParams<XAlphTokenTypes.Fields, never, XAlphTokenTypes.Maps>,\n        \"args\"\n      >\n    ): Promise<TestContractResult<HexString, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"getSymbol\", params, getContractByCodeHash);\n    },\n    getName: async (\n      params: Omit<\n        TestContractParams<XAlphTokenTypes.Fields, never, XAlphTokenTypes.Maps>,\n        \"args\"\n      >\n    ): Promise<TestContractResult<HexString, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"getName\", params, getContractByCodeHash);\n    },\n    getDecimals: async (\n      params: Omit<\n        TestContractParams<XAlphTokenTypes.Fields, never, XAlphTokenTypes.Maps>,\n        \"args\"\n      >\n    ): Promise<TestContractResult<bigint, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"getDecimals\", params, getContractByCodeHash);\n    },\n    getTotalSupply: async (\n      params: Omit<\n        TestContractParams<XAlphTokenTypes.Fields, never, XAlphTokenTypes.Maps>,\n        \"args\"\n      >\n    ): Promise<TestContractResult<bigint, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"getTotalSupply\", params, getContractByCodeHash);\n    },\n    get: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { array: HexString; index: bigint },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"get\", params, getContractByCodeHash);\n    },\n    find: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { array: HexString; value: bigint },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"find\", params, getContractByCodeHash);\n    },\n    remove: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { array: HexString; value: bigint },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"remove\", params, getContractByCodeHash);\n    },\n    push: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { array: HexString; value: bigint },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"push\", params, getContractByCodeHash);\n    },\n    binarySearch: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { array: HexString; value: bigint; left: bigint; right: bigint },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"binarySearch\", params, getContractByCodeHash);\n    },\n    removeAt: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { array: HexString; index: bigint },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"removeAt\", params, getContractByCodeHash);\n    },\n    size: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { array: HexString },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"size\", params, getContractByCodeHash);\n    },\n    empty: async (\n      params: Omit<\n        TestContractParams<XAlphTokenTypes.Fields, never, XAlphTokenTypes.Maps>,\n        \"args\"\n      >\n    ): Promise<TestContractResult<HexString, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"empty\", params, getContractByCodeHash);\n    },\n    stake: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { amount: bigint },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<null, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"stake\", params, getContractByCodeHash);\n    },\n    startUnstake: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { amount: bigint },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"startUnstake\", params, getContractByCodeHash);\n    },\n    getActiveUnstakeVaultIndexes: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { caller: Address },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<HexString, XAlphTokenTypes.Maps>> => {\n      return testMethod(\n        this,\n        \"getActiveUnstakeVaultIndexes\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getClaimableAmount: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { user: Address; vaultIndex: bigint },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<bigint, XAlphTokenTypes.Maps>> => {\n      return testMethod(\n        this,\n        \"getClaimableAmount\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    claimUnstaked: async (\n      params: TestContractParams<\n        XAlphTokenTypes.Fields,\n        { vaultIndex: bigint; amount: bigint },\n        XAlphTokenTypes.Maps\n      >\n    ): Promise<TestContractResult<null, XAlphTokenTypes.Maps>> => {\n      return testMethod(this, \"claimUnstaked\", params, getContractByCodeHash);\n    },\n  };\n\n  stateForTest(\n    initFields: XAlphTokenTypes.Fields,\n    asset?: Asset,\n    address?: string,\n    maps?: XAlphTokenTypes.Maps\n  ) {\n    return this.stateForTest_(initFields, asset, address, maps);\n  }\n}\n\n// Use this object to test and deploy the contract\nexport const XAlphToken = new Factory(\n  Contract.fromJson(\n    XAlphTokenContractJson,\n    \"=52-2+91=2+c=1-1=2+e=1-1=2-2+8f=857-1+b=235-1+b=34+7a7e0214696e73657274206174206d617020706174683a2000=333-1+2=79-1+b=69-1+c=40+7a7e021472656d6f7665206174206d617020706174683a2000=70\",\n    \"8ded2201203cffd39adc32f6278f37f0ef1a543cf34872a159a1f36de68620d4\",\n    types.AllStructs\n  )\n);\nregisterContract(XAlphToken);\n\n// Use this class to interact with the blockchain\nexport class XAlphTokenInstance extends ContractInstance {\n  constructor(address: Address) {\n    super(address);\n  }\n\n  maps = {\n    userActiveUnstakeVaults: new RalphMap<Address, HexString>(\n      XAlphToken.contract,\n      this.contractId,\n      \"userActiveUnstakeVaults\"\n    ),\n  };\n\n  async fetchState(): Promise<XAlphTokenTypes.State> {\n    return fetchContractState(XAlphToken, this);\n  }\n\n  async getContractEventsCurrentCount(): Promise<number> {\n    return getContractEventsCurrentCount(this.address);\n  }\n\n  subscribeStakedEvent(\n    options: EventSubscribeOptions<XAlphTokenTypes.StakedEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      XAlphToken.contract,\n      this,\n      options,\n      \"Staked\",\n      fromCount\n    );\n  }\n\n  subscribeUnstakeScheduledEvent(\n    options: EventSubscribeOptions<XAlphTokenTypes.UnstakeScheduledEvent>,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvent(\n      XAlphToken.contract,\n      this,\n      options,\n      \"UnstakeScheduled\",\n      fromCount\n    );\n  }\n\n  subscribeAllEvents(\n    options: EventSubscribeOptions<\n      XAlphTokenTypes.StakedEvent | XAlphTokenTypes.UnstakeScheduledEvent\n    >,\n    fromCount?: number\n  ): EventSubscription {\n    return subscribeContractEvents(\n      XAlphToken.contract,\n      this,\n      options,\n      fromCount\n    );\n  }\n\n  view = {\n    getSymbol: async (\n      params?: XAlphTokenTypes.CallMethodParams<\"getSymbol\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"getSymbol\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"getSymbol\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getName: async (\n      params?: XAlphTokenTypes.CallMethodParams<\"getName\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"getName\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"getName\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getDecimals: async (\n      params?: XAlphTokenTypes.CallMethodParams<\"getDecimals\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"getDecimals\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"getDecimals\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    getTotalSupply: async (\n      params?: XAlphTokenTypes.CallMethodParams<\"getTotalSupply\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"getTotalSupply\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"getTotalSupply\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    get: async (\n      params: XAlphTokenTypes.CallMethodParams<\"get\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"get\">> => {\n      return callMethod(XAlphToken, this, \"get\", params, getContractByCodeHash);\n    },\n    find: async (\n      params: XAlphTokenTypes.CallMethodParams<\"find\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"find\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"find\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    remove: async (\n      params: XAlphTokenTypes.CallMethodParams<\"remove\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"remove\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"remove\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    push: async (\n      params: XAlphTokenTypes.CallMethodParams<\"push\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"push\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"push\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    binarySearch: async (\n      params: XAlphTokenTypes.CallMethodParams<\"binarySearch\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"binarySearch\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"binarySearch\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    removeAt: async (\n      params: XAlphTokenTypes.CallMethodParams<\"removeAt\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"removeAt\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"removeAt\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    size: async (\n      params: XAlphTokenTypes.CallMethodParams<\"size\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"size\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"size\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    empty: async (\n      params?: XAlphTokenTypes.CallMethodParams<\"empty\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"empty\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"empty\",\n        params === undefined ? {} : params,\n        getContractByCodeHash\n      );\n    },\n    stake: async (\n      params: XAlphTokenTypes.CallMethodParams<\"stake\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"stake\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"stake\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    startUnstake: async (\n      params: XAlphTokenTypes.CallMethodParams<\"startUnstake\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"startUnstake\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"startUnstake\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getActiveUnstakeVaultIndexes: async (\n      params: XAlphTokenTypes.CallMethodParams<\"getActiveUnstakeVaultIndexes\">\n    ): Promise<\n      XAlphTokenTypes.CallMethodResult<\"getActiveUnstakeVaultIndexes\">\n    > => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"getActiveUnstakeVaultIndexes\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    getClaimableAmount: async (\n      params: XAlphTokenTypes.CallMethodParams<\"getClaimableAmount\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"getClaimableAmount\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"getClaimableAmount\",\n        params,\n        getContractByCodeHash\n      );\n    },\n    claimUnstaked: async (\n      params: XAlphTokenTypes.CallMethodParams<\"claimUnstaked\">\n    ): Promise<XAlphTokenTypes.CallMethodResult<\"claimUnstaked\">> => {\n      return callMethod(\n        XAlphToken,\n        this,\n        \"claimUnstaked\",\n        params,\n        getContractByCodeHash\n      );\n    },\n  };\n\n  transact = {\n    getSymbol: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"getSymbol\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"getSymbol\">> => {\n      return signExecuteMethod(XAlphToken, this, \"getSymbol\", params);\n    },\n    getName: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"getName\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"getName\">> => {\n      return signExecuteMethod(XAlphToken, this, \"getName\", params);\n    },\n    getDecimals: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"getDecimals\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"getDecimals\">> => {\n      return signExecuteMethod(XAlphToken, this, \"getDecimals\", params);\n    },\n    getTotalSupply: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"getTotalSupply\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"getTotalSupply\">> => {\n      return signExecuteMethod(XAlphToken, this, \"getTotalSupply\", params);\n    },\n    get: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"get\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"get\">> => {\n      return signExecuteMethod(XAlphToken, this, \"get\", params);\n    },\n    find: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"find\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"find\">> => {\n      return signExecuteMethod(XAlphToken, this, \"find\", params);\n    },\n    remove: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"remove\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"remove\">> => {\n      return signExecuteMethod(XAlphToken, this, \"remove\", params);\n    },\n    push: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"push\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"push\">> => {\n      return signExecuteMethod(XAlphToken, this, \"push\", params);\n    },\n    binarySearch: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"binarySearch\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"binarySearch\">> => {\n      return signExecuteMethod(XAlphToken, this, \"binarySearch\", params);\n    },\n    removeAt: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"removeAt\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"removeAt\">> => {\n      return signExecuteMethod(XAlphToken, this, \"removeAt\", params);\n    },\n    size: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"size\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"size\">> => {\n      return signExecuteMethod(XAlphToken, this, \"size\", params);\n    },\n    empty: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"empty\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"empty\">> => {\n      return signExecuteMethod(XAlphToken, this, \"empty\", params);\n    },\n    stake: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"stake\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"stake\">> => {\n      return signExecuteMethod(XAlphToken, this, \"stake\", params);\n    },\n    startUnstake: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"startUnstake\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"startUnstake\">> => {\n      return signExecuteMethod(XAlphToken, this, \"startUnstake\", params);\n    },\n    getActiveUnstakeVaultIndexes: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"getActiveUnstakeVaultIndexes\">\n    ): Promise<\n      XAlphTokenTypes.SignExecuteMethodResult<\"getActiveUnstakeVaultIndexes\">\n    > => {\n      return signExecuteMethod(\n        XAlphToken,\n        this,\n        \"getActiveUnstakeVaultIndexes\",\n        params\n      );\n    },\n    getClaimableAmount: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"getClaimableAmount\">\n    ): Promise<\n      XAlphTokenTypes.SignExecuteMethodResult<\"getClaimableAmount\">\n    > => {\n      return signExecuteMethod(XAlphToken, this, \"getClaimableAmount\", params);\n    },\n    claimUnstaked: async (\n      params: XAlphTokenTypes.SignExecuteMethodParams<\"claimUnstaked\">\n    ): Promise<XAlphTokenTypes.SignExecuteMethodResult<\"claimUnstaked\">> => {\n      return signExecuteMethod(XAlphToken, this, \"claimUnstaked\", params);\n    },\n  };\n\n  async multicall<Calls extends XAlphTokenTypes.MultiCallParams>(\n    calls: Calls\n  ): Promise<XAlphTokenTypes.MultiCallResults<Calls>>;\n  async multicall<Callss extends XAlphTokenTypes.MultiCallParams[]>(\n    callss: Narrow<Callss>\n  ): Promise<XAlphTokenTypes.MulticallReturnType<Callss>>;\n  async multicall<\n    Callss extends\n      | XAlphTokenTypes.MultiCallParams\n      | XAlphTokenTypes.MultiCallParams[]\n  >(callss: Callss): Promise<unknown> {\n    return await multicallMethods(\n      XAlphToken,\n      this,\n      callss,\n      getContractByCodeHash\n    );\n  }\n}\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"XAlphToken\",\n  \"bytecode\": \"091109121b40244051407a40ac40ca411741474165417341a6427842b242d4435d010000000102ce0002010000000102ce0102010000000102ce0202010000000102a00002010002040115d3cee9319416011600000a311342277b160113202c170216001602160213202a62170316037102010002030114d33cd5e72916004313202e0c2f1342267b16004313202d1702160016010c1602000802010002030119d32cabd28216004313202e0c2f1342267b160016010005170216020b244c031600024a05160016023d00090201000202010ed31bc25d3416004313202e0c2f1342267b160016016b44020000040601402a16021603344c020b02160216032a0e2d17041600160400041705160516012f4c0316043f0216051601314c091600160116040d2a16030008024a061600160116021604000802010002030118d34b2e25b716011600000a311342277b160113202c170216000c1602621600160213202a16004362440201000101010ed30041471116004313202e0c2f1342267b16004313202d02010000000103d3676c3c3314000201010102001bd3d63c543cb41701160148130a7b16000c33130e7b1601b11600ab16011600a9a00016002aa10005160116005f01010106014069d33538a49fb41701160148130a7bce050c33130c7b16000c33130e7ba0010d2aa101140a5f5f6d61705f5f305f5f16014744cbc54c1d0c0d0d140a5f5f6d61705f5f305f5f16014744cb010117021602000ace0431130b7b1602a00100070c0e0c140a5f5f6d61705f5f305f5f16014744cb01024a09ca140a5f5f6d61705f5f305f5f16014744b1a0016bd201011601b11600acb11601160056ce051305640c13016417041703b21600a2160147a0014044ce0316031604c11705a00016002ba10006160116005f160502010001010115d38072397d140a5f5f6d61705f5f305f5f16004744cbc5194c021400020c0d0d140a5f5f6d61705f5f305f5f16004744cb010102010002030111d3fd3d3af616004716014044cb17021602c5130d7b0c0d160201020201000206004040d38bb32147b4170216024716004044cb170316010c33130e7b16010d0d16030103170416044c40290c0d0d140a5f5f6d61705f5f305f5f16024744cb01011600000617051605430c2f4c0a16020d0c140a5f5f6d61705f5f305f5f16024744cb01034a0a16050c0e0c140a5f5f6d61705f5f305f5f16024744cb01020c0c16030104\",\n  \"codeHash\": \"5f95704fd2f96ed987b89fdb6e0659cc32d2accc50194a6bd2aedcffdce2f3e5\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"symbol\",\n      \"name\",\n      \"decimals\",\n      \"unstakeVaultTemplateId\",\n      \"maxActiveUnstakeRequestsPerUser\",\n      \"unstakeDuration\",\n      \"totalStaked\",\n      \"lastUnstakeVaultIndex\",\n      \"__stdInterfaceId\"\n    ],\n    \"types\": [\n      \"ByteVec\",\n      \"ByteVec\",\n      \"U256\",\n      \"ByteVec\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"U256\",\n      \"ByteVec\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false,\n      false,\n      false,\n      false,\n      true,\n      true,\n      false\n    ]\n  },\n  \"eventsSig\": [\n    {\n      \"name\": \"Staked\",\n      \"fieldNames\": [\n        \"to\",\n        \"amount\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"UnstakeScheduled\",\n      \"fieldNames\": [\n        \"to\",\n        \"amount\"\n      ],\n      \"fieldTypes\": [\n        \"Address\",\n        \"U256\"\n      ]\n    }\n  ],\n  \"functions\": [\n    {\n      \"name\": \"getSymbol\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getName\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getDecimals\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"getTotalSupply\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"get\",\n      \"paramNames\": [\n        \"array\",\n        \"index\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"find\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"remove\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"push\",\n      \"paramNames\": [\n        \"array\",\n        \"value\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"binarySearch\",\n      \"paramNames\": [\n        \"array\",\n        \"value\",\n        \"left\",\n        \"right\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\",\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false,\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"I256\"\n      ]\n    },\n    {\n      \"name\": \"removeAt\",\n      \"paramNames\": [\n        \"array\",\n        \"index\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"size\",\n      \"paramNames\": [\n        \"array\"\n      ],\n      \"paramTypes\": [\n        \"ByteVec\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"empty\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"stake\",\n      \"paramNames\": [\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": []\n    },\n    {\n      \"name\": \"startUnstake\",\n      \"paramNames\": [\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getActiveUnstakeVaultIndexes\",\n      \"paramNames\": [\n        \"caller\"\n      ],\n      \"paramTypes\": [\n        \"Address\"\n      ],\n      \"paramIsMutable\": [\n        false\n      ],\n      \"returnTypes\": [\n        \"ByteVec\"\n      ]\n    },\n    {\n      \"name\": \"getClaimableAmount\",\n      \"paramNames\": [\n        \"user\",\n        \"vaultIndex\"\n      ],\n      \"paramTypes\": [\n        \"Address\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": [\n        \"U256\"\n      ]\n    },\n    {\n      \"name\": \"claimUnstaked\",\n      \"paramNames\": [\n        \"vaultIndex\",\n        \"amount\"\n      ],\n      \"paramTypes\": [\n        \"U256\",\n        \"U256\"\n      ],\n      \"paramIsMutable\": [\n        false,\n        false\n      ],\n      \"returnTypes\": []\n    }\n  ],\n  \"constants\": [\n    {\n      \"name\": \"IntByteLength\",\n      \"value\": {\n        \"type\": \"U256\",\n        \"value\": \"32\"\n      }\n    }\n  ],\n  \"enums\": [\n    {\n      \"name\": \"ErrorCode\",\n      \"fields\": [\n        {\n          \"name\": \"InvalidArrayLength\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"550\"\n          }\n        },\n        {\n          \"name\": \"IndexOutOfBound\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"551\"\n          }\n        },\n        {\n          \"name\": \"InvalidByteVecLength\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"552\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"ErrorCodes\",\n      \"fields\": [\n        {\n          \"name\": \"AssetAddressCallerOnly\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"10\"\n          }\n        },\n        {\n          \"name\": \"TooManyActiveUnstakeVaults\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"11\"\n          }\n        },\n        {\n          \"name\": \"InvalidUnstakeDuration\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"12\"\n          }\n        },\n        {\n          \"name\": \"NonExistantUnstakeVault\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"13\"\n          }\n        },\n        {\n          \"name\": \"AmountMustBeGreaterThanZero\",\n          \"value\": {\n            \"type\": \"U256\",\n            \"value\": \"14\"\n          }\n        }\n      ]\n    }\n  ],\n  \"mapsSig\": {\n    \"names\": [\n      \"userActiveUnstakeVaults\"\n    ],\n    \"types\": [\n      \"Map[Address,ByteVec]\"\n    ]\n  },\n  \"stdInterfaceId\": \"0001\"\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  Address,\n  ExecutableScript,\n  ExecuteScriptParams,\n  ExecuteScriptResult,\n  Script,\n  SignerProvider,\n  HexString,\n} from \"@alephium/web3\";\nimport { getContractByCodeHash } from \"./contracts\";\nimport { default as AlphStakeAndLockScriptJson } from \"../AlphStakeAndLock.ral.json\";\nimport { default as XAlphUnlockAndStartUnstakeScriptJson } from \"../XAlphUnlockAndStartUnstake.ral.json\";\nimport * as types from \"./types\";\n\nexport const AlphStakeAndLock = new ExecutableScript<{\n  xAlphToken: HexString;\n  xAlphStakeVault: HexString;\n  amount: bigint;\n}>(\n  Script.fromJson(AlphStakeAndLockScriptJson, \"\", types.AllStructs),\n  getContractByCodeHash\n);\n\nexport const XAlphUnlockAndStartUnstake = new ExecutableScript<{\n  xAlphToken: HexString;\n  xAlphStakeVault: HexString;\n  amount: bigint;\n}>(\n  Script.fromJson(XAlphUnlockAndStartUnstakeScriptJson, \"\", types.AllStructs),\n  getContractByCodeHash\n);\n","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"AlphStakeAndLock\",\n  \"bytecodeTemplate\": \"01010300020018b417001600{2}a2{2}0d0c{0}010c0c0d{1}010c170116001601{2}a3{2}0d0c{1}010f\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"xAlphToken\",\n      \"xAlphStakeVault\",\n      \"amount\"\n    ],\n    \"types\": [\n      \"XAlphToken\",\n      \"XAlphStakeVault\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"version\": \"v4.2.5\",\n  \"name\": \"XAlphUnlockAndStartUnstake\",\n  \"bytecodeTemplate\": \"01010300020016b41700{2}0d0c{1}01100c0d{1}010c170116001601{2}a3{2}0d0d{0}010d18\",\n  \"fieldsSig\": {\n    \"names\": [\n      \"xAlphToken\",\n      \"xAlphStakeVault\",\n      \"amount\"\n    ],\n    \"types\": [\n      \"XAlphToken\",\n      \"XAlphStakeVault\",\n      \"U256\"\n    ],\n    \"isMutable\": [\n      false,\n      false,\n      false\n    ]\n  },\n  \"functions\": [\n    {\n      \"name\": \"main\",\n      \"paramNames\": [],\n      \"paramTypes\": [],\n      \"paramIsMutable\": [],\n      \"returnTypes\": []\n    }\n  ]\n}","{\n  \"deployerAddress\": \"16j6oMwCc768CSjXst5ftHwyu7gUn6PvCX7YVvAQWWbZ2\",\n  \"contracts\": {\n    \"AlphUnstakeVault\": {\n      \"txId\": \"36ad2eb4a64bcc3b89441a0f0775dd57fbefe02ad6e647680f830217c8d80f9f\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a2144198060540ea40f841384172418c0000030901409216020c3013415e7b160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e160216083736371708160416083702010000000103d3f10c9d97ce020201000003014020d3223281b2ce040c3313167b5617001600ce033413177b1600ce032b1701ce0217021601ce04314c0516021601ce04000017021602a0002b0201020102011fd30e00e856b417011601ce0077457a4b04181601ce014513147b160000023213157bce011600a8a00016002aa100a000ce022f0201020001000bd38e18691cb417001600ce00774513147bce01b014402b050300040300000000000000000000000000000000000000000000000000000000000000000200020002001403010200ad188000e2aac1174876e80001aaa31a3b5062a1147e3559b7fcb53ab81ac66522b83e13ac0ec1738cf7ad0a43e97914770002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c463d9bafbc3883a7600551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"ba1361ee2f4aebad5dbe1d4d374c28e503575318a1d0d13e4b48c0a6877e4b8031749843b7c639d9b853594d181f48c0189510e9c247f33d3d90abde01a7fb03\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58026,\n      \"blockHash\": \"0000005cfe48f0844e82228b25567d14e12b8889eae8152045758c3e8acaea30\",\n      \"codeHash\": \"cdc7cec3c418bb3e4f7f43d28a151fbe950e6429ff56c060c04d0f207cd4e5a4\",\n      \"contractInstance\": {\n        \"address\": \"211Z8st6gChA7GMXboHH2jepvGhyksnDUQ7nkzgZrcTeo\",\n        \"contractId\": \"5dea2d84f611879bf5d9486bd6b0f7e590f0b6cdbf50fb8062ea94a70fef8d00\",\n        \"groupIndex\": 0\n      }\n    },\n    \"XAlphToken\": {\n      \"txId\": \"d0efd4c2375b501ac8d69612d633f6ab87e2d06be74942be768d7f425f6c0390\",\n      \"unsignedTx\": \"000101010103000000091500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a214437e091109121b40244051407a40ac40ca411741474165417341a6427842b242d4435d010000000102ce0002010000000102ce0102010000000102ce0202010000000102a00002010002040115d3cee9319416011600000a311342277b160113202c170216001602160213202a62170316037102010002030114d33cd5e72916004313202e0c2f1342267b16004313202d1702160016010c1602000802010002030119d32cabd28216004313202e0c2f1342267b160016010005170216020b244c031600024a05160016023d00090201000202010ed31bc25d3416004313202e0c2f1342267b160016016b44020000040601402a16021603344c020b02160216032a0e2d17041600160400041705160516012f4c0316043f0216051601314c091600160116040d2a16030008024a061600160116021604000802010002030118d34b2e25b716011600000a311342277b160113202c170216000c1602621600160213202a16004362440201000101010ed30041471116004313202e0c2f1342267b16004313202d02010000000103d3676c3c3314000201010102001bd3d63c543cb41701160148130a7b16000c33130e7b1601b11600ab16011600a9a00016002aa10005160116005f01010106014069d33538a49fb41701160148130a7bce050c33130c7b16000c33130e7ba0010d2aa101140a5f5f6d61705f5f305f5f16014744cbc54c1d0c0d0d140a5f5f6d61705f5f305f5f16014744cb010117021602000ace0431130b7b1602a00100070c0e0c140a5f5f6d61705f5f305f5f16014744cb01024a09ca140a5f5f6d61705f5f305f5f16014744b1a0016bd201011601b11600acb11601160056ce051305640c13016417041703b21600a2160147a0014044ce0316031604c11705a00016002ba10006160116005f160502010001010115d38072397d140a5f5f6d61705f5f305f5f16004744cbc5194c021400020c0d0d140a5f5f6d61705f5f305f5f16004744cb010102010002030111d3fd3d3af616004716014044cb17021602c5130d7b0c0d160201020201000206004040d38bb32147b4170216024716004044cb170316010c33130e7b16010d0d16030103170416044c40290c0d0d140a5f5f6d61705f5f305f5f16024744cb01011600000617051605430c2f4c0a16020d0c140a5f5f6d61705f5f305f5f16024744cb01034a0a16050c0e0c140a5f5f6d61705f5f305f5f16024744cb01020c0c1603010414404a07030558414c5048030b5374616b656420414c504802120340205dea2d84f611879bf5d9486bd6b0f7e590f0b6cdbf50fb8062ea94a70fef8d00021002c09a7ec8000306414c504800011405020200020013c8033b2e3c9fd0803ce8000000ae188000e6ddc1174876e80001aaa31a3b25ad7129900a12a0855ce79fec7338a1c60ae9d9bce40de14794cae54f8bca3d0002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c45c8013d8c10e0a7600551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"3407dc308b6427d361e73fbbc7313060afdf88f8c1a4571986176bbf3831e2b60cd78d2e3384e40cfa54ff86d32bdcbf9a8929515bcb40f9af20d1efb1faa210\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 59101,\n      \"blockHash\": \"000000aff89ba10a3749c17a394741b90c7d076db81300a3b5db4d589c9deed0\",\n      \"codeHash\": \"19e6ebe6ce7c8a3e338d3fd9696fb8dbe965893904c9ff5cd99116109ce56273\",\n      \"contractInstance\": {\n        \"address\": \"2BnHxjxAaPgkpHQrU7DzrwHnpR7f8FNrk18HqkMKjB5xB\",\n        \"contractId\": \"fdf5067af438da490b166c913768a646fd34c3891957b350cbf87820ae77ad00\",\n        \"groupIndex\": 0\n      },\n      \"issueTokenAmount\": \"1000000000000000000000000000\"\n    },\n    \"GovernanceDemo\": {\n      \"txId\": \"65dde7bebdbd3414a9db9affdce739c530d32e28d48ff32a360d46e4814c1251\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a21443c2090c40c9419741f54217422b426c42a642b44382438d439843a801000206004058d3926b380bb417021602ce00774513087b140a5f5f6d61705f5f305f5f16004744cbc54c403f0c0d0d140a5f5f6d61705f5f305f5f16004744cb1705160501010d0d0d1605010117041703000b7a4c041816030c304c180c0d0d140a5f5f6d61705f5f315f5f16034044cb010116012a0c0e0c140a5f5f6d61705f5f315f5f16034044cb0102a00016012aa100160416012a0d0e0c140a5f5f6d61705f5f305f5f16004744cb01024a09ca140a5f5f6d61705f5f305f5f16004744b10c1601d201020100020700405ed365b06caeb417021602ce00774513087b140a5f5f6d61705f5f305f5f16004744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1706160601010d0d0d1606010117041703160416012b170516050d0e0c140a5f5f6d61705f5f305f5f16004744cb0102000b7a4c041816030c304c180c0d0d140a5f5f6d61705f5f315f5f16034044cb010116012b0c0e0c140a5f5f6d61705f5f315f5f16034044cb0102a00016012ba10016050c2f4c09ca0d0c140a5f5f6d61705f5f305f5f16004744cb010301000002004033d3ecf99ab7b4ce054513077b000919107b000a19117b56a101ce01ce02ce03ce041017000c170116011600314c14ca140a5f5f6d61705f5f315f5f16017a10314d0d2acf4044b10cd2010116010d2a17014a2805a0015e010000000012d33919f580b4ce054513077b00090f7b000a19117b56a10207a0025e010000000406d3068539face01ce02ce03ce040201000102021ad344a25325140a5f5f6d61705f5f305f5f16004744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1701160101010d0d0d1601010102010001010116d32e30a67700090f7b140a5f5f6d61705f5f315f5f16004044cbc50e7b0c0d0d140a5f5f6d61705f5f315f5f16004044cb010102010000000103d33cfd4f9ea000020100010300405cd376a80ea2b417011601480c7b00090f7b000a19117b140a5f5f6d61705f5f315f5f16004044cbc50e7b140a5f5f6d61705f5f305f5f16014744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16014744cb01010c2f13067b0d0d0d140a5f5f6d61705f5f305f5f16014744cb01011702a00016022aa1000c0d0d140a5f5f6d61705f5f315f5f16004044cb010116022a0c0e0c140a5f5f6d61705f5f315f5f16004044cb010216000c0e0c140a5f5f6d61705f5f305f5f16014744cb01020616011600160260000000000104a0010c3002000000000104a0020c300200000000010700097a4c0318000a190214402d060300020002000200020004030000000000000000000000000000000000000000000000000000000000000000140703020002000200ad188000e764c1174876e80001aaa31a3bba73c035d5028365f9899524362abe6ece62c5dec6570246632b20bc0dd605160002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c460e926cf9301d27600551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"0604bbb32add7106fc08ac4c5f7c25c705e4fbdd0cf2e613ac1ddc7bc0c4a09959a1f4e621c30953bc83f6d1c6288ff69949ab8a5ba5815b54b5cd93298727c4\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 59236,\n      \"blockHash\": \"000000a19610c75ca22cddee5d522e3949a5a0c5f1c68f58a5ce34463145a9b0\",\n      \"codeHash\": \"1d690d8074cb6684908dc8465d055adebb69e9faaafe5293459e9901e0e13fd2\",\n      \"contractInstance\": {\n        \"address\": \"26NN5Dr2qABRfNf3vxikfTYkhQSh1jsnVKpxxbJoWHDm9\",\n        \"contractId\": \"ad894ce88fb5be0e70f08df50f8667f771cb6ad8583b9400d119d7caccfdd000\",\n        \"groupIndex\": 0\n      }\n    },\n    \"RewardSharingVault\": {\n      \"txId\": \"2fe75ba0e80253b049406acc06de6eadebb09893716bdc01cf2b49bdf8afa113\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a214432e040740b74152423c4277428942c0431e01000208004054d3926b380bb417021602ce00774513287b140a5f5f6d61705f5f305f5f16004744cbc54c40270c0d0d140a5f5f6d61705f5f305f5f16004744cb01011703160116032a16000d0ece00010d1707170616062f132b7b16000005160316012a0c0e0c140a5f5f6d61705f5f305f5f16004744cb01024a15160116000d0ece00010d1705170416042f132b7bca140a5f5f6d61705f5f305f5f16004744b11601a001d20102a00016012aa10005160016015f01000205004046d365b06caeb417021602ce00774513287b140a5f5f6d61705f5f305f5f16004744cbc513297b0c0d0d140a5f5f6d61705f5f305f5f16004744cb010117031601160332132c7b160316012b17041600000516040c2f4c0aca0d0c140a5f5f6d61705f5f305f5f16004744cb01034a0a16040c0e0c140a5f5f6d61705f5f305f5f16004744cb0102a00016012ba10006160016015f0000030901409216020c3013415e7b160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e160216083736371708160416083702010101030019d3fe1110a1a0000c33132a7bb417011601ce011600ac160013c40de0b6b3a7640000a00000021702a00116022aa10107160116005f010300010005d3a28b71d5b417001600000500020102001916000006170116010c334c081600ce011601ab08160016015fa0010d0e0c140a5f5f6d61705f5f305f5f16004744cb010201000105014024d31191a066140a5f5f6d61705f5f305f5f16004744cbc513297b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1704160401010d0d0d1604010117021701a00116022b17031601160313c40de0b6b3a76400000002021405020300030014050202000200ad188000e551c1174876e80001aaa31a3b2219a77dd8363a506c890e31dce08d61b4cf53e0bf552837842171ebbd2022640002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a19401c45f710626ea506a7600551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"ff6c60717382cfad82744a5a47a0a0450fdae3db36024e48a70c491fa63bc5a74efc34cefc25e40bdd059a5958a7cbfd809bd1efff1c02976821ad5a1ad04375\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58705,\n      \"blockHash\": \"000000af5d3769937ed5c660489f6868f6a74384af5db9de1a5d3195da3ca380\",\n      \"codeHash\": \"6f1a8ea9a68cabdd02e85c33844c76c21ec4ccc1007effb7b71ca1f7640ead23\",\n      \"contractInstance\": {\n        \"address\": \"x2hFgxMnAhV2DAuodrXQrk4u2BRKUYsSpPDg335nuFzo\",\n        \"contractId\": \"31a1e0529c6b0349e0b1f1ad8a3f16d5d60b7fe2f6dc8128cb14d922668e3800\",\n        \"groupIndex\": 0\n      }\n    },\n    \"XAlphStakeVault\": {\n      \"txId\": \"4d65707e5baf56d589f3c3941677cdba98b4fa4745d7f1f025b71a89fbcc4817\",\n      \"unsignedTx\": \"000101010103000000081500551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78113c4016345785d8a0000a21445d705174028407340af40cc40fc411a41284136414f41a341c341cd41db42234241431043f0448b451145604577458e45a7010002030112d3545eacd4160116000005311342277b160113202c170216001602160213202a620201000204014028d3083a358916004313202e0c2f1342267b16014313202f1342287b1600000517020c170316031602314c0e1600160300001601414c0316033f0216030d2a17034a2e0b0201000203011fd3694941c216004313202e0c2f1342267b16014313202f1342287b160016010001170216020b244c031600024a05160016023d00040201000202010dd354ad273416004313202e0c2f1342267b160016014402010002030118d34b2e25b7160116000005311342277b160113202c170216000c1602621600160213202a16004362440201000101010ed30041471116004313202e0c2f1342267b16004313202d02010000000103d3676c3c33140002010000000103d393f264e8a0000200000101000c16004313202f136afb7b1600a10005a000b45f0000020601402e16014313202f136afa7b160117021600431703160313202e0c2f136af97b0c170416041603314c1016001604160413202a62170516051602000a1702160413202a17044a2c160271a000712f02000002020110160071160171314c051600160144000b4a041601160044000b0200000101010316004f02010000000103d3b299f80ace000201000102021ed3f87904e4140a5f5f6d61705f5f305f5f16004744cbc5194c040c0006024a110c0d0d140a5f5f6d61705f5f305f5f16004744cb1701160101010d0d0d1601010102010001010108d32b875d11140a5f5f6d61705f5f305f5f16004744cbc5020101010800405fd3d63c543cb4170116014813412d7b16000c331341307b1601ce001600ac140a5f5f6d61705f5f305f5f16014744cbc54c40370c0d0d140a5f5f6d61705f5f305f5f16014744cb1707160701010d0d0d1607010117031702160216002a0c0e0c140a5f5f6d61705f5f305f5f16014744cb01021603000517040c170516051604314c0f1603160500001706160116000e0c1606d4926b380b16050d2a17054a2d4a09ca140a5f5f6d61705f5f305f5f16014744b116000006d20102a00116002aa10106160116005f0102010900406bd310bd129fb4170116014813412d7b140a5f5f6d61705f5f305f5f16014744cbc513412e7b16000c331341317b0c0d0d140a5f5f6d61705f5f305f5f16014744cb1708160801010d0d0d1608010117031702160216003413412f7b160216002b17041603000517050c170616061605314c0f1603160600001707160116000e0c1607d465b06cae16060d2a17064a2d16040c2f4c0aca0d0c140a5f5f6d61705f5f305f5f16014744cb01034a0a16040c0e0c140a5f5f6d61705f5f305f5f16014744cb01021601ce001600aba00116002ba10107160116005f01000206004045d3c5f91cb4b4170216024813412d7b1601160000161341357b140a5f5f6d61705f5f305f5f16024744cbc513412e7b0c0d0d140a5f5f6d61705f5f305f5f16024744cb1705160501010d0d0d160501011704170316040005ce01311341327b1604160000010b241341337b160216030e0c1600d4926b380b1604160000030d0e0c140a5f5f6d61705f5f305f5f16024744cb01020100010500403ad3b6398887b4170116014813412d7b140a5f5f6d61705f5f305f5f16014744cbc513412e7b0c0d0d140a5f5f6d61705f5f305f5f16014744cb1704160401010d0d0d16040101170317021603160000010b251341347b160116020e0c1600d465b06cae1603160000020d0e0c140a5f5f6d61705f5f305f5f16014744cb010201000101011fd3e5725392140a5f5f6d61705f5f305f5f16004744cbc5197a4b0418a0010c2f4c020c020c0d0d140a5f5f6d61705f5f305f5f16004744cb010113c40de0b6b3a76400002ca0012d02010001010008d3e5bf78dcb4a0024513412c7b16000008010001010008d34f58efe6b4a0024513412c7b1600a102010002030109d3af1ed9dd1601b9170216001602000b00090214402602034020fdf5067af438da490b166c913768a646fd34c3891957b350cbf87820ae77ad00020a144048030340209d203f022693e95c512474ee9d788706c567247b6862b802b90355fcc46784a202000400551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e781ad188000eb69c1174876e80002aaa31a3b2cd52d7ce3a8ce5d59e5ae88e7d11cef7b8c31d3f74d55051412367f6bc1e92a0002aa2b00c7436014a228d1aac67b64daf32f482052c2186c0efc78d9784ef0a194aaa31a3b9cf7d98fff4154d2fdf629284fa96e8275b040537070a04446ee303b8d6c50ba0301c4891ecbb280614adc00551362cc76354454f639b640f9c898aa72cf097706ad51d8fbcb2fcb4b65e78100000000000000000000\",\n      \"signature\": \"f02c9f5d77b79b5c2af9558180381295d3d8a0598cf8e909d1f582606a6b9469243af28fb1570c72550fce5733c28f58b11f022fbbeff64a12f628669fc4afcc\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 60265,\n      \"blockHash\": \"000000064709ddf4dcb27cd606ae682caa4e05b25e0da635e8b3440bd5dcbfb0\",\n      \"codeHash\": \"16a37508b26e9522baf304b39ed18846da97112687dd13aa560c6c18cae39e6e\",\n      \"contractInstance\": {\n        \"address\": \"2AAtQ91a2kFv2xLEdaU9DSR7QJJSFuHX7SRKVy3wuGWTq\",\n        \"contractId\": \"e6075e494aa5a1fd2a59aec971d165b2913eac6c20dbb852c2a39cf9842dd300\",\n        \"groupIndex\": 0\n      }\n    }\n  },\n  \"scripts\": {},\n  \"migrations\": {}\n}","{\n  \"deployerAddress\": \"1DrDyTr9RpRsQnDnXo2YRiPzPW4ooHX5LLoqXrqfMrpQH\",\n  \"contracts\": {\n    \"AlphUnstakeVault\": {\n      \"txId\": \"5d1b4e3d691a02df4b53a9992c2e9a96b4e392a5c0889de02688a293bd99c785\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a2144198060540ea40f841384172418c0000030901409216020c3013415e7b160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e160216083736371708160416083702010000000103d3f10c9d97ce020201000003014020d3223281b2ce040c3313167b5617001600ce033413177b1600ce032b1701ce0217021601ce04314c0516021601ce04000017021602a0002b0201020102011fd30e00e856b417011601ce0077457a4b04181601ce014513147b160000023213157bce011600a8a00016002aa100a000ce022f0201020001000bd38e18691cb417001600ce00774513147bce01b014402b050300040300000000000000000000000000000000000000000000000000000000000000000200020002001403010200ad188000e2aac1174876e8000137a4444713f113d86f559e1e84171b1a3b40f6218d5ab90700dd8c5e85f2e7123833e11e000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6b85ed9214f8f1f1e900000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"ca5285b7a549134e7968b69fb733d376b923a5eca2fd41bf0e4eb75cb0244dd3345016ddd9b8397c585b875307959909caf109849924679976dbde317fc7be9c\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58026,\n      \"blockHash\": \"0474d8bb002ba67ad14daeb77399431db2038a5a40640055ca47ebecfde690e0\",\n      \"codeHash\": \"cdc7cec3c418bb3e4f7f43d28a151fbe950e6429ff56c060c04d0f207cd4e5a4\",\n      \"contractInstance\": {\n        \"address\": \"vVaqDXgWSb21kJjJRbdvB9VtaVR1QzhmEbE9vYjpijdR\",\n        \"contractId\": \"1acdec45831016d1cbc02a86046186189874216703d81af9d17d80a6a08e4b00\",\n        \"groupIndex\": 0\n      }\n    },\n    \"XAlphToken\": {\n      \"txId\": \"419f046f3dde9f00d62a885727c0ea6c33c3637556f97172900ecf3b5ca043a2\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a21443b0091109121b40244051407a40ac40ca411741474165417341a6429142cb42ed438f010000000102ce0002010000000102ce0102010000000102ce0202010000000102a00002010002040115d3cee9319416011600000a311342277b160113202c170216001602160213202a62170316037102010002030114d33cd5e72916004313202e0c2f1342267b16004313202d1702160016010c1602000802010002030119d32cabd28216004313202e0c2f1342267b160016010005170216020b244c031600024a05160016023d00090201000202010ed31bc25d3416004313202e0c2f1342267b160016016b44020000040601402a16021603344c020b02160216032a0e2d17041600160400041705160516012f4c0316043f0216051601314c091600160116040d2a16030008024a061600160116021604000802010002030118d34b2e25b716011600000a311342277b160113202c170216000c1602621600160213202a16004362440201000101010ed30041471116004313202e0c2f1342267b16004313202d02010000000103d3676c3c3314000201010102001bd3d63c543cb41701160148130a7b16000c33130e7b1601b11600ab16011600a9a00016002aa10005160116005f0101010601406bd33538a49fb41701160148130a7bce050c33130c7b16000c33130e7ba0010d2aa101140a5f5f6d61705f5f305f5f16014744cbc54c1d0c0d0d140a5f5f6d61705f5f305f5f16014744cb010117021602000ace0431130b7b1602a00100070c0e0c140a5f5f6d61705f5f305f5f16014744cb01024a0bca140a5f5f6d61705f5f305f5f160147447a7e0214696e73657274206174206d617020706174683a2000b1a0016bd201011601b11600acb11601160056ce051305640c13016417041703b21600a2160147a0014044ce0316031604c11705a00016002ba10006160116005f160502010001010115d38072397d140a5f5f6d61705f5f305f5f16004744cbc5194c021400020c0d0d140a5f5f6d61705f5f305f5f16004744cb010102010002030111d3fd3d3af616004716014044cb17021602c5130d7b0c0d160201020201000206004042d38bb32147b4170216024716004044cb170316010c33130e7b16010d0d16030103170416044c402b0c0d0d140a5f5f6d61705f5f305f5f16024744cb01011600000617051605430c2f4c0c16020d0c140a5f5f6d61705f5f305f5f160247447a7e021472656d6f7665206174206d617020706174683a2000cb01034a0a16050c0e0c140a5f5f6d61705f5f305f5f16024744cb01020c0c1603010414404907030558414c5048030b5374616b656420414c504802120340201acdec45831016d1cbc02a86046186189874216703d81af9d17d80a6a08e4b000210028000ea600306414c5048000114050202000200ad188000e730c1174876e8000137a444477f7b4b7130c2284dcf645bc7c3a02145dad57a952c8c6403f3e039829a626c6d000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6b85ed7a90355dff1100000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"8de92f39d121f6572f78a302127d8853d03932a154b65fef58a1e45e6ae595c7297f7e2f50c940de534b12f149f79e32d74c0636190cab6f9b8cee6aa6407498\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 59184,\n      \"blockHash\": \"0a45f073ea3b7a3e43dda2bcc30dc82db263469bae16d49433850e7b618dfc00\",\n      \"codeHash\": \"ff82445fd49b9aa5904a68c1aad286b3fedb9b314d840ff35f687c78fb52201d\",\n      \"contractInstance\": {\n        \"address\": \"u8vQcnnKuncdvooyN4EDU7fXFRNkdMKNFVF8QU1qBQzB\",\n        \"contractId\": \"06a72c6ce8eb96c1d40fd6c2bfbc51e522cae9ec355d9c63ff6c8a8fcd119100\",\n        \"groupIndex\": 0\n      }\n    },\n    \"RewardSharingVault\": {\n      \"txId\": \"bda7709b86eb33e62548d1f29361d5f96dd4887d840e46b62386312788d2206a\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a2144360040740d04184426e42a942bb42f2435001000208004056d3926b380bb417021602ce00774513287b140a5f5f6d61705f5f305f5f16004744cbc54c40270c0d0d140a5f5f6d61705f5f305f5f16004744cb01011703160116032a16000d0ece00010d1707170616062f132b7b16000005160316012a0c0e0c140a5f5f6d61705f5f305f5f16004744cb01024a17160116000d0ece00010d1705170416042f132b7bca140a5f5f6d61705f5f305f5f160047447a7e0214696e73657274206174206d617020706174683a2000b11601a001d20102a00016012aa10005160016015f01000205004048d365b06caeb417021602ce00774513287b140a5f5f6d61705f5f305f5f16004744cbc513297b0c0d0d140a5f5f6d61705f5f305f5f16004744cb010117031601160332132c7b160316012b17041600000516040c2f4c0cca0d0c140a5f5f6d61705f5f305f5f160047447a7e021472656d6f7665206174206d617020706174683a2000cb01034a0a16040c0e0c140a5f5f6d61705f5f305f5f16004744cb0102a00016012ba10006160016015f0000030901409216020c3013415e7b160016010c0d3687170316001601371704160316043616031604314c020d4a010c36170516050c2f4c04160416022d02160216053313415f7b160016011602871706160516061604334c020d4a010c361705160416063617040c1602361602381707160216072d1702160416072d17040c16073616072d0d351707160416051607373917040f1602370e3a170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e16021608373637170816080e160216083736371708160416083702010101030019d3fe1110a1a0000c33132a7bb417011601ce011600ac160013c40de0b6b3a7640000a00000021702a00116022aa10107160116005f010300010005d3a28b71d5b417001600000500020102001916000006170116010c334c081600ce011601ab08160016015fa0010d0e0c140a5f5f6d61705f5f305f5f16004744cb010201000105014024d31191a066140a5f5f6d61705f5f305f5f16004744cbc513297b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1704160401010d0d0d1604010117021701a00116022b17031601160313c40de0b6b3a76400000002021405020300030014050202000200ad188000e5b5c1174876e8000137a44447d79d999377ba4b33e0b3ca20c672a9a2112f17d90d90ee6147824c53ae4fd760000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6b85ed630d994e8cd080000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"89222a8c53905b172735af31d1bb4020b4e33e3ebadf84e641c2feba28f512876a6ea700f10c986d7563da365227f1a97b91a2f003c0af0e8f57a3d1ded32dd3\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 58805,\n      \"blockHash\": \"0301c8976c0ecb0a4022b1d64ec581f5bcc3f43323c6708fd0e4fe715d146be0\",\n      \"codeHash\": \"947e9fadaac74c9e777046a286e060c51e228762d1a484593aebcbd4409c8509\",\n      \"contractInstance\": {\n        \"address\": \"26iWN6j81TzsXWp8fUFs2t9EoQvCcjtCFq9K4PMAEAAbq\",\n        \"contractId\": \"b2b24a8fa27013a41afedcfc5d8603ef3c3778e385708113ddd76ad2a1cd3100\",\n        \"groupIndex\": 0\n      }\n    },\n    \"XAlphStakeVault\": {\n      \"txId\": \"a0ec98e20ae70a1b70f805cdb9307695c69601eb175a44bcf56e88eac4ad1331\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a214460405174028407340af40cc40fc411a41284136414f41a341c341cd41db421e423c4324441d44b8453e458d45a445bb45d4010002030112d3545eacd4160116000005311342277b160113202c170216001602160213202a620201000204014028d3083a358916004313202e0c2f1342267b16014313202f1342287b1600000517020c170316031602314c0e1600160300001601414c0316033f0216030d2a17034a2e0b0201000203011fd3694941c216004313202e0c2f1342267b16014313202f1342287b160016010001170216020b244c031600024a05160016023d00040201000202010dd354ad273416004313202e0c2f1342267b160016014402010002030118d34b2e25b7160116000005311342277b160113202c170216000c1602621600160213202a16004362440201000101010ed30041471116004313202e0c2f1342267b16004313202d02010000000103d3676c3c33140002010000000103d393f264e8a0000200000101000c16004313202f136afb7b1600a10005a000b45f0000020601402e16014313202f136afa7b160117021600431703160313202e0c2f136af97b0c170416041603314c1016001604160413202a62170516051602000a1702160413202a17044a2c160271a000712f02000002020110160071160171314c051600160144000b4a041601160044000b0200000101010316004f02010000000103d3b299f80ace000201000102021ad3f87904e4140a5f5f6d61705f5f305f5f16004744cbc513412e7b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1701160101010d0d0d1601010102010001010108d32b875d11140a5f5f6d61705f5f305f5f16004744cbc50201010108004061d3d63c543cb4170116014813412d7b16000c331341307b1601ce001600ac140a5f5f6d61705f5f305f5f16014744cbc54c40370c0d0d140a5f5f6d61705f5f305f5f16014744cb1707160701010d0d0d1607010117031702160216002a0c0e0c140a5f5f6d61705f5f305f5f16014744cb01021603000517040c170516051604314c0f1603160500001706160116000e0c1606d4926b380b16050d2a17054a2d4a0bca140a5f5f6d61705f5f305f5f160147447a7e0214696e73657274206174206d617020706174683a2000b116000006d20102a00116002aa10106160116005f0101010900406dd310bd129fb4170116014813412d7b140a5f5f6d61705f5f305f5f16014744cbc513412e7b16000c331341317b0c0d0d140a5f5f6d61705f5f305f5f16014744cb1708160801010d0d0d1608010117031702160216003413412f7b160216002b17041603000517050c170616061605314c0f1603160600001707160116000e0c1607d465b06cae16060d2a17064a2d16040c2f4c0cca0d0c140a5f5f6d61705f5f305f5f160147447a7e021472656d6f7665206174206d617020706174683a2000cb01034a0a16040c0e0c140a5f5f6d61705f5f305f5f16014744cb01021601ce001600aba00116002ba10107160116005f01000206004045d3c5f91cb4b4170216024813412d7b1601160000161341357b140a5f5f6d61705f5f305f5f16024744cbc513412e7b0c0d0d140a5f5f6d61705f5f305f5f16024744cb1705160501010d0d0d160501011704170316040005ce01311341327b1604160000010b241341337b160216030e0c1600d4926b380b1604160000030d0e0c140a5f5f6d61705f5f305f5f16024744cb01020100010500403ad3b6398887b4170116014813412d7b140a5f5f6d61705f5f305f5f16014744cbc513412e7b0c0d0d140a5f5f6d61705f5f305f5f16014744cb1704160401010d0d0d16040101170317021603160000010b251341347b160116020e0c1600d465b06cae1603160000020d0e0c140a5f5f6d61705f5f305f5f16014744cb010201000101011fd3e5725392140a5f5f6d61705f5f305f5f16004744cbc5197a4b0418a0010c2f4c020c020c0d0d140a5f5f6d61705f5f305f5f16004744cb010113c40de0b6b3a76400002ca0012d02010001010008d3e5bf78dcb4a0024513412c7b16000008010001010008d34f58efe6b4a0024513412c7b1600a102010002030109d3af1ed9dd1601b9170216001602000b0009021440260203402006a72c6ce8eb96c1d40fd6c2bfbc51e522cae9ec355d9c63ff6c8a8fcd119100020214404803034020fea099302300b2e1cd13efcf93a4a421f15ba3978dd53a0e391cd2134035eadb02000400bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80aad188000ebc3c1174876e8000137a44447a67cbe36b901780ebb884d3eb0acb3cd77813f67fbc4d88a761e5ec0583d7e5e000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6b328e8c2658537f0100000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"bf5e34710abec3d507483a925287205449787da0678071c7b3eddb14e7b161a40e98fccaf83602e338d21957e8e96c156d07771391ed455021c00f5f8f99414b\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 60355,\n      \"blockHash\": \"02c04dac6bb586ea6428ac21cf82d502013e4017081fc4ec6ef779493039fcc0\",\n      \"codeHash\": \"363b235338a6ed130bea561739876c8d5122a344aa131085b5d8ee6a8b8fd73e\",\n      \"contractInstance\": {\n        \"address\": \"26Mp4LUrqM4uJW1zbvJwvBrGFvcjH8Sns8CbfLmM8Y23Z\",\n        \"contractId\": \"ad6519c3c5b3d820f7a5104032990a78e85379d0e987d3b4880484d243cebd00\",\n        \"groupIndex\": 0\n      }\n    },\n    \"GovernanceDemo\": {\n      \"txId\": \"55bbbfdd126faa90658a8ea502462b763c90731621b624c5aa68ee14b3631317\",\n      \"unsignedTx\": \"000401010103000000081500bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a13c4016345785d8a0000a214440d090c40e241c942404262427642b742f142ff43cd43d843e343f30100020600405ad3926b380bb417021602ce00774513087b140a5f5f6d61705f5f305f5f16004744cbc54c403f0c0d0d140a5f5f6d61705f5f305f5f16004744cb1705160501010d0d0d1605010117041703000b7a4c041816030c304c180c0d0d140a5f5f6d61705f5f315f5f16034044cb010116012a0c0e0c140a5f5f6d61705f5f315f5f16034044cb0102a00016012aa100160416012a0d0e0c140a5f5f6d61705f5f305f5f16004744cb01024a0bca140a5f5f6d61705f5f305f5f160047447a7e0214696e73657274206174206d617020706174683a2000b10c1601d2010201000207004060d365b06caeb417021602ce00774513087b140a5f5f6d61705f5f305f5f16004744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1706160601010d0d0d1606010117041703160416012b170516050d0e0c140a5f5f6d61705f5f305f5f16004744cb0102000b7a4c041816030c304c180c0d0d140a5f5f6d61705f5f315f5f16034044cb010116012b0c0e0c140a5f5f6d61705f5f315f5f16034044cb0102a00016012ba10016050c2f4c0bca0d0c140a5f5f6d61705f5f305f5f160047447a7e021472656d6f7665206174206d617020706174683a2000cb010301000002004035d3ecf99ab7b4ce054513077b000919107b000a19117b56a101ce01ce02ce03ce041017000c170116011600314c16ca140a5f5f6d61705f5f315f5f16017a10314d0d2acf40447a7e0214696e73657274206174206d617020706174683a2000b10cd2010116010d2a17014a2605a0015e010000000012d33919f580b4ce054513077b00090f7b000a19117b56a10207a0025e010000000406d3068539face01ce02ce03ce040201000102021ad344a25325140a5f5f6d61705f5f305f5f16004744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1701160101010d0d0d1601010102010001010116d32e30a67700090f7b140a5f5f6d61705f5f315f5f16004044cbc50e7b0c0d0d140a5f5f6d61705f5f315f5f16004044cb010102010000000103d33cfd4f9ea000020100010300405cd376a80ea2b417011601480c7b00090f7b000a19117b140a5f5f6d61705f5f315f5f16004044cbc50e7b140a5f5f6d61705f5f305f5f16014744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16014744cb01010c2f13067b0d0d0d140a5f5f6d61705f5f305f5f16014744cb01011702a00016022aa1000c0d0d140a5f5f6d61705f5f315f5f16004044cb010116022a0c0e0c140a5f5f6d61705f5f315f5f16004044cb010216000c0e0c140a5f5f6d61705f5f305f5f16014744cb01020616011600160260000000000104a0010c3002000000000104a0020c300200000000010700097a4c0318000a190214402d060300020002000200020004030000000000000000000000000000000000000000000000000000000000000000140703020002000200ad188000e7fac1174876e8000137a44447629d8865f0377d63a95c83b089d78f8f36cef8794c0c63d9c8bfa4737b43163b000381818e63bd9e35a5489b52a430accefc608fd60aa2c7c0d1b393b5239aedf6b001c6b328ea3b1c3eef04c80000bee85f379545a2ed9f6cceb331288842f378cf0f04012ad4ac8824aae7d6f80a00000000000000000000\",\n      \"signature\": \"71402f7759070a743093ac7927029c09fb28c751d86015778776502fb740cf81299c12b9629a05a39f9ef52c1de3a5372969f92adc84271062c3a2a5db9cab6a\",\n      \"gasPrice\": \"100000000000\",\n      \"gasAmount\": 59386,\n      \"blockHash\": \"0890c618cdc93a4eafa277b94a060dd5f7f0fd27fdde6515e64b6a2615b61280\",\n      \"codeHash\": \"214804d168d252924a8a1a8e14570e4e26f8a09a93f8ce3848daee36038f2804\",\n      \"contractInstance\": {\n        \"address\": \"2463zao2CfMyco56hnwe2JGQz9feg7aDjkyfRR9CLaTPd\",\n        \"contractId\": \"8ba430c66789eb7096b50e180d6c6bbb598e2ebd9d3b958fe8a85918a9741a00\",\n        \"groupIndex\": 0\n      }\n    }\n  },\n  \"scripts\": {},\n  \"migrations\": {}\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport {\n  RunScriptResult,\n  DeployContractExecutionResult,\n  NetworkId,\n} from \"@alephium/web3\";\nimport {\n  AlphUnstakeVault,\n  AlphUnstakeVaultInstance,\n  XAlphToken,\n  XAlphTokenInstance,\n  GovernanceDemo,\n  GovernanceDemoInstance,\n  RewardSharingVault,\n  RewardSharingVaultInstance,\n  XAlphStakeVault,\n  XAlphStakeVaultInstance,\n} from \".\";\nimport { default as testnetDeployments } from \"../../deployments/.deployments.testnet.json\";\nimport { default as devnetDeployments } from \"../../deployments/.deployments.devnet.json\";\n\nexport type Deployments = {\n  deployerAddress: string;\n  contracts: {\n    AlphUnstakeVault: DeployContractExecutionResult<AlphUnstakeVaultInstance>;\n    XAlphToken: DeployContractExecutionResult<XAlphTokenInstance>;\n    GovernanceDemo: DeployContractExecutionResult<GovernanceDemoInstance>;\n    RewardSharingVault: DeployContractExecutionResult<RewardSharingVaultInstance>;\n    XAlphStakeVault: DeployContractExecutionResult<XAlphStakeVaultInstance>;\n  };\n};\n\nfunction toDeployments(json: any): Deployments {\n  const contracts = {\n    AlphUnstakeVault: {\n      ...json.contracts[\"AlphUnstakeVault\"],\n      contractInstance: AlphUnstakeVault.at(\n        json.contracts[\"AlphUnstakeVault\"].contractInstance.address\n      ),\n    },\n    XAlphToken: {\n      ...json.contracts[\"XAlphToken\"],\n      contractInstance: XAlphToken.at(\n        json.contracts[\"XAlphToken\"].contractInstance.address\n      ),\n    },\n    GovernanceDemo: {\n      ...json.contracts[\"GovernanceDemo\"],\n      contractInstance: GovernanceDemo.at(\n        json.contracts[\"GovernanceDemo\"].contractInstance.address\n      ),\n    },\n    RewardSharingVault: {\n      ...json.contracts[\"RewardSharingVault\"],\n      contractInstance: RewardSharingVault.at(\n        json.contracts[\"RewardSharingVault\"].contractInstance.address\n      ),\n    },\n    XAlphStakeVault: {\n      ...json.contracts[\"XAlphStakeVault\"],\n      contractInstance: XAlphStakeVault.at(\n        json.contracts[\"XAlphStakeVault\"].contractInstance.address\n      ),\n    },\n  };\n  return {\n    ...json,\n    contracts: contracts as Deployments[\"contracts\"],\n  };\n}\n\nexport function loadDeployments(\n  networkId: NetworkId,\n  deployerAddress?: string\n): Deployments {\n  const deployments =\n    networkId === \"testnet\"\n      ? testnetDeployments\n      : networkId === \"devnet\"\n      ? devnetDeployments\n      : undefined;\n  if (deployments === undefined) {\n    throw Error(\"The contract has not been deployed to the \" + networkId);\n  }\n  const allDeployments: any[] = Array.isArray(deployments)\n    ? deployments\n    : [deployments];\n  if (deployerAddress === undefined) {\n    if (allDeployments.length > 1) {\n      throw Error(\n        \"The contract has been deployed multiple times on \" +\n          networkId +\n          \", please specify the deployer address\"\n      );\n    } else {\n      return toDeployments(allDeployments[0]);\n    }\n  }\n  const result = allDeployments.find(\n    (d) => d.deployerAddress === deployerAddress\n  );\n  if (result === undefined) {\n    throw Error(\"The contract deployment result does not exist\");\n  }\n  return toDeployments(result);\n}\n","const U256_HEX_CHARS = 64;\nconst CONTRACT_ID_HEX_CHARS = 64;\n\nconst chunkHexString = (hex: string, chunkLength: number): string[] => {\n  if (hex.length === 0) {\n    return [];\n  }\n  if (hex.length % chunkLength !== 0) {\n    throw new Error(`Packed data must be a multiple of ${chunkLength / 2} bytes`);\n  }\n  const chunks: string[] = [];\n  for (let offset = 0; offset < hex.length; offset += chunkLength) {\n    const chunk = hex.slice(offset, offset + chunkLength);\n    chunks.push(chunk);\n  }\n  return chunks;\n};\n\nexport const decodeU256List = (str: string): bigint[] => {\n  return chunkHexString(str, U256_HEX_CHARS).map((chunk) => BigInt(`0x${chunk}`));\n};\n\nexport const decodeContractIdList = (str: string): string[] => {\n  return chunkHexString(str, CONTRACT_ID_HEX_CHARS);\n};\n","import type { NetworkId } from '@alephium/web3';\n\nexport type StakingSettings = {\n  unstakeDuration: bigint;\n  maxActiveUnstakeRequestsPerUser: bigint;\n  maxConnectedDapps: bigint;\n};\n\nconst defaultSettings: StakingSettings = {\n  unstakeDuration: 30n * 24n * 60n * 60n * 1000n, // 30 days in milliseconds\n  maxActiveUnstakeRequestsPerUser: 16n,\n  maxConnectedDapps: 10n,\n};\n\nconst networkOverrides: Partial<Record<NetworkId, Partial<StakingSettings>>> = {\n  devnet: {\n    unstakeDuration: 60n * 1000n, // 1 minute\n    maxConnectedDapps: 2n,\n  },\n};\n\nfunction buildSettings(networkId: NetworkId): StakingSettings {\n  const overrides = networkOverrides[networkId];\n  return {\n    ...defaultSettings,\n    ...(overrides ?? {}),\n  };\n}\n\nexport const stakingSettingsByNetwork: Record<NetworkId, StakingSettings> = {\n  mainnet: buildSettings('mainnet'),\n  testnet: buildSettings('testnet'),\n  devnet: buildSettings('devnet'),\n};\n\nexport function getStakingSettings(networkId: NetworkId): StakingSettings {\n  return stakingSettingsByNetwork[networkId];\n}\n","import type { TokenInfo } from '@alephium/token-list';\nimport { Pool } from 'clmm/artifacts/ts/Pool';\nimport { PositionInfo } from 'clmm/artifacts/ts/types';\n\nexport interface ClmmConfig {\n  groupIndex: number;\n  factoryId: string;\n  positionManagerId: string;\n  defaultConfigIndex: bigint;\n  accountRoot: string;\n}\n\nexport interface ClmmSwapParams {\n  token0: string;\n  token1: string;\n  amount: bigint;\n  slippage: bigint;\n  routePlan: bigint[];\n}\n\nexport interface SimulateSwap {\n  configIndex: bigint;\n  token0: string;\n  token1: string;\n  zeroForOne: boolean;\n  amount: bigint;\n}\n\nexport interface LiquidityForPrice {\n  liquidity: bigint;\n  sqrtPriceX96: bigint;\n}\n\nexport interface LiquidityDistribution {\n  baseSqrtPriceX96: bigint;\n  sqrtPriceX96: bigint;\n  liquidity: bigint;\n  fee: bigint;\n  rows: Array<LiquidityForPrice>;\n}\n\nexport interface AddLiquidity {\n  token0: string;\n  token1: string;\n  configIndex: bigint;\n  owner?: string;\n  tickLower: bigint;\n  tickUpper: bigint;\n  slippage: bigint;\n  amount0: bigint;\n  amount1: bigint;\n  existingPosition?: boolean;\n}\n\nexport interface RemoveLiquidity {\n  token0: string;\n  token1: string;\n  configIndex: bigint;\n  owner: string;\n  tickLower: bigint;\n  tickUpper: bigint;\n  liquidity: bigint;\n  base: 'token0' | 'token1';\n  baseAmount: bigint;\n  otherAmountMax: bigint;\n}\n\nexport interface CollectTokens {\n  token0: string;\n  token1: string;\n  configIndex: bigint;\n  owner: string;\n  recipient: string;\n  tickLower: bigint;\n  tickUpper: bigint;\n  liquidity: bigint; // != 0 if also remove liquidity\n  amount0Max: bigint;\n  amount1Max: bigint;\n}\n\nexport interface PositionPath {\n  poolId: string;\n  owner: string;\n  tickLower: bigint;\n  tickUpper: bigint;\n  acc: bigint;\n  iacc0: bigint;\n  iacc1: bigint;\n  t0: bigint;\n  acct0: bigint;\n}\n\nexport interface CollectProtocolFees {\n  token0: string;\n  token1: string;\n  configIndex: bigint;\n  recipient: string;\n}\n\nexport interface SetRewardParams {\n  token0: string;\n  token1: string;\n  configIndex: bigint;\n  rewardToken: string;\n  payer: string;\n  amount: bigint;\n  openTime: bigint;\n  endTime: bigint;\n}\n\nexport interface ExtendRewards {\n  token0: string;\n  token1: string;\n  configIndex: bigint;\n  rewardToken: string;\n  payer: string;\n  amount: bigint;\n}\n\nexport interface ClmmPoolContractState extends ClmmPoolConfig {\n  poolId: string;\n  token0Info: TokenInfo;\n  token1Info: TokenInfo;\n  liquidity: bigint;\n  sqrtPriceX96: bigint;\n  tick: bigint;\n}\n\nexport interface ClmmPoolConfig {\n  configIndex: bigint;\n  tickSpacing: bigint;\n  tradingFee: bigint;\n  protocolFee: bigint;\n}\n\nexport const MAX_PIPS = Pool.consts.MAX_PIPS;\n\n\nexport type ClmmPositionInfo = PositionInfo\n\nexport interface GetPositionAmountsFromPriceProps {\n  sqrtRatioX96: bigint;\n  tokenBaseId: string;\n  tokenQuoteId: string;\n  lowerTick: bigint;\n  upperTick: bigint;\n  amountBase: bigint;\n  amountQuote: bigint;\n}\n\nexport interface GetPositionAmountsFromPriceReturn {\n  newAmountBase: bigint;\n  newAmountQuote: bigint;\n  liquidity: bigint;\n}\n"],"mappings":"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,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WACoE;AACpE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB,OAChB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WACwE;AACxE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WACsE;AACtE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,cAAc,OACZ,WAGG;AACH,aAAOM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAGG;AACH,aAAOA,oBAAkB,wBAAwB,MAAM,UAAU,MAAM;AAAA,IACzE;AAAA,IACA,kBAAkB,OAChB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAP;AAAA,IACF;AAAA,EACF;AACF;;;AEt1BA;AAAA,EAEE,YAAAQ;AAAA,EAIA,mBAAAC;AAAA,EAOA,0BAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EACA,iCAAAC;AAAA,EAKA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,OAAS;AAAA,QACP,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAkB;AACpB;;;AD7nBA,IAAMC,YAAN,cAAsBC,kBAAgD;AAAA,EACpE,aAAa,QAA0B;AACrC,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACR;AAAA,IACR;AAAA,EACF;AAAA,EAEA,aAAa;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,SAAS;AAAA,IACP,UAAU,OAAO,SAAS;AAAA,IAC1B,eAAe;AAAA,MACb,yBAAyB,OAAO,KAAK;AAAA,MACrC,iBAAiB,OAAO,KAAK;AAAA,IAC/B;AAAA,IACA,oBAAoB;AAAA,MAClB,wBAAwB,OAAO,KAAK;AAAA,MACpC,iBAAiB,OAAO,KAAK;AAAA,MAC7B,WAAW,OAAO,KAAK;AAAA,MACvB,aAAa,OAAO,KAAK;AAAA,MACzB,kBAAkB,OAAO,KAAK;AAAA,IAChC;AAAA,IACA,eAAe,EAAE,gBAAgB,OAAO,KAAK,EAAE;AAAA,IAC/C,iBAAiB,EAAE,gBAAgB,OAAO,KAAK,EAAE;AAAA,IACjD,cAAc;AAAA,MACZ,MAAM,OAAO,GAAG;AAAA,MAChB,UAAU,OAAO,GAAG;AAAA,MACpB,MAAM,OAAO,GAAG;AAAA,IAClB;AAAA,IACA,WAAW;AAAA,MACT,KAAK,OAAO,KAAK;AAAA,MACjB,KAAK,OAAO,KAAK;AAAA,MACjB,KAAK,OAAO,KAAK;AAAA,MACjB,IAAI,OAAO,KAAK;AAAA,MAChB,KAAK,OAAO,KAAK;AAAA,MACjB,IAAI,OAAO,KAAK;AAAA,MAChB,kBAAkB,OAAO,KAAK;AAAA,MAC9B,wBAAwB,OAAO,KAAK;AAAA,MACpC,wBAAwB,OAAO,KAAK;AAAA,MACpC,0BAA0B,OAAO,KAAK;AAAA,MACtC,qBAAqB,OAAO,KAAK;AAAA,MACjC,oBAAoB,OAAO,KAAK;AAAA,MAChC,oBAAoB,OAAO,KAAK;AAAA,MAChC,mBAAmB,OAAO,KAAK;AAAA,MAC/B,kBAAkB,OAAO,KAAK;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,GAAG,SAA+B;AAChC,WAAO,IAAI,aAAa,OAAO;AAAA,EACjC;AAAA,EAEA,QAAQ;AAAA,IACN,kBAAkB,OAChB,WAIsD;AACtD,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WAImD;AACnD,aAAOD,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,IACA,YAAY,OACV,WACsD;AACtD,aAAOD,aAAW,MAAM,cAAc,QAAQC,sBAAqB;AAAA,IACrE;AAAA,IACA,aAAa,OACX,WAIiD;AACjD,aAAOD,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,IACA,oBAAoB,OAClB,WACmD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WAYG;AACH,aAAOD,aAAW,MAAM,mBAAmB,QAAQC,sBAAqB;AAAA,IAC1E;AAAA,IACA,eAAe,OACb,WAImD;AACnD,aAAOD,aAAW,MAAM,iBAAiB,QAAQC,sBAAqB;AAAA,IACxE;AAAA,IACA,uCAAuC,OACrC,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,yCAAyC,OACvC,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,2BAA2B,OACzB,WASmD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,4BAA4B,OAC1B,WASmD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WASmD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WAImD;AACnD,aAAOD,aAAW,MAAM,mBAAmB,QAAQC,sBAAqB;AAAA,IAC1E;AAAA,IACA,mBAAmB,OACjB,WASmD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WAImD;AACnD,aAAOD,aAAW,MAAM,mBAAmB,QAAQC,sBAAqB;AAAA,IAC1E;AAAA,IACA,QAAQ,OACN,WAImD;AACnD,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,kBAAkB,OAChB,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAIsD;AACtD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,SAAS,OACP,WAIsD;AACtD,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,mBAAmB,OACjB,WAIsD;AACtD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WACiD;AACjD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,kCAAkC,OAChC,WAI8D;AAC9D,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAIsD;AACtD,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,oBAAoB,OAClB,WAIsD;AACtD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WAIsD;AACtD,aAAOD,aAAW,MAAM,cAAc,QAAQC,sBAAqB;AAAA,IACrE;AAAA,IACA,UAAU,OACR,WAIsD;AACtD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,gBAAgB,OACd,WAIsD;AACtD,aAAOD,aAAW,MAAM,kBAAkB,QAAQC,sBAAqB;AAAA,IACzE;AAAA,IACA,YAAY,OACV,WAIiD;AACjD,aAAOD,aAAW,MAAM,cAAc,QAAQC,sBAAqB;AAAA,IACrE;AAAA,IACA,UAAU,OACR,WACsD;AACtD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,QAAQ,OACN,WACsD;AACtD,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,SAAS,OACP,WACiE;AACjE,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,YAAY,OACV,WAIsD;AACtD,aAAOD,aAAW,MAAM,cAAc,QAAQC,sBAAqB;AAAA,IACrE;AAAA,IACA,aAAa,OACX,WAIiE;AACjE,aAAOD,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,IACA,oBAAoB,OAClB,WAIqE;AACrE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WAUqE;AACrE,aAAOD,aAAW,MAAM,kBAAkB,QAAQC,sBAAqB;AAAA,IACzE;AAAA,IACA,gBAAgB,OACd,WAMG;AACH,aAAOD,aAAW,MAAM,kBAAkB,QAAQC,sBAAqB;AAAA,IACzE;AAAA,IACA,MAAM,OACJ,WAU6D;AAC7D,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,MAAM,OACJ,WAU6D;AAC7D,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,SAAS,OACP,WAWqE;AACrE,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,UAAU,OACR,WAIiD;AACjD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,cAAc,OACZ,WASiD;AACjD,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,MAAM,OACJ,WAY6D;AAC7D,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,KAAK,OACH,WAMG;AACH,aAAOD,aAAW,MAAM,OAAO,QAAQC,sBAAqB;AAAA,IAC9D;AAAA,IACA,cAAc,OACZ,WAIiD;AACjD,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,aAAa,OACX,WAIiD;AACjD,aAAOD,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,IACA,kBAAkB,OAChB,WAIqE;AACrE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAIiD;AACjD,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,eAAe,OACb,WAIiD;AACjD,aAAOD,aAAW,MAAM,iBAAiB,QAAQC,sBAAqB;AAAA,IACxE;AAAA,IACA,eAAe,OACb,WAIiD;AACjD,aAAOD,aAAW,MAAM,iBAAiB,QAAQC,sBAAqB;AAAA,IACxE;AAAA,IACA,iBAAiB,OACf,WAUiD;AACjD,aAAOD,aAAW,MAAM,mBAAmB,QAAQC,sBAAqB;AAAA,IAC1E;AAAA,IACA,qBAAqB,OACnB,WAIiD;AACjD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAa+D;AAC/D,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,aAAa,OACX,WAIsD;AACtD,aAAOD,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,EACF;AAAA,EAEA,aAAa,YAA8B,OAAe,SAAkB;AAC1E,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,OAAO,IAAIL;AAAA,EACtBM,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACM;AAAA,EACR;AACF;AACAC,kBAAiB,IAAI;AAGd,IAAM,eAAN,cAA2BC,mBAAiB;AAAA,EACjD,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAAuC;AAC3C,WAAOC,qBAAmB,MAAM,IAAI;AAAA,EACtC;AAAA,EAEA,MAAM,gCAAiD;AACrD,WAAOC,gCAA8B,KAAK,OAAO;AAAA,EACnD;AAAA,EAEA,yBACE,SACA,WACmB;AACnB,WAAOC;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,wBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,uBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,sBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,8BACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SAWA,WACmB;AACnB,WAAOC,0BAAwB,KAAK,UAAU,MAAM,SAAS,SAAS;AAAA,EACxE;AAAA,EAEA,OAAO;AAAA,IACL,kBAAkB,OAChB,WAC4D;AAC5D,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WACuD;AACvD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WACsD;AACtD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WACuD;AACvD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAC8D;AAC9D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAC8D;AAC9D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WAC2D;AAC3D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,OACb,WACyD;AACzD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,uCAAuC,OACrC,WAGG;AACH,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,yCAAyC,OACvC,WAGG;AACH,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,2BAA2B,OACzB,WACqE;AACrE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,4BAA4B,OAC1B,WACsE;AACtE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WAC6D;AAC7D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WAC2D;AAC3D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WAC6D;AAC7D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WAC2D;AAC3D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WACkD;AAClD,aAAOQ,aAAW,MAAM,MAAM,UAAU,QAAQR,sBAAqB;AAAA,IACvE;AAAA,IACA,kBAAkB,OAChB,WAC4D;AAC5D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WACoD;AACpD,aAAOQ,aAAW,MAAM,MAAM,YAAY,QAAQR,sBAAqB;AAAA,IACzE;AAAA,IACA,SAAS,OACP,WACmD;AACnD,aAAOQ,aAAW,MAAM,MAAM,WAAW,QAAQR,sBAAqB;AAAA,IACxE;AAAA,IACA,mBAAmB,OACjB,WAC6D;AAC7D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WACoD;AACpD,aAAOQ,aAAW,MAAM,MAAM,YAAY,QAAQR,sBAAqB;AAAA,IACzE;AAAA,IACA,kCAAkC,OAChC,WAGG;AACH,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WACwD;AACxD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAC8D;AAC9D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WACsD;AACtD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WACoD;AACpD,aAAOQ,aAAW,MAAM,MAAM,YAAY,QAAQR,sBAAqB;AAAA,IACzE;AAAA,IACA,gBAAgB,OACd,WAC0D;AAC1D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WACsD;AACtD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WACoD;AACpD,aAAOQ,aAAW,MAAM,MAAM,YAAY,QAAQR,sBAAqB;AAAA,IACzE;AAAA,IACA,QAAQ,OACN,WACkD;AAClD,aAAOQ,aAAW,MAAM,MAAM,UAAU,QAAQR,sBAAqB;AAAA,IACvE;AAAA,IACA,SAAS,OACP,WACmD;AACnD,aAAOQ,aAAW,MAAM,MAAM,WAAW,QAAQR,sBAAqB;AAAA,IACxE;AAAA,IACA,YAAY,OACV,WACsD;AACtD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WACuD;AACvD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAC8D;AAC9D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WAC0D;AAC1D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WAC0D;AAC1D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACgD;AAChD,aAAOQ,aAAW,MAAM,MAAM,QAAQ,QAAQR,sBAAqB;AAAA,IACrE;AAAA,IACA,MAAM,OACJ,WACgD;AAChD,aAAOQ,aAAW,MAAM,MAAM,QAAQ,QAAQR,sBAAqB;AAAA,IACrE;AAAA,IACA,SAAS,OACP,WACmD;AACnD,aAAOQ,aAAW,MAAM,MAAM,WAAW,QAAQR,sBAAqB;AAAA,IACxE;AAAA,IACA,UAAU,OACR,WACoD;AACpD,aAAOQ,aAAW,MAAM,MAAM,YAAY,QAAQR,sBAAqB;AAAA,IACzE;AAAA,IACA,cAAc,OACZ,WACwD;AACxD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACgD;AAChD,aAAOQ,aAAW,MAAM,MAAM,QAAQ,QAAQR,sBAAqB;AAAA,IACrE;AAAA,IACA,KAAK,OACH,WAC+C;AAC/C,aAAOQ,aAAW,MAAM,MAAM,OAAO,QAAQR,sBAAqB;AAAA,IACpE;AAAA,IACA,cAAc,OACZ,WACwD;AACxD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WACuD;AACvD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB,OAChB,WAC4D;AAC5D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WACwD;AACxD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,OACb,WACyD;AACzD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,OACb,WACyD;AACzD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WAC2D;AAC3D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,qBAAqB,OACnB,WAC+D;AAC/D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WACwD;AACxD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WACuD;AACvD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,kBAAkB,OAChB,WACmE;AACnE,aAAOS,oBAAkB,MAAM,MAAM,oBAAoB,MAAM;AAAA,IACjE;AAAA,IACA,aAAa,OACX,WAC8D;AAC9D,aAAOA,oBAAkB,MAAM,MAAM,eAAe,MAAM;AAAA,IAC5D;AAAA,IACA,YAAY,OACV,WAC6D;AAC7D,aAAOA,oBAAkB,MAAM,MAAM,cAAc,MAAM;AAAA,IAC3D;AAAA,IACA,aAAa,OACX,WAC8D;AAC9D,aAAOA,oBAAkB,MAAM,MAAM,eAAe,MAAM;AAAA,IAC5D;AAAA,IACA,oBAAoB,OAClB,WACqE;AACrE,aAAOA,oBAAkB,MAAM,MAAM,sBAAsB,MAAM;AAAA,IACnE;AAAA,IACA,oBAAoB,OAClB,WACqE;AACrE,aAAOA,oBAAkB,MAAM,MAAM,sBAAsB,MAAM;AAAA,IACnE;AAAA,IACA,iBAAiB,OACf,WACkE;AAClE,aAAOA,oBAAkB,MAAM,MAAM,mBAAmB,MAAM;AAAA,IAChE;AAAA,IACA,eAAe,OACb,WACgE;AAChE,aAAOA,oBAAkB,MAAM,MAAM,iBAAiB,MAAM;AAAA,IAC9D;AAAA,IACA,uCAAuC,OACrC,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,yCAAyC,OACvC,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,2BAA2B,OACzB,WAGG;AACH,aAAOA,oBAAkB,MAAM,MAAM,6BAA6B,MAAM;AAAA,IAC1E;AAAA,IACA,4BAA4B,OAC1B,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WACoE;AACpE,aAAOA,oBAAkB,MAAM,MAAM,qBAAqB,MAAM;AAAA,IAClE;AAAA,IACA,iBAAiB,OACf,WACkE;AAClE,aAAOA,oBAAkB,MAAM,MAAM,mBAAmB,MAAM;AAAA,IAChE;AAAA,IACA,mBAAmB,OACjB,WACoE;AACpE,aAAOA,oBAAkB,MAAM,MAAM,qBAAqB,MAAM;AAAA,IAClE;AAAA,IACA,iBAAiB,OACf,WACkE;AAClE,aAAOA,oBAAkB,MAAM,MAAM,mBAAmB,MAAM;AAAA,IAChE;AAAA,IACA,QAAQ,OACN,WACyD;AACzD,aAAOA,oBAAkB,MAAM,MAAM,UAAU,MAAM;AAAA,IACvD;AAAA,IACA,kBAAkB,OAChB,WACmE;AACnE,aAAOA,oBAAkB,MAAM,MAAM,oBAAoB,MAAM;AAAA,IACjE;AAAA,IACA,UAAU,OACR,WAC2D;AAC3D,aAAOA,oBAAkB,MAAM,MAAM,YAAY,MAAM;AAAA,IACzD;AAAA,IACA,SAAS,OACP,WAC0D;AAC1D,aAAOA,oBAAkB,MAAM,MAAM,WAAW,MAAM;AAAA,IACxD;AAAA,IACA,mBAAmB,OACjB,WACoE;AACpE,aAAOA,oBAAkB,MAAM,MAAM,qBAAqB,MAAM;AAAA,IAClE;AAAA,IACA,UAAU,OACR,WAC2D;AAC3D,aAAOA,oBAAkB,MAAM,MAAM,YAAY,MAAM;AAAA,IACzD;AAAA,IACA,kCAAkC,OAChC,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAC+D;AAC/D,aAAOA,oBAAkB,MAAM,MAAM,gBAAgB,MAAM;AAAA,IAC7D;AAAA,IACA,oBAAoB,OAClB,WACqE;AACrE,aAAOA,oBAAkB,MAAM,MAAM,sBAAsB,MAAM;AAAA,IACnE;AAAA,IACA,YAAY,OACV,WAC6D;AAC7D,aAAOA,oBAAkB,MAAM,MAAM,cAAc,MAAM;AAAA,IAC3D;AAAA,IACA,UAAU,OACR,WAC2D;AAC3D,aAAOA,oBAAkB,MAAM,MAAM,YAAY,MAAM;AAAA,IACzD;AAAA,IACA,gBAAgB,OACd,WACiE;AACjE,aAAOA,oBAAkB,MAAM,MAAM,kBAAkB,MAAM;AAAA,IAC/D;AAAA,IACA,YAAY,OACV,WAC6D;AAC7D,aAAOA,oBAAkB,MAAM,MAAM,cAAc,MAAM;AAAA,IAC3D;AAAA,IACA,UAAU,OACR,WAC2D;AAC3D,aAAOA,oBAAkB,MAAM,MAAM,YAAY,MAAM;AAAA,IACzD;AAAA,IACA,QAAQ,OACN,WACyD;AACzD,aAAOA,oBAAkB,MAAM,MAAM,UAAU,MAAM;AAAA,IACvD;AAAA,IACA,SAAS,OACP,WAC0D;AAC1D,aAAOA,oBAAkB,MAAM,MAAM,WAAW,MAAM;AAAA,IACxD;AAAA,IACA,YAAY,OACV,WAC6D;AAC7D,aAAOA,oBAAkB,MAAM,MAAM,cAAc,MAAM;AAAA,IAC3D;AAAA,IACA,aAAa,OACX,WAC8D;AAC9D,aAAOA,oBAAkB,MAAM,MAAM,eAAe,MAAM;AAAA,IAC5D;AAAA,IACA,oBAAoB,OAClB,WACqE;AACrE,aAAOA,oBAAkB,MAAM,MAAM,sBAAsB,MAAM;AAAA,IACnE;AAAA,IACA,gBAAgB,OACd,WACiE;AACjE,aAAOA,oBAAkB,MAAM,MAAM,kBAAkB,MAAM;AAAA,IAC/D;AAAA,IACA,gBAAgB,OACd,WACiE;AACjE,aAAOA,oBAAkB,MAAM,MAAM,kBAAkB,MAAM;AAAA,IAC/D;AAAA,IACA,MAAM,OACJ,WACuD;AACvD,aAAOA,oBAAkB,MAAM,MAAM,QAAQ,MAAM;AAAA,IACrD;AAAA,IACA,MAAM,OACJ,WACuD;AACvD,aAAOA,oBAAkB,MAAM,MAAM,QAAQ,MAAM;AAAA,IACrD;AAAA,IACA,SAAS,OACP,WAC0D;AAC1D,aAAOA,oBAAkB,MAAM,MAAM,WAAW,MAAM;AAAA,IACxD;AAAA,IACA,UAAU,OACR,WAC2D;AAC3D,aAAOA,oBAAkB,MAAM,MAAM,YAAY,MAAM;AAAA,IACzD;AAAA,IACA,cAAc,OACZ,WAC+D;AAC/D,aAAOA,oBAAkB,MAAM,MAAM,gBAAgB,MAAM;AAAA,IAC7D;AAAA,IACA,MAAM,OACJ,WACuD;AACvD,aAAOA,oBAAkB,MAAM,MAAM,QAAQ,MAAM;AAAA,IACrD;AAAA,IACA,KAAK,OACH,WACsD;AACtD,aAAOA,oBAAkB,MAAM,MAAM,OAAO,MAAM;AAAA,IACpD;AAAA,IACA,cAAc,OACZ,WAC+D;AAC/D,aAAOA,oBAAkB,MAAM,MAAM,gBAAgB,MAAM;AAAA,IAC7D;AAAA,IACA,aAAa,OACX,WAC8D;AAC9D,aAAOA,oBAAkB,MAAM,MAAM,eAAe,MAAM;AAAA,IAC5D;AAAA,IACA,kBAAkB,OAChB,WACmE;AACnE,aAAOA,oBAAkB,MAAM,MAAM,oBAAoB,MAAM;AAAA,IACjE;AAAA,IACA,cAAc,OACZ,WAC+D;AAC/D,aAAOA,oBAAkB,MAAM,MAAM,gBAAgB,MAAM;AAAA,IAC7D;AAAA,IACA,eAAe,OACb,WACgE;AAChE,aAAOA,oBAAkB,MAAM,MAAM,iBAAiB,MAAM;AAAA,IAC9D;AAAA,IACA,eAAe,OACb,WACgE;AAChE,aAAOA,oBAAkB,MAAM,MAAM,iBAAiB,MAAM;AAAA,IAC9D;AAAA,IACA,iBAAiB,OACf,WACkE;AAClE,aAAOA,oBAAkB,MAAM,MAAM,mBAAmB,MAAM;AAAA,IAChE;AAAA,IACA,qBAAqB,OACnB,WACsE;AACtE,aAAOA,oBAAkB,MAAM,MAAM,uBAAuB,MAAM;AAAA,IACpE;AAAA,IACA,cAAc,OACZ,WAC+D;AAC/D,aAAOA,oBAAkB,MAAM,MAAM,gBAAgB,MAAM;AAAA,IAC7D;AAAA,IACA,aAAa,OACX,WAC8D;AAC9D,aAAOA,oBAAkB,MAAM,MAAM,eAAe,MAAM;AAAA,IAC5D;AAAA,EACF;AAAA,EAQA,MAAM,UAEJ,QAAkC;AAClC,WAAO,MAAMC,mBAAiB,MAAM,MAAM,QAAQV,sBAAqB;AAAA,EACzE;AACF;;;AEl+EA;AAAA,EAEE,YAAAW;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS,CAAC;AACZ;;;ADmDA,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAAgC;AAC3C,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACR;AAAA,IACR;AAAA,EACF;AAAA,EAEA,GAAG,SAAqC;AACtC,WAAO,IAAI,mBAAmB,OAAO;AAAA,EACvC;AAAA,EAEA,QAAQ;AAAA,IACN,KAAK,OACH,WAIyD;AACzD,aAAOC,aAAW,MAAM,OAAO,QAAQC,sBAAqB;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,aAAa,IAAIL;AAAA,EAC5BM,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACM;AAAA,EACR;AACF;AACAC,kBAAiB,UAAU;AAGpB,IAAM,qBAAN,cAAiCC,mBAAiB;AAAA,EACvD,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAA6C;AACjD,WAAOC,qBAAmB,YAAY,IAAI;AAAA,EAC5C;AAAA,EAEA,OAAO;AAAA,IACL,KAAK,OACH,WACqD;AACrD,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,KAAK,OACH,WAC4D;AAC5D,aAAOM,oBAAkB,YAAY,MAAM,OAAO,MAAM;AAAA,IAC1D;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAP;AAAA,IACF;AAAA,EACF;AACF;;;AE9KA;AAAA,EAEE,YAAAQ;AAAA,EAIA,mBAAAC;AAAA,EAOA,0BAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EACA,iCAAAC;AAAA,EAKA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ADpEA,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAAiC;AAC5C,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACR;AAAA,IACR;AAAA,EACF;AAAA,EAEA,aAAa,EAAE,eAAe,GAAG,aAAa,GAAG,gBAAgB,EAAE;AAAA,EACnE,SAAS;AAAA,IACP,cAAc;AAAA,MACZ,mBAAmB,OAAO,KAAK;AAAA,MAC/B,0BAA0B,OAAO,KAAK;AAAA,MACtC,0BAA0B,OAAO,KAAK;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,GAAG,SAAsC;AACvC,WAAO,IAAI,oBAAoB,OAAO;AAAA,EACxC;AAAA,EAEA,QAAQ;AAAA,IACN,YAAY,OACV,WAIsD;AACtD,aAAOC,aAAW,MAAM,cAAc,QAAQC,sBAAqB;AAAA,IACrE;AAAA,IACA,UAAU,OACR,WAIsD;AACtD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,gBAAgB,OACd,WAIsD;AACtD,aAAOD,aAAW,MAAM,kBAAkB,QAAQC,sBAAqB;AAAA,IACzE;AAAA,IACA,kCAAkC,OAChC,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAImD;AACnD,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,QAAQ,OACN,WAUsD;AACtD,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,qBAAqB,OACnB,WASiD;AACjD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WAciD;AACjD,aAAOD,aAAW,MAAM,mBAAmB,QAAQC,sBAAqB;AAAA,IAC1E;AAAA,IACA,SAAS,OACP,WAQiD;AACjD,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,cAAc,IAAIL;AAAA,EAC7BM,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACM;AAAA,EACR;AACF;AACAC,kBAAiB,WAAW;AAGrB,IAAM,sBAAN,cAAkCC,mBAAiB;AAAA,EACxD,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAA8C;AAClD,WAAOC,qBAAmB,aAAa,IAAI;AAAA,EAC7C;AAAA,EAEA,MAAM,gCAAiD;AACrD,WAAOC,gCAA8B,KAAK,OAAO;AAAA,EACnD;AAAA,EAEA,4BACE,SACA,WACmB;AACnB,WAAOC;AAAA,MACL,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,0BACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,6BACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SAKA,WACmB;AACnB,WAAOC;AAAA,MACL,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,YAAY,OACV,WAC6D;AAC7D,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAC2D;AAC3D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WACiE;AACjE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,kCAAkC,OAChC,WAGG;AACH,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAC+D;AAC/D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WACyD;AACzD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,qBAAqB,OACnB,WACsE;AACtE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WACkE;AAClE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WAC0D;AAC1D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,YAAY,OACV,WACoE;AACpE,aAAOS,oBAAkB,aAAa,MAAM,cAAc,MAAM;AAAA,IAClE;AAAA,IACA,UAAU,OACR,WACkE;AAClE,aAAOA,oBAAkB,aAAa,MAAM,YAAY,MAAM;AAAA,IAChE;AAAA,IACA,gBAAgB,OACd,WACwE;AACxE,aAAOA,oBAAkB,aAAa,MAAM,kBAAkB,MAAM;AAAA,IACtE;AAAA,IACA,kCAAkC,OAChC,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WACsE;AACtE,aAAOA,oBAAkB,aAAa,MAAM,gBAAgB,MAAM;AAAA,IACpE;AAAA,IACA,QAAQ,OACN,WACgE;AAChE,aAAOA,oBAAkB,aAAa,MAAM,UAAU,MAAM;AAAA,IAC9D;AAAA,IACA,qBAAqB,OACnB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WACyE;AACzE,aAAOA,oBAAkB,aAAa,MAAM,mBAAmB,MAAM;AAAA,IACvE;AAAA,IACA,SAAS,OACP,WACiE;AACjE,aAAOA,oBAAkB,aAAa,MAAM,WAAW,MAAM;AAAA,IAC/D;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAV;AAAA,IACF;AAAA,EACF;AACF;;;AE3nBA;AAAA,EAEE,YAAAW;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS,CAAC;AACZ;;;AD+BA,IAAMC,YAAN,cAAsBC,kBAAwD;AAAA,EAC5E,aAAa,QAA8B;AACzC,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACR;AAAA,IACR;AAAA,EACF;AAAA,EAEA,GAAG,SAAmC;AACpC,WAAO,IAAI,iBAAiB,OAAO;AAAA,EACrC;AAAA,EAEA,QAAQ;AAAA,IACN,QAAQ,OACN,WA2BG;AACH,aAAOC,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,WAAW,IAAIL;AAAA,EAC1BM,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACM;AAAA,EACR;AACF;AACAC,kBAAiB,QAAQ;AAGlB,IAAM,mBAAN,cAA+BC,mBAAiB;AAAA,EACrD,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAA2C;AAC/C,WAAOC,qBAAmB,UAAU,IAAI;AAAA,EAC1C;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ,OACN,WACsD;AACtD,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,QAAQ,OACN,WAC6D;AAC7D,aAAOM,oBAAkB,UAAU,MAAM,UAAU,MAAM;AAAA,IAC3D;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAP;AAAA,IACF;AAAA,EACF;AACF;;;AExOA;AAAA,EAEE,YAAAQ;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAkB;AACpB;;;ADtBA,IAAMC,YAAN,cAAsBC,kBAAwD;AAAA,EAC5E,aAAa,QAA8B;AACzC,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACR;AAAA,IACR;AAAA,EACF;AAAA,EAEA,SAAS;AAAA,IACP,eAAe,EAAE,gBAAgB,OAAO,KAAK,EAAE;AAAA,IAC/C,eAAe,EAAE,WAAW,OAAO,KAAK,EAAE;AAAA,EAC5C;AAAA,EAEA,GAAG,SAAmC;AACpC,WAAO,IAAI,iBAAiB,OAAO;AAAA,EACrC;AAAA,EAEA,QAAQ;AAAA,IACN,aAAa,OACX,WAIsD;AACtD,aAAOC,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,IACA,oBAAoB,OAClB,WAIgE;AAChE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAImD;AACnD,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,kBAAkB,OAChB,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAIqE;AACrE,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,SAAS,OACP,WAIiD;AACjD,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,SAAS,OACP,WAIqE;AACrE,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,UAAU,OACR,WAMG;AACH,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,WAAW,IAAIL;AAAA,EAC1BM,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACM;AAAA,EACR;AACF;AACAC,kBAAiB,QAAQ;AAGlB,IAAM,mBAAN,cAA+BC,mBAAiB;AAAA,EACrD,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAA2C;AAC/C,WAAOC,qBAAmB,UAAU,IAAI;AAAA,EAC1C;AAAA,EAEA,OAAO;AAAA,IACL,aAAa,OACX,WAC2D;AAC3D,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BL;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WACkE;AAClE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BL;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WACsD;AACtD,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB,OAChB,WACgE;AAChE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WACsD;AACtD,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WACuD;AACvD,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WACuD;AACvD,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WACwD;AACxD,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,aAAa,OACX,WACkE;AAClE,aAAOM,oBAAkB,UAAU,MAAM,eAAe,MAAM;AAAA,IAChE;AAAA,IACA,oBAAoB,OAClB,WACyE;AACzE,aAAOA,oBAAkB,UAAU,MAAM,sBAAsB,MAAM;AAAA,IACvE;AAAA,IACA,QAAQ,OACN,WAC6D;AAC7D,aAAOA,oBAAkB,UAAU,MAAM,UAAU,MAAM;AAAA,IAC3D;AAAA,IACA,kBAAkB,OAChB,WACuE;AACvE,aAAOA,oBAAkB,UAAU,MAAM,oBAAoB,MAAM;AAAA,IACrE;AAAA,IACA,QAAQ,OACN,WAC6D;AAC7D,aAAOA,oBAAkB,UAAU,MAAM,UAAU,MAAM;AAAA,IAC3D;AAAA,IACA,SAAS,OACP,WAC8D;AAC9D,aAAOA,oBAAkB,UAAU,MAAM,WAAW,MAAM;AAAA,IAC5D;AAAA,IACA,SAAS,OACP,WAC8D;AAC9D,aAAOA,oBAAkB,UAAU,MAAM,WAAW,MAAM;AAAA,IAC5D;AAAA,IACA,UAAU,OACR,WAC+D;AAC/D,aAAOA,oBAAkB,UAAU,MAAM,YAAY,MAAM;AAAA,IAC7D;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAP;AAAA,IACF;AAAA,EACF;AACF;;;AEnbA;AAAA,EAEE,YAAAQ;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ADlGA,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAAqC;AAChD,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACR;AAAA,IACR;AAAA,EACF;AAAA,EAEA,SAAS;AAAA,IACP,yBAAyB;AAAA,MACvB,cAAc,OAAO,KAAK;AAAA,MAC1B,cAAc,OAAO,KAAK;AAAA,IAC5B;AAAA,IACA,eAAe,EAAE,gBAAgB,OAAO,KAAK,EAAE;AAAA,IAC/C,cAAc;AAAA,MACZ,MAAM,OAAO,GAAG;AAAA,MAChB,UAAU,OAAO,GAAG;AAAA,MACpB,MAAM,OAAO,GAAG;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,GAAG,SAA0C;AAC3C,WAAO,IAAI,wBAAwB,OAAO;AAAA,EAC5C;AAAA,EAEA,QAAQ;AAAA,IACN,cAAc,OACZ,WAMG;AACH,aAAOC,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,wBAAwB,OACtB,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAUmD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAImD;AACnD,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,kBAAkB,OAChB,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WAIsD;AACtD,aAAOD,aAAW,MAAM,cAAc,QAAQC,sBAAqB;AAAA,IACrE;AAAA,IACA,UAAU,OACR,WAIsD;AACtD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,gBAAgB,OACd,WAIsD;AACtD,aAAOD,aAAW,MAAM,kBAAkB,QAAQC,sBAAqB;AAAA,IACzE;AAAA,IACA,cAAc,OACZ,WAIsD;AACtD,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,oBAAoB,OAClB,WAIsD;AACtD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WAIiD;AACjD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WAQiD;AACjD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WAIiD;AACjD,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,kBAAkB,OAChB,WAWG;AACH,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,kBAAkB,IAAIL;AAAA,EACjCM,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACM;AAAA,EACR;AACF;AACAC,kBAAiB,eAAe;AAGzB,IAAM,0BAAN,cAAsCC,mBAAiB;AAAA,EAC5D,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAAkD;AACtD,WAAOC,qBAAmB,iBAAiB,IAAI;AAAA,EACjD;AAAA,EAEA,OAAO;AAAA,IACL,cAAc,OACZ,WACmE;AACnE,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAC6D;AAC7D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB,OAChB,WACuE;AACvE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WACiE;AACjE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAC+D;AAC/D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WACqE;AACrE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WACmE;AACnE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WACyE;AACzE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WACwE;AACxE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WACwE;AACxE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WAC8D;AAC9D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB,OAChB,WACuE;AACvE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,cAAc,OACZ,WAGG;AACH,aAAOM,oBAAkB,iBAAiB,MAAM,gBAAgB,MAAM;AAAA,IACxE;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAwB,OACtB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WACoE;AACpE,aAAOA,oBAAkB,iBAAiB,MAAM,UAAU,MAAM;AAAA,IAClE;AAAA,IACA,kBAAkB,OAChB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WACwE;AACxE,aAAOA,oBAAkB,iBAAiB,MAAM,cAAc,MAAM;AAAA,IACtE;AAAA,IACA,UAAU,OACR,WACsE;AACtE,aAAOA,oBAAkB,iBAAiB,MAAM,YAAY,MAAM;AAAA,IACpE;AAAA,IACA,gBAAgB,OACd,WAGG;AACH,aAAOA,oBAAkB,iBAAiB,MAAM,kBAAkB,MAAM;AAAA,IAC1E;AAAA,IACA,cAAc,OACZ,WAGG;AACH,aAAOA,oBAAkB,iBAAiB,MAAM,gBAAgB,MAAM;AAAA,IACxE;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WACqE;AACrE,aAAOA,oBAAkB,iBAAiB,MAAM,WAAW,MAAM;AAAA,IACnE;AAAA,IACA,kBAAkB,OAChB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAP;AAAA,IACF;AAAA,EACF;AACF;;;AE55BA;AAAA,EAEE,YAAAQ;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP,IAAAC,yBAAA;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS,CAAC;AAAA,EACV,gBAAkB;AACpB;;;ADwCA,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAA+B;AAC1C,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACR;AAAA,IACR;AAAA,EACF;AAAA,EAEA,GAAG,SAAoC;AACrC,WAAO,IAAIC,mBAAkB,OAAO;AAAA,EACtC;AAAA,EAEA,QAAQ;AAAA,IACN,WAAW,OACT,WAIsD;AACtD,aAAOC,aAAW,MAAM,aAAa,QAAQC,sBAAqB;AAAA,IACpE;AAAA,IACA,SAAS,OACP,WAIsD;AACtD,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,aAAa,OACX,WAImD;AACnD,aAAOD,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,IACA,gBAAgB,OACd,WAImD;AACnD,aAAOD,aAAW,MAAM,kBAAkB,QAAQC,sBAAqB;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAMC,aAAY,IAAIP;AAAA,EAC3BQ,WAAS;AAAA,IACPC;AAAA,IACA;AAAA,IACA;AAAA,IACM;AAAA,EACR;AACF;AACAC,kBAAiBH,UAAS;AAGnB,IAAMH,qBAAN,cAAgCO,mBAAiB;AAAA,EACtD,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAA4C;AAChD,WAAOC,qBAAmBL,YAAW,IAAI;AAAA,EAC3C;AAAA,EAEA,OAAO;AAAA,IACL,WAAW,OACT,WAC0D;AAC1D,aAAOM;AAAA,QACLN;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BD;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WACwD;AACxD,aAAOO;AAAA,QACLN;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BD;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WAC4D;AAC5D,aAAOO;AAAA,QACLN;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BD;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WAC+D;AAC/D,aAAOO;AAAA,QACLN;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,WAAW,OACT,WACiE;AACjE,aAAOQ,oBAAkBP,YAAW,MAAM,aAAa,MAAM;AAAA,IAC/D;AAAA,IACA,SAAS,OACP,WAC+D;AAC/D,aAAOO,oBAAkBP,YAAW,MAAM,WAAW,MAAM;AAAA,IAC7D;AAAA,IACA,aAAa,OACX,WACmE;AACnE,aAAOO,oBAAkBP,YAAW,MAAM,eAAe,MAAM;AAAA,IACjE;AAAA,IACA,gBAAgB,OACd,WACsE;AACtE,aAAOO,oBAAkBP,YAAW,MAAM,kBAAkB,MAAM;AAAA,IACpE;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMQ;AAAA,MACXR;AAAA,MACA;AAAA,MACA;AAAA,MACAD;AAAA,IACF;AAAA,EACF;AACF;;;AEhRA;AAAA,EAEE,YAAAU;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ADPA,IAAMC,YAAN,cAAsBC,kBAAgD;AAAA,EACpE,aAAa,QAA0B;AACrC,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACR;AAAA,IACR;AAAA,EACF;AAAA,EAEA,SAAS;AAAA,IACP,WAAW;AAAA,MACT,WAAW,OAAO,KAAK;AAAA,MACvB,IAAI,OAAO,KAAK;AAAA,MAChB,IAAI,OAAO,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,GAAG,SAA+B;AAChC,WAAO,IAAI,aAAa,OAAO;AAAA,EACjC;AAAA,EAEA,QAAQ;AAAA,IACN,QAAQ,OACN,WAIoD;AACpD,aAAOC,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,gBAAgB,OACd,WAIqE;AACrE,aAAOD,aAAW,MAAM,kBAAkB,QAAQC,sBAAqB;AAAA,IACzE;AAAA,IACA,gBAAgB,OACd,WAIqE;AACrE,aAAOD,aAAW,MAAM,kBAAkB,QAAQC,sBAAqB;AAAA,IACzE;AAAA,IACA,OAAO,OACL,WAIiD;AACjD,aAAOD,aAAW,MAAM,SAAS,QAAQC,sBAAqB;AAAA,IAChE;AAAA,IACA,OAAO,OACL,WAQmD;AACnD,aAAOD,aAAW,MAAM,SAAS,QAAQC,sBAAqB;AAAA,IAChE;AAAA,IACA,iBAAiB,OACf,WAImD;AACnD,aAAOD,aAAW,MAAM,mBAAmB,QAAQC,sBAAqB;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,aAAa,YAA8B,OAAe,SAAkB;AAC1E,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,OAAO,IAAIL;AAAA,EACtBM,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACM;AAAA,EACR;AACF;AACAC,kBAAiB,IAAI;AAGd,IAAM,eAAN,cAA2BC,mBAAiB;AAAA,EACjD,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAAuC;AAC3C,WAAOC,qBAAmB,MAAM,IAAI;AAAA,EACtC;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ,OACN,WACkD;AAClD,aAAOC,aAAW,MAAM,MAAM,UAAU,QAAQL,sBAAqB;AAAA,IACvE;AAAA,IACA,gBAAgB,OACd,WAC0D;AAC1D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WAC0D;AAC1D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WACiD;AACjD,aAAOK,aAAW,MAAM,MAAM,SAAS,QAAQL,sBAAqB;AAAA,IACtE;AAAA,IACA,OAAO,OACL,WACiD;AACjD,aAAOK,aAAW,MAAM,MAAM,SAAS,QAAQL,sBAAqB;AAAA,IACtE;AAAA,IACA,iBAAiB,OACf,WAC2D;AAC3D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,QAAQ,OACN,WACyD;AACzD,aAAOM,oBAAkB,MAAM,MAAM,UAAU,MAAM;AAAA,IACvD;AAAA,IACA,gBAAgB,OACd,WACiE;AACjE,aAAOA,oBAAkB,MAAM,MAAM,kBAAkB,MAAM;AAAA,IAC/D;AAAA,IACA,gBAAgB,OACd,WACiE;AACjE,aAAOA,oBAAkB,MAAM,MAAM,kBAAkB,MAAM;AAAA,IAC/D;AAAA,IACA,OAAO,OACL,WACwD;AACxD,aAAOA,oBAAkB,MAAM,MAAM,SAAS,MAAM;AAAA,IACtD;AAAA,IACA,OAAO,OACL,WACwD;AACxD,aAAOA,oBAAkB,MAAM,MAAM,SAAS,MAAM;AAAA,IACtD;AAAA,IACA,iBAAiB,OACf,WACkE;AAClE,aAAOA,oBAAkB,MAAM,MAAM,mBAAmB,MAAM;AAAA,IAChE;AAAA,EACF;AAAA,EAQA,MAAM,UAEJ,QAAkC;AAClC,WAAO,MAAMC,mBAAiB,MAAM,MAAM,QAAQP,sBAAqB;AAAA,EACzE;AACF;;;AE1VA;AAAA,EAEE,YAAAQ;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AD5CA,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAAoC;AAC/C,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACR;AAAA,IACR;AAAA,EACF;AAAA,EAEA,SAAS;AAAA,IACP,iBAAiB,EAAE,gBAAgB,OAAO,KAAK,EAAE;AAAA,IACjD,cAAc;AAAA,MACZ,MAAM,OAAO,GAAG;AAAA,MAChB,UAAU,OAAO,GAAG;AAAA,MACpB,MAAM,OAAO,GAAG;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,GAAG,SAAyC;AAC1C,WAAO,IAAI,uBAAuB,OAAO;AAAA,EAC3C;AAAA,EAEA,QAAQ;AAAA,IACN,UAAU,OACR,WAIsD;AACtD,aAAOC,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,SAAS,OACP,WAIsD;AACtD,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,mBAAmB,OACjB,WAIsD;AACtD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAIiD;AACjD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,kCAAkC,OAChC,WAI8D;AAC9D,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAIsD;AACtD,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,oBAAoB,OAClB,WAIsD;AACtD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAIsD;AACtD,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,WAAW,OACT,WAIiD;AACjD,aAAOD,aAAW,MAAM,aAAa,QAAQC,sBAAqB;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,iBAAiB,IAAIL;AAAA,EAChCM,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACM;AAAA,EACR;AACF;AACAC,kBAAiB,cAAc;AAGxB,IAAM,yBAAN,cAAqCC,mBAAiB;AAAA,EAC3D,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAAiD;AACrD,WAAOC,qBAAmB,gBAAgB,IAAI;AAAA,EAChD;AAAA,EAEA,OAAO;AAAA,IACL,UAAU,OACR,WAC8D;AAC9D,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WAC6D;AAC7D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OACjB,WACuE;AACvE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAC8D;AAC9D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,kCAAkC,OAChC,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WACkE;AAClE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WACwE;AACxE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAC4D;AAC5D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,OACT,WAC+D;AAC/D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,UAAU,OACR,WACqE;AACrE,aAAOM,oBAAkB,gBAAgB,MAAM,YAAY,MAAM;AAAA,IACnE;AAAA,IACA,SAAS,OACP,WACoE;AACpE,aAAOA,oBAAkB,gBAAgB,MAAM,WAAW,MAAM;AAAA,IAClE;AAAA,IACA,mBAAmB,OACjB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WACqE;AACrE,aAAOA,oBAAkB,gBAAgB,MAAM,YAAY,MAAM;AAAA,IACnE;AAAA,IACA,kCAAkC,OAChC,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WACyE;AACzE,aAAOA,oBAAkB,gBAAgB,MAAM,gBAAgB,MAAM;AAAA,IACvE;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WACmE;AACnE,aAAOA,oBAAkB,gBAAgB,MAAM,UAAU,MAAM;AAAA,IACjE;AAAA,IACA,WAAW,OACT,WACsE;AACtE,aAAOA,oBAAkB,gBAAgB,MAAM,aAAa,MAAM;AAAA,IACpE;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAP;AAAA,IACF;AAAA,EACF;AACF;;;AE/fA,IAAAQ,mBAAA;AAAA,SAAAA,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA,EAEE,oBAAAC;AAAA,EAGA,UAAAC;AAAA,OAGK;;;ACZP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,kBAAoB;AAAA,EACpB,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe,CAAC;AAAA,IAClB;AAAA,EACF;AACF;;;ACpCA;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,kBAAoB;AAAA,EACpB,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe,CAAC;AAAA,IAClB;AAAA,EACF;AACF;;;ACtDA;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,kBAAoB;AAAA,EACpB,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe,CAAC;AAAA,IAClB;AAAA,EACF;AACF;;;AChDA;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,kBAAoB;AAAA,EACpB,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe,CAAC;AAAA,IAClB;AAAA,EACF;AACF;;;AJzBO,IAAM,eAAe,IAAIC;AAAA,EAO9BC,QAAO,SAAS,0BAAwB,IAAU,UAAU;AAAA,EAC5DC;AACF;AAEO,IAAM,mBAAmB,IAAIF;AAAA,EAalCC,QAAO,SAAS,8BAA4B,IAAU,UAAU;AAAA,EAChEC;AACF;AAEO,IAAM,iBAAiB,IAAIF;AAAA,EAWhCC,QAAO,SAAS,4BAA0B,IAAU,UAAU;AAAA,EAC9DC;AACF;AAEO,IAAM,qBAAqB,IAAIF;AAAA,EAUpCC,QAAO,SAAS,gCAA8B,IAAU,UAAU;AAAA,EAClEC;AACF;;;AK3EA,IAAAC,+BAAA;AAAA,EACE,iBAAmB;AAAA,EACnB,WAAa;AAAA,IACX,MAAQ;AAAA,MACN,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,UAAY;AAAA,MACV,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,MAAQ;AAAA,MACN,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,iBAAmB;AAAA,MACjB,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,YAAc,CAAC;AACjB;;;AC7VA,IAAAC,8BAAA;AAAA,EACE,iBAAmB;AAAA,EACnB,WAAa;AAAA,IACX,MAAQ;AAAA,MACN,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,UAAY;AAAA,MACV,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,MAAQ;AAAA,MACN,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,iBAAmB;AAAA,MACjB,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,IACA,8BAA8B;AAAA,MAC5B,WAAa;AAAA,MACb,MAAQ;AAAA,MACR,WAAa;AAAA,MACb,SAAW;AAAA,MACX,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,kBAAoB;AAAA,QAClB,gBAAkB,CAAC;AAAA,QACnB,kBAAoB;AAAA,UAClB;AAAA,YACE,SAAW;AAAA,YACX,gBAAkB;AAAA,YAClB,QAAU,CAAC;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,YAAc,CAAC;AACjB;;;ACrSA,SAASC,eAAc,MAAwB;AAC7C,QAAMC,aAAY;AAAA,IAChB,MAAM;AAAA,MACJ,GAAG,KAAK,UAAU,MAAM;AAAA,MACxB,kBAAkB,KAAK;AAAA,QACrB,KAAK,UAAU,MAAM,EAAE,iBAAiB;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,GAAG,KAAK,UAAU,UAAU;AAAA,MAC5B,kBAAkB,SAAS;AAAA,QACzB,KAAK,UAAU,UAAU,EAAE,iBAAiB;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,GAAG,KAAK,UAAU,MAAM;AAAA,MACxB,kBAAkB,KAAK;AAAA,QACrB,KAAK,UAAU,MAAM,EAAE,iBAAiB;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,GAAG,KAAK,UAAU,YAAY;AAAA,MAC9B,kBAAkB,WAAW;AAAA,QAC3B,KAAK,UAAU,YAAY,EAAE,iBAAiB;AAAA,MAChD;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,GAAG,KAAK,UAAU,YAAY;AAAA,MAC9B,kBAAkB,WAAW;AAAA,QAC3B,KAAK,UAAU,YAAY,EAAE,iBAAiB;AAAA,MAChD;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,GAAG,KAAK,UAAU,YAAY;AAAA,MAC9B,kBAAkBC,YAAW;AAAA,QAC3B,KAAK,UAAU,YAAY,EAAE,iBAAiB;AAAA,MAChD;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,GAAG,KAAK,UAAU,aAAa;AAAA,MAC/B,kBAAkB,YAAY;AAAA,QAC5B,KAAK,UAAU,aAAa,EAAE,iBAAiB;AAAA,MACjD;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,GAAG,KAAK,UAAU,iBAAiB;AAAA,MACnC,kBAAkB,gBAAgB;AAAA,QAChC,KAAK,UAAU,iBAAiB,EAAE,iBAAiB;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAWD;AAAA,IACX,SAAS;AAAA,MACP,4BAA4B,KAAK,QAAQ,4BAA4B;AAAA,MACrE,4BAA4B,KAAK,QAAQ,4BAA4B;AAAA,MACrE,4BAA4B,KAAK,QAAQ,4BAA4B;AAAA,MACrE,4BAA4B,KAAK,QAAQ,4BAA4B;AAAA,MACrE,4BAA4B,KAAK,QAAQ,4BAA4B;AAAA,MACrE,4BAA4B,KAAK,QAAQ,4BAA4B;AAAA,MACrE,4BAA4B,KAAK,QAAQ,4BAA4B;AAAA,MACrE,4BAA4B,KAAK,QAAQ,4BAA4B;AAAA,MACrE,4BAA4B,KAAK,QAAQ,4BAA4B;AAAA,MACrE,4BAA4B,KAAK,QAAQ,4BAA4B;AAAA,IACvE;AAAA,EACF;AACF;AAEO,SAASE,iBACd,WACA,iBACa;AACb,QAAM,cACJ,cAAc,YACVC,+BACA,cAAc,WACdC,8BACA;AACN,MAAI,gBAAgB,QAAW;AAC7B,UAAM,MAAM,+CAA+C,SAAS;AAAA,EACtE;AACA,QAAM,iBAAwB,MAAM,QAAQ,WAAW,IACnD,cACA,CAAC,WAAW;AAChB,MAAI,oBAAoB,QAAW;AACjC,QAAI,eAAe,SAAS,GAAG;AAC7B,YAAM;AAAA,QACJ,sDACE,YACA;AAAA,MACJ;AAAA,IACF,OAAO;AACL,aAAOL,eAAc,eAAe,CAAC,CAAC;AAAA,IACxC;AAAA,EACF;AACA,QAAM,SAAS,eAAe;AAAA,IAC5B,CAAC,MAAM,EAAE,oBAAoB;AAAA,EAC/B;AACA,MAAI,WAAW,QAAW;AACxB,UAAM,MAAM,+CAA+C;AAAA,EAC7D;AACA,SAAOA,eAAc,MAAM;AAC7B;;;AC/JA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAAM;AAAA,OACK;;;ACHA,IAAM,WAAW,OAAO,SAAS;AACjC,IAAM,WAAW,OAAO,QAAQ;AAChC,IAAM,iBAAiB,OAAO,YAAY;AAC1C,IAAM,iBAAiB;AAAA,EAC5B;AACF;AACO,IAAM,OAAO,OAAO,yCAAyC;AAC7D,IAAM,WAAW,OAAO,yCAAyC;AACjE,IAAM,MAAM,OAAO,sBAAsB;AACzC,IAAM,MAAM,OAAO,YAAY;AAC/B,IAAM,MAAM,OAAO,+BAA+B;AAClD,IAAM,OAAO,OAAO,mDAAmD;AACvE,IAAM,cAAc,OAAO,GAAG;;;AChB9B,IAAM,WAAW,MAAM,OAAO;AAI9B,IAAM,mBAAmB,MAAM,OAAO;;;ACO7C,OAAO,aAAa;AAKb,IAAM,YAAN,MAAgB;AAAA,EACrB,OAAO,mBAAmB,MAAsB;AAC9C,UAAM,UAAU,OAAO,KAAK,CAAC,OAAO;AACpC,QAAI,UAAU,UAAU;AACtB,YAAM,IAAI,MAAM,oBAAoB,IAAI,EAAE;AAAA,IAC5C;AAEA,QAAI,SAAS,UAAU,UAAU,KAAK,sCAAsC;AAE5E,SAAK,UAAU,UAAU,GAAI,SAAS,QAAQ,uCAAwC;AACtF,SAAK,UAAU,UAAU,GAAI,SAAS,QAAQ,uCAAwC;AACtF,SAAK,UAAU,UAAU,GAAI,SAAS,QAAQ,uCAAwC;AACtF,SAAK,UAAU,WAAW,GAAI,SAAS,QAAQ,uCAAwC;AACvF,SAAK,UAAU,WAAW,GAAI,SAAS,QAAQ,uCAAwC;AACvF,SAAK,UAAU,WAAW,GAAI,SAAS,QAAQ,uCAAwC;AACvF,SAAK,UAAU,WAAW,GAAI,SAAS,QAAQ,uCAAwC;AACvF,SAAK,UAAU,YAAY,GAAI,SAAS,QAAQ,uCAAwC;AACxF,SAAK,UAAU,YAAY,GAAI,SAAS,QAAQ,uCAAwC;AACxF,SAAK,UAAU,YAAY,GAAI,SAAS,QAAQ,uCAAwC;AACxF,SAAK,UAAU,YAAY,GAAI,SAAS,QAAQ,uCAAwC;AACxF,SAAK,UAAU,aAAa,GAAI,SAAS,QAAQ,uCAAwC;AACzF,SAAK,UAAU,aAAa,GAAI,SAAS,QAAQ,uCAAwC;AACzF,SAAK,UAAU,aAAa,GAAI,SAAS,QAAQ,uCAAwC;AACzF,SAAK,UAAU,aAAa,GAAI,SAAS,QAAQ,uCAAwC;AACzF,SAAK,UAAU,cAAc,GAAI,SAAS,QAAQ,sCAAuC;AACzF,SAAK,UAAU,cAAc,GAAI,SAAS,QAAQ,qCAAsC;AACxF,SAAK,UAAU,cAAc,GAAI,SAAS,QAAQ,mCAAoC;AACtF,SAAK,UAAU,cAAc,GAAI,SAAS,QAAQ,8BAA+B;AAEjF,QAAI,OAAO,IAAI;AACb,cAAQ,WAAW;AAAA,IACrB;AAEA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,OAAO,mBAAmB,cAA8B;AACtD,QAAI,eAAe,kBAAkB,gBAAgB,gBAAgB;AACnE,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAEA,UAAM,QAAQ,gBAAgB;AAC9B,QAAI,IAAI;AACR,QAAI,MAAM;AAEV,QAAI,IAAI,OAAO,IAAI;AACjB,aAAO;AACP,YAAM;AAAA,IACR;AACA,QAAI,IAAI,MAAM,IAAI;AAChB,aAAO;AACP,YAAM;AAAA,IACR;AACA,QAAI,IAAI,MAAM,IAAI;AAChB,aAAO;AACP,YAAM;AAAA,IACR;AACA,QAAI,IAAI,SAAS;AACf,aAAO;AACP,YAAM;AAAA,IACR;AACA,QAAI,IAAI,OAAO;AACb,aAAO;AACP,YAAM;AAAA,IACR;AACA,QAAI,IAAI,MAAM;AACZ,aAAO;AACP,YAAM;AAAA,IACR;AACA,QAAI,IAAI,MAAM;AACZ,aAAO;AACP,YAAM;AAAA,IACR;AACA,QAAI,IAAI,MAAM;AACZ,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,MAAM;AACf,UAAI,SAAU,MAAM;AAAA,IACtB,OAAO;AACL,UAAI,SAAU,OAAO;AAAA,IACvB;AAEA,QAAI,QAAS,MAAM,QAAS;AAE5B,aAAS,IAAI,KAAK,KAAK,KAAK,KAAK;AAC/B,UAAK,IAAI,KAAM;AACf,YAAM,IAAI,KAAK;AACf,eAAS,KAAK;AACd,YAAM;AAAA,IACR;AAEA,UAAM,gBAAgB,QAAQ;AAE9B,UAAM,UAAW,gBAAgB,0CAA2C;AAC5E,UAAM,SAAU,gBAAgB,4CAA6C;AAE7E,QAAI,YAAY,QAAQ;AACtB,aAAO;AAAA,IACT,OAAO;AACL,UAAI,KAAK,mBAAmB,MAAM,KAAK,cAAc;AACnD,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,oBACL,OACA,eACA,eACQ;AACR,UAAM,eAAe,IAAI,QAAQ,KAAK;AACtC,QAAI,CAAC,aAAa,SAAS,KAAK,aAAa,IAAI,CAAC,GAAG;AACnD,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACvC;AAEA,UAAM,aAAa,OAAO,OAAO,aAAa;AAC9C,UAAM,eAAe;AAAA,MACnB,aACG,IAAI,OAAO,OAAO,aAAa,CAAC,EAChC,MAAM,EACN,QAAQ;AAAA,IACb;AACA,WAAO,KAAK,UAAU,cAAc,UAAU;AAAA,EAChD;AAAA,EAEA,OAAO,oBACL,cACA,eACA,eACQ;AACR,QAAI,eAAe,IAAI;AACrB,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,UAAM,mBAAmB,IAAI,QAAQ,aAAa,SAAS,CAAC;AAC5D,UAAM,aAAa,IAAI,QAAQ,IAAI,SAAS,CAAC;AAC7C,QAAI,eAAe,iBAAiB,IAAI,UAAU,EAAE,IAAI,CAAC;AAEzD,UAAM,eAAe,gBAAgB;AACrC,QAAI,iBAAiB,GAAG;AACtB,YAAM,SAAS,IAAI,QAAQ,EAAE,EAAE,IAAI,KAAK,IAAI,YAAY,CAAC;AACzD,qBAAe,eAAe,IAAI,aAAa,IAAI,MAAM,IAAI,aAAa,IAAI,MAAM;AAAA,IACtF;AAEA,QAAI,CAAC,aAAa,SAAS,GAAG;AAC5B,YAAM,IAAI,MAAM,gBAAgB;AAAA,IAClC;AAEA,WAAO,aAAa,SAAS;AAAA,EAC/B;AAAA,EAEA,OAAO,eACL,OACA,eACA,eACA,aACQ;AACR,UAAM,eAAe,KAAK,oBAAoB,OAAO,eAAe,aAAa;AACjF,UAAM,QAAQ,KAAK,mBAAmB,YAAY;AAElD,WAAO,SAAS,SAAS,OAAO,WAAW,IAAI;AAAA,EACjD;AAAA,EAEA,OAAO,YACL,MACA,aACA,WACA,YACA,QACA,OACQ;AACR,UAAM,UAAU,UAAU,KAAK,WAAW,MAAM;AAChD,UAAM,QAAQ,SAAS,UAAU,cAAc,CAAC;AAChD,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,OAAO,gBACL,SACA,WACA,YACA,aACA,QACiC;AACjC,UAAM,UAAU,UAAU,KAAK,WAAW,MAAM;AAChD,UAAM,CAAC,QAAQ,MAAM,IAAI,UAAU,CAAC,YAAY,SAAS,IAAI,CAAC,WAAW,UAAU;AAEnF,UAAM,WAAW,UAAU,IAAI,UAAU;AACzC,UAAM,OAAO,KAAK,eAAe,UAAU,OAAO,UAAU,OAAO,UAAU,WAAW;AACxF,WAAO,KAAK,iBAAiB,MAAM,WAAW,YAAY,MAAM;AAAA,EAClE;AAAA,EAEA,OAAO,iBACL,MACA,WACA,YACA,QACiC;AACjC,UAAM,UAAU,UAAU,KAAK,WAAW,MAAM;AAChD,UAAM,CAAC,QAAQ,MAAM,IAAI,UAAU,CAAC,YAAY,SAAS,IAAI,CAAC,WAAW,UAAU;AAEnF,UAAM,eAAe,KAAK,mBAAmB,IAAI;AACjD,UAAM,eAAe,KAAK,oBAAoB,cAAc,OAAO,UAAU,OAAO,QAAQ;AAC5F,UAAM,QAAQ,UAAU,IAAI,eAAe;AAC3C,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EAEA,OAAO,oBACL,WACA,YACA,aACA,QACiC;AACjC,UAAM,UAAU,UAAU,KAAK,WAAW,MAAM;AAChD,UAAM,UAAU,UAAU,WAAW;AACrC,UAAM,OAAQ,UAAU,cAAe;AACvC,WAAO,KAAK,iBAAiB,MAAM,WAAW,YAAY,MAAM;AAAA,EAClE;AAAA,EAEA,OAAO,oBACL,WACA,YACA,aACA,QACiC;AACjC,UAAM,UAAU,UAAU,KAAK,WAAW,MAAM;AAChD,UAAM,UAAU,UAAU,WAAW;AACrC,UAAM,OAAQ,UAAU,cAAe;AACvC,WAAO,KAAK,iBAAiB,MAAM,WAAW,YAAY,MAAM;AAAA,EAClE;AAAA,EAEA,OAAO,iBACL,cACA,WACA,QACA,YACQ;AACR,QAAI,YAAY;AACd,aAAO,KAAK,4BAA4B,cAAc,WAAW,MAAM;AAAA,IACzE,OAAO;AACL,aAAO,KAAK,4BAA4B,cAAc,WAAW,MAAM;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,OAAO,4BACL,cACA,WACA,QACQ;AACR,UAAM,aAAa,YAAY;AAC/B,UAAM,UAAU,SAAS;AACzB,QAAI,WAAW,YAAY;AACzB,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACpE;AACA,UAAM,cAAc,aAAa;AACjC,WAAO,SAAS,QAAQ,aAAa,cAAc,WAAW;AAAA,EAChE;AAAA,EAEA,OAAO,4BACL,cACA,WACA,QACQ;AACR,UAAM,WAAW,SAAS,QAAQ,SAAS,KAAK,SAAS;AACzD,WAAO,eAAe;AAAA,EACxB;AAAA,EAEA,OAAO,qBAAqB,cAAsB,UAAkB,YAA6B;AAC/F,QAAI,YAAY,MAAM,YAAY,KAAK;AACrC,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AAEA,UAAM,CAAC,UAAU,QAAQ,IAAI,KAAK,sBAAsB,cAAc,QAAQ;AAC9E,QAAI,QAAQ,aAAa,WAAW;AAEpC,QAAI,YAAY;AACd,UAAI,SAAS,aAAc,SAAQ,eAAe;AAClD,UAAI,SAAS,eAAgB,SAAQ,iBAAiB;AAAA,IACxD,OAAO;AACL,UAAI,SAAS,aAAc,SAAQ,eAAe;AAClD,UAAI,SAAS,eAAgB,SAAQ,iBAAiB;AAAA,IACxD;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,sBAAsB,cAAsB,UAAoC;AACrF,QAAI,WAAW,MAAM,YAAY,KAAK;AACpC,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AACA,UAAM,YAAY,MAAM,YAAY;AACpC,UAAM,WAAW,MAAM,YAAY;AACnC,UAAM,MAAM,MAAM;AAClB,UAAM,iBAAiB,SAAS;AAAA,MAC9B,SAAS,KAAK,QAAQ,IAAI;AAAA,MAC1B;AAAA,MACA,SAAS,KAAK,GAAG;AAAA,IACnB;AACA,UAAM,gBAAgB,SAAS;AAAA,MAC7B,SAAS,KAAK,OAAO,IAAI;AAAA,MACzB;AAAA,MACA,SAAS,KAAK,GAAG;AAAA,IACnB;AACA,UAAM,kBAAkB,SAAS,YAAY,cAAc,gBAAgB,GAAG;AAC9E,UAAM,mBAAmB,eAAe,gBAAgB,MAAM,MAAM;AACpE,WAAO,CAAC,iBAAiB,eAAe;AAAA,EAC1C;AAAA,EAEA,OAAe,UAAU,IAAY,IAAoB;AACvD,WAAO,SAAS,KAAK,SAAS,SAAS,KAAK,MAAM,KAAK,EAAE,CAAC;AAAA,EAC5D;AACF;;;ACxUO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,OAAO,4BACL,GACmC;AACnC,QAAI,EAAE,eAAe,MAAM,EAAE,gBAAgB,IAAI;AAC/C,aAAO,EAAE,eAAe,IAAI,gBAAgB,IAAI,WAAW,GAAG;AAAA,IAChE;AACA,UAAM,UAAU,CAAC,EAAE,YAAY,EAAE,WAAW;AAC5C,UAAM,QAAQ;AAAA,MACZ,UAAU,mBAAmB,EAAE,SAAS;AAAA,MACxC,UAAU,mBAAmB,EAAE,SAAS;AAAA,IAC1C;AACA,UAAM,WAAW,EAAE,YAAY,EAAE;AACjC,QAAI,UAAU;AACZ,YAAM,QAAQ;AAAA,IAChB;AACA,UAAM,WAAW,EAAE,cAAc,EAAE;AACnC,QAAI,UAAU;AACZ,cAAQ,QAAQ;AAAA,IAClB;AACA,UAAM,CAAC,SAAS,SAAS,SAAS,IAAI,KAAK;AAAA,MACzC,EAAE;AAAA,MACF,MAAM,CAAC;AAAA,MACP,MAAM,CAAC;AAAA,MACP,QAAQ,CAAC;AAAA,MACT,QAAQ,CAAC;AAAA,IACX;AACA,WAAO,WACH,EAAE,eAAe,SAAS,gBAAgB,SAAS,UAAU,IAC7D,EAAE,eAAe,SAAS,gBAAgB,SAAS,UAAU;AAAA,EACnE;AAAA,EAEA,OAAO,8BACL,cACA,QACA,QACA,WACA,WACA,SACA,SAC0B;AAC1B,UAAM,eAAe,UAAU;AAAA,MAC7B;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AACA,UAAM,gBAAgB,UAAU,mBAAmB,SAAS;AAC5D,UAAM,gBAAgB,UAAU,mBAAmB,SAAS;AAC5D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,kCACL,cACA,eACA,eACA,SACA,SAC0B;AAC1B,UAAM,YAAY,KAAK;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,CAAC,IAAI,EAAE,IAAI,KAAK;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,CAAC;AAAA,IACH;AACA,WAAO,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS;AAAA,EAC7B;AAAA,EAEA,OAAO,uBACL,cACA,eACA,eACA,WACkB;AAClB,QAAI,gBAAgB,eAAe;AACjC,YAAM,UAAU,KAAK,eAAe,eAAe,eAAe,SAAS;AAC3E,aAAO,CAAC,SAAS,EAAE;AAAA,IACrB,WAAW,eAAe,eAAe;AACvC,YAAM,UAAU,KAAK,eAAe,cAAc,eAAe,SAAS;AAC1E,YAAM,UAAU,KAAK,eAAe,eAAe,cAAc,SAAS;AAC1E,aAAO,CAAC,SAAS,OAAO;AAAA,IAC1B,OAAO;AACL,YAAM,UAAU,KAAK,eAAe,eAAe,eAAe,SAAS;AAC3E,aAAO,CAAC,IAAI,OAAO;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,OAAO,wBACL,cACA,eACA,eACA,SACA,SACQ;AACR,QAAI,eAAe,eAAe;AAChC,aAAO,KAAK,uBAAuB,eAAe,eAAe,OAAO;AAAA,IAC1E,WAAW,eAAe,eAAe;AACvC,YAAM,aAAa,KAAK,uBAAuB,cAAc,eAAe,OAAO;AACnF,YAAM,aAAa,KAAK,uBAAuB,eAAe,cAAc,OAAO;AACnF,aAAO,aAAa,aAAa,aAAa;AAAA,IAChD,OAAO;AACL,aAAO,KAAK,uBAAuB,eAAe,eAAe,OAAO;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,OAAO,uBACL,eACA,eACA,SACQ;AACR,UAAM,eAAe,SAAS,QAAQ,gBAAgB,eAAe,GAAG;AACxE,WAAO,SAAS,QAAQ,UAAU,cAAc,gBAAgB,aAAa;AAAA,EAC/E;AAAA,EAEA,OAAO,uBACL,eACA,eACA,SACQ;AACR,WAAO,SAAS,QAAQ,UAAU,KAAK,gBAAgB,aAAa;AAAA,EACtE;AAAA,EAEA,OAAO,eACL,eACA,eACA,WACA,YACQ;AACR,QAAI,YAAY;AACd,aAAO,KAAK,eAAe,eAAe,eAAe,SAAS;AAAA,IACpE,OAAO;AACL,aAAO,KAAK,eAAe,eAAe,eAAe,SAAS;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,OAAO,eAAe,eAAuB,eAAuB,WAA2B;AAC7F,UAAM,aAAa,YAAY;AAC/B,UAAM,aAAa,gBAAgB;AACnC,WAAO,SAAS,QAAQ,aAAa,YAAY,gBAAgB,aAAa;AAAA,EAChF;AAAA,EAEA,OAAO,eAAe,eAAuB,eAAuB,WAA2B;AAC7F,WAAO,SAAS,QAAQ,aAAa,gBAAgB,gBAAgB,GAAG;AAAA,EAC1E;AACF;;;AJpJA,SAAS,iBAAiB,SAAiB,OAAuB;AAChE,SAAO,oCAAoC,OAAO,IAAI,GAAG,OAAO,IAAI,KAAK,KAAK;AAChF;AAEO,IAAM,YAAN,MAAgB;AAAA,EACrB,OAAO,cACL,aACA,OACA,WACA,WACQ;AACR,UAAM,QAAQ,eAAe,WAAW;AACxC,UAAM,SAAS,SAAS,sBAAsB,WAAW,CAAC;AAC1D,UAAM,kBAAkB,iBAAiB,OAAO,KAAK;AACrD,UAAM,OAAO,sBAAsB;AAAA,MACjC,EAAE,MAAM,QAAQ,OAAO,KAAK,OAAO,aAAa,SAAS;AAAA,MACzD,EAAE,MAAM,WAAW,OAAO,gBAAgB;AAAA,MAC1C,EAAE,MAAM,QAAQ,OAAO,UAAU;AAAA,MACjC,EAAE,MAAM,QAAQ,OAAO,UAAU;AAAA,IACnC,CAAC;AACD,WAAOC,eAAc,QAAQ,SAAS,IAAI,GAAG,KAAK;AAAA,EACpD;AAAA,EAEA,OAAO,gBACL,cACA,oBACA,WACA,QACA,SACkC;AAClC,UAAM,aAAa,eAAe;AAClC,UAAM,UAAU,SAAS;AACzB,QAAI,WAAW;AACf,QAAI,YAAY;AAChB,QAAI,YAAY;AAChB,QAAI,mBAAmB;AACvB,QAAI,SAAS;AACX,iBAAW,CAAC,mBAAmB;AAAA,QAC7B;AAAA,QACA;AAAA,QACA,CAAC;AAAA,QACD;AAAA,MACF;AACA,YAAM,yBAAyB,SAAS;AAAA,QACtC,UAAU,KAAK,OAAO,WAAW;AAAA,QACjC,KAAK,OAAO;AAAA,MACd;AACA,YAAM,yBAAyB,UAAU;AAAA,QACvC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,yBACE,0BAA0B,WAAW,qBAAqB;AAAA,IAC9D,OAAO;AACL,kBAAY,mBAAmB;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,yBAAyB,UAAU;AAAA,QACvC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,yBAAmB,CAAC,UAAU,YAAY,qBAAqB;AAAA,IACjE;AACA,UAAM,MAAM,sBAAsB;AAClC,QAAI,YAAY;AACd,YAAM,YAAY,CAAC,mBAAmB;AAAA,QACpC;AAAA,QACA;AAAA,QACA,CAAC;AAAA,QACD;AAAA,MACF;AACA,YAAM,aAAa,mBAAmB;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,iBAAW,OAAO,UAAU,WAAW;AACvC,kBAAY,OAAO,CAAC,UAAU,YAAY;AAAA,IAC5C,OAAO;AACL,YAAM,YAAY,CAAC,mBAAmB;AAAA,QACpC;AAAA,QACA;AAAA,QACA,CAAC;AAAA,QACD;AAAA,MACF;AACA,YAAM,aAAa,mBAAmB;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,iBAAW,OAAO,UAAU,WAAW;AACvC,kBAAY,OAAO,CAAC,UAAU,YAAY;AAAA,IAC5C;AACA,QAAI,CAAC,WAAW,SAAS,CAAC,UAAW,aAAY,CAAC;AAElD,QAAI,WAAW,oBAAoB,oBAAoB;AACrD,kBAAY,SAAS;AAAA,IACvB,OAAO;AACL,kBAAY,SAAS,SAAS,WAAW,SAAS,KAAK,OAAO,WAAW,OAAO;AAAA,IAClF;AAEA,WAAO,CAAC,kBAAkB,UAAU,WAAW,SAAS;AAAA,EAC1D;AAAA,EAEA,OAAO,YACL,SACA,iBACA,cACQ;AACR,UAAM,UAAU,kBAAkB;AAClC,QAAI,mBAAmB;AACvB,eAAW,OAAO,QAAQ,MAAM;AAC9B,YAAM,CAAC,kBAAkB,UAAU,WAAW,SAAS,IAAI,KAAK;AAAA,QAC9D;AAAA,QACA,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR;AAAA,QACA,QAAQ;AAAA,MACV;AACA,UAAI,SAAS;AACX,2BAAmB,WAAW;AAC9B,4BAAoB;AAAA,MACtB,OAAO;AACL,2BAAmB;AACnB,4BAAoB,WAAW;AAAA,MACjC;AACA,qBAAe;AAAA,IACjB;AACA,WAAO;AAAA,EACT;AACF;;;AKzJA,OAAOC,cAAa;AAIb,IAAM,eAAN,MAAmB;AAAA,EACxB,OAAO,YAAY,OAA6B;AAC9C,QAAI,UAAU,UAAa,UAAU,MAAM;AACzC,aAAO,IAAIA,SAAQ,CAAC;AAAA,IACtB;AACA,QAAIA,SAAQ,UAAU,KAAK,GAAG;AAC5B,aAAO;AAAA,IACT;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,IAAIA,SAAQ,MAAM,SAAS,CAAC;AAAA,IACrC;AACA,WAAO,IAAIA,SAAQ,KAAK;AAAA,EAC1B;AAAA,EAEA,OAAO,gBAAgB,OAAwB;AAC7C,QAAI,CAAC,MAAM,SAAS,GAAG;AACrB,aAAO,MAAM,SAAS;AAAA,IACxB;AACA,WAAO,MAAM,QAAQ,MAAM,cAAc,CAAC;AAAA,EAC5C;AAAA,EAEA,OAAO,aAAa,OAAoB,UAA2B;AACjE,QAAI,WAAW,GAAG;AAChB,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AACA,QAAI,aAAa,GAAG;AAClB,aAAO,KAAK,YAAY,KAAK;AAAA,IAC/B;AACA,WAAO,KAAK,YAAY,KAAK,EAAE,IAAI,IAAIA,SAAQ,EAAE,EAAE,IAAI,QAAQ,CAAC;AAAA,EAClE;AAAA,EAEA,OAAO,cAAc,OAAoB,UAA0B;AACjE,WAAO,KAAK,gBAAgB,KAAK,aAAa,OAAO,QAAQ,CAAC;AAAA,EAChE;AAAA,EAEA,OAAO,gBAAgB,OAA4B;AACjD,WAAO,KAAK,gBAAgB,KAAK,YAAY,KAAK,CAAC;AAAA,EACrD;AAAA,EAEA,OAAO,gBAAgB,OAA4B;AACjD,QAAI,UAAU,UAAa,UAAU,MAAM;AACzC,aAAO;AAAA,IACT;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO;AAAA,IACT;AAEA,UAAM,eAAe,KAAK,YAAY,KAAK;AAE3C,QAAI,CAAC,aAAa,SAAS,GAAG;AAC5B,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AAEA,QAAI,CAAC,aAAa,UAAU,GAAG;AAC7B,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AAEA,WAAO,OAAO,aAAa,QAAQ,CAAC,CAAC;AAAA,EACvC;AACF;;;A9CjBA,SAASC,kBAAiB,SAAiB,OAAuB;AAChE,SAAOC,qCAAoC,OAAO,IAAI,GAAG,OAAO,IAAI,KAAK,KAAK;AAChF;AAEO,IAAM,aAAN,cAAyB,WAAW;AAAA,EACjC;AAAA,EACA,iBAAiB,oBAAI,IAA4B;AAAA,EAEzD,YAAY,OAAa;AACvB,UAAM,EAAE,OAAO,YAAY,aAAa,CAAC;AAEzC,SAAK,SAAS,KAAK,eAAe;AAAA,EACpC;AAAA,EAEA,UAAU,QAAoB;AAC5B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,gBAA4B;AAC1B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAgB,aAA6B;AAC3C,UAAM,WAAW,MAAM,UAAU,OAAO,WAAW;AACnD,UAAM,aAAaC,UAAS,QAAQ;AACpC,UAAM,QAAQ,KAAK,OAAO;AAC1B,WAAOC,eAAc,KAAK,OAAO,WAAW,YAAY,KAAK;AAAA,EAC/D;AAAA,EAEA,MAAM,oBAA+C;AACnD,UAAM,iBAAiBC,uBAAsB,KAAK,OAAO,SAAS;AAClE,UAAM,UAAU,YAAY,GAAG,cAAc;AAC7C,UAAM,QAAQ,MAAM,QAAQ,WAAW;AACvC,UAAM,kBAAkB,MAAM,OAAO;AAErC,UAAM,UAA4B,CAAC;AACnC,aAAS,IAAI,IAAI,IAAI,iBAAiB,KAAK;AACzC,UAAI,SAAS,KAAK,eAAe,IAAI,CAAC;AACtC,UAAI,CAAC,QAAQ;AACX,iBAAS,MAAM,KAAK,qBAAqB,CAAC;AAC1C,aAAK,eAAe,IAAI,GAAG,MAAM;AAAA,MACnC;AACA,cAAQ,KAAK,MAAM;AAAA,IACrB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,cAAc,aAA0D;AAC5E,UAAM,SAAS,KAAK,eAAe,IAAI,WAAW;AAClD,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,qBAAqB,WAAW;AAC1D,WAAK,eAAe,IAAI,aAAa,MAAM;AAC3C,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,WAAW,0BAA0B,YAAY,SAAS,CAAC,IAAI,KAAK;AACzE,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,qBAAqB,aAA8C;AAC/E,UAAM,eAAe,KAAK,gBAAgB,WAAW;AACrD,UAAM,oBAAoBA,uBAAsB,YAAY;AAC5D,UAAM,aAAa,WAAW,GAAG,iBAAiB;AAClD,UAAM,kBAAkB,MAAM,WAAW,WAAW;AACpD,WAAO;AAAA,MACL;AAAA,MACA,aAAa,gBAAgB,OAAO,OAAO;AAAA,MAC3C,YAAY,gBAAgB,OAAO,OAAO;AAAA,MAC1C,aAAa,gBAAgB,OAAO,OAAO;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,QAAgD;AACjE,QAAI;AACF,YAAM,cAAcA,uBAAsB,MAAM;AAChD,YAAM,OAAO,KAAK,GAAG,WAAW;AAChC,YAAM,QAAQ,MAAM,KAAK,WAAW;AACpC,YAAM,aAAa,MAAM,KAAK,MAAM,MAAM,aAAa,MAAM,OAAO,MAAM;AAC1E,YAAM,aAAa,MAAM,KAAK,MAAM,MAAM,aAAa,MAAM,OAAO,MAAM;AAE1E,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,MAAM,OAAO;AAAA,QACxB,YAAY,MAAM,OAAO;AAAA,QACzB,aAAa,MAAM,OAAO,MAAM;AAAA,QAChC,MAAM,MAAM,OAAO,MAAM;AAAA,QACzB,aAAa,MAAM,OAAO;AAAA,QAC1B,cAAc,MAAM,OAAO,MAAM;AAAA,QACjC,aAAa,MAAM,OAAO;AAAA,MAC5B;AAAA,IACF,SAAS,OAAO;AACd,UAAI,iBAAiB,SAAS,MAAM,QAAQ,SAAS,WAAW,GAAG;AACjE,cAAM,IAAI,kBAAkB,MAAM;AAAA,MACpC;AACA,WAAK,iBAAiB,sCAAsC,MAAM,IAAI,KAAK;AAAA,IAC7E;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,QAA2E;AACpG,QAAI;AACF,YAAM,cAAcA,uBAAsB,MAAM;AAChD,YAAM,QAAQ,MAAM,KAAK,GAAG,WAAW,EAAE,WAAW;AACpD,YAAM,EAAE,QAAQ,OAAO,IAAI,MAAM;AAEjC,YAAM,UAAU,MAAM,KAAK,MAAM,aAAa,UAAU,2BAA2B,WAAW;AAE9F,YAAM,aAAa,CAAC,YAClB,YAAYC,iBACR,OAAO,QAAQ,OAAO,IACtB,OAAO,QAAQ,eAAe,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,GAAG,UAAU,GAAG;AAEhF,aAAO;AAAA,QACL,eAAe,WAAW,MAAM;AAAA,QAChC,eAAe,WAAW,MAAM;AAAA,MAClC;AAAA,IACF,SAAS,OAAO;AACd,UAAI,iBAAiB,SAAS,MAAM,QAAQ,SAAS,WAAW,GAAG;AACjE,cAAM,IAAI,kBAAkB,MAAM;AAAA,MACpC;AACA,WAAK,iBAAiB,gDAAgD,MAAM,IAAI,KAAK;AAAA,IACvF;AAAA,EACF;AAAA,EAEA,UAAU,QAAgB,QAAgB,aAA6B;AACrE,UAAM,CAAC,QAAQ,MAAM,IAAI,WAAW,QAAQ,MAAM;AAClD,UAAM,QAAQ,KAAK,OAAO;AAC1B,UAAM,YAAY,KAAK,OAAO;AAC9B,UAAM,WAAW,MAAM,UAAU,OAAO,WAAW;AACnD,UAAM,aAAaH,UAAS,QAAQ;AACpC,UAAM,WAAWC,eAAc,WAAW,YAAY,KAAK;AAC3D,UAAM,OAAO,SAAS,SAAS;AAC/B,WAAOA,eAAc,WAAW,MAAM,KAAK;AAAA,EAC7C;AAAA,EAEA,cAAc,QAAgB,OAAe,WAAmB,WAA2B;AACzF,UAAM,QAAQG,gBAAeF,uBAAsB,MAAM,CAAC;AAC1D,UAAM,OAAOG,uBAAsB;AAAA,MACjC,EAAE,MAAM,QAAQ,OAAO,KAAK,OAAO,aAAa,SAAS;AAAA,MACzD,EAAE,MAAM,WAAW,OAAO,MAAM;AAAA,MAChC,EAAE,MAAM,QAAQ,OAAO,UAAU;AAAA,MACjC,EAAE,MAAM,QAAQ,OAAO,UAAU;AAAA,IACnC,CAAC;AACD,WAAOJ,eAAc,QAAQD,UAAS,IAAI,GAAG,KAAK;AAAA,EACpD;AAAA,EAEA,eAAe,QAAgB,QAAgB,aAA6B;AAC1E,UAAM,SAAS,KAAK,UAAU,QAAQ,QAAQ,WAAW;AACzD,WAAOE,uBAAsB,MAAM;AAAA,EACrC;AAAA,EAEA,QAAQ,QAAgB,QAAgB,aAAmC;AACzE,UAAM,cAAc,KAAK,eAAe,QAAQ,QAAQ,WAAW;AACnE,WAAO,KAAK,GAAG,WAAW;AAAA,EAC5B;AAAA,EAEA,MAAM,WAAW,QAAgB,QAAgB,aAAuC;AACtF,UAAM,cAAc,KAAK,eAAe,QAAQ,QAAQ,WAAW;AACnE,UAAM,OAAO,KAAK,GAAG,WAAW;AAChC,QAAI;AACF,YAAM,KAAK,WAAW;AACtB,aAAO;AAAA,IACT,SAAS,OAAO;AACd,UAAI,iBAAiB,SAAS,MAAM,QAAQ,SAAS,WAAW,GAAG;AACjE,eAAO;AAAA,MACT;AACA,WAAK,iBAAiB,iCAAiC,WAAW,IAAI,KAAK;AAAA,IAC7E;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,aACA,QACA,QACA,aACA,MACA,SACA,SACA,WACA,WACA,YACqE;AACrE,UAAM,eAAe,UAAU,mBAAmB,IAAI;AACtD,UAAM,SAAS,CAAC,QAAQ,MAAM;AAC9B,UAAM,UAAU,CAAC,SAAS,OAAO;AACjC,UAAM,QAAQ,CAAC,WAAW,SAAS;AACnC,QAAI,SAAS,QAAQ;AACnB,aAAO,QAAQ;AACf,cAAQ,QAAQ;AAAA,IAClB;AACA,QAAI,YAAY,WAAW;AACzB,YAAM,QAAQ;AAAA,IAChB;AACA,UAAM,gBAAgB,UAAU,mBAAmB,MAAM,CAAC,CAAC;AAC3D,UAAM,gBAAgB,UAAU,mBAAmB,MAAM,CAAC,CAAC;AAC3D,UAAM,YAAY,mBAAmB;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,CAAC;AAAA,MACT,QAAQ,CAAC;AAAA,IACX;AACA,UAAM,SAAS,MAAM,iBAAiB,QAAQ;AAAA,MAC5C,QAAQ,KAAK,MAAM;AAAA,MACnB,eAAe;AAAA,QACb,SAAS,KAAK,OAAO;AAAA,QACrB,QAAQ,OAAO,CAAC;AAAA,QAChB,QAAQ,OAAO,CAAC;AAAA,QAChB;AAAA,QACA;AAAA,QACA,WAAW,MAAM,CAAC;AAAA,QAClB,WAAW,MAAM,CAAC;AAAA,QAClB;AAAA,QACA;AAAA,QACA,SAAS,QAAQ,CAAC;AAAA,QAClB,SAAS,QAAQ,CAAC;AAAA,MACpB;AAAA,MACA,gBAAgB,2BAA2B;AAAA,MAC3C,QAAQ;AAAA,QACN,EAAE,IAAI,OAAO,CAAC,GAAG,QAAQ,QAAQ,CAAC,EAAE;AAAA,QACpC,EAAE,IAAI,OAAO,CAAC,GAAG,QAAQ,QAAQ,CAAC,EAAE;AAAA,MACtC;AAAA,MACA,YAAY,cAAc,2BAA2B;AAAA,IACvD,CAAC;AACD,UAAM,cAAc,KAAK,eAAe,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,WAAW;AACzE,WAAO,EAAE,aAAa,OAAO;AAAA,EAC/B;AAAA,EAEA,MAAM,aACJ,GACoE;AACpE,UAAM,cAAc,KAAK,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW;AACzE,UAAM,OAAO,KAAK,GAAG,WAAW;AAChC,UAAM,yBAAyBA,uBAAsB,KAAK,OAAO,iBAAiB;AAClF,UAAM,kBAAkB,gBAAgB,GAAG,sBAAsB;AAEjE,UAAM,gBAAgB,MAAM,KAAK,MAAM,OAAO,mBAAmB;AACjE,UAAM,QAAQ,EAAE,SAAS,cAAc;AAEvC,UAAM,QAAQ,KAAK,OAAO;AAC1B,UAAM,kBAAkBJ,kBAAiB,OAAO,KAAK;AACrD,UAAM,kBAAkBA,kBAAiB,cAAc,SAAS,KAAK;AAErE,UAAM;AAAA,MACJ,SAAS,CAAC,cAAc,eAAe,eAAe,OAAO;AAAA,IAC/D,IAAI,MAAM,gBAAgB,KAAK,iBAAiB;AAAA,MAC9C,MAAM;AAAA,QACJ,WAAW,EAAE;AAAA,QACb,WAAW,EAAE;AAAA,QACb,MAAM,KAAK;AAAA,QACX,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AACD,UAAM,cAAc,UAAU,mBAAmB,YAAY;AAC7D,UAAM,UAAU,cAAc,EAAE;AAChC,UAAM,UAAU,cAAc,EAAE;AAChC,UAAM,kBAAkB,UAAU,mBAAmB,OAAO;AAC5D,UAAM,kBAAkB,UAAU,mBAAmB,OAAO;AAE5D,UAAM,YAAY,mBAAmB;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE;AAAA,MACF,EAAE;AAAA,IACJ;AACA,UAAM,CAAC,aAAa,WAAW,IAAI,mBAAmB;AAAA,MACpD;AAAA,MACA;AAAA,MACA;AAAA,MACA,CAAC;AAAA,IACH;AACA,UAAM,CAAC,YAAY,UAAU,IAAI,mBAAmB;AAAA,MAClD;AAAA,MACA;AAAA,MACA;AAAA,MACA,CAAC;AAAA,IACH;AACA,UAAM,CAAC,YAAY,UAAU,IAAI,mBAAmB;AAAA,MAClD;AAAA,MACA;AAAA,MACA;AAAA,MACA,CAAC;AAAA,IACH;AAEA,UAAM,aAAa,UAAU,cAAc,aAAa,OAAO,EAAE,WAAW,EAAE,SAAS;AACvF,UAAM,SAAkB;AAAA,MACtB,EAAE,IAAI,EAAE,QAAQ,QAAQ,CAAC,WAAW;AAAA,MACpC,EAAE,IAAI,EAAE,QAAQ,QAAQ,CAAC,WAAW;AAAA,IACtC;AAEA,QAAI,EAAE,kBAAkB;AACtB,aAAO,KAAK,EAAE,IAAI,YAAY,QAAQ,GAAG,CAAC;AAAA,IAC5C;AACA,UAAM,SAAS,MAAM,gBAAgB,SAAS,aAAa;AAAA,MACzD,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM;AAAA,QACJ,OAAO;AAAA,QACP,GAAG;AAAA,UACD,QAAQ,EAAE;AAAA,UACV,QAAQ,EAAE;AAAA,UACV,aAAa,EAAE;AAAA,UACf,OAAO;AAAA,UACP,WAAW,EAAE;AAAA,UACb,WAAW,EAAE;AAAA,UACb,gBAAgB,CAAC;AAAA,UACjB,gBAAgB,CAAC;AAAA,UACjB,YAAY,CAAC;AAAA,UACb,YAAY,CAAC;AAAA,QACf;AAAA,MACF;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,IAClB,CAAC;AAED,WAAO,EAAE,YAAY,OAAO;AAAA,EAC9B;AAAA,EAEA,MAAM,gBACJ,GACoE;AACpE,UAAM,cAAc,KAAK,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW;AACzE,UAAM,yBAAyBI,uBAAsB,KAAK,OAAO,iBAAiB;AAClF,UAAM,kBAAkB,gBAAgB,GAAG,sBAAsB;AACjE,UAAM,gBAAgB,MAAM,KAAK,MAAM,OAAO,mBAAmB;AAEjE,UAAM,QAAQ,KAAK,OAAO;AAC1B,UAAM,kBAAkBJ,kBAAiB,EAAE,OAAO,KAAK;AACvD,UAAM,qBAAqBA,kBAAiB,cAAc,SAAS,KAAK;AAExE,UAAM,aAAa,UAAU,cAAc,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS;AAIzF,UAAM,aAAa,EAAE,SAAS,WAAW,EAAE,aAAa,EAAE;AAC1D,UAAM,aAAa,EAAE,SAAS,WAAW,EAAE,iBAAiB,EAAE;AAE9D,UAAM,SAAS,MAAM,gBAAgB,SAAS,kBAAkB;AAAA,MAC9D,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM;AAAA,QACJ,WAAW,EAAE;AAAA,QACb,UAAU;AAAA,QACV,GAAG;AAAA,UACD,aAAa,EAAE;AAAA,UACf,QAAQ,EAAE;AAAA,UACV,QAAQ,EAAE;AAAA,UACV,OAAO;AAAA,UACP,WAAW,EAAE;AAAA,UACb,WAAW,EAAE;AAAA,UACb;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ,CAAC,EAAE,IAAI,YAAY,QAAQ,GAAG,CAAC;AAAA,MACvC,gBAAgBQ,eAAc;AAAA,IAChC,CAAC;AACD,WAAO,EAAE,YAAY,OAAO;AAAA,EAC9B;AAAA,EAEA,MAAM,aAAa,EAAE,QAAQ,GAAG,KAAK,GAA4C;AAC/E,UAAM,OAAO,KAAK,GAAGJ,uBAAsB,MAAM,CAAC;AAClD,UAAM,EAAE,QAAQ,IAAI,MAAM,KAAK,KAAK,aAAa,EAAE,KAAK,CAAC;AACzD,WAAO;AAAA,EACT;AAAA,EACA,MAAM,cACJ,GACoE;AACpE,UAAM,cAAc,KAAK,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW;AACzE,UAAM,aAAa,UAAU,cAAc,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS;AACzF,UAAM,yBAAyBA,uBAAsB,KAAK,OAAO,iBAAiB;AAClF,UAAM,gBAAgB,MAAM,KAAK,MAAM,OAAO,mBAAmB;AAEjE,UAAM,QAAQ,KAAK,OAAO;AAC1B,UAAM,kBAAkBJ,kBAAiB,EAAE,OAAO,KAAK;AACvD,UAAM,qBAAqBA,kBAAiB,cAAc,SAAS,KAAK;AACxE,UAAM,sBAAsBA,kBAAiB,EAAE,WAAW,KAAK;AAE/D,UAAM,kBAAkB,gBAAgB,GAAG,sBAAsB;AACjE,UAAM,SAAS,MAAM,gBAAgB,SAAS,QAAQ;AAAA,MACpD,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM;AAAA,QACJ,WAAW,EAAE;AAAA,QACb,UAAU;AAAA,QACV,GAAG;AAAA,UACD,aAAa,EAAE;AAAA,UACf,QAAQ,EAAE;AAAA,UACV,QAAQ,EAAE;AAAA,UACV,OAAO;AAAA,UACP,WAAW;AAAA,UACX,WAAW,EAAE;AAAA,UACb,WAAW,EAAE;AAAA,UACb,YAAY,EAAE;AAAA,UACd,YAAY,EAAE;AAAA,QAChB;AAAA,MACF;AAAA,MACA,QAAQ,CAAC,EAAE,IAAI,YAAY,QAAQ,GAAG,CAAC;AAAA,MACvC,gBAAgBQ,eAAc;AAAA,IAChC,CAAC;AAED,WAAO,EAAE,YAAY,OAAO;AAAA,EAC9B;AAAA,EAEA,MAAM,cAAc,QAAgB,QAAiC;AACnE,UAAM,qBAAqBJ,uBAAsB,KAAK,OAAO,SAAS;AACtE,UAAM,cAAc,YAAY,GAAG,kBAAkB;AACrD,UAAM,QAAQ,MAAM,YAAY,WAAW;AAC3C,UAAM,IAAI,CAAC,GAAW,MAAc,KAAK,eAAe,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACjF,UAAM,YAAY,MAAM,KAAK,EAAE,QAAQ,OAAO,MAAM,OAAO,eAAe,EAAE,GAAG,CAAC;AAChF,UAAM,QAAQ,MAAM,QAAQ;AAAA,MAC1B,UAAU;AAAA,QAAI,OAAO,MAAM,MACxB,MAAM,KAAK,WAAW,QAAQ,QAAQ,OAAO,CAAC,CAAC,IAAK,KAAK,GAAG,IAAI,EAAE,WAAW,IAAI;AAAA,MACpF;AAAA,IACF;AACA,UAAM,CAAC,KAAK,IAAI,MAAM;AAAA,MACpB,CAAC,CAACK,QAAO,SAAS,GAAG,MAAM,MAAM;AAC/B,cAAM,aAAa,MAAM,OAAO,aAAa;AAC7C,eAAO,aAAa,YAAY,CAAC,OAAO,CAAC,GAAG,UAAU,IAAI,CAACA,QAAO,SAAS;AAAA,MAC7E;AAAA,MACA,CAAC,CAAC,IAAI,EAAE;AAAA,IACV;AAEA,QAAI,UAAU,CAAC,IAAI;AACjB,YAAM,IAAI,kBAAkB,uDAAuD,MAAM,IAAI,MAAM,EAAE;AAAA,IACvG;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,GAAiD;AAClE,UAAM,cAAc,KAAK,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW;AACzE,UAAM,OAAO,KAAK,GAAG,WAAW;AAChC,UAAM,SAAS,MAAM,KAAK,KAAK,aAAa;AAAA,MAC1C,MAAM;AAAA,QACJ,iBAAiB,EAAE;AAAA,QACnB,YAAY,EAAE;AAAA,QACd,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF,CAAC;AAED,UAAM,YAAY,OAAO,UAAU,GAAG,CAAC,GAAG;AAC1C,UAAM,aAAa,OAAO,OAAO,GAAG,CAAC;AACrC,WAAO;AAAA,MACL,cAAc,UAAU,MAAM;AAAA,MAC9B,kBAAkB,WAAW,OAAO;AAAA,MACpC,WAAW,UAAU;AAAA,MACrB,KAAK,UAAU;AAAA,MACf,MAAM,OAAO,OAAO,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM;AACtC,cAAM,QAAQ;AACd,eAAO;AAAA,UACL,cAAc,MAAM,OAAO;AAAA,UAC3B,WAAW,MAAM,OAAO;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,GAAuD;AAChE,UAAM,cAAc,EAAE,UAAU,CAAC;AACjC,UAAM,OAAO,KAAK,QAAQ,EAAE,QAAQ,EAAE,QAAQ,WAAW;AACzD,UAAM,YAAY,MAAM,KAAK,WAAW;AACxC,UAAM,eAAe,UAAU,OAAO,MAAM;AAC5C,UAAM,aAAa,UAAU,OAAO,WAAW,EAAE;AACjD,UAAM,oBAAoB,UAAU,qBAAqB,cAAc,EAAE,UAAU,UAAU;AAE7F,UAAM,SAAS,WAAW,EAAE,QAAQ,EAAE,MAAM;AAC5C,UAAM,CAAC,SAAS,QAAQ,IAAI,aAAa,SAAS,OAAO,QAAQ;AACjE,WAAO,MAAM,mBAAmB,QAAQ;AAAA,MACtC,QAAQ,KAAK,MAAM;AAAA,MACnB,eAAe;AAAA,QACb,YAAY,KAAK,OAAO;AAAA,QACxB,MAAM,KAAK;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB,EAAE;AAAA,QACnB;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,CAAC,EAAE,IAAI,SAAS,QAAQ,EAAE,OAAO,CAAC;AAAA,MAC1C,gBAAgBD,eAAc;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,oBAAoB,GAA4D;AACpF,UAAM,qBAAqBJ,uBAAsB,KAAK,OAAO,SAAS;AACtE,UAAM,cAAc,YAAY,GAAG,kBAAkB;AACrD,UAAM,SAAS,MAAM,YAAY,SAAS,oBAAoB;AAAA,MAC5D,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM;AAAA,QACJ,WAAW,EAAE;AAAA,QACb,aAAa,EAAE;AAAA,QACf,QAAQ,EAAE;AAAA,QACV,QAAQ,EAAE;AAAA,MACZ;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,gBAAgB,GAAwD;AAC5E,UAAM,qBAAqBA,uBAAsB,KAAK,OAAO,SAAS;AACtE,UAAM,cAAc,YAAY,GAAG,kBAAkB;AACrD,UAAM,QAAQ,EAAE,gBAAgB,EAAE,SAAS,KAAK,EAAE,gBAAgB,EAAE,SAAS,KAAK;AAClF,UAAM,SAAS,MAAM,YAAY,SAAS,gBAAgB;AAAA,MACxD,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM;AAAA,QACJ,QAAQ,EAAE;AAAA,QACV,QAAQ,EAAE;AAAA,QACV,aAAa,EAAE;AAAA,QACf,QAAQ,EAAE;AAAA,QACV;AAAA,QACA,UAAU,EAAE;AAAA,QACZ,SAAS,EAAE;AAAA,QACX,OAAO,EAAE;AAAA,QACT,SAAS,EAAE;AAAA,MACb;AAAA,MACA,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,QAAQ,EAAE,OAAO,CAAC;AAAA,MAChD,gBAAgBI;AAAA,IAClB,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,cAAc,GAAsD;AACxE,UAAM,cAAc,KAAK,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW;AACzE,UAAM,OAAO,KAAK,GAAG,WAAW;AAChC,UAAM,QAAQ,EAAE,gBAAgB,EAAE,SAAS,KAAK,EAAE,gBAAgB,EAAE,SAAS,KAAK;AAClF,UAAM,SAAS,MAAM,KAAK,SAAS,cAAc;AAAA,MAC/C,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM;AAAA,QACJ,OAAO,EAAE;AAAA,QACT;AAAA,QACA,QAAQ,EAAE;AAAA,MACZ;AAAA,MACA,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,QAAQ,EAAE,OAAO,CAAC;AAAA,MAChD,gBAAgBA;AAAA,IAClB,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEQ,iBAA6B;AACnC,UAAM,YAAY,KAAK,MAAM,QAAQ;AACrC,QAAI;AACF,YAAM,cAAcE,iBAAgB,SAAS;AAC7C,aAAO;AAAA,QACL,YAAY,YAAY,UAAU,YAAY,iBAAiB;AAAA,QAC/D,WAAW,YAAY,UAAU,YAAY,iBAAiB;AAAA,QAC9D,mBAAmB,YAAY,UAAU,gBAAgB,iBAAiB;AAAA,QAC1E,oBAAoB;AAAA,QACpB,aAAa,YAAY,UAAU,WAAW,iBAAiB;AAAA,MACjE;AAAA,IACF,SAAS,OAAO;AACd,WAAK,iBAAiB,iCAAiC,SAAS,IAAI,KAAK;AAAA,IAC3E;AAAA,EACF;AACF;;;A+ChlBO,IAAM,cAAN,cAA0B,WAAW;AAAA,EAI1C,YACE,OACiB,gBAAwB,GACzC;AACA,UAAM,EAAE,OAAO,YAAY,cAAc,CAAC;AAFzB;AAIjB,SAAK,QAAQ;AACb,SAAK,cAAc,gBAAgB,KAAK,KAAK,KAAK;AAAA,EACpD;AAAA,EAXQ;AAAA,EACS;AAAA,EAYjB,MAAM,YAAkC;AACtC,QAAI,KAAK,aAAa,GAAG;AACvB,aAAO,KAAK,MAAO;AAAA,IACrB;AAEA,QAAI;AACF,aAAO,MAAM,KAAK,YAAY;AAAA,IAChC,SAAS,OAAO;AACd,UAAI,KAAK,OAAO;AACd,cAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACpE,aAAK,QAAQ,4DAA4D,MAAM,EAAE;AACjF,eAAO,KAAK,MAAM;AAAA,MACpB;AACA,WAAK,iBAAiB,gCAAgC,KAAK;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,IAAgC;AACjD,UAAM,YAAY,MAAM,KAAK,eAAe,CAAC,UAAU,MAAM,OAAO,EAAE;AACtE,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,8CAA8C,EAAE,EAAE;AAAA,IACpE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,iBAAiB,QAAoC;AACzD,UAAM,YAAY,MAAM,KAAK,eAAe,CAAC,UAAU,MAAM,WAAW,MAAM;AAC9E,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,kDAAkD,MAAM,EAAE;AAAA,IAC5E;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,eAAe,IAAmE;AACtF,UAAM,aAAa,MAAM,KAAK,UAAU;AACxC,WAAO,WAAW,KAAK,EAAE;AAAA,EAC3B;AAAA,EAEA,MAAM,cAAoC;AACxC,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,KAAK,MAAM,YAAY;AACpD,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,oBAAoB,KAAK,MAAM,cAAc,EAAE,QAAQ,SAAS,OAAO,CAAC;AAAA,MACpF;AACA,YAAM,UAAmB,MAAM,SAAS,KAAK;AAC7C,YAAM,SAAS,KAAK,cAAc,OAAO;AACzC,WAAK,QAAQ;AAAA,QACX;AAAA,QACA,aAAa,oBAAI,KAAK;AAAA,MACxB;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,UAAI,iBAAiB,qBAAqB;AACxC,aAAK,iBAAiB,8BAA8B,KAAK;AAAA,MAC3D;AAEA,WAAK;AAAA,QACH;AAAA,QACA,IAAI,oBAAoB,KAAK,MAAM,cAAc;AAAA,UAC/C,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eAAwB;AAC9B,QAAI,CAAC,KAAK,OAAO;AACf,aAAO;AAAA,IACT;AAEA,UAAM,MAAM,oBAAI,KAAK;AACrB,UAAM,WAAW,IAAI,QAAQ,IAAI,KAAK,MAAM,YAAY,QAAQ;AAChE,WAAO,WAAW,KAAK;AAAA,EACzB;AAAA,EAEQ,cAAc,SAA+B;AACnD,QAAI,CAAC,KAAK,0BAA0B,OAAO,GAAG;AAC5C,YAAM,IAAI,MAAM,8DAA8D;AAAA,IAChF;AACA,WAAO,QAAQ;AAAA,EACjB;AAAA,EAEQ,0BAA0B,OAA4C;AAC5E,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,aAAO;AAAA,IACT;AACA,UAAM,SAAU,MAA+B;AAC/C,QAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,aAAO;AAAA,IACT;AACA,WAAO,OAAO,MAAM,CAAC,UAAU,KAAK,kBAAkB,KAAK,CAAC;AAAA,EAC9D;AAAA,EAEQ,kBAAkB,OAAoC;AAC5D,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ;AAEd,UAAM,uBAA+C;AAAA,MACnD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,qBAAqB,KAAK,CAAC,UAAU,OAAO,MAAM,KAAK,MAAM,QAAQ,GAAG;AAC1E,aAAO;AAAA,IACT;AAEA,UAAM,EAAE,UAAU,aAAa,iBAAiB,IAAI;AAEpD,QACE,OAAO,aAAa,YACpB,CAAC,OAAO,UAAU,QAAQ,KAC1B,WAAW,KACX,WAAW,KACX;AACA,aAAO;AAAA,IACT;AAEA,QAAI,gBAAgB,UAAa,OAAO,gBAAgB,UAAU;AAChE,aAAO;AAAA,IACT;AAEA,QAAI,qBAAqB,UAAa,OAAO,qBAAqB,UAAU;AAC1E,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AACF;;;ACjKA;AAAA,EACE,4BAAAC;AAAA,EACA,yBAAAC;AAAA,EACA;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,uCAAAC;AAAA,EACA,iBAAAC;AAAA,OACK;;;ACVP,IAAAC,cAAA;AAAA,SAAAA,aAAA;AAAA;AAAA;AAAA;AAAA,sBAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAAC;AAAA,EAAA,6BAAAC;AAAA,EAAA,wBAAAC;AAAA;;;ACIA;AAAA,EAEE,YAAAC;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AChJA,IAAIC,aAAgD;AAE7C,SAASC,mBAA0C;AACxD,SAAOD,cAAa,CAAC;AACvB;AAEO,SAASE,kBAAiB,SAA+B;AAC9D,MAAIF,eAAc,QAAW;AAC3B,IAAAA,aAAY,CAAC,OAAO;AAAA,EACtB,OAAO;AACL,IAAAA,WAAU,KAAK,OAAO;AAAA,EACxB;AACF;AACO,SAASG,uBAAsB,UAA4B;AAChE,QAAM,IAAIH,YAAW,KAAK,CAACI,OAAMA,GAAE,SAAS,YAAY,QAAQ,CAAC;AACjE,MAAI,MAAM,QAAW;AACnB,UAAM,IAAI,MAAM,kCAAkC,QAAQ;AAAA,EAC5D;AACA,SAAO,EAAE;AACX;;;ACrBA,SAAkC,UAAAC,eAAc;;;ACJhD,IAAAC,uBAAA;AAAA,EACE;AAAA,IACE,MAAQ;AAAA,IACR,YAAc;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,YAAc;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,YAAc;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ADxCO,IAAMC,cAAaC,qBAAe,IAAI,CAAC,SAASC,QAAO,SAAS,IAAI,CAAC;;;AHoH5E,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAAsC;AACjD,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACRC;AAAA,IACR;AAAA,EACF;AAAA,EAEA,SAAS;AAAA,IACP,eAAe,EAAE,WAAW,OAAO,KAAK,GAAG,gBAAgB,OAAO,KAAK,EAAE;AAAA,IACzE,YAAY;AAAA,MACV,eAAe,OAAO,IAAI;AAAA,MAC1B,6BAA6B,OAAO,IAAI;AAAA,MACxC,wBAAwB,OAAO,IAAI;AAAA,MACnC,kBAAkB,OAAO,IAAI;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,GAAG,SAA2C;AAC5C,WAAO,IAAI,yBAAyB,OAAO;AAAA,EAC7C;AAAA,EAEA,QAAQ;AAAA,IACN,QAAQ,OACN,WAImD;AACnD,aAAOC,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,uBAAuB,OACrB,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAImD;AACnD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WAIoD;AACpD,aAAOD,aAAW,MAAM,SAAS,QAAQC,sBAAqB;AAAA,IAChE;AAAA,IACA,SAAS,OACP,WAIiD;AACjD,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,mBAAmB,IAAIN;AAAA,EAClCO,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACMH;AAAA,EACR;AACF;AACAI,kBAAiB,gBAAgB;AAG1B,IAAM,2BAAN,cAAuCC,mBAAiB;AAAA,EAC7D,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAAmD;AACvD,WAAOC,qBAAmB,kBAAkB,IAAI;AAAA,EAClD;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ,OACN,WAC8D;AAC9D,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,uBAAuB,OACrB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BL;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BL;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WAC6D;AAC7D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WAC+D;AAC/D,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,QAAQ,OACN,WACqE;AACrE,aAAOM,oBAAkB,kBAAkB,MAAM,UAAU,MAAM;AAAA,IACnE;AAAA,IACA,uBAAuB,OACrB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WACoE;AACpE,aAAOA,oBAAkB,kBAAkB,MAAM,SAAS,MAAM;AAAA,IAClE;AAAA,IACA,SAAS,OACP,WACsE;AACtE,aAAOA,oBAAkB,kBAAkB,MAAM,WAAW,MAAM;AAAA,IACpE;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAP;AAAA,IACF;AAAA,EACF;AACF;;;AK7VA;AAAA,EAEE,YAAAQ;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EAEA,wBAAAC;AAAA,OAEK;;;AClCP,IAAAC,4BAAA;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS,CAAC;AAAA,IACV,OAAS,CAAC;AAAA,IACV,WAAa,CAAC;AAAA,EAChB;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ADyBA,IAAMC,YAAN,cAAsBC,kBAA0C;AAAA,EAC9D,eAAe;AACb,WAAOC,uBAAqB,CAAC,GAAG,KAAK,SAAS,WAAiBC,WAAU;AAAA,EAC3E;AAAA,EAEA,SAAS;AAAA,IACP,eAAe,EAAE,WAAW,OAAO,KAAK,GAAG,gBAAgB,OAAO,KAAK,EAAE;AAAA,EAC3E;AAAA,EAEA,GAAG,SAAuC;AACxC,WAAO,IAAIC,sBAAqB,OAAO;AAAA,EACzC;AAAA,EAEA,QAAQ;AAAA,IACN,QAAQ,OACN,WAOmD;AACnD,aAAOC,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,aAAa,YAAgB,OAAe,SAAkB;AAC5D,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAMC,gBAAe,IAAIP;AAAA,EAC9BQ,WAAS;AAAA,IACPC;AAAA,IACA;AAAA,IACA;AAAA,IACMN;AAAA,EACR;AACF;AACAO,kBAAiBH,aAAY;AAGtB,IAAMH,wBAAN,cAAmCO,mBAAiB;AAAA,EACzD,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAA+C;AACnD,WAAOC,qBAAmBL,eAAc,IAAI;AAAA,EAC9C;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ,OACN,WAC0D;AAC1D,aAAOM;AAAA,QACLN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,QAAQ,OACN,WACiE;AACjE,aAAOQ,oBAAkBP,eAAc,MAAM,UAAU,MAAM;AAAA,IAC/D;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMQ;AAAA,MACXR;AAAA,MACA;AAAA,MACA;AAAA,MACAD;AAAA,IACF;AAAA,EACF;AACF;;;AE1KA;AAAA,EAEE,YAAAU;AAAA,EAIA,mBAAAC;AAAA,EAOA,0BAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EACA,iCAAAC;AAAA,EAKA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,MACP;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ADnPA,SAAS,gBAAgB;AA4JzB,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAAoC;AAC/C,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACRC;AAAA,IACR;AAAA,EACF;AAAA,EAEA,aAAa,EAAE,eAAe,GAAG,UAAU,GAAG,aAAa,EAAE;AAAA,EAC7D,SAAS;AAAA,IACP,YAAY;AAAA,MACV,wBAAwB,OAAO,GAAG;AAAA,MAClC,eAAe,OAAO,GAAG;AAAA,MACzB,qBAAqB,OAAO,GAAG;AAAA,MAC/B,kBAAkB,OAAO,GAAG;AAAA,MAC5B,sBAAsB,OAAO,GAAG;AAAA,MAChC,oBAAoB,OAAO,GAAG;AAAA,MAC9B,cAAc,OAAO,GAAG;AAAA,MACxB,WAAW,OAAO,GAAG;AAAA,MACrB,sBAAsB,OAAO,GAAG;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,GAAG,SAAyC;AAC1C,WAAO,IAAI,uBAAuB,OAAO;AAAA,EAC3C;AAAA,EAEA,QAAQ;AAAA,IACN,SAAS,OACP,WAKgE;AAChE,aAAOC,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,WAAW,OACT,WAKgE;AAChE,aAAOD,aAAW,MAAM,aAAa,QAAQC,sBAAqB;AAAA,IACpE;AAAA,IACA,aAAa,OACX,WAQgE;AAChE,aAAOD,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,IACA,WAAW,OACT,WAQgE;AAChE,aAAOD,aAAW,MAAM,aAAa,QAAQC,sBAAqB;AAAA,IACpE;AAAA,IACA,oBAAoB,OAClB,WAaG;AACH,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WAOG;AACH,aAAOD,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,IACA,kBAAkB,OAChB,WAKkE;AAClE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,qBAAqB,OACnB,WAQkE;AAClE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAKgE;AAChE,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,iBAAiB,OACf,WAQmE;AACnE,aAAOD,aAAW,MAAM,mBAAmB,QAAQC,sBAAqB;AAAA,IAC1E;AAAA,IACA,eAAe,OACb,WAQmE;AACnE,aAAOD,aAAW,MAAM,iBAAiB,QAAQC,sBAAqB;AAAA,IACxE;AAAA,IACA,gBAAgB,OACd,WAQmE;AACnE,aAAOD,aAAW,MAAM,kBAAkB,QAAQC,sBAAqB;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA,MACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,IAAI;AAAA,EAC5D;AACF;AAGO,IAAM,iBAAiB,IAAIN;AAAA,EAChCO,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACMH;AAAA,EACR;AACF;AACAI,kBAAiB,cAAc;AAGxB,IAAM,yBAAN,cAAqCC,mBAAiB;AAAA,EAC3D,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,MACb,eAAe;AAAA,MACf,KAAK;AAAA,MACL;AAAA,IACF;AAAA,IACA,eAAe,IAAI;AAAA,MACjB,eAAe;AAAA,MACf,KAAK;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAiD;AACrD,WAAOC,qBAAmB,gBAAgB,IAAI;AAAA,EAChD;AAAA,EAEA,MAAM,gCAAiD;AACrD,WAAOC,gCAA8B,KAAK,OAAO;AAAA,EACnD;AAAA,EAEA,4BACE,SACA,WACmB;AACnB,WAAOC;AAAA,MACL,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,uBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,0BACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SAKA,WACmB;AACnB,WAAOC;AAAA,MACL,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,SAAS,OACP,WAC6D;AAC7D,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,OACT,WAC+D;AAC/D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WACiE;AACjE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,OACT,WAC+D;AAC/D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WACwE;AACxE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WACiE;AACjE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB,OAChB,WACsE;AACtE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,qBAAqB,OACnB,WACyE;AACzE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAC0D;AAC1D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WACqE;AACrE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,OACb,WACmE;AACnE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WACoE;AACpE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,SAAS,OACP,WACoE;AACpE,aAAOS,oBAAkB,gBAAgB,MAAM,WAAW,MAAM;AAAA,IAClE;AAAA,IACA,WAAW,OACT,WACsE;AACtE,aAAOA,oBAAkB,gBAAgB,MAAM,aAAa,MAAM;AAAA,IACpE;AAAA,IACA,aAAa,OACX,WACwE;AACxE,aAAOA,oBAAkB,gBAAgB,MAAM,eAAe,MAAM;AAAA,IACtE;AAAA,IACA,WAAW,OACT,WACsE;AACtE,aAAOA,oBAAkB,gBAAgB,MAAM,aAAa,MAAM;AAAA,IACpE;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WACwE;AACxE,aAAOA,oBAAkB,gBAAgB,MAAM,eAAe,MAAM;AAAA,IACtE;AAAA,IACA,kBAAkB,OAChB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,qBAAqB,OACnB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACiE;AACjE,aAAOA,oBAAkB,gBAAgB,MAAM,QAAQ,MAAM;AAAA,IAC/D;AAAA,IACA,iBAAiB,OACf,WAGG;AACH,aAAOA,oBAAkB,gBAAgB,MAAM,mBAAmB,MAAM;AAAA,IAC1E;AAAA,IACA,eAAe,OACb,WAGG;AACH,aAAOA,oBAAkB,gBAAgB,MAAM,iBAAiB,MAAM;AAAA,IACxE;AAAA,IACA,gBAAgB,OACd,WAGG;AACH,aAAOA,oBAAkB,gBAAgB,MAAM,kBAAkB,MAAM;AAAA,IACzE;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAV;AAAA,IACF;AAAA,EACF;AACF;;;AEjtBA;AAAA,EAEE,YAAAW;AAAA,EAIA,mBAAAC;AAAA,EAOA,0BAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EACA,iCAAAC;AAAA,EAKA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,OAAS;AAAA,QACP,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,MACP;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACF;;;ADtNA,SAAS,YAAAC,iBAAgB;AA2HzB,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAAwC;AACnD,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACRC;AAAA,IACR;AAAA,EACF;AAAA,EAEA,aAAa,EAAE,QAAQ,GAAG,UAAU,GAAG,iBAAiB,GAAG,eAAe,EAAE;AAAA,EAC5E,SAAS;AAAA,IACP,gBAAgB,OAAO,qBAAqB;AAAA,IAC5C,eAAe,EAAE,WAAW,OAAO,KAAK,GAAG,gBAAgB,OAAO,KAAK,EAAE;AAAA,IACzE,YAAY;AAAA,MACV,sBAAsB,OAAO,IAAI;AAAA,MACjC,yBAAyB,OAAO,IAAI;AAAA,MACpC,yBAAyB,OAAO,IAAI;AAAA,MACpC,qBAAqB,OAAO,IAAI;AAAA,MAChC,uBAAuB,OAAO,IAAI;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,GAAG,SAA6C;AAC9C,WAAO,IAAI,2BAA2B,OAAO;AAAA,EAC/C;AAAA,EAEA,QAAQ;AAAA,IACN,SAAS,OACP,WAKoE;AACpE,aAAOC,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,WAAW,OACT,WAKoE;AACpE,aAAOD,aAAW,MAAM,aAAa,QAAQC,sBAAqB;AAAA,IACpE;AAAA,IACA,QAAQ,OACN,WAKsE;AACtE,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,eAAe,OACb,WAKoE;AACpE,aAAOD,aAAW,MAAM,iBAAiB,QAAQC,sBAAqB;AAAA,IACxE;AAAA,IACA,qBAAqB,OACnB,WAQoE;AACpE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,yBAAyB,OACvB,WAKoE;AACpE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,uBAAuB,OACrB,WAKsE;AACtE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA,MACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,IAAI;AAAA,EAC5D;AACF;AAGO,IAAM,qBAAqB,IAAIN;AAAA,EACpCO,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACMH;AAAA,EACR;AACF;AACAI,kBAAiB,kBAAkB;AAG5B,IAAM,6BAAN,cAAyCC,mBAAiB;AAAA,EAC/D,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,OAAO;AAAA,IACL,uBAAuB,IAAIV;AAAA,MACzB,mBAAmB;AAAA,MACnB,KAAK;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAqD;AACzD,WAAOW,qBAAmB,oBAAoB,IAAI;AAAA,EACpD;AAAA,EAEA,MAAM,gCAAiD;AACrD,WAAOC,gCAA8B,KAAK,OAAO;AAAA,EACnD;AAAA,EAEA,qBACE,SACA,WACmB;AACnB,WAAOC;AAAA,MACL,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,uBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,8BACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,4BACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SAMA,WACmB;AACnB,WAAOC;AAAA,MACL,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,SAAS,OACP,WACiE;AACjE,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,OACT,WACmE;AACnE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WACgE;AAChE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,OACb,WACuE;AACvE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,qBAAqB,OACnB,WAGG;AACH,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,yBAAyB,OACvB,WAGG;AACH,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,uBAAuB,OACrB,WAGG;AACH,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,SAAS,OACP,WACwE;AACxE,aAAOS,oBAAkB,oBAAoB,MAAM,WAAW,MAAM;AAAA,IACtE;AAAA,IACA,WAAW,OACT,WAGG;AACH,aAAOA,oBAAkB,oBAAoB,MAAM,aAAa,MAAM;AAAA,IACxE;AAAA,IACA,QAAQ,OACN,WACuE;AACvE,aAAOA,oBAAkB,oBAAoB,MAAM,UAAU,MAAM;AAAA,IACrE;AAAA,IACA,eAAe,OACb,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,qBAAqB,OACnB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,yBAAyB,OACvB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,uBAAuB,OACrB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAV;AAAA,IACF;AAAA,EACF;AACF;;;AE1iBA;AAAA,EAEE,YAAAW;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EAEA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS,CAAC;AAAA,IACV,OAAS,CAAC;AAAA,IACV,WAAa,CAAC;AAAA,EAChB;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,OAAS;AAAA,QACP,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ADxBA,IAAMC,YAAN,cAAsBC,kBAAuD;AAAA,EAC3E,eAAe;AACb,WAAOC,uBAAqB,CAAC,GAAG,KAAK,SAAS,WAAiBC,WAAU;AAAA,EAC3E;AAAA,EAEA,SAAS;AAAA,IACP,eAAe,OAAO,IAAI;AAAA,IAC1B,WAAW;AAAA,MACT,oBAAoB,OAAO,KAAK;AAAA,MAChC,iBAAiB,OAAO,KAAK;AAAA,MAC7B,sBAAsB,OAAO,KAAK;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,GAAG,SAAoD;AACrD,WAAO,IAAI,kCAAkC,OAAO;AAAA,EACtD;AAAA,EAEA,QAAQ;AAAA,IACN,KAAK,OACH,WAOsD;AACtD,aAAOC,aAAW,MAAM,OAAO,QAAQC,sBAAqB;AAAA,IAC9D;AAAA,IACA,MAAM,OACJ,WAOmD;AACnD,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,QAAQ,OACN,WAOsD;AACtD,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,MAAM,OACJ,WAOsD;AACtD,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,UAAU,OACR,WAOsD;AACtD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,MAAM,OACJ,WAImD;AACnD,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,OAAO,OACL,WAIsD;AACtD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAa,YAAgB,OAAe,SAAkB;AAC5D,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,4BAA4B,IAAIL;AAAA,EAC3CM,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACMH;AAAA,EACR;AACF;AACAI,kBAAiB,yBAAyB;AAGnC,IAAM,oCAAN,cAAgDC,mBAAiB;AAAA,EACtE,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAA4D;AAChE,WAAOC,qBAAmB,2BAA2B,IAAI;AAAA,EAC3D;AAAA,EAEA,OAAO;AAAA,IACL,KAAK,OACH,WACoE;AACpE,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACqE;AACrE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WACuE;AACvE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACqE;AACrE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WACyE;AACzE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACqE;AACrE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WACsE;AACtE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,KAAK,OACH,WAGG;AACH,aAAOM,oBAAkB,2BAA2B,MAAM,OAAO,MAAM;AAAA,IACzE;AAAA,IACA,MAAM,OACJ,WAGG;AACH,aAAOA,oBAAkB,2BAA2B,MAAM,QAAQ,MAAM;AAAA,IAC1E;AAAA,IACA,QAAQ,OACN,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAGG;AACH,aAAOA,oBAAkB,2BAA2B,MAAM,QAAQ,MAAM;AAAA,IAC1E;AAAA,IACA,UAAU,OACR,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAGG;AACH,aAAOA,oBAAkB,2BAA2B,MAAM,QAAQ,MAAM;AAAA,IAC1E;AAAA,IACA,OAAO,OACL,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAUA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAP;AAAA,IACF;AAAA,EACF;AACF;;;AE1aA;AAAA,EAEE,YAAAQ;AAAA,EAIA,mBAAAC;AAAA,EASA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EAMA,qBAAAC;AAAA,EAEA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS,CAAC;AAAA,IACV,OAAS,CAAC;AAAA,IACV,WAAa,CAAC;AAAA,EAChB;AAAA,EACA,WAAa,CAAC;AAAA,EACd,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,OAAS;AAAA,QACP,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AD9BA,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,eAAe;AACb,WAAOC,uBAAqB,CAAC,GAAG,KAAK,SAAS,WAAiBC,WAAU;AAAA,EAC3E;AAAA,EAEA,SAAS;AAAA,IACP,eAAe,OAAO,IAAI;AAAA,IAC1B,WAAW;AAAA,MACT,oBAAoB,OAAO,KAAK;AAAA,MAChC,iBAAiB,OAAO,KAAK;AAAA,MAC7B,sBAAsB,OAAO,KAAK;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,GAAG,SAAwD;AACzD,WAAO,IAAI,sCAAsC,OAAO;AAAA,EAC1D;AAAA,EAEA,QAAQ;AAAA,IACN,KAAK,OACH,WAOmD;AACnD,aAAOC,aAAW,MAAM,OAAO,QAAQC,sBAAqB;AAAA,IAC9D;AAAA,IACA,MAAM,OACJ,WAOmD;AACnD,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,QAAQ,OACN,WAOsD;AACtD,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,MAAM,OACJ,WAOsD;AACtD,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,cAAc,OACZ,WAOmD;AACnD,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,UAAU,OACR,WAOsD;AACtD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,MAAM,OACJ,WAImD;AACnD,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,OAAO,OACL,WAIsD;AACtD,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAa,YAAgB,OAAe,SAAkB;AAC5D,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,gCAAgC,IAAIL;AAAA,EAC/CM,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACMH;AAAA,EACR;AACF;AACAI,kBAAiB,6BAA6B;AAGvC,IAAM,wCAAN,cAAoDC,mBAAiB;AAAA,EAC1E,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAAgE;AACpE,WAAOC,qBAAmB,+BAA+B,IAAI;AAAA,EAC/D;AAAA,EAEA,OAAO;AAAA,IACL,KAAK,OACH,WACwE;AACxE,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACyE;AACzE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACyE;AACzE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACyE;AACzE,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WAGG;AACH,aAAOK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,KAAK,OACH,WAGG;AACH,aAAOM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAYA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAP;AAAA,IACF;AAAA,EACF;AACF;;;AE/fA;AAAA,EAEE,YAAAQ;AAAA,EAIA,mBAAAC;AAAA,EAOA,0BAAAC;AAAA,EAEA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EACA,iCAAAC;AAAA,EAKA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa,CAAC;AAAA,EACd,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ADZA,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAAqC;AAChD,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACRC;AAAA,IACR;AAAA,EACF;AAAA,EAEA,aAAa,EAAE,YAAY,EAAE;AAAA,EAC7B,SAAS;AAAA,IACP,uBAAuB;AAAA,MACrB,kBAAkB,OAAO,OAAO;AAAA,MAChC,iBAAiB,OAAO,OAAO;AAAA,MAC/B,mBAAmB,OAAO,OAAO;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,GAAG,SAA0C;AAC3C,WAAO,IAAI,wBAAwB,OAAO;AAAA,EAC5C;AAAA,EAEA,QAAQ;AAAA,IACN,eAAe,OACb,WAIsD;AACtD,aAAOC,aAAW,MAAM,iBAAiB,QAAQC,sBAAqB;AAAA,IACxE;AAAA,IACA,YAAY,OACV,WAIiD;AACjD,aAAOD,aAAW,MAAM,cAAc,QAAQC,sBAAqB;AAAA,IACrE;AAAA,IACA,QAAQ,OACN,WAIoD;AACpD,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,UAAU,OACR,WAIsD;AACtD,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,MAAM,OACJ,WAIsD;AACtD,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,MAAS;AAAA,EACjE;AACF;AAGO,IAAM,kBAAkB,IAAIN;AAAA,EACjCO,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACMH;AAAA,EACR;AACF;AACAI,kBAAiB,eAAe;AAGzB,IAAM,0BAAN,cAAsCC,mBAAiB;AAAA,EAC5D,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aAAkD;AACtD,WAAOC,qBAAmB,iBAAiB,IAAI;AAAA,EACjD;AAAA,EAEA,MAAM,gCAAiD;AACrD,WAAOC,gCAA8B,KAAK,OAAO;AAAA,EACnD;AAAA,EAEA,yBACE,SACA,WACmB;AACnB,WAAOC;AAAA,MACL,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,eAAe,OACb,WACoE;AACpE,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BP;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WACiE;AACjE,aAAOO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAP;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAC6D;AAC7D,aAAOO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAP;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAC+D;AAC/D,aAAOO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAP;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAC2D;AAC3D,aAAOO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAP;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,eAAe,OACb,WAGG;AACH,aAAOQ,oBAAkB,iBAAiB,MAAM,iBAAiB,MAAM;AAAA,IACzE;AAAA,IACA,YAAY,OACV,WACwE;AACxE,aAAOA,oBAAkB,iBAAiB,MAAM,cAAc,MAAM;AAAA,IACtE;AAAA,IACA,QAAQ,OACN,WACoE;AACpE,aAAOA,oBAAkB,iBAAiB,MAAM,UAAU,MAAM;AAAA,IAClE;AAAA,IACA,UAAU,OACR,WACsE;AACtE,aAAOA,oBAAkB,iBAAiB,MAAM,YAAY,MAAM;AAAA,IACpE;AAAA,IACA,MAAM,OACJ,WACkE;AAClE,aAAOA,oBAAkB,iBAAiB,MAAM,QAAQ,MAAM;AAAA,IAChE;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAT;AAAA,IACF;AAAA,EACF;AACF;;;AElVA;AAAA,EAEE,YAAAU;AAAA,EAIA,mBAAAC;AAAA,EAOA,0BAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EACA,iCAAAC;AAAA,EAKA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,OAAS;AAAA,QACP,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,OAAS;AAAA,QACP,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,MACP;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACF;;;ADxgBA,SAAS,YAAAC,iBAAgB;AAuQzB,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAAqC;AAChD,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACRC;AAAA,IACR;AAAA,EACF;AAAA,EAEA,aAAa,EAAE,YAAY,GAAG,QAAQ,GAAG,UAAU,EAAE;AAAA,EACrD,SAAS;AAAA,IACP,eAAe,OAAO,IAAI;AAAA,IAC1B,uBAAuB,OAAO,qBAAqB;AAAA,IACnD,WAAW;AAAA,MACT,oBAAoB,OAAO,KAAK;AAAA,MAChC,iBAAiB,OAAO,KAAK;AAAA,MAC7B,sBAAsB,OAAO,KAAK;AAAA,IACpC;AAAA,IACA,uBAAuB;AAAA,MACrB,kBAAkB,OAAO,OAAO;AAAA,MAChC,iBAAiB,OAAO,OAAO;AAAA,MAC/B,mBAAmB,OAAO,OAAO;AAAA,IACnC;AAAA,IACA,YAAY;AAAA,MACV,UAAU,OAAO,KAAK;AAAA,MACtB,wBAAwB,OAAO,KAAK;AAAA,MACpC,eAAe,OAAO,KAAK;AAAA,MAC3B,0BAA0B,OAAO,KAAK;AAAA,MACtC,qBAAqB,OAAO,KAAK;AAAA,MACjC,uBAAuB,OAAO,KAAK;AAAA,MACnC,0BAA0B,OAAO,KAAK;AAAA,MACtC,sBAAsB,OAAO,KAAK;AAAA,MAClC,kBAAkB,OAAO,KAAK;AAAA,MAC9B,gBAAgB,OAAO,KAAK;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,GAAG,SAA0C;AAC3C,WAAO,IAAI,wBAAwB,OAAO;AAAA,EAC5C;AAAA,EAEA,QAAQ;AAAA,IACN,KAAK,OACH,WAKsE;AACtE,aAAOC,aAAW,MAAM,OAAO,QAAQC,sBAAqB;AAAA,IAC9D;AAAA,IACA,MAAM,OACJ,WAKmE;AACnE,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,QAAQ,OACN,WAKsE;AACtE,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,MAAM,OACJ,WAKsE;AACtE,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,UAAU,OACR,WAKsE;AACtE,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,MAAM,OACJ,WAKmE;AACnE,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,OAAO,OACL,WAQsE;AACtE,aAAOD,aAAW,MAAM,SAAS,QAAQC,sBAAqB;AAAA,IAChE;AAAA,IACA,eAAe,OACb,WAQsE;AACtE,aAAOD,aAAW,MAAM,iBAAiB,QAAQC,sBAAqB;AAAA,IACxE;AAAA,IACA,YAAY,OACV,WAKiE;AACjE,aAAOD,aAAW,MAAM,cAAc,QAAQC,sBAAqB;AAAA,IACrE;AAAA,IACA,QAAQ,OACN,WAKoE;AACpE,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,UAAU,OACR,WAKsE;AACtE,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,MAAM,OACJ,WAKsE;AACtE,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,iBAAiB,OACf,WAQsE;AACtE,aAAOD,aAAW,MAAM,mBAAmB,QAAQC,sBAAqB;AAAA,IAC1E;AAAA,IACA,oBAAoB,OAClB,WAOG;AACH,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,OACT,WAKoE;AACpE,aAAOD,aAAW,MAAM,aAAa,QAAQC,sBAAqB;AAAA,IACpE;AAAA,IACA,OAAO,OACL,WAKiE;AACjE,aAAOD,aAAW,MAAM,SAAS,QAAQC,sBAAqB;AAAA,IAChE;AAAA,IACA,SAAS,OACP,WAKiE;AACjE,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,eAAe,OACb,WAKiE;AACjE,aAAOD,aAAW,MAAM,iBAAiB,QAAQC,sBAAqB;AAAA,IACxE;AAAA,IACA,oBAAoB,OAClB,WAKiE;AACjE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,OACT,WAKmE;AACnE,aAAOD,aAAW,MAAM,aAAa,QAAQC,sBAAqB;AAAA,IACpE;AAAA,IACA,wCAAwC,OACtC,WAKiE;AACjE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WAKiE;AACjE,aAAOD,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,IACA,gCAAgC,OAC9B,WAKoE;AACpE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA,MACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,IAAI;AAAA,EAC5D;AACF;AAGO,IAAM,kBAAkB,IAAIN;AAAA,EACjCO,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACMH;AAAA,EACR;AACF;AACAI,kBAAiB,eAAe;AAGzB,IAAM,0BAAN,cAAsCC,mBAAiB;AAAA,EAC5D,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,OAAO;AAAA,IACL,iBAAiB,IAAIV;AAAA,MACnB,gBAAgB;AAAA,MAChB,KAAK;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAkD;AACtD,WAAOW,qBAAmB,iBAAiB,IAAI;AAAA,EACjD;AAAA,EAEA,MAAM,gCAAiD;AACrD,WAAOC,gCAA8B,KAAK,OAAO;AAAA,EACnD;AAAA,EAEA,yBACE,SACA,WACmB;AACnB,WAAOC;AAAA,MACL,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,qBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,uBACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SAKA,WACmB;AACnB,WAAOC;AAAA,MACL,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,KAAK,OACH,WAC0D;AAC1D,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAC2D;AAC3D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAC6D;AAC7D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAC2D;AAC3D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAC+D;AAC/D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAC2D;AAC3D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WAC4D;AAC5D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,OACb,WACoE;AACpE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,OACV,WACiE;AACjE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WAC6D;AAC7D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAC+D;AAC/D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WAC2D;AAC3D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,OACf,WACsE;AACtE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WACyE;AACzE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,OACT,WACgE;AAChE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WAC4D;AAC5D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WAC8D;AAC9D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,OACb,WACoE;AACpE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WACyE;AACzE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,OACT,WACgE;AAChE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,wCAAwC,OACtC,WAGG;AACH,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WACkE;AAClE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,gCAAgC,OAC9B,WAGG;AACH,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,KAAK,OACH,WACiE;AACjE,aAAOS,oBAAkB,iBAAiB,MAAM,OAAO,MAAM;AAAA,IAC/D;AAAA,IACA,MAAM,OACJ,WACkE;AAClE,aAAOA,oBAAkB,iBAAiB,MAAM,QAAQ,MAAM;AAAA,IAChE;AAAA,IACA,QAAQ,OACN,WACoE;AACpE,aAAOA,oBAAkB,iBAAiB,MAAM,UAAU,MAAM;AAAA,IAClE;AAAA,IACA,MAAM,OACJ,WACkE;AAClE,aAAOA,oBAAkB,iBAAiB,MAAM,QAAQ,MAAM;AAAA,IAChE;AAAA,IACA,UAAU,OACR,WACsE;AACtE,aAAOA,oBAAkB,iBAAiB,MAAM,YAAY,MAAM;AAAA,IACpE;AAAA,IACA,MAAM,OACJ,WACkE;AAClE,aAAOA,oBAAkB,iBAAiB,MAAM,QAAQ,MAAM;AAAA,IAChE;AAAA,IACA,OAAO,OACL,WACmE;AACnE,aAAOA,oBAAkB,iBAAiB,MAAM,SAAS,MAAM;AAAA,IACjE;AAAA,IACA,eAAe,OACb,WAGG;AACH,aAAOA,oBAAkB,iBAAiB,MAAM,iBAAiB,MAAM;AAAA,IACzE;AAAA,IACA,YAAY,OACV,WACwE;AACxE,aAAOA,oBAAkB,iBAAiB,MAAM,cAAc,MAAM;AAAA,IACtE;AAAA,IACA,QAAQ,OACN,WACoE;AACpE,aAAOA,oBAAkB,iBAAiB,MAAM,UAAU,MAAM;AAAA,IAClE;AAAA,IACA,UAAU,OACR,WACsE;AACtE,aAAOA,oBAAkB,iBAAiB,MAAM,YAAY,MAAM;AAAA,IACpE;AAAA,IACA,MAAM,OACJ,WACkE;AAClE,aAAOA,oBAAkB,iBAAiB,MAAM,QAAQ,MAAM;AAAA,IAChE;AAAA,IACA,iBAAiB,OACf,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,OACT,WACuE;AACvE,aAAOA,oBAAkB,iBAAiB,MAAM,aAAa,MAAM;AAAA,IACrE;AAAA,IACA,OAAO,OACL,WACmE;AACnE,aAAOA,oBAAkB,iBAAiB,MAAM,SAAS,MAAM;AAAA,IACjE;AAAA,IACA,SAAS,OACP,WACqE;AACrE,aAAOA,oBAAkB,iBAAiB,MAAM,WAAW,MAAM;AAAA,IACnE;AAAA,IACA,eAAe,OACb,WAGG;AACH,aAAOA,oBAAkB,iBAAiB,MAAM,iBAAiB,MAAM;AAAA,IACzE;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,OACT,WACuE;AACvE,aAAOA,oBAAkB,iBAAiB,MAAM,aAAa,MAAM;AAAA,IACrE;AAAA,IACA,wCAAwC,OACtC,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WACyE;AACzE,aAAOA,oBAAkB,iBAAiB,MAAM,eAAe,MAAM;AAAA,IACvE;AAAA,IACA,gCAAgC,OAC9B,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAV;AAAA,IACF;AAAA,EACF;AACF;;;AE3lCA;AAAA,EAEE,YAAAW;AAAA,EAIA,mBAAAC;AAAA,EAOA,0BAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,sBAAAC;AAAA,EAEA,oBAAAC;AAAA,EACA,iCAAAC;AAAA,EAKA,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,wBAAAC;AAAA,OAEK;;;AClCP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,UAAY;AAAA,EACZ,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAc;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAe,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,OAAS;AAAA,QACP,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAS;AAAA,IACP;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,QAAU;AAAA,QACR;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,YACR,OAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,MACP;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAkB;AACpB;;;AD7WA,SAAS,YAAAC,iBAAgB;AA0NzB,IAAMC,YAAN,cAAsBC,kBAGpB;AAAA,EACA,aAAa,QAAgC;AAC3C,WAAOC;AAAA,MACLC,mBAAiB,KAAK,UAAU,MAAM;AAAA,MACtC,KAAK,SAAS;AAAA,MACRC;AAAA,IACR;AAAA,EACF;AAAA,EAEA,aAAa,EAAE,QAAQ,GAAG,kBAAkB,EAAE;AAAA,EAC9C,SAAS;AAAA,IACP,eAAe,OAAO,IAAI;AAAA,IAC1B,WAAW;AAAA,MACT,oBAAoB,OAAO,KAAK;AAAA,MAChC,iBAAiB,OAAO,KAAK;AAAA,MAC7B,sBAAsB,OAAO,KAAK;AAAA,IACpC;AAAA,IACA,YAAY;AAAA,MACV,wBAAwB,OAAO,IAAI;AAAA,MACnC,4BAA4B,OAAO,IAAI;AAAA,MACvC,wBAAwB,OAAO,IAAI;AAAA,MACnC,yBAAyB,OAAO,IAAI;AAAA,MACpC,6BAA6B,OAAO,IAAI;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,GAAG,SAAqC;AACtC,WAAO,IAAI,mBAAmB,OAAO;AAAA,EACvC;AAAA,EAEA,QAAQ;AAAA,IACN,WAAW,OACT,WAIiE;AACjE,aAAOC,aAAW,MAAM,aAAa,QAAQC,sBAAqB;AAAA,IACpE;AAAA,IACA,SAAS,OACP,WAIiE;AACjE,aAAOD,aAAW,MAAM,WAAW,QAAQC,sBAAqB;AAAA,IAClE;AAAA,IACA,aAAa,OACX,WAI8D;AAC9D,aAAOD,aAAW,MAAM,eAAe,QAAQC,sBAAqB;AAAA,IACtE;AAAA,IACA,gBAAgB,OACd,WAI8D;AAC9D,aAAOD,aAAW,MAAM,kBAAkB,QAAQC,sBAAqB;AAAA,IACzE;AAAA,IACA,KAAK,OACH,WAK8D;AAC9D,aAAOD,aAAW,MAAM,OAAO,QAAQC,sBAAqB;AAAA,IAC9D;AAAA,IACA,MAAM,OACJ,WAK8D;AAC9D,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,QAAQ,OACN,WAKiE;AACjE,aAAOD,aAAW,MAAM,UAAU,QAAQC,sBAAqB;AAAA,IACjE;AAAA,IACA,MAAM,OACJ,WAKiE;AACjE,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,cAAc,OACZ,WAK8D;AAC9D,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,UAAU,OACR,WAKiE;AACjE,aAAOD,aAAW,MAAM,YAAY,QAAQC,sBAAqB;AAAA,IACnE;AAAA,IACA,MAAM,OACJ,WAK8D;AAC9D,aAAOD,aAAW,MAAM,QAAQ,QAAQC,sBAAqB;AAAA,IAC/D;AAAA,IACA,OAAO,OACL,WAIiE;AACjE,aAAOD,aAAW,MAAM,SAAS,QAAQC,sBAAqB;AAAA,IAChE;AAAA,IACA,OAAO,OACL,WAK4D;AAC5D,aAAOD,aAAW,MAAM,SAAS,QAAQC,sBAAqB;AAAA,IAChE;AAAA,IACA,cAAc,OACZ,WAKiE;AACjE,aAAOD,aAAW,MAAM,gBAAgB,QAAQC,sBAAqB;AAAA,IACvE;AAAA,IACA,8BAA8B,OAC5B,WAKiE;AACjE,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAK8D;AAC9D,aAAOD;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,OACb,WAK4D;AAC5D,aAAOD,aAAW,MAAM,iBAAiB,QAAQC,sBAAqB;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,aACE,YACA,OACA,SACA,MACA;AACA,WAAO,KAAK,cAAc,YAAY,OAAO,SAAS,IAAI;AAAA,EAC5D;AACF;AAGO,IAAM,aAAa,IAAIN;AAAA,EAC5BO,WAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACMH;AAAA,EACR;AACF;AACAI,kBAAiB,UAAU;AAGpB,IAAM,qBAAN,cAAiCC,mBAAiB;AAAA,EACvD,YAAY,SAAkB;AAC5B,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,OAAO;AAAA,IACL,yBAAyB,IAAIV;AAAA,MAC3B,WAAW;AAAA,MACX,KAAK;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAA6C;AACjD,WAAOW,qBAAmB,YAAY,IAAI;AAAA,EAC5C;AAAA,EAEA,MAAM,gCAAiD;AACrD,WAAOC,gCAA8B,KAAK,OAAO;AAAA,EACnD;AAAA,EAEA,qBACE,SACA,WACmB;AACnB,WAAOC;AAAA,MACL,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,+BACE,SACA,WACmB;AACnB,WAAOA;AAAA,MACL,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SAGA,WACmB;AACnB,WAAOC;AAAA,MACL,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,WAAW,OACT,WAC2D;AAC3D,aAAOC;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,OACP,WACyD;AACzD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OACX,WAC6D;AAC7D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,OACd,WACgE;AAChE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,OACH,WACqD;AACrD,aAAOQ,aAAW,YAAY,MAAM,OAAO,QAAQR,sBAAqB;AAAA,IAC1E;AAAA,IACA,MAAM,OACJ,WACsD;AACtD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,OACN,WACwD;AACxD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACsD;AACtD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAC8D;AAC9D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,OACR,WAC0D;AAC1D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,OACJ,WACsD;AACtD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WACuD;AACvD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,SAAY,CAAC,IAAI;AAAA,QAC5BR;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OACL,WACuD;AACvD,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OACZ,WAC8D;AAC9D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,8BAA8B,OAC5B,WAGG;AACH,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WACoE;AACpE,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,OACb,WAC+D;AAC/D,aAAOQ;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AAAA,IACT,WAAW,OACT,WACkE;AAClE,aAAOS,oBAAkB,YAAY,MAAM,aAAa,MAAM;AAAA,IAChE;AAAA,IACA,SAAS,OACP,WACgE;AAChE,aAAOA,oBAAkB,YAAY,MAAM,WAAW,MAAM;AAAA,IAC9D;AAAA,IACA,aAAa,OACX,WACoE;AACpE,aAAOA,oBAAkB,YAAY,MAAM,eAAe,MAAM;AAAA,IAClE;AAAA,IACA,gBAAgB,OACd,WACuE;AACvE,aAAOA,oBAAkB,YAAY,MAAM,kBAAkB,MAAM;AAAA,IACrE;AAAA,IACA,KAAK,OACH,WAC4D;AAC5D,aAAOA,oBAAkB,YAAY,MAAM,OAAO,MAAM;AAAA,IAC1D;AAAA,IACA,MAAM,OACJ,WAC6D;AAC7D,aAAOA,oBAAkB,YAAY,MAAM,QAAQ,MAAM;AAAA,IAC3D;AAAA,IACA,QAAQ,OACN,WAC+D;AAC/D,aAAOA,oBAAkB,YAAY,MAAM,UAAU,MAAM;AAAA,IAC7D;AAAA,IACA,MAAM,OACJ,WAC6D;AAC7D,aAAOA,oBAAkB,YAAY,MAAM,QAAQ,MAAM;AAAA,IAC3D;AAAA,IACA,cAAc,OACZ,WACqE;AACrE,aAAOA,oBAAkB,YAAY,MAAM,gBAAgB,MAAM;AAAA,IACnE;AAAA,IACA,UAAU,OACR,WACiE;AACjE,aAAOA,oBAAkB,YAAY,MAAM,YAAY,MAAM;AAAA,IAC/D;AAAA,IACA,MAAM,OACJ,WAC6D;AAC7D,aAAOA,oBAAkB,YAAY,MAAM,QAAQ,MAAM;AAAA,IAC3D;AAAA,IACA,OAAO,OACL,WAC8D;AAC9D,aAAOA,oBAAkB,YAAY,MAAM,SAAS,MAAM;AAAA,IAC5D;AAAA,IACA,OAAO,OACL,WAC8D;AAC9D,aAAOA,oBAAkB,YAAY,MAAM,SAAS,MAAM;AAAA,IAC5D;AAAA,IACA,cAAc,OACZ,WACqE;AACrE,aAAOA,oBAAkB,YAAY,MAAM,gBAAgB,MAAM;AAAA,IACnE;AAAA,IACA,8BAA8B,OAC5B,WAGG;AACH,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB,OAClB,WAGG;AACH,aAAOA,oBAAkB,YAAY,MAAM,sBAAsB,MAAM;AAAA,IACzE;AAAA,IACA,eAAe,OACb,WACsE;AACtE,aAAOA,oBAAkB,YAAY,MAAM,iBAAiB,MAAM;AAAA,IACpE;AAAA,EACF;AAAA,EAQA,MAAM,UAIJ,QAAkC;AAClC,WAAO,MAAMC;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAV;AAAA,IACF;AAAA,EACF;AACF;;;AE9zBA;AAAA,EAEE,oBAAAW;AAAA,EAGA,UAAAC;AAAA,OAGK;;;ACZP;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,kBAAoB;AAAA,EACpB,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe,CAAC;AAAA,IAClB;AAAA,EACF;AACF;;;AC9BA;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,kBAAoB;AAAA,EACpB,WAAa;AAAA,IACX,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAa;AAAA,IACX;AAAA,MACE,MAAQ;AAAA,MACR,YAAc,CAAC;AAAA,MACf,YAAc,CAAC;AAAA,MACf,gBAAkB,CAAC;AAAA,MACnB,aAAe,CAAC;AAAA,IAClB;AAAA,EACF;AACF;;;AFZO,IAAM,mBAAmB,IAAIC;AAAA,EAKlCC,QAAO,SAAS,8BAA4B,IAAUC,WAAU;AAAA,EAChEC;AACF;AAEO,IAAM,6BAA6B,IAAIH;AAAA,EAK5CC,QAAO,SAAS,wCAAsC,IAAUC,WAAU;AAAA,EAC1EC;AACF;;;AGlCA,IAAAC,+BAAA;AAAA,EACE,iBAAmB;AAAA,EACnB,WAAa;AAAA,IACX,kBAAoB;AAAA,MAClB,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,MACA,kBAAoB;AAAA,IACtB;AAAA,IACA,gBAAkB;AAAA,MAChB,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,oBAAsB;AAAA,MACpB,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,iBAAmB;AAAA,MACjB,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAW,CAAC;AAAA,EACZ,YAAc,CAAC;AACjB;;;AC7EA,IAAAC,8BAAA;AAAA,EACE,iBAAmB;AAAA,EACnB,WAAa;AAAA,IACX,kBAAoB;AAAA,MAClB,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,oBAAsB;AAAA,MACpB,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,iBAAmB;AAAA,MACjB,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA,gBAAkB;AAAA,MAChB,MAAQ;AAAA,MACR,YAAc;AAAA,MACd,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,WAAa;AAAA,MACb,WAAa;AAAA,MACb,UAAY;AAAA,MACZ,kBAAoB;AAAA,QAClB,SAAW;AAAA,QACX,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAW,CAAC;AAAA,EACZ,YAAc,CAAC;AACjB;;;ACzCA,SAASC,eAAc,MAAwB;AAC7C,QAAMC,aAAY;AAAA,IAChB,kBAAkB;AAAA,MAChB,GAAG,KAAK,UAAU,kBAAkB;AAAA,MACpC,kBAAkB,iBAAiB;AAAA,QACjC,KAAK,UAAU,kBAAkB,EAAE,iBAAiB;AAAA,MACtD;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,GAAG,KAAK,UAAU,YAAY;AAAA,MAC9B,kBAAkB,WAAW;AAAA,QAC3B,KAAK,UAAU,YAAY,EAAE,iBAAiB;AAAA,MAChD;AAAA,IACF;AAAA,IACA,gBAAgB;AAAA,MACd,GAAG,KAAK,UAAU,gBAAgB;AAAA,MAClC,kBAAkB,eAAe;AAAA,QAC/B,KAAK,UAAU,gBAAgB,EAAE,iBAAiB;AAAA,MACpD;AAAA,IACF;AAAA,IACA,oBAAoB;AAAA,MAClB,GAAG,KAAK,UAAU,oBAAoB;AAAA,MACtC,kBAAkB,mBAAmB;AAAA,QACnC,KAAK,UAAU,oBAAoB,EAAE,iBAAiB;AAAA,MACxD;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,GAAG,KAAK,UAAU,iBAAiB;AAAA,MACnC,kBAAkB,gBAAgB;AAAA,QAChC,KAAK,UAAU,iBAAiB,EAAE,iBAAiB;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAWA;AAAA,EACb;AACF;AAEO,SAASC,iBACd,WACA,iBACa;AACb,QAAM,cACJ,cAAc,YACVC,+BACA,cAAc,WACdC,8BACA;AACN,MAAI,gBAAgB,QAAW;AAC7B,UAAM,MAAM,+CAA+C,SAAS;AAAA,EACtE;AACA,QAAM,iBAAwB,MAAM,QAAQ,WAAW,IACnD,cACA,CAAC,WAAW;AAChB,MAAI,oBAAoB,QAAW;AACjC,QAAI,eAAe,SAAS,GAAG;AAC7B,YAAM;AAAA,QACJ,sDACE,YACA;AAAA,MACJ;AAAA,IACF,OAAO;AACL,aAAOJ,eAAc,eAAe,CAAC,CAAC;AAAA,IACxC;AAAA,EACF;AACA,QAAM,SAAS,eAAe;AAAA,IAC5B,CAAC,MAAM,EAAE,oBAAoB;AAAA,EAC/B;AACA,MAAI,WAAW,QAAW;AACxB,UAAM,MAAM,+CAA+C;AAAA,EAC7D;AACA,SAAOA,eAAc,MAAM;AAC7B;;;AC5GA,IAAM,iBAAiB;AACvB,IAAM,wBAAwB;AAE9B,IAAM,iBAAiB,CAAC,KAAa,gBAAkC;AACrE,MAAI,IAAI,WAAW,GAAG;AACpB,WAAO,CAAC;AAAA,EACV;AACA,MAAI,IAAI,SAAS,gBAAgB,GAAG;AAClC,UAAM,IAAI,MAAM,qCAAqC,cAAc,CAAC,QAAQ;AAAA,EAC9E;AACA,QAAM,SAAmB,CAAC;AAC1B,WAAS,SAAS,GAAG,SAAS,IAAI,QAAQ,UAAU,aAAa;AAC/D,UAAM,QAAQ,IAAI,MAAM,QAAQ,SAAS,WAAW;AACpD,WAAO,KAAK,KAAK;AAAA,EACnB;AACA,SAAO;AACT;AAEO,IAAM,iBAAiB,CAAC,QAA0B;AACvD,SAAO,eAAe,KAAK,cAAc,EAAE,IAAI,CAAC,UAAU,OAAO,KAAK,KAAK,EAAE,CAAC;AAChF;AAEO,IAAM,uBAAuB,CAAC,QAA0B;AAC7D,SAAO,eAAe,KAAK,qBAAqB;AAClD;;;AChBA,IAAM,kBAAmC;AAAA,EACvC,iBAAiB,MAAM,MAAM,MAAM,MAAM;AAAA;AAAA,EACzC,iCAAiC;AAAA,EACjC,mBAAmB;AACrB;AAEA,IAAM,mBAAyE;AAAA,EAC7E,QAAQ;AAAA,IACN,iBAAiB,MAAM;AAAA;AAAA,IACvB,mBAAmB;AAAA,EACrB;AACF;AAEA,SAAS,cAAc,WAAuC;AAC5D,QAAM,YAAY,iBAAiB,SAAS;AAC5C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,aAAa,CAAC;AAAA,EACpB;AACF;AAEO,IAAM,2BAA+D;AAAA,EAC1E,SAAS,cAAc,SAAS;AAAA,EAChC,SAAS,cAAc,SAAS;AAAA,EAChC,QAAQ,cAAc,QAAQ;AAChC;AAEO,SAAS,mBAAmB,WAAuC;AACxE,SAAO,yBAAyB,SAAS;AAC3C;;;A9BCO,IAAM,gBAAN,cAA4B,WAAW;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,OAAa;AACvB,UAAM,EAAE,OAAO,YAAY,gBAAgB,CAAC;AAE5C,SAAK,SAAS,KAAK,kBAAkB;AACrC,SAAK,qBAAqB,WAAW,GAAGK,uBAAsB,KAAK,OAAO,YAAY,CAAC;AACvF,SAAK,qBAAqB,gBAAgB;AAAA,MACxCA,uBAAsB,KAAK,OAAO,iBAAiB;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,UAAU,QAA6B;AACrC,SAAK,SAAS;AACd,SAAK,qBAAqB,WAAW,GAAGA,uBAAsB,OAAO,YAAY,CAAC;AAClF,SAAK,qBAAqB,gBAAgB,GAAGA,uBAAsB,OAAO,iBAAiB,CAAC;AAAA,EAC9F;AAAA,EAEA,YAA2B;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAoC;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAyC;AACvC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,sBAAsB,YAAgD;AACpE,WAAO,mBAAmB,GAAGA,uBAAsB,UAAU,CAAC;AAAA,EAChE;AAAA,EAEA,sBAAsB,YAA4C;AAChE,WAAO,eAAe,GAAGA,uBAAsB,UAAU,CAAC;AAAA,EAC5D;AAAA,EAEA,MAAM,qBAAqD;AACzD,WAAO,KAAK,mBAAmB,WAAW;AAAA,EAC5C;AAAA,EAEA,MAAM,qBAA0D;AAC9D,WAAO,KAAK,mBAAmB,WAAW;AAAA,EAC5C;AAAA,EAEA,MAAM,UAAU,QAA2E;AACzF,SAAK,qBAAqB,QAAQ,cAAc;AAChD,WAAO,KAAK,mBAAmB,SAAS,MAAM;AAAA,MAC5C,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM,EAAE,OAAO;AAAA,MACf,gBAAgB,SAASC;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aACJ,QACkE;AAClE,SAAK,qBAAqB,QAAQ,gBAAgB;AAClD,WAAO,KAAK,mBAAmB,SAAS,aAAa;AAAA,MACnD,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM,EAAE,OAAO;AAAA,MACf,QAAQ,CAAC,EAAE,IAAI,KAAK,OAAO,cAAc,OAAO,CAAC;AAAA,IACnD,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cACJ,YACA,QACmE;AACnE,SAAK,qBAAqB,QAAQ,cAAc;AAChD,WAAO,KAAK,mBAAmB,SAAS,cAAc;AAAA,MACpD,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW,QAAgF;AAC/F,SAAK,qBAAqB,QAAQ,cAAc;AAChD,WAAO,KAAK,mBAAmB,SAAS,MAAM;AAAA,MAC5C,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM,EAAE,OAAO;AAAA,MACf,QAAQ,CAAC,EAAE,IAAI,KAAK,OAAO,cAAc,OAAO,CAAC;AAAA,MACjD,gBAAgBA;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aACJ,QACkE;AAClE,SAAK,qBAAqB,QAAQ,gBAAgB;AAClD,WAAO,KAAK,mBAAmB,SAAS,QAAQ;AAAA,MAC9C,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM,EAAE,OAAO;AAAA,MACf,gBAAgBA;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,iBAAiB,QAA8C;AACnE,WAAO,iBAAiB,QAAQ;AAAA,MAC9B,QAAQ,KAAK,MAAM;AAAA,MACnB,eAAe;AAAA,QACb,YAAY,KAAK,mBAAmB;AAAA,QACpC,iBAAiB,KAAK,mBAAmB;AAAA,QACzC;AAAA,MACF;AAAA,MACA,gBAAgB,SAASA;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,sBAAsB,QAA8C;AACxE,WAAO,2BAA2B,QAAQ;AAAA,MACxC,QAAQ,KAAK,MAAM;AAAA,MACnB,eAAe;AAAA,QACb,YAAY,KAAK,mBAAmB;AAAA,QACpC,iBAAiB,KAAK,mBAAmB;AAAA,QACzC;AAAA,MACF;AAAA,MACA,gBAAgBA;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,oBAAoB,aAAqB,YAA8C;AACrF,UAAM,UAAUC,UAAS,eAAe,WAAW,CAAC;AACpD,UAAM,WAAWA,UAASC,OAAM,UAAU,OAAO,UAAU,CAAC;AAC5D,UAAM,aAAaC;AAAA,MACjB,KAAK,OAAO;AAAA,MACZ,GAAG,OAAO,GAAG,QAAQ;AAAA,MACrBC,gBAAe,KAAK,OAAO,iBAAiB;AAAA,IAC9C;AACA,WAAO,iBAAiB,GAAGL,uBAAsB,UAAU,CAAC;AAAA,EAC9D;AAAA,EAEA,MAAM,yBACJ,aACA,YACsC;AACtC,WAAO,KAAK,oBAAoB,aAAa,UAAU,EAAE,WAAW;AAAA,EACtE;AAAA,EAEA,MAAM,cACJ,YACA,aACwE;AACxE,WAAO,KAAK,mBAAmB,SAAS,cAAc;AAAA,MACpD,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM,EAAE,YAAY,YAAY;AAAA,MAChC,gBAAgBC;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,mBACJ,YAC6E;AAC7E,WAAO,KAAK,mBAAmB,SAAS,mBAAmB;AAAA,MACzD,QAAQ,KAAK,MAAM;AAAA,MACnB,MAAM,EAAE,WAAW;AAAA,MACnB,gBAAgBA;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,sBAAsB,SAA8C;AACxE,QAAI,gBAAgB;AACpB,QAAIK,qCAAoC,OAAO,GAAG;AAChD,sBAAgB,GAAG,OAAO,IAAI,KAAK,mBAAmB,UAAU;AAAA,IAClE;AACA,UAAM,SAAS,MAAM,KAAK,mBAAmB,KAAK,mBAAmB;AAAA,MACnE,MAAM,EAAE,MAAM,cAAc;AAAA,IAC9B,CAAC;AACD,WAAO;AAAA,MACL,QAAQ,OAAO,QAAQ;AAAA,MACvB,gBAAgB,qBAAqB,OAAO,QAAQ,cAAc;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,SAAmC;AACrD,UAAM,SAAS,MAAM,KAAK,mBAAmB,KAAK,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,EAAE,CAAC;AACvF,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,cAAc,SAAkC;AACpD,UAAM,SAAS,MAAM,KAAK,mBAAmB,KAAK,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,EAAE,CAAC;AACvF,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,6BAA6B,SAAoC;AACrE,UAAM,SAAS,MAAM,KAAK,mBAAmB,KAAK,6BAA6B;AAAA,MAC7E,MAAM,EAAE,QAAQ,QAAQ;AAAA,IAC1B,CAAC;AACD,WAAO,eAAe,OAAO,OAAO;AAAA,EACtC;AAAA,EAEA,MAAM,mBAAmB,SAAiB,YAAqC;AAC7E,UAAM,SAAS,MAAM,KAAK,mBAAmB,KAAK,mBAAmB;AAAA,MACnE,MAAM,EAAE,MAAM,SAAS,WAAW;AAAA,IACpC,CAAC;AACD,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,cAA+B;AAC7B,WAAO,mBAAmB,KAAK,MAAM,QAAQ,EAAE;AAAA,EACjD;AAAA,EAEQ,oBAAmC;AACzC,UAAM,YAAY,KAAK,MAAM,QAAQ;AACrC,QAAI;AACF,YAAM,cAAcC,iBAAgB,SAAS;AAC7C,YAAM,mBAAmB,YAAY,UAAU,iBAAiB;AAChE,YAAM,aAAa,YAAY,UAAU,WAAW;AACpD,YAAM,aAAa,YAAY,UAAU,gBAAgB;AACzD,YAAM,cAAc,YAAY,UAAU,mBAAmB;AAC7D,YAAM,aAAa,YAAY,UAAU,eAAe;AACxD,aAAO;AAAA,QACL,YAAY,WAAW;AAAA,QACvB,4BAA4B,iBAAiB;AAAA,QAC7C,cAAc,WAAW;AAAA,QACzB,mBAAmB,WAAW;AAAA,QAC9B,mBAAmB,WAAW;AAAA,QAC9B,wBAAwB,WAAW;AAAA,QACnC,yBAAyB,YAAY;AAAA,QACrC,0BAA0B,WAAW;AAAA,MACvC;AAAA,IACF,SAAS,OAAO;AACd,WAAK,iBAAiB,yCAAyC,SAAS,IAAI,KAAK;AAAA,IACnF;AAAA,EACF;AAAA,EAEQ,qBAAqB,QAAgB,OAAqB;AAChE,QAAI,UAAU,IAAI;AAChB,YAAM,IAAI,MAAM,GAAG,KAAK,4BAA4B;AAAA,IACtD;AAAA,EACF;AACF;;;AlG3QO,IAAM,OAAN,MAAM,MAAK;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAAwB;AAClC,UAAM,UAAU,gBAAgB,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,SAAS;AACrE,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,WAAW,OAAO,SAAS,YAAY;AAAA,IACzD;AAEA,UAAM,YAAY,OAAO,oBAAoB,CAAC;AAC9C,UAAM,gBAAyB,EAAE,GAAG,SAAS,GAAG,UAAU;AAE1D,SAAK,WAAW;AAChB,SAAK,gBAAgB,IAAI,aAAa,KAAK,SAAS,SAAS,KAAK,SAAS,UAAU;AACrF,SAAK,oBAAoB,IAAI,iBAAiB,KAAK,SAAS,cAAc;AAC1E,SAAK,gBAAgB,KAAK,SAAS;AACnC,SAAK,UAAU,OAAO;AAGtB,SAAK,OAAO,IAAI,WAAW,IAAI;AAC/B,SAAK,OAAO,IAAI,WAAW,IAAI;AAC/B,SAAK,QAAQ,IAAI,YAAY,IAAI;AACjC,SAAK,UAAU,IAAI,cAAc,IAAI;AAAA,EACvC;AAAA,EAEA,OAAO,KAAK,QAA8B;AACxC,WAAO,IAAI,MAAK,MAAM;AAAA,EACxB;AAAA,EAEA,IAAW,OAAO,QAAwB;AACxC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,IAAW,QAAQ,SAAkB;AACnC,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,IAAI,SAAyB;AAC3B,QAAI,CAAC,KAAK,SAAS;AACjB,YAAM,IAAI,MAAM,gBAAgB;AAAA,IAClC;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,UAAmB;AACrB,QAAI,CAAC,KAAK,UAAU;AAClB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,cAAc;AACnB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEO,eAAe;AACpB,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,IAAI,eAA6B;AAC/B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,mBAAqC;AACvC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,UAAmB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAuB;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,sBAA4B;AACjC,QAAI,CAAC,KAAK,eAAe;AACvB,YAAM,IAAI,MAAM,uBAAuB;AAAA,IACzC;AACA,QAAI,CAAC,KAAK,mBAAmB;AAC3B,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AACA,SAAK,uBAAuB,KAAK,aAAa;AAC9C,SAAK,2BAA2B,KAAK,iBAAiB;AAAA,EACxD;AACF;;;AiI+BO,IAAM,WAAW,KAAK,OAAO;","names":["c","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","Contract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","Contract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","Contract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","encodeContractFields","Factory","ContractFactory","encodeContractFields","testMethod","Contract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","encodeContractFields","Factory","ContractFactory","encodeContractFields","testMethod","Contract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","encodeContractFields","Factory","ContractFactory","encodeContractFields","testMethod","Contract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","Contract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","subscribeContractEvent","subscribeContractEvents","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","getContractEventsCurrentCount","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","Contract","ContractInstance","fetchContractState","getContractEventsCurrentCount","subscribeContractEvent","subscribeContractEvents","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","subscribeContractEvent","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","getContractEventsCurrentCount","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","Contract","ContractInstance","fetchContractState","getContractEventsCurrentCount","subscribeContractEvent","callMethod","signExecuteMethod","multicallMethods","contracts","LogLevel","BigNumber","compare","format","result","addressFromContractId","binToHex","DUST_AMOUNT","subContractId","encodePrimitiveValues","groupOfAddress","isGrouplessAddressWithoutGroupIndex","ALPH_TOKEN_ID","ts_exports","DexAccount","DexAccountInstance","TestToken","TestTokenInstance","getAllContracts","getContractByCodeHash","registerContract","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","contracts","getAllContracts","registerContract","getContractByCodeHash","c","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","encodeContractFields","Factory","ContractFactory","encodeContractFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","DexAccount_ral_default","Factory","ContractFactory","encodeContractFields","addStdIdToFields","DexAccountInstance","testMethod","getContractByCodeHash","DexAccount","Contract","DexAccount_ral_default","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","encodeContractFields","Factory","ContractFactory","encodeContractFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","subscribeContractEvent","subscribeContractEvents","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","getContractEventsCurrentCount","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","getContractEventsCurrentCount","subscribeContractEvent","subscribeContractEvents","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","subscribeContractEvent","subscribeContractEvents","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","getContractEventsCurrentCount","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","getContractEventsCurrentCount","subscribeContractEvent","subscribeContractEvents","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","TestToken_ral_default","Factory","ContractFactory","encodeContractFields","addStdIdToFields","TestTokenInstance","testMethod","getContractByCodeHash","TestToken","Contract","TestToken_ral_default","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","scripts_exports","ExecutableScript","Script","ExecutableScript","Script","getContractByCodeHash","deployments_testnet_default","deployments_devnet_default","toDeployments","contracts","DexAccount","loadDeployments","deployments_testnet_default","deployments_devnet_default","subContractId","subContractId","Decimal","normalizeAddress","isGrouplessAddressWithoutGroupIndex","binToHex","subContractId","addressFromContractId","ALPH_TOKEN_ID","groupOfAddress","encodePrimitiveValues","DUST_AMOUNT","index","loadDeployments","MINIMAL_CONTRACT_DEPOSIT","addressFromContractId","binToHex","codec","groupOfAddress","isGrouplessAddressWithoutGroupIndex","subContractId","ts_exports","FullMathTest","FullMathTestInstance","getAllContracts","getContractByCodeHash","registerContract","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","addStdIdToFields","encodeContractFields","contracts","getAllContracts","registerContract","getContractByCodeHash","c","Struct","structs_ral_default","AllStructs","structs_ral_default","Struct","Factory","ContractFactory","encodeContractFields","addStdIdToFields","AllStructs","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","encodeContractFields","FullMathTest_ral_default","Factory","ContractFactory","encodeContractFields","AllStructs","FullMathTestInstance","testMethod","getContractByCodeHash","FullMathTest","Contract","FullMathTest_ral_default","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","subscribeContractEvent","subscribeContractEvents","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","getContractEventsCurrentCount","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","AllStructs","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","getContractEventsCurrentCount","subscribeContractEvent","subscribeContractEvents","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","subscribeContractEvent","subscribeContractEvents","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","getContractEventsCurrentCount","signExecuteMethod","addStdIdToFields","encodeContractFields","RalphMap","Factory","ContractFactory","encodeContractFields","addStdIdToFields","AllStructs","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","getContractEventsCurrentCount","subscribeContractEvent","subscribeContractEvents","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","encodeContractFields","Factory","ContractFactory","encodeContractFields","AllStructs","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","signExecuteMethod","encodeContractFields","Factory","ContractFactory","encodeContractFields","AllStructs","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","subscribeContractEvent","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","getContractEventsCurrentCount","signExecuteMethod","addStdIdToFields","encodeContractFields","Factory","ContractFactory","encodeContractFields","addStdIdToFields","AllStructs","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","getContractEventsCurrentCount","subscribeContractEvent","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","subscribeContractEvent","subscribeContractEvents","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","getContractEventsCurrentCount","signExecuteMethod","addStdIdToFields","encodeContractFields","RalphMap","Factory","ContractFactory","encodeContractFields","addStdIdToFields","AllStructs","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","getContractEventsCurrentCount","subscribeContractEvent","subscribeContractEvents","callMethod","signExecuteMethod","multicallMethods","Contract","ContractFactory","subscribeContractEvent","subscribeContractEvents","testMethod","callMethod","multicallMethods","fetchContractState","ContractInstance","getContractEventsCurrentCount","signExecuteMethod","addStdIdToFields","encodeContractFields","RalphMap","Factory","ContractFactory","encodeContractFields","addStdIdToFields","AllStructs","testMethod","getContractByCodeHash","Contract","registerContract","ContractInstance","fetchContractState","getContractEventsCurrentCount","subscribeContractEvent","subscribeContractEvents","callMethod","signExecuteMethod","multicallMethods","ExecutableScript","Script","ExecutableScript","Script","AllStructs","getContractByCodeHash","deployments_testnet_default","deployments_devnet_default","toDeployments","contracts","loadDeployments","deployments_testnet_default","deployments_devnet_default","addressFromContractId","MINIMAL_CONTRACT_DEPOSIT","binToHex","codec","subContractId","groupOfAddress","isGrouplessAddressWithoutGroupIndex","loadDeployments"]}