{"version":3,"sources":["jsdelivr-header.js","/npm/@funkit/core@2.3.68/src/actions/AccessControl.ts","/npm/@funkit/core@2.3.68/src/auth/Auth.ts","/npm/@funkit/core@2.3.68/src/common/constants.ts","/npm/@funkit/core@2.3.68/src/abis/ApproveAndExec.json","/npm/@funkit/core@2.3.68/src/abis/ApproveAndSwap.json","/npm/@funkit/core@2.3.68/src/abis/CheckoutPaymaster.json","/npm/@funkit/core@2.3.68/src/abis/ERC20.json","/npm/@funkit/core@2.3.68/src/abis/ERC721.json","/npm/@funkit/core@2.3.68/src/abis/EntryPoint.json","/npm/@funkit/core@2.3.68/src/abis/EstimationPaymaster.json","/npm/@funkit/core@2.3.68/src/abis/FeePercentOracle.json","/npm/@funkit/core@2.3.68/src/abis/FunWallet.json","/npm/@funkit/core@2.3.68/src/abis/FunWalletFactory.json","/npm/@funkit/core@2.3.68/src/abis/GaslessPaymaster.json","/npm/@funkit/core@2.3.68/src/abis/LidoWithdrawQueue.json","/npm/@funkit/core@2.3.68/src/abis/RoleBasedAccessControl.json","/npm/@funkit/core@2.3.68/src/abis/TestNFT.json","/npm/@funkit/core@2.3.68/src/abis/TokenPaymaster.json","/npm/@funkit/core@2.3.68/src/abis/TokenPriceOracle.json","/npm/@funkit/core@2.3.68/src/abis/USDT.json","/npm/@funkit/core@2.3.68/src/abis/UserAuthentication.json","/npm/@funkit/core@2.3.68/src/viem/ContractInterface.ts","/npm/@funkit/core@2.3.68/src/data/Chain.ts","/npm/@funkit/core@2.3.68/src/utils/index.ts","/npm/@funkit/core@2.3.68/src/utils/ApiUtils.ts","/npm/@funkit/core@2.3.68/src/utils/AuthUtils.ts","/npm/@funkit/core@2.3.68/src/utils/ChainUtils.ts","/npm/@funkit/core@2.3.68/src/utils/CheckoutUtils.ts","/npm/@funkit/core@2.3.68/src/utils/PaymasterUtils.ts","/npm/@funkit/core@2.3.68/src/utils/UserOpUtils.ts","/npm/@funkit/core@2.3.68/src/utils/TokenUtils.ts","/npm/@funkit/core@2.3.68/src/utils/WalletUtils.ts","/npm/@funkit/core@2.3.68/src/data/Operation.ts","/npm/@funkit/core@2.3.68/src/data/SolidityData.ts","/npm/@funkit/core@2.3.68/src/data/Token.ts","/npm/@funkit/core@2.3.68/src/utils/TypeUtils.ts","/npm/@funkit/core@2.3.68/src/viem/Converter.ts","/npm/@funkit/core@2.3.68/src/auth/SessionKeyAuth.ts","/npm/@funkit/core@2.3.68/src/utils/ViemUtils.ts","/npm/@funkit/core@2.3.68/src/utils/MerkleUtils.ts","/npm/@funkit/core@2.3.68/src/actions/BatchActions.ts","/npm/@funkit/core@2.3.68/src/actions/Group.ts","/npm/@funkit/core@2.3.68/src/actions/Stake.ts","/npm/@funkit/core@2.3.68/src/actions/Token.ts","/npm/@funkit/core@2.3.68/src/actions/types.ts","/npm/@funkit/core@2.3.68/src/config/Config.ts","/npm/@funkit/core@2.3.68/src/errors/clientErrors.ts","/npm/@funkit/core@2.3.68/src/sponsors/CheckoutSponsor.ts","/npm/@funkit/core@2.3.68/src/sponsors/Sponsor.ts","/npm/@funkit/core@2.3.68/src/sponsors/GaslessSponsor.ts","/npm/@funkit/core@2.3.68/src/sponsors/TokenSponsor.ts","/npm/@funkit/core@2.3.68/src/wallet/FunWallet.ts","/npm/@funkit/core@2.3.68/src/actions/FirstClassActions.ts","/npm/@funkit/core@2.3.68/src/utils/GroupUtils.ts"],"names":[],"mappings":"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","file":"/npm/@funkit/core@2.3.68/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@funkit/core@2.3.68/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { getAddress, pad } from 'viem'\n\nimport { ErrorCode, InvalidParameterError } from '@funkit/utils'\nimport { SessionKeyAuth } from '../auth'\nimport type { AuthInput } from '../auth/types'\nimport { RBAC_CONTRACT_INTERFACE, type TransactionParams } from '../common'\nimport type { EnvOption } from '../config'\nimport { Chain } from '../data'\nimport { Token } from '../data/Token'\nimport { MerkleTree } from '../utils/MerkleUtils'\nimport { getSigHash } from '../utils/ViemUtils'\nimport type {\n  AddOwnerParams,\n  RemoveOwnerParams,\n  RuleStruct,\n  SessionKeyParams,\n} from './types'\n\nexport const createFeeRecipientAndTokenMerkleTree = async (\n  params: SessionKeyParams,\n  txOptions?: EnvOption,\n): Promise<MerkleTree> => {\n  const recipients = (params.feeRecipientWhitelist ?? []).map((recipient) =>\n    getAddress(recipient),\n  )\n\n  const chain = await Chain.getChain(\n    // TODO: Temporary fallback, remove after refactoring -- Panda\n    { chainIdentifier: globalThis.globalEnvOption.chain },\n    txOptions,\n  )\n\n  const tokens = await Promise.all(\n    (params.feeTokenWhitelist ?? []).map((token) =>\n      Token.getAddress(token, chain, txOptions),\n    ),\n  )\n  const feeRecipientAndTokenMerkleTree = new MerkleTree([\n    ...recipients,\n    ...tokens,\n  ])\n  return feeRecipientAndTokenMerkleTree\n}\n\nexport const createTargetSelectorMerkleTree = (\n  params: SessionKeyParams,\n): MerkleTree => {\n  const selectors = params.actionWhitelist.flatMap((actionWhitelistItem) =>\n    actionWhitelistItem.functionWhitelist.map((functionName) =>\n      getSigHash(actionWhitelistItem.abi, functionName),\n    ),\n  )\n\n  const targets = params.targetWhitelist.map((target) => getAddress(target))\n  const targetSelectorMerkleTree = new MerkleTree([...targets, ...selectors])\n  return targetSelectorMerkleTree\n}\n\nexport const createSessionKeyTransactionParams = async (\n  params: SessionKeyParams,\n  txOptions: EnvOption = globalThis.globalEnvOption,\n): Promise<TransactionParams> => {\n  if (params.targetWhitelist.length === 0) {\n    throw new InvalidParameterError(\n      ErrorCode.MissingParameter,\n      'targetWhitelist is required',\n      'targetWhitelist is required',\n      { params },\n      'Provide targetWhitelist when creating a session key.',\n      'https://docs.fun.xyz',\n    )\n  }\n  if (params.userId === undefined) {\n    throw new InvalidParameterError(\n      ErrorCode.MissingParameter,\n      'userId is required',\n      'userId is required',\n      { params },\n      'Provide userId when creating a session key.',\n      'https://docs.fun.xyz',\n    )\n  }\n  let { actionValueLimit, feeValueLimit } = params\n  actionValueLimit ??= 0n\n  feeValueLimit ??= 0n\n  const targetSelectorMerkleTree = createTargetSelectorMerkleTree(params)\n  const feeRecipientTokenMerkleTree =\n    await createFeeRecipientAndTokenMerkleTree(params)\n  const ruleStruct: RuleStruct = {\n    deadline: convertTimestampToBigInt(params.deadline),\n    targetSelectorMerkleRootHash: targetSelectorMerkleTree.getRootHash(),\n    feeRecipientTokenMerkleRootHash: feeRecipientTokenMerkleTree.getRootHash(),\n    actionValueLimit,\n    feeValueLimit,\n  }\n  const roleId = params.roleId\n  const ruleId = params.ruleId\n  const userId = params.userId\n\n  const setRuleCallData = RBAC_CONTRACT_INTERFACE.encodeData('setRule', [\n    ruleId,\n    ruleStruct,\n  ])\n  const connectRuleAndRoleCallData = RBAC_CONTRACT_INTERFACE.encodeData(\n    'addRuleToRole',\n    [roleId, ruleId],\n  )\n  const connectUserToRoleCallData = RBAC_CONTRACT_INTERFACE.encodeData(\n    'addUserToRole',\n    [roleId, userId],\n  )\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const rbacAddress = await chain.getAddress('rbacAddress', txOptions)\n  return RBAC_CONTRACT_INTERFACE.encodeTransactionParams(\n    rbacAddress,\n    'multiCall',\n    [[setRuleCallData, connectRuleAndRoleCallData, connectUserToRoleCallData]],\n  )\n}\n\nexport const createSessionUser = async (\n  auth: AuthInput,\n  params: SessionKeyParams,\n): Promise<SessionKeyAuth> => {\n  const targetSelectorMerkleTree = createTargetSelectorMerkleTree(params)\n  const feeRecipientAndTokenMerkleTree =\n    await createFeeRecipientAndTokenMerkleTree(params)\n  return new SessionKeyAuth(\n    auth,\n    params.ruleId,\n    params.roleId,\n    targetSelectorMerkleTree,\n    feeRecipientAndTokenMerkleTree,\n  )\n}\n\nexport const addOwnerTxParams = async (\n  params: AddOwnerParams,\n  txOptions: EnvOption = globalThis.globalEnvOption,\n): Promise<TransactionParams> => {\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const rbacAddress = await chain.getAddress('rbacAddress', txOptions)\n  return RBAC_CONTRACT_INTERFACE.encodeTransactionParams(\n    rbacAddress,\n    'addOwner',\n    [pad(params.ownerId, { size: 32 })],\n  )\n}\n\nexport const removeOwnerTxParams = async (\n  params: RemoveOwnerParams,\n  txOptions: EnvOption = globalThis.globalEnvOption,\n): Promise<TransactionParams> => {\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const rbacAddress = await chain.getAddress('rbacAddress', txOptions)\n  return RBAC_CONTRACT_INTERFACE.encodeTransactionParams(\n    rbacAddress,\n    'removeOwner',\n    [pad(params.ownerId, { size: 32 })],\n  )\n}\n\nconst convertTimestampToBigInt = (timestamp: number): bigint => {\n  if (\n    Math.abs(Date.now() - timestamp) < Math.abs(Date.now() - timestamp * 1000)\n  ) {\n    // timestamp is in mills\n    return BigInt(Math.floor(timestamp)) / 1000n\n  }\n  // timestamp is seconds\n  return BigInt(Math.floor(timestamp))\n}\n","import {\n  http,\n  type Address,\n  type Hash,\n  type Hex,\n  type JsonRpcAccount,\n  type PrivateKeyAccount,\n  type TransactionReceipt,\n  type Chain as ViemChain,\n  type WalletClient,\n  createWalletClient,\n  custom,\n  isHex,\n  keccak256,\n  pad,\n  toBytes,\n} from 'viem'\nimport { privateKeyToAccount } from 'viem/accounts'\nimport * as viemChains from 'viem/chains'\n\nimport {\n  type Wallet,\n  getUserWalletIdentities,\n  getUserWalletsByAddr,\n} from '@funkit/api-base'\nimport {\n  ErrorCode,\n  InvalidParameterError,\n  ResourceNotFoundError,\n} from '@funkit/utils'\nimport {\n  type TransactionData,\n  type TransactionParams,\n  VALID_PRIVATE_KEY_LENGTH,\n} from '../common'\nimport type { EnvOption } from '../config'\nimport {\n  Chain,\n  type Operation,\n  type WalletSignature,\n  encodeWalletSignature,\n} from '../data'\nimport { getAuthUniqueId, getGasStation } from '../utils'\nimport { isBytes32 } from '../utils/TypeUtils'\nimport { convertProviderToClient, convertSignerToClient } from '../viem'\nimport type { AuthInput } from './types'\n\nconst gasSpecificChain: {\n  [id in string]?: {\n    gasStationUrl: string\n    backupPriorityFee: number | `${number}`\n    backupFee: number | `${number}`\n  }\n} = {\n  '137': {\n    gasStationUrl: 'https://gasstation.polygon.technology/v2',\n    backupPriorityFee: '1000', // 1000 gwei\n    backupFee: '200', // 200 gwei\n  },\n  // TODO: Do the actual calculation for scroll transactions https://docs.scroll.io/en/developers/transaction-fees-on-scroll/\n  '534352': {\n    gasStationUrl: '',\n    backupPriorityFee: 1, // 50 gwei\n    backupFee: 1, // 50 gwei\n  },\n}\n\nconst preProcessesChains: { [chainId: number]: string } = {}\nfor (const key in viemChains) {\n  const chain = viemChains[key as keyof typeof viemChains]\n  preProcessesChains[chain.id] = key\n}\n\npreProcessesChains['36865'] = 'funtestnet'\nconst chains: Record<string, ViemChain> = { ...viemChains }\nchains.funtestnet = {\n  id: 36865,\n  name: 'Fun Testnet',\n  nativeCurrency: { name: 'ethereum', symbol: 'ETH', decimals: 18 },\n  rpcUrls: { default: { http: [] }, public: { http: [] } },\n}\n\nexport class Auth {\n  authId?: string\n  signer?: PrivateKeyAccount | JsonRpcAccount\n  client?: WalletClient\n  inited = false\n  account?: Address\n  constructor(authInput: AuthInput) {\n    if (authInput.web2AuthId) {\n      this.authId = authInput.web2AuthId\n    }\n\n    if (authInput.client) {\n      this.client = authInput.client\n    } else if (authInput.windowEth) {\n      this.client = createWalletClient({\n        transport: custom(authInput.windowEth),\n      })\n    } else if (authInput.rpc) {\n      this.client = createWalletClient({\n        transport: http(authInput.rpc),\n      })\n    } else if (authInput.provider) {\n      this.client = convertProviderToClient({ provider: authInput.provider })\n    } else if (authInput.signer) {\n      this.client = convertSignerToClient({ signer: authInput.signer })\n    } else if (authInput.privateKey) {\n      let privateKey: Hex\n      if (isBytes32(authInput.privateKey)) {\n        privateKey = authInput.privateKey as Hex\n      } else if (\n        !isHex(authInput.privateKey) &&\n        authInput.privateKey.length === VALID_PRIVATE_KEY_LENGTH\n      ) {\n        privateKey = `0x${authInput.privateKey}`\n      } else {\n        throw new InvalidParameterError(\n          ErrorCode.InvalidParameter,\n          'privateKey is not a valid one',\n          'privateKey is not a valid one',\n          authInput.privateKey,\n          'Provide valid privateKey string',\n          'https://docs.fun.xyz/how-to-guides/configure-account',\n        )\n      }\n      this.signer = privateKeyToAccount(privateKey)\n    } else {\n      throw new InvalidParameterError(\n        ErrorCode.MissingParameter,\n        'valid authInput is required',\n        'valid authInput is required',\n        authInput,\n        'Provide viem client, privateKey, window eth (check viem.sh), rpc signer, provider, or signer when constructing Auth',\n        'https://docs.fun.xyz/how-to-guides/configure-account',\n      )\n    }\n  }\n\n  async init(): Promise<void> {\n    if (this.inited) {\n      return\n    }\n    if (this.client) {\n      const address = await this.client.requestAddresses()\n      this.account = address[0]\n    } else if (this.signer) {\n      this.account = this.signer.address\n    }\n    this.authId ??= this.account\n    this.inited = true\n  }\n\n  /**\n   * Signs a hash using the stored signer and returns the signature.\n   * @param {Hex} hash - The hash to be signed.\n   * @param {boolean} isGroupOp - Whether the operation is a group operation (default: false).\n   * @returns {Promise<Hex>} The signature of the hash.\n   */\n  async signHash(hash: Hex, isGroupOp = false): Promise<Hex> {\n    await this.init()\n    let signature: Hash\n    if (this.signer?.type === 'local') {\n      signature = await this.signer.signMessage({\n        message: { raw: toBytes(hash) },\n      })\n    } else if (this.client && this.account) {\n      signature = await this.client.signMessage({\n        account: this.account,\n        message: { raw: toBytes(hash) },\n      })\n    } else {\n      throw new Error('No signer or client')\n    }\n    if (isGroupOp) {\n      return signature\n    }\n    const walletSignature: WalletSignature = {\n      userId: await this.getUserId(),\n      signature,\n    }\n    return encodeWalletSignature(walletSignature)\n  }\n\n  /**\n   * Signs an operation using the stored signer and returns the signature.\n   * @param {Operation} operation - The operation to be signed.\n   * @param {Chain} chain - The chain instance associated with the operation.\n   * @param {boolean} isGroupOp - Whether the operation is a group operation (default: false).\n   * @returns {Promise<Hex>} The signature of the operation.\n   */\n  async signOp(\n    operation: Operation,\n    chain: Chain,\n    isGroupOp = false,\n    options?: EnvOption,\n  ): Promise<Hex> {\n    await this.init()\n    const opHash = await operation.getOpHash(chain, options)\n    return await this.signHash(opHash, isGroupOp)\n  }\n\n  /**\n   * Retrieves the address associated with the initialized signer or client.\n   * @returns {Promise<Address>} The address associated with the signer or client.\n   * @throws {Error} If no signer or client is available.\n   */\n  async getAddress(): Promise<Address> {\n    await this.init()\n    if (this.account) {\n      return this.account\n    }\n    throw new Error('No signer or client')\n  }\n\n  /**\n   * Retrieves the user ID by padding the address associated with the signer or client.\n   * @returns {Promise<Hex>} The padded user ID.\n   */\n  async getUserId(): Promise<Hex> {\n    return pad(await this.getAddress(), { size: 32 }).toLowerCase() as Hex\n  }\n\n  /**\n   * Generates an estimate gas signature for an operation using the provided user ID.\n   * @param {string} userId - The user ID to generate the estimate gas signature for.\n   * @param {Operation} _ - The operation (not used in this method).\n   * @returns {Promise<Hex>} The estimate gas signature.\n   */\n  async getEstimateGasSignature(userId: string, _: Operation): Promise<Hex> {\n    await this.init()\n    const walletSignature: WalletSignature = {\n      userId: pad(userId as Hex, { size: 32 }),\n      signature: pad('0x', { size: 65 }),\n    }\n    return encodeWalletSignature(walletSignature)\n  }\n\n  /**\n   * Retrieves a unique ID for the wallet based on an index and optional skipDBActions flag.\n   * @param {number} index - The index for generating the unique ID (default: 0).\n   * @param {boolean} skipDBActions - Whether to skip database actions (default: false).\n   * @returns {Promise<Hex>} The generated unique ID for the wallet.\n   */\n  async getWalletUniqueId(\n    index = 0,\n    skipDBActions = false,\n    options?: EnvOption,\n  ): Promise<Hex> {\n    await this.init()\n    const authUniqueId = await getAuthUniqueId(\n      this.authId ?? '',\n      await this.getAddress(),\n      skipDBActions,\n      options,\n    )\n    return keccak256(toBytes(`${authUniqueId}-${index}`))\n  }\n\n  /**\n   * Sends a transaction with the provided transaction data and options.\n   * @param {TransactionParams} txData - The transaction data including 'to', 'data', and 'value'.\n   * @param {EnvOption} options - The environment options (default: globalEnvOption).\n   * @returns {Promise<TransactionReceipt>} The transaction receipt.\n   */\n  async sendTx(\n    txData: TransactionParams,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionReceipt> {\n    await this.init()\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const chainId = await chain.getChainId(options)\n    const { to, data } = txData\n    const { value = 0n } = txData\n    if (!chain || !chainId) {\n      throw new InvalidParameterError(\n        ErrorCode.MissingParameter,\n        'chain object is missing or incorrect',\n        'chain object is missing or incorrect',\n        { options, chainId },\n        'Provide proper chain information from options field',\n        'https://docs.fun.xyz',\n      )\n    }\n\n    if (!this.signer) {\n      throw new InvalidParameterError(\n        ErrorCode.MissingParameter,\n        'signer is missing or incorrect',\n        'signer is missing or incorrect',\n        { options, signer: this.signer },\n        'Provide proper chain information from options field',\n        'https://docs.fun.xyz',\n      )\n    }\n\n    const client = await chain.getClient(options)\n\n    const txClient: WalletClient =\n      this.client ??\n      createWalletClient({\n        account: this.signer,\n        transport: http(client.transport.url),\n        chain: chains[preProcessesChains[await chain.getChainId(options)]],\n      })\n\n    let tx: {\n      data?: Address\n      to: Address\n      maxFeePerGas?: bigint\n      maxPriorityFeePerGas?: bigint\n      value: bigint\n    }\n\n    let maxFee: number\n    let maxPriorityFee: number\n\n    if (gasSpecificChain[chainId]) {\n      const { backupFee, backupPriorityFee, gasStationUrl } =\n        gasSpecificChain[chainId]\n\n      try {\n        const { standard } = await getGasStation(gasStationUrl, options)\n        maxPriorityFee = standard.maxPriorityFee\n        maxFee = standard.maxFee\n      } catch (_err) {\n        maxPriorityFee = Number(backupPriorityFee)\n        maxFee = Number(backupFee)\n      }\n\n      tx = {\n        to,\n        value: BigInt(value),\n        data,\n        maxFeePerGas: BigInt(Math.floor(maxFee * 1e9)),\n        maxPriorityFeePerGas: BigInt(Math.floor(maxPriorityFee * 1e9)),\n      }\n    } else {\n      tx = { to, value: BigInt(value), data }\n    }\n\n    if (!this.account) {\n      throw new InvalidParameterError(\n        ErrorCode.MissingParameter,\n        'account is missing or incorrect',\n        'account is missing or incorrect',\n        { options, account: this.account },\n        'Provide proper chain information from options field',\n        'https://docs.fun.xyz',\n      )\n    }\n\n    const hash = await txClient.sendTransaction({\n      ...tx,\n      account: this.signer ?? this.account, // TODO: Handle missing account?\n      chain: chains[preProcessesChains[await chain.getChainId(options)]],\n    })\n\n    if (chainId !== '1' && chainId !== '5') {\n      return await client.waitForTransactionReceipt({\n        hash,\n        timeout: 30_000,\n      })\n    }\n    // ethereum mainnet is crazy slow and viem will throw out error\n    const maxRetry = 10\n    let retryCount = 0\n    while (retryCount < maxRetry) {\n      try {\n        return await client.waitForTransactionReceipt({\n          hash,\n          timeout: 30_000,\n        })\n      } catch (_err) {\n        retryCount++\n        await new Promise((r) => setTimeout(r, 5000))\n      }\n    }\n\n    // TODO: This is not a nice error\n    throw Error('Failed to get transaction receipt after several retries')\n  }\n\n  /**\n   * Sends an array of transactions and returns an array of corresponding transaction receipts.\n   * @param {TransactionData[]} txs - An array of transaction data.\n   * @returns {Promise<TransactionReceipt[]>} An array of transaction receipts.\n   */\n  async sendTxs(txs: TransactionData[]): Promise<TransactionReceipt[]> {\n    const receipts: TransactionReceipt[] = []\n    for (const tx of txs) {\n      if (tx.chain) {\n        receipts.push(await this.sendTx(tx, { chain: tx.chain }))\n      } else {\n        receipts.push(await this.sendTx(tx))\n      }\n    }\n    return receipts\n  }\n\n  /**\n   * Retrieves the user IDs of the current auth object associated with a wallet address on a specific chain.\n   * @param {Address} wallet - The wallet address for which to retrieve user IDs.\n   * @param {string} chainId - The chain identifier.\n   * @returns {Promise<Hex[]>} An array of user IDs associated with the wallet address.\n   */\n  async getUserIds(\n    wallet: Address,\n    chainId: string,\n    options?: EnvOption,\n  ): Promise<Hex[]> {\n    await this.init()\n    return await getUserWalletIdentities({\n      authId: this.authId ?? '',\n      chainId,\n      walletAddr: wallet,\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: options?.logger,\n      signal: options?.signal,\n    })\n  }\n\n  /**\n   * Retrieves the wallets associated with the current auth object.\n   * @param {string} [chainId] - Optional chain identifier.\n   * @returns {Promise<Wallet[]>} An array of wallet objects associated with the address.\n   */\n  async getWallets(chainId?: string, options?: EnvOption): Promise<Wallet[]> {\n    await this.init()\n    try {\n      return await getUserWalletsByAddr({\n        addr: await this.getAddress(),\n        chainId,\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: options?.logger,\n        signal: options?.signal,\n      })\n    } catch (err) {\n      if (err instanceof ResourceNotFoundError) {\n        return []\n      }\n      throw err\n    }\n  }\n}\n","import { type Hex, padHex } from 'viem'\n\nimport APPROVE_AND_EXEC_CONTRACT from '../abis/ApproveAndExec.json' assert {\n  type: 'json',\n}\nimport APPROVE_AND_SWAP_CONTRACT from '../abis/ApproveAndSwap.json' assert {\n  type: 'json',\n}\nimport CHECKOUT_PAYMASTER_CONTRACT from '../abis/CheckoutPaymaster.json' assert {\n  type: 'json',\n}\nimport ERC20_CONTRACT from '../abis/ERC20.json' assert { type: 'json' }\nimport ERC_721_CONTRACT from '../abis/ERC721.json' assert { type: 'json' }\nimport ENTRYPOINT_CONTRACT from '../abis/EntryPoint.json' assert {\n  type: 'json',\n}\nimport ESTIMATION_PAYMASTER_CONTRACT from '../abis/EstimationPaymaster.json' assert {\n  type: 'json',\n}\nimport FEE_PERCENT_ORACLE_CONTRACT from '../abis/FeePercentOracle.json' assert {\n  type: 'json',\n}\nimport FUN_WALLET_CONTRACT from '../abis/FunWallet.json' assert { type: 'json' }\nimport FACTORY_CONTRACT from '../abis/FunWalletFactory.json' assert {\n  type: 'json',\n}\nimport GASLESS_PAYMASTER_CONTRACT from '../abis/GaslessPaymaster.json' assert {\n  type: 'json',\n}\nimport WITHDRAW_QUEUE_CONTRACT from '../abis/LidoWithdrawQueue.json' assert {\n  type: 'json',\n}\nimport ROLE_BASED_ACCESS_CONTROL_CONTRACT from '../abis/RoleBasedAccessControl.json' assert {\n  type: 'json',\n}\nimport TEST_NFT_CONTRACT from '../abis/TestNFT.json' assert { type: 'json' }\nimport TOKEN_PAYMASTER_CONTRACT from '../abis/TokenPaymaster.json' assert {\n  type: 'json',\n}\nimport TOKEN_PRICE_ORACLE_CONTRACT from '../abis/TokenPriceOracle.json' assert {\n  type: 'json',\n}\nimport USDT_CONTRACT from '../abis/USDT.json' assert { type: 'json' }\nimport USER_AUTHENTICATION_CONTRACT from '../abis/UserAuthentication.json' assert {\n  type: 'json',\n}\nimport { ContractInterface } from '../viem/ContractInterface'\n\nexport const BASE_WRAP_TOKEN_ADDR = {\n  '1': {\n    weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n  },\n  '5': {\n    weth: '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6',\n  },\n  '10': {\n    weth: '0x4200000000000000000000000000000000000006',\n  },\n  '56': {\n    wbnb: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',\n  },\n  '137': {\n    wmatic: '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270',\n    wpol: '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270',\n  },\n  '5000': {\n    weth: '0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111',\n  },\n  '8453': {\n    weth: '0x4200000000000000000000000000000000000006',\n  },\n  '36865': {\n    weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n  },\n  '42161': {\n    weth: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n  },\n  '421614': {\n    weth: '0x980b62da83eff3d4576c647993b0c1d7faf17c73',\n  },\n  '43113': {\n    weth: '0x1D308089a2D1Ced3f1Ce36B1FcaF815b07217be3',\n  },\n  '534352': {\n    weth: '0x5300000000000000000000000000000000000004',\n  },\n  '74747': {\n    weth: '0xEE7D8BCFb72bC1880D0Cf19822eB0A2e6577aB62',\n  },\n} satisfies {\n  [id: string]: { weth?: Hex; wmatic?: Hex; wpol?: Hex; wbnb?: Hex }\n}\n\n// When update this, also remember to update the address in api service\nexport const FUN_GASLESS_SPONSOR_ADDRESS =\n  '0xCB5D0b4569A39C217c243a436AC3feEe5dFeb9Ad'\nexport const FUN_TOKEN_SPONSOR_ADDRESS =\n  '0x40C0cCa76088D45106c2D74D0B4B6405865f22De'\n\nexport const TOKEN_SPONSOR_SUPPORT_CHAINS = [\n  '1',\n  '5',\n  '10',\n  '137',\n  '8453',\n  '42161',\n  '421614',\n  // No Mantle Support (5000)\n  // No Scroll Support (534352)\n]\nexport const GASLESS_SPONSOR_SUPPORT_CHAINS = ['5']\nconst CHECKOUT_PAYMASTER_ADDRESS_BY_CHAIN = {\n  '1': '0xAEb04Eb8574CB29E2D7F94fC24fEAfb5469fDaBF',\n  '5': '0x30809b742D0D51B8d5AEb630406cF299cb548E57',\n  '137': '0xD649aC385EfE8CE69EcE9D2E61aE602e2893C586',\n  '5000': '0x036E9F3e187A074405fA54eD2f58473AC465Bf4c',\n  '8453': '0xA86096145c4ee02d08aEB434e3125d0D1b442495',\n  '42161': '0x784DEeD2F7182E0e92438879bF1Cc3CD6542F8f7',\n  '421614': '0x0B471a8fF3D038DED6d515741C447976d25E2976',\n}\nexport const CHECKOUT_SPONSOR_SUPPORT_CHAINS = Object.keys(\n  CHECKOUT_PAYMASTER_ADDRESS_BY_CHAIN,\n)\n\nexport const AddressZero = padHex('0x', { size: 20 })\nexport const HashZero = padHex('0x', { size: 32 })\n\n// abis\nexport const APPROVE_AND_EXEC_ABI = APPROVE_AND_EXEC_CONTRACT.abi\nexport const APPROVE_AND_SWAP_ABI = APPROVE_AND_SWAP_CONTRACT.abi\nexport const ENTRYPOINT_ABI = ENTRYPOINT_CONTRACT.abi\nexport const ERC20_ABI = ERC20_CONTRACT.abi\nexport const USDT_ABI = USDT_CONTRACT.abi\nexport const WALLET_ABI = FUN_WALLET_CONTRACT.abi\nexport const FACTORY_ABI = FACTORY_CONTRACT.abi\nexport const GASLESS_PAYMASTER_ABI = GASLESS_PAYMASTER_CONTRACT.abi\nexport const TOKEN_PAYMASTER_ABI = TOKEN_PAYMASTER_CONTRACT.abi\nexport const CHECKOUT_PAYMASTER_ABI = CHECKOUT_PAYMASTER_CONTRACT.abi\nexport const WITHDRAW_QUEUE_ABI = WITHDRAW_QUEUE_CONTRACT.abi\nexport const ERC_721_ABI = ERC_721_CONTRACT.abi\nexport const ROLE_BASED_ACCESS_CONTROL_ABI =\n  ROLE_BASED_ACCESS_CONTROL_CONTRACT.abi\nexport const USER_AUTHENTICATION_ABI = USER_AUTHENTICATION_CONTRACT.abi\nexport const ESTIMATION_PAYMASTER_ABI = ESTIMATION_PAYMASTER_CONTRACT.abi\n\n// contract interface\nexport const ENTRYPOINT_CONTRACT_INTERFACE = new ContractInterface(\n  ENTRYPOINT_ABI,\n)\nexport const ERC721_CONTRACT_INTERFACE = new ContractInterface(ERC_721_ABI)\nexport const ERC20_CONTRACT_INTERFACE = new ContractInterface(ERC20_ABI)\nexport const USDT_CONTRACT_INTERFACE = new ContractInterface(USDT_ABI)\nexport const FACTORY_CONTRACT_INTERFACE = new ContractInterface(FACTORY_ABI)\nexport const GASLESS_PAYMASTER_CONTRACT_INTERFACE = new ContractInterface(\n  GASLESS_PAYMASTER_ABI,\n)\nexport const TOKEN_PAYMASTER_CONTRACT_INTERFACE = new ContractInterface(\n  TOKEN_PAYMASTER_ABI,\n)\nexport const CHECKOUT_PAYMASTER_CONTRACT_INTERFACE = new ContractInterface(\n  CHECKOUT_PAYMASTER_ABI,\n)\nexport const WALLET_CONTRACT_INTERFACE = new ContractInterface(WALLET_ABI)\nexport const APPROVE_AND_EXEC_CONTRACT_INTERFACE = new ContractInterface(\n  APPROVE_AND_EXEC_ABI,\n)\nexport const RBAC_CONTRACT_INTERFACE = new ContractInterface(\n  ROLE_BASED_ACCESS_CONTROL_ABI,\n)\nexport const USER_AUTHENTICATION_CONTRACT_INTERFACE = new ContractInterface(\n  USER_AUTHENTICATION_ABI,\n)\n\nexport const CONTRACT_ADDRESSES = {\n  approveAndExecAddress: APPROVE_AND_EXEC_CONTRACT.addresses,\n  tokenSwapAddress: APPROVE_AND_SWAP_CONTRACT.addresses,\n  entryPointAddress: ENTRYPOINT_CONTRACT.addresses,\n  factoryAddress: FACTORY_CONTRACT.addresses,\n  gaslessPaymasterAddress: GASLESS_PAYMASTER_CONTRACT.addresses,\n  checkoutPaymasterAddress: CHECKOUT_PAYMASTER_ADDRESS_BY_CHAIN,\n  estimationPaymasterAddress: ESTIMATION_PAYMASTER_CONTRACT.addresses,\n  tokenPaymasterAddress: TOKEN_PAYMASTER_CONTRACT.addresses,\n  oracle: TOKEN_PRICE_ORACLE_CONTRACT.addresses,\n  userAuthAddress: USER_AUTHENTICATION_CONTRACT.addresses,\n  rbacAddress: ROLE_BASED_ACCESS_CONTROL_CONTRACT.addresses,\n  feeOracle: FEE_PERCENT_ORACLE_CONTRACT.addresses,\n  TestNFT: TEST_NFT_CONTRACT.addresses,\n  funGaslessSponsorAddress: { '5': FUN_GASLESS_SPONSOR_ADDRESS },\n  funTokenSponsorAddress: {\n    '1': FUN_TOKEN_SPONSOR_ADDRESS,\n    '5': FUN_TOKEN_SPONSOR_ADDRESS,\n    '10': FUN_TOKEN_SPONSOR_ADDRESS,\n    '137': FUN_TOKEN_SPONSOR_ADDRESS,\n    '8453': FUN_TOKEN_SPONSOR_ADDRESS,\n    '42161': FUN_TOKEN_SPONSOR_ADDRESS,\n    '421614': FUN_TOKEN_SPONSOR_ADDRESS,\n    // No Mantle Support (5000)\n    // No Scroll Support (534352)\n  },\n}\n\nexport const gasSpecificChain = {\n  '137': {\n    gasStationUrl: 'https://gasstation.polygon.technology/v2',\n    backupPriorityFee: '1000', // 1000 gwei\n    backupFee: '200', // 200 gwei\n  },\n}\n\nexport const FUN_FAUCET_URL = 'https://api.fun.xyz/demo-faucet'\n\nexport const ETH_TRANSFER_SELECTOR = '0x00000000'\n\nexport const VALID_PRIVATE_KEY_LENGTH = 64\nexport const BYTES32_LENGTH = 66\n// Use the paymasterAndData from pimlico for gas estimation\nexport const BASE_PIMLICO_PAYMASTER_AND_DATA_ESTIMATION =\n  '0xa880eae8900eb59bf7dad9bdb741a086238adca900000000000000000000000000000000000000000000000000000101010101010000000000000000000000000000000000000000000000000000000000000000cd91f19f0f19ce862d7bec7b7d9b95457145afc6f639c28fd0360f488937bfa41e6eedcd3a46054fd95fcd0e3ef6b0bc0a615c4d975eef55c8a3517257904d5b1c'\nexport const OPTIMISM_PIMLICO_PAYMASTER_AND_DATA_ESTIMATION =\n  '0x4Df91e173A6CdC74EfeF6fC72bb5Df1E8A8d758200000000000000000000000000000000000000000000000000000101010101010000000000000000000000000000000000000000000000000000000000000000cd91f19f0f19ce862d7bec7b7d9b95457145afc6f639c28fd0360f488937bfa41e6eedcd3a46054fd95fcd0e3ef6b0bc0a615c4d975eef55c8a3517257904d5b1c'\nexport const ETHEREUM_PIMLICO_PAYMASTER_AND_DATA_ESTIMATION =\n  '0x67F21bE69A16c314a0b7Da537309b2f3ADdDE03100000000000000000000000000000000000000000000000000000101010101010000000000000000000000000000000000000000000000000000000000000000cd91f19f0f19ce862d7bec7b7d9b95457145afc6f639c28fd0360f488937bfa41e6eedcd3a46054fd95fcd0e3ef6b0bc0a615c4d975eef55c8a3517257904d5b1c'\n\n/**\n * List of stablecoin symbols\n * There are a lot more stablecoins but these are good to start\n */\nexport const STABLECOIN_SYMBOLS = ['USDC', 'USDC.e', 'USDT', 'DAI', 'USDe']\n\nexport const DEFAULT_USEROP_GAS_LIMIT = 15e5\n","{\n  \"name\": \"ApproveAndExec\",\n  \"abi\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"dest\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes\",\n          \"name\": \"executeData\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes\",\n          \"name\": \"approveData\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"ApproveAndExecute\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"EMPTY_STATE\",\n      \"outputs\": [{ \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"dest\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"executeData\", \"type\": \"bytes\" },\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"bytes\", \"name\": \"approveData\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"approveAndExecute\",\n      \"outputs\": [{ \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }],\n      \"name\": \"execute\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"key\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"getState\",\n      \"outputs\": [\n        { \"internalType\": \"bytes\", \"name\": \"state\", \"type\": \"bytes\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"moduleId\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"payFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"addresses\": {\n    \"1\": \"0xD953Eda57EAB69F2EB0103bffA9acc66eA98e0aB\",\n    \"5\": \"0xD953Eda57EAB69F2EB0103bffA9acc66eA98e0aB\",\n    \"10\": \"0xD953Eda57EAB69F2EB0103bffA9acc66eA98e0aB\",\n    \"137\": \"0xD953Eda57EAB69F2EB0103bffA9acc66eA98e0aB\",\n    \"8453\": \"0xD953Eda57EAB69F2EB0103bffA9acc66eA98e0aB\",\n    \"36865\": \"0xD953Eda57EAB69F2EB0103bffA9acc66eA98e0aB\",\n    \"42161\": \"0xD953Eda57EAB69F2EB0103bffA9acc66eA98e0aB\",\n    \"421614\": \"0x587f2f3B109Ed85059AEC26a68E694e678C2F917\",\n    \"5000\": \"0x1d8538726daE26eE163ebB7606c1f145395F838c\",\n    \"534352\": \"0xC5f3e88055304cBdE593a6659797EF92C2613653\"\n  }\n}\n","{\n  \"name\": \"ApproveAndSwap\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_wethAddr\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"_router\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"tokenAddr\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SwapERC20Executed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SwapETHExecuted\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"EMPTY_STATE\",\n      \"outputs\": [{ \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }],\n      \"name\": \"execute\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"tokenAddr\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"routerCallData\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"executeSwapERC20\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"routerCallData\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"executeSwapETH\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"key\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"getState\",\n      \"outputs\": [\n        { \"internalType\": \"bytes\", \"name\": \"state\", \"type\": \"bytes\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWeth\",\n      \"outputs\": [\n        { \"internalType\": \"contractIWETH9\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"moduleId\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"payFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"router\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"weth\",\n      \"outputs\": [\n        { \"internalType\": \"contractIWETH9\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"numDeployments\": 1,\n  \"addresses\": {\n    \"1\": \"0xe65d63A9B4842c0dc0916aE5368356Ca0212f2CB\",\n    \"5\": \"0xe65d63A9B4842c0dc0916aE5368356Ca0212f2CB\",\n    \"10\": \"0xe65d63A9B4842c0dc0916aE5368356Ca0212f2CB\",\n    \"137\": \"0xe65d63A9B4842c0dc0916aE5368356Ca0212f2CB\",\n    \"8453\": \"0xe65d63A9B4842c0dc0916aE5368356Ca0212f2CB\",\n    \"36865\": \"0xe65d63A9B4842c0dc0916aE5368356Ca0212f2CB\",\n    \"42161\": \"0xe65d63A9B4842c0dc0916aE5368356Ca0212f2CB\",\n    \"421614\": \"0xd0d92c17C4123F0e8b571b0Dd0997d4a5E88Bb52\"\n  }\n}\n","{\n  \"abi\": [\n    {\n      \"type\": \"constructor\",\n      \"inputs\": [\n        {\n          \"name\": \"entryPoint\",\n          \"type\": \"address\",\n          \"internalType\": \"contract IEntryPoint\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"VERSION\",\n      \"inputs\": [],\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n      \"stateMutability\": \"view\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"activateAndCall\",\n      \"inputs\": [\n        { \"name\": \"target\", \"type\": \"address\", \"internalType\": \"address\" },\n        { \"name\": \"callData\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n      ],\n      \"outputs\": [{ \"name\": \"\", \"type\": \"bytes\", \"internalType\": \"bytes\" }],\n      \"stateMutability\": \"payable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"addStake\",\n      \"inputs\": [\n        {\n          \"name\": \"unstakeDelaySec\",\n          \"type\": \"uint32\",\n          \"internalType\": \"uint32\"\n        }\n      ],\n      \"outputs\": [],\n      \"stateMutability\": \"payable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"deposit\",\n      \"inputs\": [],\n      \"outputs\": [],\n      \"stateMutability\": \"payable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"entryPoint\",\n      \"inputs\": [],\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"address\",\n          \"internalType\": \"contract IEntryPoint\"\n        }\n      ],\n      \"stateMutability\": \"view\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"getDeposit\",\n      \"inputs\": [],\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n      \"stateMutability\": \"view\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"getLastOpMode\",\n      \"inputs\": [],\n      \"outputs\": [\n        {\n          \"name\": \"\",\n          \"type\": \"uint8\",\n          \"internalType\": \"enum IPaymaster.PostOpMode\"\n        }\n      ],\n      \"stateMutability\": \"view\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"owner\",\n      \"inputs\": [],\n      \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n      \"stateMutability\": \"view\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"postOp\",\n      \"inputs\": [\n        {\n          \"name\": \"mode\",\n          \"type\": \"uint8\",\n          \"internalType\": \"enum IPaymaster.PostOpMode\"\n        },\n        { \"name\": \"context\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n        {\n          \"name\": \"actualGasCost\",\n          \"type\": \"uint256\",\n          \"internalType\": \"uint256\"\n        }\n      ],\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"renounceOwnership\",\n      \"inputs\": [],\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"setOperators\",\n      \"inputs\": [\n        {\n          \"name\": \"operators\",\n          \"type\": \"address[]\",\n          \"internalType\": \"address[]\"\n        },\n        { \"name\": \"isAllowed\", \"type\": \"bool\", \"internalType\": \"bool\" }\n      ],\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"transferOwnership\",\n      \"inputs\": [\n        { \"name\": \"newOwner\", \"type\": \"address\", \"internalType\": \"address\" }\n      ],\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"unlockStake\",\n      \"inputs\": [],\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"validatePaymasterUserOp\",\n      \"inputs\": [\n        {\n          \"name\": \"userOp\",\n          \"type\": \"tuple\",\n          \"internalType\": \"struct UserOperation\",\n          \"components\": [\n            { \"name\": \"sender\", \"type\": \"address\", \"internalType\": \"address\" },\n            { \"name\": \"nonce\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            { \"name\": \"initCode\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n            { \"name\": \"callData\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n            {\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\",\n              \"internalType\": \"bytes\"\n            },\n            { \"name\": \"signature\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n          ]\n        },\n        { \"name\": \"userOpHash\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n        { \"name\": \"maxCost\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n      ],\n      \"outputs\": [\n        { \"name\": \"context\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n        {\n          \"name\": \"validationData\",\n          \"type\": \"uint256\",\n          \"internalType\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"withdrawStake\",\n      \"inputs\": [\n        {\n          \"name\": \"withdrawAddress\",\n          \"type\": \"address\",\n          \"internalType\": \"address payable\"\n        }\n      ],\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\"\n    },\n    {\n      \"type\": \"function\",\n      \"name\": \"withdrawTo\",\n      \"inputs\": [\n        {\n          \"name\": \"withdrawAddress\",\n          \"type\": \"address\",\n          \"internalType\": \"address payable\"\n        },\n        { \"name\": \"amount\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n      ],\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\"\n    },\n    {\n      \"type\": \"event\",\n      \"name\": \"OwnershipTransferred\",\n      \"inputs\": [\n        {\n          \"name\": \"previousOwner\",\n          \"type\": \"address\",\n          \"indexed\": true,\n          \"internalType\": \"address\"\n        },\n        {\n          \"name\": \"newOwner\",\n          \"type\": \"address\",\n          \"indexed\": true,\n          \"internalType\": \"address\"\n        }\n      ],\n      \"anonymous\": false\n    },\n    { \"type\": \"error\", \"name\": \"Inactive\", \"inputs\": [] },\n    {\n      \"type\": \"error\",\n      \"name\": \"InvalidOperator\",\n      \"inputs\": [\n        { \"name\": \"operator\", \"type\": \"address\", \"internalType\": \"address\" }\n      ]\n    },\n    {\n      \"type\": \"error\",\n      \"name\": \"InvalidPaymasterAndDataLength\",\n      \"inputs\": [\n        { \"name\": \"length\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n      ]\n    }\n  ],\n  \"bytecode\": {\n    \"object\": \"0x60a060405234801561001057600080fd5b50604051610f03380380610f0383398101604081905261002f916100ae565b806100393361005e565b6001600160a01b0316608052506000805460ff60a01b1916600160a01b1790556100de565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100c057600080fd5b81516001600160a01b03811681146100d757600080fd5b9392505050565b608051610dd961012a600039600081816101f60152818161031d015281816103b4015281816104af01528181610543015281816105b30152818161071c01526108bb0152610dd96000f3fe6080604052600436106100f35760003560e01c8063bb9fe6bf1161008a578063d0e30db011610059578063d0e30db014610290578063f2fde38b14610298578063f465c77e146102b8578063ffa1ad74146102e657600080fd5b8063bb9fe6bf14610218578063c23a5cea1461022d578063c399ec881461024d578063c458b07b1461027057600080fd5b80638da5cb5b116100c65780638da5cb5b14610172578063a3111bdb146101a4578063a9a23409146101c4578063b0d691fe146101e457600080fd5b80630396cb60146100f8578063205c28781461010d578063255ed9471461012d578063715018a61461015d575b600080fd5b61010b6101063660046109d5565b6102fb565b005b34801561011957600080fd5b5061010b610128366004610a17565b610386565b34801561013957600080fd5b50600054600160a81b900460ff166040516101549190610a59565b60405180910390f35b34801561016957600080fd5b5061010b6103f8565b34801561017e57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610154565b3480156101b057600080fd5b5061010b6101bf366004610a81565b61040c565b3480156101d057600080fd5b5061010b6101df366004610b55565b61048b565b3480156101f057600080fd5b5061018c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561022457600080fd5b5061010b6104a5565b34801561023957600080fd5b5061010b610248366004610bb5565b61051c565b34801561025957600080fd5b5061026261059b565b604051908152602001610154565b61028361027e366004610bd2565b61062b565b6040516101549190610c6d565b61010b610707565b3480156102a457600080fd5b5061010b6102b3366004610bb5565b610769565b3480156102c457600080fd5b506102d86102d3366004610c80565b6107e2565b604051610154929190610cd4565b3480156102f257600080fd5b50610262600181565b610303610806565b604051621cb65b60e51b815263ffffffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630396cb609034906024016000604051808303818588803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b505050505050565b61038e610806565b60405163040b850f60e31b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561036a57600080fd5b610400610806565b61040a6000610860565b565b610414610806565b8160005b8181101561048457826001600087878581811061043757610437610cf6565b905060200201602081019061044c9190610bb5565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561047d81610d0c565b9050610418565b5050505050565b6104936108b0565b61049f84848484610920565b50505050565b6104ad610806565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561050857600080fd5b505af115801561049f573d6000803e3d6000fd5b610524610806565b60405163611d2e7560e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b15801561058757600080fd5b505af1158015610484573d6000803e3d6000fd5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106269190610d33565b905090565b3360009081526001602052604090205460609060ff1661066557604051633eaa03e360e01b81523360048201526024015b60405180910390fd5b6000805460ff60a01b1916600160a11b17815560405181906001600160a01b0387169034906106979088908890610d4c565b60006040518083038185875af1925050503d80600081146106d4576040519150601f19603f3d011682016040523d82523d6000602084013e6106d9565b606091505b5091509150816106eb57805160208201fd5b6000805460ff60a01b1916600160a01b17905595945050505050565b60405163b760faf960e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b760faf99034906024016000604051808303818588803b15801561058757600080fd5b610771610806565b6001600160a01b0381166107d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161065c565b6107df81610860565b50565b606060006107ee6108b0565b6107f985858561098e565b915091505b935093915050565b6000546001600160a01b0316331461040a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461040a5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08115b9d1c9e541bda5b9d605a1b604482015260640161065c565b6002600054600160a01b900460ff16600281111561094057610940610a43565b1461095e57604051632e8acb0d60e01b815260040160405180910390fd5b6000805485919060ff60a81b1916600160a81b83600281111561098357610983610a43565b021790555050505050565b606060006109a0610120860186610d5c565b90506014146107fe576109b7610120860186610d5c565b604051635ae9bb9760e01b815261065c925060040190815260200190565b6000602082840312156109e757600080fd5b813563ffffffff811681146109fb57600080fd5b9392505050565b6001600160a01b03811681146107df57600080fd5b60008060408385031215610a2a57600080fd5b8235610a3581610a02565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310610a7b57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060408486031215610a9657600080fd5b833567ffffffffffffffff80821115610aae57600080fd5b818601915086601f830112610ac257600080fd5b813581811115610ad157600080fd5b8760208260051b8501011115610ae657600080fd5b602092830195509350508401358015158114610b0157600080fd5b809150509250925092565b60008083601f840112610b1e57600080fd5b50813567ffffffffffffffff811115610b3657600080fd5b602083019150836020828501011115610b4e57600080fd5b9250929050565b60008060008060608587031215610b6b57600080fd5b843560038110610b7a57600080fd5b9350602085013567ffffffffffffffff811115610b9657600080fd5b610ba287828801610b0c565b9598909750949560400135949350505050565b600060208284031215610bc757600080fd5b81356109fb81610a02565b600080600060408486031215610be757600080fd5b8335610bf281610a02565b9250602084013567ffffffffffffffff811115610c0e57600080fd5b610c1a86828701610b0c565b9497909650939450505050565b6000815180845260005b81811015610c4d57602081850181015186830182015201610c31565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109fb6020830184610c27565b600080600060608486031215610c9557600080fd5b833567ffffffffffffffff811115610cac57600080fd5b84016101608187031215610cbf57600080fd5b95602085013595506040909401359392505050565b604081526000610ce76040830185610c27565b90508260208301529392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201610d2c57634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610d4557600080fd5b5051919050565b8183823760009101908152919050565b6000808335601e19843603018112610d7357600080fd5b83018035915067ffffffffffffffff821115610d8e57600080fd5b602001915036819003821315610b4e57600080fdfea26469706673582212206ca98fa625bb450eac6fbf76f3fdd1ad097fee4001bd72ad8d66bb88a9b49f6d64736f6c63430008140033\",\n    \"sourceMap\": \"678:2943:74:-:0;;;1428:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1478:10;936:32:32;719:10:51;936:18:32;:32::i;:::-;-1:-1:-1;;;;;564:24:1;;;-1:-1:-1;1500:14:74::1;:37:::0;;-1:-1:-1;;;;1500:37:74::1;-1:-1:-1::0;;;1500:37:74::1;::::0;;678:2943;;2426:187:32;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:32;;;-1:-1:-1;;;;;;2534:17:32;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;14:309:88:-;103:6;156:2;144:9;135:7;131:23;127:32;124:52;;;172:1;169;162:12;124:52;198:16;;-1:-1:-1;;;;;243:31:88;;233:42;;223:70;;289:1;286;279:12;223:70;312:5;14:309;-1:-1:-1;;;14:309:88:o;328:127::-;678:2943:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\",\n    \"linkReferences\": {}\n  },\n  \"deployedBytecode\": {\n    \"object\": \"0x6080604052600436106100f35760003560e01c8063bb9fe6bf1161008a578063d0e30db011610059578063d0e30db014610290578063f2fde38b14610298578063f465c77e146102b8578063ffa1ad74146102e657600080fd5b8063bb9fe6bf14610218578063c23a5cea1461022d578063c399ec881461024d578063c458b07b1461027057600080fd5b80638da5cb5b116100c65780638da5cb5b14610172578063a3111bdb146101a4578063a9a23409146101c4578063b0d691fe146101e457600080fd5b80630396cb60146100f8578063205c28781461010d578063255ed9471461012d578063715018a61461015d575b600080fd5b61010b6101063660046109d5565b6102fb565b005b34801561011957600080fd5b5061010b610128366004610a17565b610386565b34801561013957600080fd5b50600054600160a81b900460ff166040516101549190610a59565b60405180910390f35b34801561016957600080fd5b5061010b6103f8565b34801561017e57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610154565b3480156101b057600080fd5b5061010b6101bf366004610a81565b61040c565b3480156101d057600080fd5b5061010b6101df366004610b55565b61048b565b3480156101f057600080fd5b5061018c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561022457600080fd5b5061010b6104a5565b34801561023957600080fd5b5061010b610248366004610bb5565b61051c565b34801561025957600080fd5b5061026261059b565b604051908152602001610154565b61028361027e366004610bd2565b61062b565b6040516101549190610c6d565b61010b610707565b3480156102a457600080fd5b5061010b6102b3366004610bb5565b610769565b3480156102c457600080fd5b506102d86102d3366004610c80565b6107e2565b604051610154929190610cd4565b3480156102f257600080fd5b50610262600181565b610303610806565b604051621cb65b60e51b815263ffffffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630396cb609034906024016000604051808303818588803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b505050505050565b61038e610806565b60405163040b850f60e31b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561036a57600080fd5b610400610806565b61040a6000610860565b565b610414610806565b8160005b8181101561048457826001600087878581811061043757610437610cf6565b905060200201602081019061044c9190610bb5565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561047d81610d0c565b9050610418565b5050505050565b6104936108b0565b61049f84848484610920565b50505050565b6104ad610806565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561050857600080fd5b505af115801561049f573d6000803e3d6000fd5b610524610806565b60405163611d2e7560e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b15801561058757600080fd5b505af1158015610484573d6000803e3d6000fd5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106269190610d33565b905090565b3360009081526001602052604090205460609060ff1661066557604051633eaa03e360e01b81523360048201526024015b60405180910390fd5b6000805460ff60a01b1916600160a11b17815560405181906001600160a01b0387169034906106979088908890610d4c565b60006040518083038185875af1925050503d80600081146106d4576040519150601f19603f3d011682016040523d82523d6000602084013e6106d9565b606091505b5091509150816106eb57805160208201fd5b6000805460ff60a01b1916600160a01b17905595945050505050565b60405163b760faf960e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b760faf99034906024016000604051808303818588803b15801561058757600080fd5b610771610806565b6001600160a01b0381166107d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161065c565b6107df81610860565b50565b606060006107ee6108b0565b6107f985858561098e565b915091505b935093915050565b6000546001600160a01b0316331461040a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461040a5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08115b9d1c9e541bda5b9d605a1b604482015260640161065c565b6002600054600160a01b900460ff16600281111561094057610940610a43565b1461095e57604051632e8acb0d60e01b815260040160405180910390fd5b6000805485919060ff60a81b1916600160a81b83600281111561098357610983610a43565b021790555050505050565b606060006109a0610120860186610d5c565b90506014146107fe576109b7610120860186610d5c565b604051635ae9bb9760e01b815261065c925060040190815260200190565b6000602082840312156109e757600080fd5b813563ffffffff811681146109fb57600080fd5b9392505050565b6001600160a01b03811681146107df57600080fd5b60008060408385031215610a2a57600080fd5b8235610a3581610a02565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310610a7b57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060408486031215610a9657600080fd5b833567ffffffffffffffff80821115610aae57600080fd5b818601915086601f830112610ac257600080fd5b813581811115610ad157600080fd5b8760208260051b8501011115610ae657600080fd5b602092830195509350508401358015158114610b0157600080fd5b809150509250925092565b60008083601f840112610b1e57600080fd5b50813567ffffffffffffffff811115610b3657600080fd5b602083019150836020828501011115610b4e57600080fd5b9250929050565b60008060008060608587031215610b6b57600080fd5b843560038110610b7a57600080fd5b9350602085013567ffffffffffffffff811115610b9657600080fd5b610ba287828801610b0c565b9598909750949560400135949350505050565b600060208284031215610bc757600080fd5b81356109fb81610a02565b600080600060408486031215610be757600080fd5b8335610bf281610a02565b9250602084013567ffffffffffffffff811115610c0e57600080fd5b610c1a86828701610b0c565b9497909650939450505050565b6000815180845260005b81811015610c4d57602081850181015186830182015201610c31565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109fb6020830184610c27565b600080600060608486031215610c9557600080fd5b833567ffffffffffffffff811115610cac57600080fd5b84016101608187031215610cbf57600080fd5b95602085013595506040909401359392505050565b604081526000610ce76040830185610c27565b90508260208301529392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201610d2c57634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610d4557600080fd5b5051919050565b8183823760009101908152919050565b6000808335601e19843603018112610d7357600080fd5b83018035915067ffffffffffffffff821115610d8e57600080fd5b602001915036819003821315610b4e57600080fdfea26469706673582212206ca98fa625bb450eac6fbf76f3fdd1ad097fee4001bd72ad8d66bb88a9b49f6d64736f6c63430008140033\",\n    \"sourceMap\": \"678:2943:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3094:141:1;;;;;;:::i;:::-;;:::i;:::-;;2721:149;;;;;;;;;;-1:-1:-1;2721:149:1;;;;;:::i;:::-;;:::i;2242:98:74:-;;;;;;;;;;-1:-1:-1;2290:10:74;2319:14;-1:-1:-1;;;2319:14:74;;;;2242:98;;;;;;:::i;:::-;;;;;;;;1824:101:32;;;;;;;;;;;;;:::i;1201:85::-;;;;;;;;;;-1:-1:-1;1247:7:32;1273:6;-1:-1:-1;;;;;1273:6:32;1201:85;;;-1:-1:-1;;;;;1418:32:88;;;1400:51;;1388:2;1373:18;1201:85:32;1254:203:88;1550:253:74;;;;;;;;;;-1:-1:-1;1550:253:74;;;;;:::i;:::-;;:::i;1143:186:1:-;;;;;;;;;;-1:-1:-1;1143:186:1;;;;;:::i;:::-;;:::i;471:39::-;;;;;;;;;;;;;;;3588:83;;;;;;;;;;;;;:::i;3890:133::-;;;;;;;;;;-1:-1:-1;3890:133:1;;;;;:::i;:::-;;:::i;3318:111::-;;;;;;;;;;;;;:::i;:::-;;;3882:25:88;;;3870:2;3855:18;3318:111:1;3736:177:88;1809:427:74;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2474:105:1:-;;;:::i;2074:198:32:-;;;;;;;;;;-1:-1:-1;2074:198:32;;;;;:::i;:::-;;:::i;632:290:1:-;;;;;;;;;;-1:-1:-1;632:290:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;805:35:74:-;;;;;;;;;;;;839:1;805:35;;3094:141:1;1094:13:32;:11;:13::i;:::-;3173:55:1::1;::::0;-1:-1:-1;;;3173:55:1;;6385:10:88;6373:23;;3173:55:1::1;::::0;::::1;6355:42:88::0;3173:10:1::1;-1:-1:-1::0;;;;;3173:19:1::1;::::0;::::1;::::0;3201:9:::1;::::0;6328:18:88;;3173:55:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;3094:141:::0;:::o;2721:149::-;1094:13:32;:11;:13::i;:::-;2817:46:1::1;::::0;-1:-1:-1;;;2817:46:1;;-1:-1:-1;;;;;6616:32:88;;;2817:46:1::1;::::0;::::1;6598:51:88::0;6665:18;;;6658:34;;;2817:10:1::1;:21;::::0;::::1;::::0;6571:18:88;;2817:46:1::1;;;;;;;;;;;;;;;;;::::0;::::1;1824:101:32::0;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1550:253:74:-;1094:13:32;:11;:13::i;:::-;1681:9:74;1669::::1;1707:90;1727:1;1723;:5;1707:90;;;1777:9;1749:11;:25;1761:9;;1771:1;1761:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1749:25:74::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;1749:25:74;:37;;-1:-1:-1;;1749:37:74::1;::::0;::::1;;::::0;;;::::1;::::0;;1730:3:::1;::::0;::::1;:::i;:::-;;;1707:90;;;;1659:144;1550:253:::0;;;:::o;1143:186:1:-;1251:24;:22;:24::i;:::-;1285:37;1293:4;1299:7;;1308:13;1285:7;:37::i;:::-;1143:186;;;;:::o;3588:83::-;1094:13:32;:11;:13::i;:::-;3640:10:1::1;-1:-1:-1::0;;;;;3640:22:1::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;3890:133:::0;1094:13:32;:11;:13::i;:::-;3975:41:1::1;::::0;-1:-1:-1;;;3975:41:1;;-1:-1:-1;;;;;1418:32:88;;;3975:41:1::1;::::0;::::1;1400:51:88::0;3975:10:1::1;:24;::::0;::::1;::::0;1373:18:88;;3975:41:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;3318:111:::0;3387:35;;-1:-1:-1;;;3387:35:1;;3416:4;3387:35;;;1400:51:88;3361:7:1;;3387:10;-1:-1:-1;;;;;3387:20:1;;;;1373:18:88;;3387:35:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3380:42;;3318:111;:::o;1809:427:74:-;1104:10;1092:23;;;;:11;:23;;;;;;1932:12;;1092:23;;1087:89;;1138:27;;-1:-1:-1;;;1138:27:74;;1154:10;1138:27;;;1400:51:88;1373:18;;1138:27:74;;;;;;;;1087:89;1185:14;:35;;-1:-1:-1;;;;1185:35:74;-1:-1:-1;;;1185:35:74;;;1998:70:::1;::::0;1185:14;;-1:-1:-1;;;;;1998:20:74;::::1;::::0;2039:9:::1;::::0;1998:70:::1;::::0;2059:8;;;;1998:70:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1956:112;;;;2083:7;2078:125;;2167:10;2161:17;2156:2;2144:10;2140:19;2133:46;2078:125;1241:14:::0;:37;;-1:-1:-1;;;;1241:37:74;-1:-1:-1;;;1241:37:74;;;2219:10;;-1:-1:-1;;;;;1809:427:74:o;2474:105:1:-;2518:54;;-1:-1:-1;;;2518:54:1;;2566:4;2518:54;;;1400:51:88;2518:10:1;-1:-1:-1;;;;;2518:20:1;;;;2547:9;;1373:18:88;;2518:54:1;;;;;;;;;;;;;;;;;;;2074:198:32;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:32;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:32;;7963:2:88;2154:73:32::1;::::0;::::1;7945:21:88::0;8002:2;7982:18;;;7975:30;8041:34;8021:18;;;8014:62;-1:-1:-1;;;8092:18:88;;;8085:36;8138:19;;2154:73:32::1;7761:402:88::0;2154:73:32::1;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;632:290:1:-;764:20;786:22;821:24;:22;:24::i;:::-;862:53;887:6;895:10;907:7;862:24;:53::i;:::-;855:60;;;;632:290;;;;;;;:::o;1359:130:32:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:32;719:10:51;1422:23:32;1414:68;;;;-1:-1:-1;;;1414:68:32;;8370:2:88;1414:68:32;;;8352:21:88;;;8389:18;;;8382:30;8448:34;8428:18;;;8421:62;8500:18;;1414:68:32;8168:356:88;2426:187:32;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:32;;;-1:-1:-1;;;;;;2534:17:32;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;4087:135:1:-;4156:10;-1:-1:-1;;;;;4178:10:1;4156:33;;4148:67;;;;-1:-1:-1;;;4148:67:1;;8731:2:88;4148:67:1;;;8713:21:88;8770:2;8750:18;;;8743:30;-1:-1:-1;;;8789:18:88;;;8782:51;8850:18;;4148:67:1;8529:345:88;3431:188:74;1343:18;1325:14;;-1:-1:-1;;;1325:14:74;;;;:36;;;;;;;;:::i;:::-;;1321:84;;1384:10;;-1:-1:-1;;;1384:10:74;;;;;;;;;;;1321:84;3591:14:::1;:21:::0;;3608:4;;3591:14;-1:-1:-1;;;;3591:21:74::1;-1:-1:-1::0;;;3608:4:74;3591:21:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;3431:188:::0;;;;:::o;2641:435::-;2845:20;2867:22;2909:23;;;;:6;:23;:::i;:::-;:30;;2943:2;2909:36;2905:165;;3015:23;;;;:6;:23;:::i;:::-;2968:91;;-1:-1:-1;;;2968:91:74;;;;-1:-1:-1;2968:91:74;;3882:25:88;;;3870:2;3855:18;;3736:177;14:276;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:10;223:5;219:22;212:5;209:33;199:61;;256:1;253;246:12;199:61;279:5;14:276;-1:-1:-1;;;14:276:88:o;295:139::-;-1:-1:-1;;;;;378:31:88;;368:42;;358:70;;424:1;421;414:12;439:331;515:6;523;576:2;564:9;555:7;551:23;547:32;544:52;;;592:1;589;582:12;544:52;631:9;618:23;650:39;683:5;650:39;:::i;:::-;708:5;760:2;745:18;;;;732:32;;-1:-1:-1;;;439:331:88:o;775:127::-;836:10;831:3;827:20;824:1;817:31;867:4;864:1;857:15;891:4;888:1;881:15;907:342;1053:2;1038:18;;1086:1;1075:13;;1065:144;;1131:10;1126:3;1122:20;1119:1;1112:31;1166:4;1163:1;1156:15;1194:4;1191:1;1184:15;1065:144;1218:25;;;907:342;:::o;1462:782::-;1554:6;1562;1570;1623:2;1611:9;1602:7;1598:23;1594:32;1591:52;;;1639:1;1636;1629:12;1591:52;1679:9;1666:23;1708:18;1749:2;1741:6;1738:14;1735:34;;;1765:1;1762;1755:12;1735:34;1803:6;1792:9;1788:22;1778:32;;1848:7;1841:4;1837:2;1833:13;1829:27;1819:55;;1870:1;1867;1860:12;1819:55;1910:2;1897:16;1936:2;1928:6;1925:14;1922:34;;;1952:1;1949;1942:12;1922:34;2007:7;2000:4;1990:6;1987:1;1983:14;1979:2;1975:23;1971:34;1968:47;1965:67;;;2028:1;2025;2018:12;1965:67;2059:4;2051:13;;;;-1:-1:-1;2083:6:88;-1:-1:-1;;2124:20:88;;2111:34;2181:13;;2174:21;2164:32;;2154:60;;2210:1;2207;2200:12;2154:60;2233:5;2223:15;;;1462:782;;;;;:::o;2249:347::-;2300:8;2310:6;2364:3;2357:4;2349:6;2345:17;2341:27;2331:55;;2382:1;2379;2372:12;2331:55;-1:-1:-1;2405:20:88;;2448:18;2437:30;;2434:50;;;2480:1;2477;2470:12;2434:50;2517:4;2509:6;2505:17;2493:29;;2569:3;2562:4;2553:6;2545;2541:19;2537:30;2534:39;2531:59;;;2586:1;2583;2576:12;2531:59;2249:347;;;;;:::o;2601:635::-;2703:6;2711;2719;2727;2780:2;2768:9;2759:7;2755:23;2751:32;2748:52;;;2796:1;2793;2786:12;2748:52;2835:9;2822:23;2874:1;2867:5;2864:12;2854:40;;2890:1;2887;2880:12;2854:40;2913:5;-1:-1:-1;2969:2:88;2954:18;;2941:32;2996:18;2985:30;;2982:50;;;3028:1;3025;3018:12;2982:50;3067:58;3117:7;3108:6;3097:9;3093:22;3067:58;:::i;:::-;2601:635;;3144:8;;-1:-1:-1;3041:84:88;;3226:2;3211:18;3198:32;;2601:635;-1:-1:-1;;;;2601:635:88:o;3468:263::-;3535:6;3588:2;3576:9;3567:7;3563:23;3559:32;3556:52;;;3604:1;3601;3594:12;3556:52;3643:9;3630:23;3662:39;3695:5;3662:39;:::i;3918:552::-;3997:6;4005;4013;4066:2;4054:9;4045:7;4041:23;4037:32;4034:52;;;4082:1;4079;4072:12;4034:52;4121:9;4108:23;4140:39;4173:5;4140:39;:::i;:::-;4198:5;-1:-1:-1;4254:2:88;4239:18;;4226:32;4281:18;4270:30;;4267:50;;;4313:1;4310;4303:12;4267:50;4352:58;4402:7;4393:6;4382:9;4378:22;4352:58;:::i;:::-;3918:552;;4429:8;;-1:-1:-1;4326:84:88;;-1:-1:-1;;;;3918:552:88:o;4475:422::-;4516:3;4554:5;4548:12;4581:6;4576:3;4569:19;4606:1;4616:162;4630:6;4627:1;4624:13;4616:162;;;4692:4;4748:13;;;4744:22;;4738:29;4720:11;;;4716:20;;4709:59;4645:12;4616:162;;;4620:3;4823:1;4816:4;4807:6;4802:3;4798:16;4794:27;4787:38;4886:4;4879:2;4875:7;4870:2;4862:6;4858:15;4854:29;4849:3;4845:39;4841:50;4834:57;;;4475:422;;;;:::o;4902:217::-;5049:2;5038:9;5031:21;5012:4;5069:44;5109:2;5098:9;5094:18;5086:6;5069:44;:::i;5384:529::-;5494:6;5502;5510;5563:2;5551:9;5542:7;5538:23;5534:32;5531:52;;;5579:1;5576;5569:12;5531:52;5619:9;5606:23;5652:18;5644:6;5641:30;5638:50;;;5684:1;5681;5674:12;5638:50;5707:22;;5763:3;5745:16;;;5741:26;5738:46;;;5780:1;5777;5770:12;5738:46;5803:2;5852;5837:18;;5824:32;;-1:-1:-1;5903:2:88;5888:18;;;5875:32;;5384:529;-1:-1:-1;;;5384:529:88:o;5918:288::-;6093:2;6082:9;6075:21;6056:4;6113:44;6153:2;6142:9;6138:18;6130:6;6113:44;:::i;:::-;6105:52;;6193:6;6188:2;6177:9;6173:18;6166:34;5918:288;;;;;:::o;6703:127::-;6764:10;6759:3;6755:20;6752:1;6745:31;6795:4;6792:1;6785:15;6819:4;6816:1;6809:15;6835:232;6874:3;6895:17;;;6892:140;;6954:10;6949:3;6945:20;6942:1;6935:31;6989:4;6986:1;6979:15;7017:4;7014:1;7007:15;6892:140;-1:-1:-1;7059:1:88;7048:13;;6835:232::o;7296:184::-;7366:6;7419:2;7407:9;7398:7;7394:23;7390:32;7387:52;;;7435:1;7432;7425:12;7387:52;-1:-1:-1;7458:16:88;;7296:184;-1:-1:-1;7296:184:88:o;7485:271::-;7668:6;7660;7655:3;7642:33;7624:3;7694:16;;7719:13;;;7694:16;7485:271;-1:-1:-1;7485:271:88:o;8879:521::-;8956:4;8962:6;9022:11;9009:25;9116:2;9112:7;9101:8;9085:14;9081:29;9077:43;9057:18;9053:68;9043:96;;9135:1;9132;9125:12;9043:96;9162:33;;9214:20;;;-1:-1:-1;9257:18:88;9246:30;;9243:50;;;9289:1;9286;9279:12;9243:50;9322:4;9310:17;;-1:-1:-1;9353:14:88;9349:27;;;9339:38;;9336:58;;;9390:1;9387;9380:12\",\n    \"linkReferences\": {},\n    \"immutableReferences\": {\n      \"155\": [\n        { \"start\": 502, \"length\": 32 },\n        { \"start\": 797, \"length\": 32 },\n        { \"start\": 948, \"length\": 32 },\n        { \"start\": 1199, \"length\": 32 },\n        { \"start\": 1347, \"length\": 32 },\n        { \"start\": 1459, \"length\": 32 },\n        { \"start\": 1820, \"length\": 32 },\n        { \"start\": 2235, \"length\": 32 }\n      ]\n    }\n  },\n  \"methodIdentifiers\": {\n    \"VERSION()\": \"ffa1ad74\",\n    \"activateAndCall(address,bytes)\": \"c458b07b\",\n    \"addStake(uint32)\": \"0396cb60\",\n    \"deposit()\": \"d0e30db0\",\n    \"entryPoint()\": \"b0d691fe\",\n    \"getDeposit()\": \"c399ec88\",\n    \"getLastOpMode()\": \"255ed947\",\n    \"owner()\": \"8da5cb5b\",\n    \"postOp(uint8,bytes,uint256)\": \"a9a23409\",\n    \"renounceOwnership()\": \"715018a6\",\n    \"setOperators(address[],bool)\": \"a3111bdb\",\n    \"transferOwnership(address)\": \"f2fde38b\",\n    \"unlockStake()\": \"bb9fe6bf\",\n    \"validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)\": \"f465c77e\",\n    \"withdrawStake(address)\": \"c23a5cea\",\n    \"withdrawTo(address,uint256)\": \"205c2878\"\n  },\n  \"rawMetadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.20+commit.a1b79de6\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEntryPoint\\\",\\\"name\\\":\\\"entryPoint\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Inactive\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"operator\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"InvalidOperator\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"InvalidPaymasterAndDataLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"VERSION\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"callData\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"activateAndCall\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"unstakeDelaySec\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"name\\\":\\\"addStake\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"deposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"entryPoint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEntryPoint\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getLastOpMode\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"enum IPaymaster.PostOpMode\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"enum IPaymaster.PostOpMode\\\",\\\"name\\\":\\\"mode\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"actualGasCost\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"postOp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"operators\\\",\\\"type\\\":\\\"address[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isAllowed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"setOperators\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"unlockStake\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"nonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"initCode\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"callData\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"callGasLimit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"verificationGasLimit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"preVerificationGas\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxFeePerGas\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxPriorityFeePerGas\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"paymasterAndData\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct UserOperation\\\",\\\"name\\\":\\\"userOp\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userOpHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxCost\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"validatePaymasterUserOp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"validationData\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"withdrawAddress\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"withdrawStake\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"withdrawAddress\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"withdrawTo\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"Fun.xyz\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addStake(uint32)\\\":{\\\"params\\\":{\\\"unstakeDelaySec\\\":\\\"- the unstake delay for this paymaster. Can only be increased.\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"postOp(uint8,bytes,uint256)\\\":{\\\"params\\\":{\\\"actualGasCost\\\":\\\"- actual gas used so far (without this postOp call).\\\",\\\"context\\\":\\\"- the context value returned by validatePaymasterUserOp\\\",\\\"mode\\\":\\\"enum with the following options:      opSucceeded - user operation succeeded.      opReverted  - user op reverted. still has to pay for gas.      postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.                       Now this is the 2nd call, after user's op was deliberately reverted.\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)\\\":{\\\"params\\\":{\\\"maxCost\\\":\\\"the maximum cost of this transaction (based on maximum gas and gas price from userOp)\\\",\\\"userOp\\\":\\\"the user operation\\\",\\\"userOpHash\\\":\\\"hash of the user's request data.\\\"},\\\"returns\\\":{\\\"context\\\":\\\"value to send to a postOp      zero length to signify postOp is not required.\\\",\\\"validationData\\\":\\\"signature and time-range of this operation, encoded the same as the return value of validateUserOperation      <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,         otherwise, an address of an \\\\\\\"authorizer\\\\\\\" contract.      <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\\\\\"indefinite\\\\\\\"      <6-byte> validAfter - first timestamp this operation is valid      Note that the validation code cannot use block.timestamp (or block.number) directly.\\\"}},\\\"withdrawStake(address)\\\":{\\\"params\\\":{\\\"withdrawAddress\\\":\\\"the address to send withdrawn value.\\\"}},\\\"withdrawTo(address,uint256)\\\":{\\\"params\\\":{\\\"amount\\\":\\\"to withdraw\\\",\\\"withdrawAddress\\\":\\\"target to send to\\\"}}},\\\"title\\\":\\\"CheckoutPaymaster\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addStake(uint32)\\\":{\\\"notice\\\":\\\"add stake for this paymaster. This method can also carry eth value to add to the current stake.\\\"},\\\"deposit()\\\":{\\\"notice\\\":\\\"add a deposit for this paymaster, used for paying for transaction fees\\\"},\\\"getDeposit()\\\":{\\\"notice\\\":\\\"return current paymaster's deposit on the entryPoint.\\\"},\\\"postOp(uint8,bytes,uint256)\\\":{\\\"notice\\\":\\\"post-operation handler. Must verify sender is the entryPoint\\\"},\\\"unlockStake()\\\":{\\\"notice\\\":\\\"unlock the stake, in order to withdraw it. The paymaster can't serve requests once unlocked, until it calls addStake again\\\"},\\\"validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)\\\":{\\\"notice\\\":\\\"payment validation: check if paymaster agrees to pay. Must verify sender is the entryPoint. Revert to reject this request. Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted) The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\\\"},\\\"withdrawStake(address)\\\":{\\\"notice\\\":\\\"withdraw the entire paymaster's stake. stake must be unlocked first (and then wait for the unstakeDelay to be over)\\\"},\\\"withdrawTo(address,uint256)\\\":{\\\"notice\\\":\\\"withdraw value from the deposit\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"src/paymaster/CheckoutPaymaster.sol\\\":\\\"CheckoutPaymaster\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[\\\":@account-abstraction/contracts/=lib/account-abstraction/contracts/\\\",\\\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\\\",\\\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\\\",\\\":account-abstraction/=lib/account-abstraction/contracts/\\\",\\\":ds-test/=lib/forge-std/lib/ds-test/src/\\\",\\\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\\\",\\\":forge-std/=lib/forge-std/src/\\\",\\\":openzeppelin-contracts/=lib/openzeppelin-contracts/\\\",\\\":openzeppelin/=lib/openzeppelin-contracts/contracts/\\\"]},\\\"sources\\\":{\\\"lib/account-abstraction/contracts/core/BasePaymaster.sol\\\":{\\\"keccak256\\\":\\\"0x27f658d545b5f26c2e09a7ac4fba72f9975433839d10225a520e557540b84443\\\",\\\"license\\\":\\\"GPL-3.0\\\",\\\"urls\\\":[\\\"bzz-raw://426f0c6565ae612d34ae184fb1582e6fc360abf79450975c1c2dd439184094a0\\\",\\\"dweb:/ipfs/QmZMeMosC1P6Z5BQyT6iGFQrY6ui5ART65ycVWmXFnDpoq\\\"]},\\\"lib/account-abstraction/contracts/core/Helpers.sol\\\":{\\\"keccak256\\\":\\\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\\\",\\\"license\\\":\\\"GPL-3.0\\\",\\\"urls\\\":[\\\"bzz-raw://69643e83f68e6a13d5075c7565bfce326673b0bd98c432033c4603ea84835746\\\",\\\"dweb:/ipfs/QmSwSzjYyV7qudi5vvsmzHMG2Z4YJZxX51RRXXVCLaNcEU\\\"]},\\\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\\\":{\\\"keccak256\\\":\\\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\\\",\\\"license\\\":\\\"GPL-3.0\\\",\\\"urls\\\":[\\\"bzz-raw://20ed837bc5909c89ff1910246bf245a5dad6840aa939382e1694964eb7dbd37b\\\",\\\"dweb:/ipfs/QmTMybRq5yyghPDDs1ZCNAVB9sSJ4WHe6Q9mejuKPTAdNP\\\"]},\\\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\\\":{\\\"keccak256\\\":\\\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\\\",\\\"license\\\":\\\"GPL-3.0\\\",\\\"urls\\\":[\\\"bzz-raw://d2d21cc92c2fdab2b58d21bc25d4cd0e8c284b922528a186b087b818d54bc6cf\\\",\\\"dweb:/ipfs/QmT1qrfuBjsv2rmRCDn8mgPXHp94hARJwzbcDuBLDTbFWd\\\"]},\\\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\\\":{\\\"keccak256\\\":\\\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\\\",\\\"license\\\":\\\"GPL-3.0\\\",\\\"urls\\\":[\\\"bzz-raw://00fe21b4349b24c50df60e1a705179293982bd9e7a32b78d4bac9620f89e7fe2\\\",\\\"dweb:/ipfs/QmSFFYGfUwQbVa6hASjU7YxTvgi2HkfrPr4X5oPHscHg8b\\\"]},\\\"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\\\":{\\\"keccak256\\\":\\\"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\\\",\\\"license\\\":\\\"GPL-3.0\\\",\\\"urls\\\":[\\\"bzz-raw://616cbcf51778b1961b7f20a547bec7efae6d1d565df0f651926241ed8bde9ad8\\\",\\\"dweb:/ipfs/QmaVsgffUUmeUJYgStvRr8cNZ1LBbrc3FYNLW4JT1dVLia\\\"]},\\\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\\\":{\\\"keccak256\\\":\\\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\\\",\\\"license\\\":\\\"GPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://b389da4714a138be63704a576a482505eab2855e263b38a93706395d8d42e7c3\\\",\\\"dweb:/ipfs/QmeeAZpdHwUXxqP8pxA7GNtoCGBmmH4FaqLLwScVKGxtxZ\\\"]},\\\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\\\":{\\\"keccak256\\\":\\\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\\\",\\\"license\\\":\\\"GPL-3.0\\\",\\\"urls\\\":[\\\"bzz-raw://6ff83c59432e733bf6304dda27cd4b0f34401917dd535e2669cc842d2d26568c\\\",\\\"dweb:/ipfs/QmPJbHU5TAjHqUTZzAcicEeG2nknmwCN43L4EW9LHbknTN\\\"]},\\\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\\\",\\\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\\\"]},\\\"lib/openzeppelin-contracts/contracts/utils/Context.sol\\\":{\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\\\",\\\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\\\"]},\\\"src/interfaces/InspectablePaymasterInterface.sol\\\":{\\\"keccak256\\\":\\\"0xfa01cf6d6c5c7585be4ffba481461417568e83e4326e4d4f3f978f448c494c05\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://359879084737d058f0098e12d25170e8181bf597231cb440302a945d6483e638\\\",\\\"dweb:/ipfs/QmWjJtxkBGXk8MmrVQCqp2gjyyibTmMc6b6GwQLcrcGyNp\\\"]},\\\"src/paymaster/CheckoutPaymaster.sol\\\":{\\\"keccak256\\\":\\\"0x750ce14a013dca17e026f47f3e1f141c7941983a9e38d66d79ad32f7dd4f64d3\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://e0a9a642e69bbba805719b3c12144f2e32d3e2b70d24392ae7b09dd72a9510c6\\\",\\\"dweb:/ipfs/Qma8sDR2eC1pjAjkizjNhBnBbMvZV1x6pv82Z4xjNHvnaW\\\"]},\\\"src/paymaster/CheckoutPaymasterEventsAndErrors.sol\\\":{\\\"keccak256\\\":\\\"0xff791f10ae484b55407bdfa6f82516187388264e8e84bccd7571486c6ee08c37\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://0df9a5fbbe1aa679422daa50a9f25a1fdd84df2a939903d9dd3f90d3a88f99e2\\\",\\\"dweb:/ipfs/QmPFaWWrb49R8WZizNKC7LN9YhWuhF7wey6cZKQg2WkMnr\\\"]}},\\\"version\\\":1}\",\n  \"metadata\": {\n    \"compiler\": { \"version\": \"0.8.20+commit.a1b79de6\" },\n    \"language\": \"Solidity\",\n    \"output\": {\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IEntryPoint\",\n              \"name\": \"entryPoint\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        { \"inputs\": [], \"type\": \"error\", \"name\": \"Inactive\" },\n        {\n          \"inputs\": [\n            { \"internalType\": \"address\", \"name\": \"operator\", \"type\": \"address\" }\n          ],\n          \"type\": \"error\",\n          \"name\": \"InvalidOperator\"\n        },\n        {\n          \"inputs\": [\n            { \"internalType\": \"uint256\", \"name\": \"length\", \"type\": \"uint256\" }\n          ],\n          \"type\": \"error\",\n          \"name\": \"InvalidPaymasterAndDataLength\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\",\n              \"indexed\": true\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\",\n              \"indexed\": true\n            }\n          ],\n          \"type\": \"event\",\n          \"name\": \"OwnershipTransferred\",\n          \"anonymous\": false\n        },\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\",\n          \"name\": \"VERSION\",\n          \"outputs\": [\n            { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n          ]\n        },\n        {\n          \"inputs\": [\n            { \"internalType\": \"address\", \"name\": \"target\", \"type\": \"address\" },\n            { \"internalType\": \"bytes\", \"name\": \"callData\", \"type\": \"bytes\" }\n          ],\n          \"stateMutability\": \"payable\",\n          \"type\": \"function\",\n          \"name\": \"activateAndCall\",\n          \"outputs\": [{ \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }]\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint32\",\n              \"name\": \"unstakeDelaySec\",\n              \"type\": \"uint32\"\n            }\n          ],\n          \"stateMutability\": \"payable\",\n          \"type\": \"function\",\n          \"name\": \"addStake\"\n        },\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"payable\",\n          \"type\": \"function\",\n          \"name\": \"deposit\"\n        },\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\",\n          \"name\": \"entryPoint\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IEntryPoint\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ]\n        },\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\",\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n          ]\n        },\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\",\n          \"name\": \"getLastOpMode\",\n          \"outputs\": [\n            {\n              \"internalType\": \"enum IPaymaster.PostOpMode\",\n              \"name\": \"\",\n              \"type\": \"uint8\"\n            }\n          ]\n        },\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\",\n          \"name\": \"owner\",\n          \"outputs\": [\n            { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n          ]\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"enum IPaymaster.PostOpMode\",\n              \"name\": \"mode\",\n              \"type\": \"uint8\"\n            },\n            { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"actualGasCost\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\",\n          \"name\": \"postOp\"\n        },\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\",\n          \"name\": \"renounceOwnership\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"operators\",\n              \"type\": \"address[]\"\n            },\n            { \"internalType\": \"bool\", \"name\": \"isAllowed\", \"type\": \"bool\" }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\",\n          \"name\": \"setOperators\"\n        },\n        {\n          \"inputs\": [\n            { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\",\n          \"name\": \"transferOwnership\"\n        },\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\",\n          \"name\": \"unlockStake\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"struct UserOperation\",\n              \"name\": \"userOp\",\n              \"type\": \"tuple\",\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"sender\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"nonce\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"initCode\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"callData\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"callGasLimit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"verificationGasLimit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"preVerificationGas\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"maxFeePerGas\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"maxPriorityFeePerGas\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"paymasterAndData\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"signature\",\n                  \"type\": \"bytes\"\n                }\n              ]\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"userOpHash\",\n              \"type\": \"bytes32\"\n            },\n            { \"internalType\": \"uint256\", \"name\": \"maxCost\", \"type\": \"uint256\" }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\",\n          \"name\": \"validatePaymasterUserOp\",\n          \"outputs\": [\n            { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"validationData\",\n              \"type\": \"uint256\"\n            }\n          ]\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"withdrawAddress\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\",\n          \"name\": \"withdrawStake\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"withdrawAddress\",\n              \"type\": \"address\"\n            },\n            { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\",\n          \"name\": \"withdrawTo\"\n        }\n      ],\n      \"devdoc\": {\n        \"kind\": \"dev\",\n        \"methods\": {\n          \"addStake(uint32)\": {\n            \"params\": {\n              \"unstakeDelaySec\": \"- the unstake delay for this paymaster. Can only be increased.\"\n            }\n          },\n          \"owner()\": { \"details\": \"Returns the address of the current owner.\" },\n          \"postOp(uint8,bytes,uint256)\": {\n            \"params\": {\n              \"actualGasCost\": \"- actual gas used so far (without this postOp call).\",\n              \"context\": \"- the context value returned by validatePaymasterUserOp\",\n              \"mode\": \"enum with the following options:      opSucceeded - user operation succeeded.      opReverted  - user op reverted. still has to pay for gas.      postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert.                       Now this is the 2nd call, after user's op was deliberately reverted.\"\n            }\n          },\n          \"renounceOwnership()\": {\n            \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n          },\n          \"transferOwnership(address)\": {\n            \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n          },\n          \"validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)\": {\n            \"params\": {\n              \"maxCost\": \"the maximum cost of this transaction (based on maximum gas and gas price from userOp)\",\n              \"userOp\": \"the user operation\",\n              \"userOpHash\": \"hash of the user's request data.\"\n            },\n            \"returns\": {\n              \"context\": \"value to send to a postOp      zero length to signify postOp is not required.\",\n              \"validationData\": \"signature and time-range of this operation, encoded the same as the return value of validateUserOperation      <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,         otherwise, an address of an \\\"authorizer\\\" contract.      <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\"      <6-byte> validAfter - first timestamp this operation is valid      Note that the validation code cannot use block.timestamp (or block.number) directly.\"\n            }\n          },\n          \"withdrawStake(address)\": {\n            \"params\": {\n              \"withdrawAddress\": \"the address to send withdrawn value.\"\n            }\n          },\n          \"withdrawTo(address,uint256)\": {\n            \"params\": {\n              \"amount\": \"to withdraw\",\n              \"withdrawAddress\": \"target to send to\"\n            }\n          }\n        },\n        \"version\": 1\n      },\n      \"userdoc\": {\n        \"kind\": \"user\",\n        \"methods\": {\n          \"addStake(uint32)\": {\n            \"notice\": \"add stake for this paymaster. This method can also carry eth value to add to the current stake.\"\n          },\n          \"deposit()\": {\n            \"notice\": \"add a deposit for this paymaster, used for paying for transaction fees\"\n          },\n          \"getDeposit()\": {\n            \"notice\": \"return current paymaster's deposit on the entryPoint.\"\n          },\n          \"postOp(uint8,bytes,uint256)\": {\n            \"notice\": \"post-operation handler. Must verify sender is the entryPoint\"\n          },\n          \"unlockStake()\": {\n            \"notice\": \"unlock the stake, in order to withdraw it. The paymaster can't serve requests once unlocked, until it calls addStake again\"\n          },\n          \"validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)\": {\n            \"notice\": \"payment validation: check if paymaster agrees to pay. Must verify sender is the entryPoint. Revert to reject this request. Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted) The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\"\n          },\n          \"withdrawStake(address)\": {\n            \"notice\": \"withdraw the entire paymaster's stake. stake must be unlocked first (and then wait for the unstakeDelay to be over)\"\n          },\n          \"withdrawTo(address,uint256)\": {\n            \"notice\": \"withdraw value from the deposit\"\n          }\n        },\n        \"version\": 1\n      }\n    },\n    \"settings\": {\n      \"remappings\": [\n        \"@account-abstraction/contracts/=lib/account-abstraction/contracts/\",\n        \"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\n        \"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\n        \"account-abstraction/=lib/account-abstraction/contracts/\",\n        \"ds-test/=lib/forge-std/lib/ds-test/src/\",\n        \"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\n        \"forge-std/=lib/forge-std/src/\",\n        \"openzeppelin-contracts/=lib/openzeppelin-contracts/\",\n        \"openzeppelin/=lib/openzeppelin-contracts/contracts/\"\n      ],\n      \"optimizer\": { \"enabled\": true, \"runs\": 200 },\n      \"metadata\": { \"bytecodeHash\": \"ipfs\" },\n      \"compilationTarget\": {\n        \"src/paymaster/CheckoutPaymaster.sol\": \"CheckoutPaymaster\"\n      },\n      \"libraries\": {}\n    },\n    \"sources\": {\n      \"lib/account-abstraction/contracts/core/BasePaymaster.sol\": {\n        \"keccak256\": \"0x27f658d545b5f26c2e09a7ac4fba72f9975433839d10225a520e557540b84443\",\n        \"urls\": [\n          \"bzz-raw://426f0c6565ae612d34ae184fb1582e6fc360abf79450975c1c2dd439184094a0\",\n          \"dweb:/ipfs/QmZMeMosC1P6Z5BQyT6iGFQrY6ui5ART65ycVWmXFnDpoq\"\n        ],\n        \"license\": \"GPL-3.0\"\n      },\n      \"lib/account-abstraction/contracts/core/Helpers.sol\": {\n        \"keccak256\": \"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\n        \"urls\": [\n          \"bzz-raw://69643e83f68e6a13d5075c7565bfce326673b0bd98c432033c4603ea84835746\",\n          \"dweb:/ipfs/QmSwSzjYyV7qudi5vvsmzHMG2Z4YJZxX51RRXXVCLaNcEU\"\n        ],\n        \"license\": \"GPL-3.0\"\n      },\n      \"lib/account-abstraction/contracts/interfaces/IAggregator.sol\": {\n        \"keccak256\": \"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\n        \"urls\": [\n          \"bzz-raw://20ed837bc5909c89ff1910246bf245a5dad6840aa939382e1694964eb7dbd37b\",\n          \"dweb:/ipfs/QmTMybRq5yyghPDDs1ZCNAVB9sSJ4WHe6Q9mejuKPTAdNP\"\n        ],\n        \"license\": \"GPL-3.0\"\n      },\n      \"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\": {\n        \"keccak256\": \"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\n        \"urls\": [\n          \"bzz-raw://d2d21cc92c2fdab2b58d21bc25d4cd0e8c284b922528a186b087b818d54bc6cf\",\n          \"dweb:/ipfs/QmT1qrfuBjsv2rmRCDn8mgPXHp94hARJwzbcDuBLDTbFWd\"\n        ],\n        \"license\": \"GPL-3.0\"\n      },\n      \"lib/account-abstraction/contracts/interfaces/INonceManager.sol\": {\n        \"keccak256\": \"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\n        \"urls\": [\n          \"bzz-raw://00fe21b4349b24c50df60e1a705179293982bd9e7a32b78d4bac9620f89e7fe2\",\n          \"dweb:/ipfs/QmSFFYGfUwQbVa6hASjU7YxTvgi2HkfrPr4X5oPHscHg8b\"\n        ],\n        \"license\": \"GPL-3.0\"\n      },\n      \"lib/account-abstraction/contracts/interfaces/IPaymaster.sol\": {\n        \"keccak256\": \"0x36858ba8685024974f533530420688da3454d29996ebc42e410673a1ed2ec456\",\n        \"urls\": [\n          \"bzz-raw://616cbcf51778b1961b7f20a547bec7efae6d1d565df0f651926241ed8bde9ad8\",\n          \"dweb:/ipfs/QmaVsgffUUmeUJYgStvRr8cNZ1LBbrc3FYNLW4JT1dVLia\"\n        ],\n        \"license\": \"GPL-3.0\"\n      },\n      \"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\": {\n        \"keccak256\": \"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\n        \"urls\": [\n          \"bzz-raw://b389da4714a138be63704a576a482505eab2855e263b38a93706395d8d42e7c3\",\n          \"dweb:/ipfs/QmeeAZpdHwUXxqP8pxA7GNtoCGBmmH4FaqLLwScVKGxtxZ\"\n        ],\n        \"license\": \"GPL-3.0-only\"\n      },\n      \"lib/account-abstraction/contracts/interfaces/UserOperation.sol\": {\n        \"keccak256\": \"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\n        \"urls\": [\n          \"bzz-raw://6ff83c59432e733bf6304dda27cd4b0f34401917dd535e2669cc842d2d26568c\",\n          \"dweb:/ipfs/QmPJbHU5TAjHqUTZzAcicEeG2nknmwCN43L4EW9LHbknTN\"\n        ],\n        \"license\": \"GPL-3.0\"\n      },\n      \"lib/openzeppelin-contracts/contracts/access/Ownable.sol\": {\n        \"keccak256\": \"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\n        \"urls\": [\n          \"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\n          \"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"\n        ],\n        \"license\": \"MIT\"\n      },\n      \"lib/openzeppelin-contracts/contracts/utils/Context.sol\": {\n        \"keccak256\": \"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\n        \"urls\": [\n          \"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\n          \"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"\n        ],\n        \"license\": \"MIT\"\n      },\n      \"src/interfaces/InspectablePaymasterInterface.sol\": {\n        \"keccak256\": \"0xfa01cf6d6c5c7585be4ffba481461417568e83e4326e4d4f3f978f448c494c05\",\n        \"urls\": [\n          \"bzz-raw://359879084737d058f0098e12d25170e8181bf597231cb440302a945d6483e638\",\n          \"dweb:/ipfs/QmWjJtxkBGXk8MmrVQCqp2gjyyibTmMc6b6GwQLcrcGyNp\"\n        ],\n        \"license\": \"UNLICENSED\"\n      },\n      \"src/paymaster/CheckoutPaymaster.sol\": {\n        \"keccak256\": \"0x750ce14a013dca17e026f47f3e1f141c7941983a9e38d66d79ad32f7dd4f64d3\",\n        \"urls\": [\n          \"bzz-raw://e0a9a642e69bbba805719b3c12144f2e32d3e2b70d24392ae7b09dd72a9510c6\",\n          \"dweb:/ipfs/Qma8sDR2eC1pjAjkizjNhBnBbMvZV1x6pv82Z4xjNHvnaW\"\n        ],\n        \"license\": \"UNLICENSED\"\n      },\n      \"src/paymaster/CheckoutPaymasterEventsAndErrors.sol\": {\n        \"keccak256\": \"0xff791f10ae484b55407bdfa6f82516187388264e8e84bccd7571486c6ee08c37\",\n        \"urls\": [\n          \"bzz-raw://0df9a5fbbe1aa679422daa50a9f25a1fdd84df2a939903d9dd3f90d3a88f99e2\",\n          \"dweb:/ipfs/QmPFaWWrb49R8WZizNKC7LN9YhWuhF7wey6cZKQg2WkMnr\"\n        ],\n        \"license\": \"UNLICENSED\"\n      }\n    },\n    \"version\": 1\n  },\n  \"ast\": {\n    \"absolutePath\": \"src/paymaster/CheckoutPaymaster.sol\",\n    \"id\": 54009,\n    \"exportedSymbols\": {\n      \"ActiveState\": [53806],\n      \"BasePaymaster\": [361],\n      \"CheckoutPaymaster\": [54008],\n      \"CheckoutPaymasterEventsAndErrors\": [54021],\n      \"IEntryPoint\": [857],\n      \"InspectablePaymasterInterface\": [53775],\n      \"UserOperation\": [1045]\n    },\n    \"nodeType\": \"SourceUnit\",\n    \"src\": \"39:3583:74\",\n    \"nodes\": [\n      {\n        \"id\": 53792,\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"39:24:74\",\n        \"nodes\": [],\n        \"literals\": [\"solidity\", \"^\", \"0.8\", \".13\"]\n      },\n      {\n        \"id\": 53794,\n        \"nodeType\": \"ImportDirective\",\n        \"src\": \"65:90:74\",\n        \"nodes\": [],\n        \"absolutePath\": \"lib/account-abstraction/contracts/core/BasePaymaster.sol\",\n        \"file\": \"@account-abstraction/contracts/core/BasePaymaster.sol\",\n        \"nameLocation\": \"-1:-1:-1\",\n        \"scope\": 54009,\n        \"sourceUnit\": 362,\n        \"symbolAliases\": [\n          {\n            \"foreign\": {\n              \"id\": 53793,\n              \"name\": \"BasePaymaster\",\n              \"nodeType\": \"Identifier\",\n              \"overloadedDeclarations\": [],\n              \"referencedDeclaration\": 361,\n              \"src\": \"78:13:74\",\n              \"typeDescriptions\": {}\n            },\n            \"nameLocation\": \"-1:-1:-1\"\n          }\n        ],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"id\": 53796,\n        \"nodeType\": \"ImportDirective\",\n        \"src\": \"156:92:74\",\n        \"nodes\": [],\n        \"absolutePath\": \"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\",\n        \"file\": \"@account-abstraction/contracts/interfaces/IEntryPoint.sol\",\n        \"nameLocation\": \"-1:-1:-1\",\n        \"scope\": 54009,\n        \"sourceUnit\": 858,\n        \"symbolAliases\": [\n          {\n            \"foreign\": {\n              \"id\": 53795,\n              \"name\": \"IEntryPoint\",\n              \"nodeType\": \"Identifier\",\n              \"overloadedDeclarations\": [],\n              \"referencedDeclaration\": 857,\n              \"src\": \"169:11:74\",\n              \"typeDescriptions\": {}\n            },\n            \"nameLocation\": \"-1:-1:-1\"\n          }\n        ],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"id\": 53798,\n        \"nodeType\": \"ImportDirective\",\n        \"src\": \"249:96:74\",\n        \"nodes\": [],\n        \"absolutePath\": \"lib/account-abstraction/contracts/interfaces/UserOperation.sol\",\n        \"file\": \"@account-abstraction/contracts/interfaces/UserOperation.sol\",\n        \"nameLocation\": \"-1:-1:-1\",\n        \"scope\": 54009,\n        \"sourceUnit\": 1216,\n        \"symbolAliases\": [\n          {\n            \"foreign\": {\n              \"id\": 53797,\n              \"name\": \"UserOperation\",\n              \"nodeType\": \"Identifier\",\n              \"overloadedDeclarations\": [],\n              \"referencedDeclaration\": 1045,\n              \"src\": \"262:13:74\",\n              \"typeDescriptions\": {}\n            },\n            \"nameLocation\": \"-1:-1:-1\"\n          }\n        ],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"id\": 53800,\n        \"nodeType\": \"ImportDirective\",\n        \"src\": \"347:100:74\",\n        \"nodes\": [],\n        \"absolutePath\": \"src/interfaces/InspectablePaymasterInterface.sol\",\n        \"file\": \"../interfaces/InspectablePaymasterInterface.sol\",\n        \"nameLocation\": \"-1:-1:-1\",\n        \"scope\": 54009,\n        \"sourceUnit\": 53776,\n        \"symbolAliases\": [\n          {\n            \"foreign\": {\n              \"id\": 53799,\n              \"name\": \"InspectablePaymasterInterface\",\n              \"nodeType\": \"Identifier\",\n              \"overloadedDeclarations\": [],\n              \"referencedDeclaration\": 53775,\n              \"src\": \"360:29:74\",\n              \"typeDescriptions\": {}\n            },\n            \"nameLocation\": \"-1:-1:-1\"\n          }\n        ],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"id\": 53802,\n        \"nodeType\": \"ImportDirective\",\n        \"src\": \"448:94:74\",\n        \"nodes\": [],\n        \"absolutePath\": \"src/paymaster/CheckoutPaymasterEventsAndErrors.sol\",\n        \"file\": \"./CheckoutPaymasterEventsAndErrors.sol\",\n        \"nameLocation\": \"-1:-1:-1\",\n        \"scope\": 54009,\n        \"sourceUnit\": 54022,\n        \"symbolAliases\": [\n          {\n            \"foreign\": {\n              \"id\": 53801,\n              \"name\": \"CheckoutPaymasterEventsAndErrors\",\n              \"nodeType\": \"Identifier\",\n              \"overloadedDeclarations\": [],\n              \"referencedDeclaration\": 54021,\n              \"src\": \"461:32:74\",\n              \"typeDescriptions\": {}\n            },\n            \"nameLocation\": \"-1:-1:-1\"\n          }\n        ],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"id\": 53806,\n        \"nodeType\": \"EnumDefinition\",\n        \"src\": \"544:77:74\",\n        \"nodes\": [],\n        \"canonicalName\": \"ActiveState\",\n        \"members\": [\n          {\n            \"id\": 53803,\n            \"name\": \"UNSPECIFIED\",\n            \"nameLocation\": \"567:11:74\",\n            \"nodeType\": \"EnumValue\",\n            \"src\": \"567:11:74\"\n          },\n          {\n            \"id\": 53804,\n            \"name\": \"INACTIVE\",\n            \"nameLocation\": \"589:8:74\",\n            \"nodeType\": \"EnumValue\",\n            \"src\": \"589:8:74\"\n          },\n          {\n            \"id\": 53805,\n            \"name\": \"ACTIVE\",\n            \"nameLocation\": \"608:6:74\",\n            \"nodeType\": \"EnumValue\",\n            \"src\": \"608:6:74\"\n          }\n        ],\n        \"name\": \"ActiveState\",\n        \"nameLocation\": \"549:11:74\"\n      },\n      {\n        \"id\": 54008,\n        \"nodeType\": \"ContractDefinition\",\n        \"src\": \"678:2943:74\",\n        \"nodes\": [\n          {\n            \"id\": 53816,\n            \"nodeType\": \"VariableDeclaration\",\n            \"src\": \"805:35:74\",\n            \"nodes\": [],\n            \"constant\": true,\n            \"functionSelector\": \"ffa1ad74\",\n            \"mutability\": \"constant\",\n            \"name\": \"VERSION\",\n            \"nameLocation\": \"829:7:74\",\n            \"scope\": 54008,\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 53814,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"805:7:74\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": {\n              \"hexValue\": \"31\",\n              \"id\": 53815,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"839:1:74\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_rational_1_by_1\",\n                \"typeString\": \"int_const 1\"\n              },\n              \"value\": \"1\"\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"id\": 53819,\n            \"nodeType\": \"VariableDeclaration\",\n            \"src\": \"846:35:74\",\n            \"nodes\": [],\n            \"constant\": false,\n            \"mutability\": \"mutable\",\n            \"name\": \"_ACTIVE_STATE_\",\n            \"nameLocation\": \"867:14:74\",\n            \"scope\": 54008,\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n              \"typeString\": \"enum ActiveState\"\n            },\n            \"typeName\": {\n              \"id\": 53818,\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"pathNode\": {\n                \"id\": 53817,\n                \"name\": \"ActiveState\",\n                \"nameLocations\": [\"846:11:74\"],\n                \"nodeType\": \"IdentifierPath\",\n                \"referencedDeclaration\": 53806,\n                \"src\": \"846:11:74\"\n              },\n              \"referencedDeclaration\": 53806,\n              \"src\": \"846:11:74\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                \"typeString\": \"enum ActiveState\"\n              }\n            },\n            \"visibility\": \"internal\"\n          },\n          {\n            \"id\": 53822,\n            \"nodeType\": \"VariableDeclaration\",\n            \"src\": \"887:34:74\",\n            \"nodes\": [],\n            \"constant\": false,\n            \"mutability\": \"mutable\",\n            \"name\": \"_LAST_OP_MODE_\",\n            \"nameLocation\": \"907:14:74\",\n            \"scope\": 54008,\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_enum$_PostOpMode_$884\",\n              \"typeString\": \"enum IPaymaster.PostOpMode\"\n            },\n            \"typeName\": {\n              \"id\": 53821,\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"pathNode\": {\n                \"id\": 53820,\n                \"name\": \"PostOpMode\",\n                \"nameLocations\": [\"887:10:74\"],\n                \"nodeType\": \"IdentifierPath\",\n                \"referencedDeclaration\": 884,\n                \"src\": \"887:10:74\"\n              },\n              \"referencedDeclaration\": 884,\n              \"src\": \"887:10:74\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_enum$_PostOpMode_$884\",\n                \"typeString\": \"enum IPaymaster.PostOpMode\"\n              }\n            },\n            \"visibility\": \"internal\"\n          },\n          {\n            \"id\": 53826,\n            \"nodeType\": \"VariableDeclaration\",\n            \"src\": \"1005:45:74\",\n            \"nodes\": [],\n            \"constant\": false,\n            \"mutability\": \"mutable\",\n            \"name\": \"_OPERATORS_\",\n            \"nameLocation\": \"1039:11:74\",\n            \"scope\": 54008,\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_bool_$\",\n              \"typeString\": \"mapping(address => bool)\"\n            },\n            \"typeName\": {\n              \"id\": 53825,\n              \"keyName\": \"\",\n              \"keyNameLocation\": \"-1:-1:-1\",\n              \"keyType\": {\n                \"id\": 53823,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"1013:7:74\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"1005:24:74\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_bool_$\",\n                \"typeString\": \"mapping(address => bool)\"\n              },\n              \"valueName\": \"\",\n              \"valueNameLocation\": \"-1:-1:-1\",\n              \"valueType\": {\n                \"id\": 53824,\n                \"name\": \"bool\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"1024:4:74\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_bool\",\n                  \"typeString\": \"bool\"\n                }\n              }\n            },\n            \"visibility\": \"internal\"\n          },\n          {\n            \"id\": 53852,\n            \"nodeType\": \"ModifierDefinition\",\n            \"src\": \"1057:228:74\",\n            \"nodes\": [],\n            \"body\": {\n              \"id\": 53851,\n              \"nodeType\": \"Block\",\n              \"src\": \"1077:208:74\",\n              \"nodes\": [],\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"id\": 53832,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"UnaryOperation\",\n                    \"operator\": \"!\",\n                    \"prefix\": true,\n                    \"src\": \"1091:24:74\",\n                    \"subExpression\": {\n                      \"baseExpression\": {\n                        \"id\": 53828,\n                        \"name\": \"_OPERATORS_\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 53826,\n                        \"src\": \"1092:11:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_bool_$\",\n                          \"typeString\": \"mapping(address => bool)\"\n                        }\n                      },\n                      \"id\": 53831,\n                      \"indexExpression\": {\n                        \"expression\": {\n                          \"id\": 53829,\n                          \"name\": \"msg\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": -15,\n                          \"src\": \"1104:3:74\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_magic_message\",\n                            \"typeString\": \"msg\"\n                          }\n                        },\n                        \"id\": 53830,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberLocation\": \"1108:6:74\",\n                        \"memberName\": \"sender\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"src\": \"1104:10:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"1092:23:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 53839,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1087:89:74\",\n                  \"trueBody\": {\n                    \"id\": 53838,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1117:59:74\",\n                    \"statements\": [\n                      {\n                        \"errorCall\": {\n                          \"arguments\": [\n                            {\n                              \"expression\": {\n                                \"id\": 53834,\n                                \"name\": \"msg\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": -15,\n                                \"src\": \"1154:3:74\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_magic_message\",\n                                  \"typeString\": \"msg\"\n                                }\n                              },\n                              \"id\": 53835,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberLocation\": \"1158:6:74\",\n                              \"memberName\": \"sender\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"src\": \"1154:10:74\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 53833,\n                            \"name\": \"InvalidOperator\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 54016,\n                            \"src\": \"1138:15:74\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_error_pure$_t_address_$returns$__$\",\n                              \"typeString\": \"function (address) pure\"\n                            }\n                          },\n                          \"id\": 53836,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"nameLocations\": [],\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1138:27:74\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 53837,\n                        \"nodeType\": \"RevertStatement\",\n                        \"src\": \"1131:34:74\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"expression\": {\n                    \"id\": 53843,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"id\": 53840,\n                      \"name\": \"_ACTIVE_STATE_\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 53819,\n                      \"src\": \"1185:14:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                        \"typeString\": \"enum ActiveState\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"expression\": {\n                        \"id\": 53841,\n                        \"name\": \"ActiveState\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 53806,\n                        \"src\": \"1202:11:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_enum$_ActiveState_$53806_$\",\n                          \"typeString\": \"type(enum ActiveState)\"\n                        }\n                      },\n                      \"id\": 53842,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"memberLocation\": \"1214:6:74\",\n                      \"memberName\": \"ACTIVE\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 53805,\n                      \"src\": \"1202:18:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                        \"typeString\": \"enum ActiveState\"\n                      }\n                    },\n                    \"src\": \"1185:35:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                      \"typeString\": \"enum ActiveState\"\n                    }\n                  },\n                  \"id\": 53844,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1185:35:74\"\n                },\n                {\n                  \"id\": 53845,\n                  \"nodeType\": \"PlaceholderStatement\",\n                  \"src\": \"1230:1:74\"\n                },\n                {\n                  \"expression\": {\n                    \"id\": 53849,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"id\": 53846,\n                      \"name\": \"_ACTIVE_STATE_\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 53819,\n                      \"src\": \"1241:14:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                        \"typeString\": \"enum ActiveState\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"expression\": {\n                        \"id\": 53847,\n                        \"name\": \"ActiveState\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 53806,\n                        \"src\": \"1258:11:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_enum$_ActiveState_$53806_$\",\n                          \"typeString\": \"type(enum ActiveState)\"\n                        }\n                      },\n                      \"id\": 53848,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"memberLocation\": \"1270:8:74\",\n                      \"memberName\": \"INACTIVE\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 53804,\n                      \"src\": \"1258:20:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                        \"typeString\": \"enum ActiveState\"\n                      }\n                    },\n                    \"src\": \"1241:37:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                      \"typeString\": \"enum ActiveState\"\n                    }\n                  },\n                  \"id\": 53850,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1241:37:74\"\n                }\n              ]\n            },\n            \"name\": \"activate\",\n            \"nameLocation\": \"1066:8:74\",\n            \"parameters\": {\n              \"id\": 53827,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1074:2:74\"\n            },\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"id\": 53865,\n            \"nodeType\": \"ModifierDefinition\",\n            \"src\": \"1291:131:74\",\n            \"nodes\": [],\n            \"body\": {\n              \"id\": 53864,\n              \"nodeType\": \"Block\",\n              \"src\": \"1311:111:74\",\n              \"nodes\": [],\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                      \"typeString\": \"enum ActiveState\"\n                    },\n                    \"id\": 53857,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"id\": 53854,\n                      \"name\": \"_ACTIVE_STATE_\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 53819,\n                      \"src\": \"1325:14:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                        \"typeString\": \"enum ActiveState\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"expression\": {\n                        \"id\": 53855,\n                        \"name\": \"ActiveState\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 53806,\n                        \"src\": \"1343:11:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_enum$_ActiveState_$53806_$\",\n                          \"typeString\": \"type(enum ActiveState)\"\n                        }\n                      },\n                      \"id\": 53856,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"memberLocation\": \"1355:6:74\",\n                      \"memberName\": \"ACTIVE\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 53805,\n                      \"src\": \"1343:18:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                        \"typeString\": \"enum ActiveState\"\n                      }\n                    },\n                    \"src\": \"1325:36:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 53862,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1321:84:74\",\n                  \"trueBody\": {\n                    \"id\": 53861,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1363:42:74\",\n                    \"statements\": [\n                      {\n                        \"errorCall\": {\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"id\": 53858,\n                            \"name\": \"Inactive\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 54012,\n                            \"src\": \"1384:8:74\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_error_pure$__$returns$__$\",\n                              \"typeString\": \"function () pure\"\n                            }\n                          },\n                          \"id\": 53859,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"nameLocations\": [],\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1384:10:74\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 53860,\n                        \"nodeType\": \"RevertStatement\",\n                        \"src\": \"1377:17:74\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"id\": 53863,\n                  \"nodeType\": \"PlaceholderStatement\",\n                  \"src\": \"1414:1:74\"\n                }\n              ]\n            },\n            \"name\": \"isActive\",\n            \"nameLocation\": \"1300:8:74\",\n            \"parameters\": {\n              \"id\": 53853,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1308:2:74\"\n            },\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"id\": 53880,\n            \"nodeType\": \"FunctionDefinition\",\n            \"src\": \"1428:116:74\",\n            \"nodes\": [],\n            \"body\": {\n              \"id\": 53879,\n              \"nodeType\": \"Block\",\n              \"src\": \"1490:54:74\",\n              \"nodes\": [],\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"id\": 53877,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"id\": 53874,\n                      \"name\": \"_ACTIVE_STATE_\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 53819,\n                      \"src\": \"1500:14:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                        \"typeString\": \"enum ActiveState\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"expression\": {\n                        \"id\": 53875,\n                        \"name\": \"ActiveState\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 53806,\n                        \"src\": \"1517:11:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_enum$_ActiveState_$53806_$\",\n                          \"typeString\": \"type(enum ActiveState)\"\n                        }\n                      },\n                      \"id\": 53876,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"memberLocation\": \"1529:8:74\",\n                      \"memberName\": \"INACTIVE\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 53804,\n                      \"src\": \"1517:20:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                        \"typeString\": \"enum ActiveState\"\n                      }\n                    },\n                    \"src\": \"1500:37:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_enum$_ActiveState_$53806\",\n                      \"typeString\": \"enum ActiveState\"\n                    }\n                  },\n                  \"id\": 53878,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1500:37:74\"\n                }\n              ]\n            },\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [\n              {\n                \"arguments\": [\n                  {\n                    \"id\": 53871,\n                    \"name\": \"entryPoint\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 53868,\n                    \"src\": \"1478:10:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_IEntryPoint_$857\",\n                      \"typeString\": \"contract IEntryPoint\"\n                    }\n                  }\n                ],\n                \"id\": 53872,\n                \"kind\": \"baseConstructorSpecifier\",\n                \"modifierName\": {\n                  \"id\": 53870,\n                  \"name\": \"BasePaymaster\",\n                  \"nameLocations\": [\"1464:13:74\"],\n                  \"nodeType\": \"IdentifierPath\",\n                  \"referencedDeclaration\": 361,\n                  \"src\": \"1464:13:74\"\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1464:25:74\"\n              }\n            ],\n            \"name\": \"\",\n            \"nameLocation\": \"-1:-1:-1\",\n            \"parameters\": {\n              \"id\": 53869,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 53868,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"entryPoint\",\n                  \"nameLocation\": \"1452:10:74\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53880,\n                  \"src\": \"1440:22:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_IEntryPoint_$857\",\n                    \"typeString\": \"contract IEntryPoint\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53867,\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"pathNode\": {\n                      \"id\": 53866,\n                      \"name\": \"IEntryPoint\",\n                      \"nameLocations\": [\"1440:11:74\"],\n                      \"nodeType\": \"IdentifierPath\",\n                      \"referencedDeclaration\": 857,\n                      \"src\": \"1440:11:74\"\n                    },\n                    \"referencedDeclaration\": 857,\n                    \"src\": \"1440:11:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_IEntryPoint_$857\",\n                      \"typeString\": \"contract IEntryPoint\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1439:24:74\"\n            },\n            \"returnParameters\": {\n              \"id\": 53873,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1490:0:74\"\n            },\n            \"scope\": 54008,\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"public\"\n          },\n          {\n            \"id\": 53915,\n            \"nodeType\": \"FunctionDefinition\",\n            \"src\": \"1550:253:74\",\n            \"nodes\": [],\n            \"body\": {\n              \"id\": 53914,\n              \"nodeType\": \"Block\",\n              \"src\": \"1659:144:74\",\n              \"nodes\": [],\n              \"statements\": [\n                {\n                  \"assignments\": [53891],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 53891,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"n\",\n                      \"nameLocation\": \"1677:1:74\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 53914,\n                      \"src\": \"1669:9:74\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 53890,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1669:7:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 53894,\n                  \"initialValue\": {\n                    \"expression\": {\n                      \"id\": 53892,\n                      \"name\": \"operators\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 53883,\n                      \"src\": \"1681:9:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                        \"typeString\": \"address[] calldata\"\n                      }\n                    },\n                    \"id\": 53893,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberLocation\": \"1691:6:74\",\n                    \"memberName\": \"length\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"src\": \"1681:16:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1669:28:74\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 53912,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"1735:62:74\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"id\": 53910,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"baseExpression\": {\n                              \"id\": 53904,\n                              \"name\": \"_OPERATORS_\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 53826,\n                              \"src\": \"1749:11:74\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_bool_$\",\n                                \"typeString\": \"mapping(address => bool)\"\n                              }\n                            },\n                            \"id\": 53908,\n                            \"indexExpression\": {\n                              \"baseExpression\": {\n                                \"id\": 53905,\n                                \"name\": \"operators\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 53883,\n                                \"src\": \"1761:9:74\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                                  \"typeString\": \"address[] calldata\"\n                                }\n                              },\n                              \"id\": 53907,\n                              \"indexExpression\": {\n                                \"id\": 53906,\n                                \"name\": \"i\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 53896,\n                                \"src\": \"1771:1:74\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"1761:12:74\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"1749:25:74\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_bool\",\n                              \"typeString\": \"bool\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"id\": 53909,\n                            \"name\": \"isAllowed\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 53885,\n                            \"src\": \"1777:9:74\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_bool\",\n                              \"typeString\": \"bool\"\n                            }\n                          },\n                          \"src\": \"1749:37:74\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"id\": 53911,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"1749:37:74\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 53900,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"id\": 53898,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 53896,\n                      \"src\": \"1723:1:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"id\": 53899,\n                      \"name\": \"n\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 53891,\n                      \"src\": \"1727:1:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1723:5:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 53913,\n                  \"initializationExpression\": {\n                    \"assignments\": [53896],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 53896,\n                        \"mutability\": \"mutable\",\n                        \"name\": \"i\",\n                        \"nameLocation\": \"1720:1:74\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"scope\": 53913,\n                        \"src\": \"1712:9:74\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 53895,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1712:7:74\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 53897,\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"1712:9:74\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"id\": 53902,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": true,\n                      \"src\": \"1730:3:74\",\n                      \"subExpression\": {\n                        \"id\": 53901,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 53896,\n                        \"src\": \"1732:1:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 53903,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1730:3:74\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"1707:90:74\"\n                }\n              ]\n            },\n            \"functionSelector\": \"a3111bdb\",\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"id\": 53888,\n                \"kind\": \"modifierInvocation\",\n                \"modifierName\": {\n                  \"id\": 53887,\n                  \"name\": \"onlyOwner\",\n                  \"nameLocations\": [\"1649:9:74\"],\n                  \"nodeType\": \"IdentifierPath\",\n                  \"referencedDeclaration\": 45215,\n                  \"src\": \"1649:9:74\"\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1649:9:74\"\n              }\n            ],\n            \"name\": \"setOperators\",\n            \"nameLocation\": \"1559:12:74\",\n            \"parameters\": {\n              \"id\": 53886,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 53883,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"operators\",\n                  \"nameLocation\": \"1600:9:74\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53915,\n                  \"src\": \"1581:28:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"calldata\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                    \"typeString\": \"address[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 53881,\n                      \"name\": \"address\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"1581:7:74\",\n                      \"stateMutability\": \"nonpayable\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 53882,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"1581:9:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_address_$dyn_storage_ptr\",\n                      \"typeString\": \"address[]\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 53885,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"isAllowed\",\n                  \"nameLocation\": \"1624:9:74\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53915,\n                  \"src\": \"1619:14:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53884,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1619:4:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1571:68:74\"\n            },\n            \"returnParameters\": {\n              \"id\": 53889,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1659:0:74\"\n            },\n            \"scope\": 54008,\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"id\": 53949,\n            \"nodeType\": \"FunctionDefinition\",\n            \"src\": \"1809:427:74\",\n            \"nodes\": [],\n            \"body\": {\n              \"id\": 53948,\n              \"nodeType\": \"Block\",\n              \"src\": \"1946:290:74\",\n              \"nodes\": [],\n              \"statements\": [\n                {\n                  \"assignments\": [53927, 53929],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 53927,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"success\",\n                      \"nameLocation\": \"1962:7:74\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 53948,\n                      \"src\": \"1957:12:74\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      },\n                      \"typeName\": {\n                        \"id\": 53926,\n                        \"name\": \"bool\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1957:4:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      \"visibility\": \"internal\"\n                    },\n                    {\n                      \"constant\": false,\n                      \"id\": 53929,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"returnData\",\n                      \"nameLocation\": \"1984:10:74\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"scope\": 53948,\n                      \"src\": \"1971:23:74\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                        \"typeString\": \"bytes\"\n                      },\n                      \"typeName\": {\n                        \"id\": 53928,\n                        \"name\": \"bytes\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1971:5:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes_storage_ptr\",\n                          \"typeString\": \"bytes\"\n                        }\n                      },\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 53940,\n                  \"initialValue\": {\n                    \"arguments\": [\n                      {\n                        \"id\": 53938,\n                        \"name\": \"callData\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 53919,\n                        \"src\": \"2059:8:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes_calldata_ptr\",\n                          \"typeString\": \"bytes calldata\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bytes_calldata_ptr\",\n                          \"typeString\": \"bytes calldata\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_bytes_calldata_ptr\",\n                            \"typeString\": \"bytes calldata\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"arguments\": [\n                            {\n                              \"id\": 53932,\n                              \"name\": \"target\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 53917,\n                              \"src\": \"2006:6:74\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 53931,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1998:8:74\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_payable_$\",\n                              \"typeString\": \"type(address payable)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 53930,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1998:8:74\",\n                              \"stateMutability\": \"payable\",\n                              \"typeDescriptions\": {}\n                            }\n                          },\n                          \"id\": 53933,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"nameLocations\": [],\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1998:15:74\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"id\": 53934,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberLocation\": \"2014:4:74\",\n                        \"memberName\": \"call\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"src\": \"1998:20:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$\",\n                          \"typeString\": \"function (bytes memory) payable returns (bool,bytes memory)\"\n                        }\n                      },\n                      \"id\": 53937,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"names\": [\"value\"],\n                      \"nodeType\": \"FunctionCallOptions\",\n                      \"options\": [\n                        {\n                          \"expression\": {\n                            \"id\": 53935,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -15,\n                            \"src\": \"2039:3:74\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 53936,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberLocation\": \"2043:5:74\",\n                          \"memberName\": \"value\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"src\": \"2039:9:74\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"src\": \"1998:60:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value\",\n                        \"typeString\": \"function (bytes memory) payable returns (bool,bytes memory)\"\n                      }\n                    },\n                    \"id\": 53939,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"nameLocations\": [],\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1998:70:74\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_bool_$_t_bytes_memory_ptr_$\",\n                      \"typeString\": \"tuple(bool,bytes memory)\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1956:112:74\"\n                },\n                {\n                  \"condition\": {\n                    \"id\": 53942,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"UnaryOperation\",\n                    \"operator\": \"!\",\n                    \"prefix\": true,\n                    \"src\": \"2082:8:74\",\n                    \"subExpression\": {\n                      \"id\": 53941,\n                      \"name\": \"success\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 53927,\n                      \"src\": \"2083:7:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 53945,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2078:125:74\",\n                  \"trueBody\": {\n                    \"id\": 53944,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"2092:111:74\",\n                    \"statements\": [\n                      {\n                        \"AST\": {\n                          \"nodeType\": \"YulBlock\",\n                          \"src\": \"2115:78:74\",\n                          \"statements\": [\n                            {\n                              \"expression\": {\n                                \"arguments\": [\n                                  {\n                                    \"arguments\": [\n                                      {\n                                        \"name\": \"returnData\",\n                                        \"nodeType\": \"YulIdentifier\",\n                                        \"src\": \"2144:10:74\"\n                                      },\n                                      {\n                                        \"kind\": \"number\",\n                                        \"nodeType\": \"YulLiteral\",\n                                        \"src\": \"2156:2:74\",\n                                        \"type\": \"\",\n                                        \"value\": \"32\"\n                                      }\n                                    ],\n                                    \"functionName\": {\n                                      \"name\": \"add\",\n                                      \"nodeType\": \"YulIdentifier\",\n                                      \"src\": \"2140:3:74\"\n                                    },\n                                    \"nodeType\": \"YulFunctionCall\",\n                                    \"src\": \"2140:19:74\"\n                                  },\n                                  {\n                                    \"arguments\": [\n                                      {\n                                        \"name\": \"returnData\",\n                                        \"nodeType\": \"YulIdentifier\",\n                                        \"src\": \"2167:10:74\"\n                                      }\n                                    ],\n                                    \"functionName\": {\n                                      \"name\": \"mload\",\n                                      \"nodeType\": \"YulIdentifier\",\n                                      \"src\": \"2161:5:74\"\n                                    },\n                                    \"nodeType\": \"YulFunctionCall\",\n                                    \"src\": \"2161:17:74\"\n                                  }\n                                ],\n                                \"functionName\": {\n                                  \"name\": \"revert\",\n                                  \"nodeType\": \"YulIdentifier\",\n                                  \"src\": \"2133:6:74\"\n                                },\n                                \"nodeType\": \"YulFunctionCall\",\n                                \"src\": \"2133:46:74\"\n                              },\n                              \"nodeType\": \"YulExpressionStatement\",\n                              \"src\": \"2133:46:74\"\n                            }\n                          ]\n                        },\n                        \"evmVersion\": \"paris\",\n                        \"externalReferences\": [\n                          {\n                            \"declaration\": 53929,\n                            \"isOffset\": false,\n                            \"isSlot\": false,\n                            \"src\": \"2144:10:74\",\n                            \"valueSize\": 1\n                          },\n                          {\n                            \"declaration\": 53929,\n                            \"isOffset\": false,\n                            \"isSlot\": false,\n                            \"src\": \"2167:10:74\",\n                            \"valueSize\": 1\n                          }\n                        ],\n                        \"id\": 53943,\n                        \"nodeType\": \"InlineAssembly\",\n                        \"src\": \"2106:87:74\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"expression\": {\n                    \"id\": 53946,\n                    \"name\": \"returnData\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 53929,\n                    \"src\": \"2219:10:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                      \"typeString\": \"bytes memory\"\n                    }\n                  },\n                  \"functionReturnParameters\": 53925,\n                  \"id\": 53947,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2212:17:74\"\n                }\n              ]\n            },\n            \"functionSelector\": \"c458b07b\",\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"id\": 53922,\n                \"kind\": \"modifierInvocation\",\n                \"modifierName\": {\n                  \"id\": 53921,\n                  \"name\": \"activate\",\n                  \"nameLocations\": [\"1914:8:74\"],\n                  \"nodeType\": \"IdentifierPath\",\n                  \"referencedDeclaration\": 53852,\n                  \"src\": \"1914:8:74\"\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"1914:8:74\"\n              }\n            ],\n            \"name\": \"activateAndCall\",\n            \"nameLocation\": \"1818:15:74\",\n            \"parameters\": {\n              \"id\": 53920,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 53917,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"target\",\n                  \"nameLocation\": \"1851:6:74\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53949,\n                  \"src\": \"1843:14:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53916,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1843:7:74\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 53919,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"callData\",\n                  \"nameLocation\": \"1882:8:74\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53949,\n                  \"src\": \"1867:23:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"calldata\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bytes_calldata_ptr\",\n                    \"typeString\": \"bytes\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53918,\n                    \"name\": \"bytes\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1867:5:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes_storage_ptr\",\n                      \"typeString\": \"bytes\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1833:63:74\"\n            },\n            \"returnParameters\": {\n              \"id\": 53925,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 53924,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nameLocation\": \"-1:-1:-1\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53949,\n                  \"src\": \"1932:12:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                    \"typeString\": \"bytes\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53923,\n                    \"name\": \"bytes\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1932:5:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes_storage_ptr\",\n                      \"typeString\": \"bytes\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1931:14:74\"\n            },\n            \"scope\": 54008,\n            \"stateMutability\": \"payable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"id\": 53958,\n            \"nodeType\": \"FunctionDefinition\",\n            \"src\": \"2242:98:74\",\n            \"nodes\": [],\n            \"body\": {\n              \"id\": 53957,\n              \"nodeType\": \"Block\",\n              \"src\": \"2302:38:74\",\n              \"nodes\": [],\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"id\": 53955,\n                    \"name\": \"_LAST_OP_MODE_\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 53822,\n                    \"src\": \"2319:14:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_enum$_PostOpMode_$884\",\n                      \"typeString\": \"enum IPaymaster.PostOpMode\"\n                    }\n                  },\n                  \"functionReturnParameters\": 53954,\n                  \"id\": 53956,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2312:21:74\"\n                }\n              ]\n            },\n            \"baseFunctions\": [53774],\n            \"functionSelector\": \"255ed947\",\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getLastOpMode\",\n            \"nameLocation\": \"2251:13:74\",\n            \"parameters\": {\n              \"id\": 53950,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2264:2:74\"\n            },\n            \"returnParameters\": {\n              \"id\": 53954,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 53953,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nameLocation\": \"-1:-1:-1\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53958,\n                  \"src\": \"2290:10:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_enum$_PostOpMode_$884\",\n                    \"typeString\": \"enum IPaymaster.PostOpMode\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53952,\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"pathNode\": {\n                      \"id\": 53951,\n                      \"name\": \"PostOpMode\",\n                      \"nameLocations\": [\"2290:10:74\"],\n                      \"nodeType\": \"IdentifierPath\",\n                      \"referencedDeclaration\": 884,\n                      \"src\": \"2290:10:74\"\n                    },\n                    \"referencedDeclaration\": 884,\n                    \"src\": \"2290:10:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_enum$_PostOpMode_$884\",\n                      \"typeString\": \"enum IPaymaster.PostOpMode\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2289:12:74\"\n            },\n            \"scope\": 54008,\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"id\": 53988,\n            \"nodeType\": \"FunctionDefinition\",\n            \"src\": \"2641:435:74\",\n            \"nodes\": [],\n            \"body\": {\n              \"id\": 53987,\n              \"nodeType\": \"Block\",\n              \"src\": \"2895:181:74\",\n              \"nodes\": [],\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 53978,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"expression\": {\n                        \"expression\": {\n                          \"id\": 53974,\n                          \"name\": \"userOp\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 53962,\n                          \"src\": \"2909:6:74\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_struct$_UserOperation_$1045_calldata_ptr\",\n                            \"typeString\": \"struct UserOperation calldata\"\n                          }\n                        },\n                        \"id\": 53975,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberLocation\": \"2916:16:74\",\n                        \"memberName\": \"paymasterAndData\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 1042,\n                        \"src\": \"2909:23:74\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes_calldata_ptr\",\n                          \"typeString\": \"bytes calldata\"\n                        }\n                      },\n                      \"id\": 53976,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberLocation\": \"2933:6:74\",\n                      \"memberName\": \"length\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"src\": \"2909:30:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"hexValue\": \"3230\",\n                      \"id\": 53977,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2943:2:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_20_by_1\",\n                        \"typeString\": \"int_const 20\"\n                      },\n                      \"value\": \"20\"\n                    },\n                    \"src\": \"2909:36:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 53986,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2905:165:74\",\n                  \"trueBody\": {\n                    \"id\": 53985,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"2947:123:74\",\n                    \"statements\": [\n                      {\n                        \"errorCall\": {\n                          \"arguments\": [\n                            {\n                              \"expression\": {\n                                \"expression\": {\n                                  \"id\": 53980,\n                                  \"name\": \"userOp\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 53962,\n                                  \"src\": \"3015:6:74\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_struct$_UserOperation_$1045_calldata_ptr\",\n                                    \"typeString\": \"struct UserOperation calldata\"\n                                  }\n                                },\n                                \"id\": 53981,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberLocation\": \"3022:16:74\",\n                                \"memberName\": \"paymasterAndData\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 1042,\n                                \"src\": \"3015:23:74\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_bytes_calldata_ptr\",\n                                  \"typeString\": \"bytes calldata\"\n                                }\n                              },\n                              \"id\": 53982,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberLocation\": \"3039:6:74\",\n                              \"memberName\": \"length\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"src\": \"3015:30:74\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            ],\n                            \"id\": 53979,\n                            \"name\": \"InvalidPaymasterAndDataLength\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 54020,\n                            \"src\": \"2968:29:74\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_error_pure$_t_uint256_$returns$__$\",\n                              \"typeString\": \"function (uint256) pure\"\n                            }\n                          },\n                          \"id\": 53983,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"nameLocations\": [],\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2968:91:74\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 53984,\n                        \"nodeType\": \"RevertStatement\",\n                        \"src\": \"2961:98:74\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            \"baseFunctions\": [206],\n            \"documentation\": {\n              \"id\": 53959,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"2346:290:74\",\n              \"text\": \" @notice Validate a user operation that is using this paymaster.\\n @param userOp ERC-4337 UserOperation.\\n @return context The context containing the sponsor, spender, gasPriceUserOp, and opHash.\\n @return validationData The validation result.\"\n            },\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_validatePaymasterUserOp\",\n            \"nameLocation\": \"2650:24:74\",\n            \"overrides\": {\n              \"id\": 53968,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"2819:8:74\"\n            },\n            \"parameters\": {\n              \"id\": 53967,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 53962,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"userOp\",\n                  \"nameLocation\": \"2707:6:74\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53988,\n                  \"src\": \"2684:29:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"calldata\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_struct$_UserOperation_$1045_calldata_ptr\",\n                    \"typeString\": \"struct UserOperation\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53961,\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"pathNode\": {\n                      \"id\": 53960,\n                      \"name\": \"UserOperation\",\n                      \"nameLocations\": [\"2684:13:74\"],\n                      \"nodeType\": \"IdentifierPath\",\n                      \"referencedDeclaration\": 1045,\n                      \"src\": \"2684:13:74\"\n                    },\n                    \"referencedDeclaration\": 1045,\n                    \"src\": \"2684:13:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_struct$_UserOperation_$1045_storage_ptr\",\n                      \"typeString\": \"struct UserOperation\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 53964,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nameLocation\": \"-1:-1:-1\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53988,\n                  \"src\": \"2723:7:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bytes32\",\n                    \"typeString\": \"bytes32\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53963,\n                    \"name\": \"bytes32\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2723:7:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes32\",\n                      \"typeString\": \"bytes32\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 53966,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nameLocation\": \"-1:-1:-1\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53988,\n                  \"src\": \"2753:7:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53965,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2753:7:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2674:106:74\"\n            },\n            \"returnParameters\": {\n              \"id\": 53973,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 53970,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"context\",\n                  \"nameLocation\": \"2858:7:74\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53988,\n                  \"src\": \"2845:20:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                    \"typeString\": \"bytes\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53969,\n                    \"name\": \"bytes\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2845:5:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes_storage_ptr\",\n                      \"typeString\": \"bytes\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 53972,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"validationData\",\n                  \"nameLocation\": \"2875:14:74\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 53988,\n                  \"src\": \"2867:22:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53971,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2867:7:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2844:46:74\"\n            },\n            \"scope\": 54008,\n            \"stateMutability\": \"pure\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"id\": 54007,\n            \"nodeType\": \"FunctionDefinition\",\n            \"src\": \"3431:188:74\",\n            \"nodes\": [],\n            \"body\": {\n              \"id\": 54006,\n              \"nodeType\": \"Block\",\n              \"src\": \"3581:38:74\",\n              \"nodes\": [],\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"id\": 54004,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"id\": 54002,\n                      \"name\": \"_LAST_OP_MODE_\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 53822,\n                      \"src\": \"3591:14:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_enum$_PostOpMode_$884\",\n                        \"typeString\": \"enum IPaymaster.PostOpMode\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"id\": 54003,\n                      \"name\": \"mode\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 53992,\n                      \"src\": \"3608:4:74\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_enum$_PostOpMode_$884\",\n                        \"typeString\": \"enum IPaymaster.PostOpMode\"\n                      }\n                    },\n                    \"src\": \"3591:21:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_enum$_PostOpMode_$884\",\n                      \"typeString\": \"enum IPaymaster.PostOpMode\"\n                    }\n                  },\n                  \"id\": 54005,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3591:21:74\"\n                }\n              ]\n            },\n            \"baseFunctions\": [249],\n            \"documentation\": {\n              \"id\": 53989,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"3082:344:74\",\n              \"text\": \" @notice Post-operation handler.\\n @dev Records the result of the user operation (e.g. success or revert).\\n      Also, reverts if the paymaster was not active, ensuring that only allowed\\n      operators can make use of this paymaster.\\n @param mode The mode enum representing the operation result.\"\n            },\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"id\": 54000,\n                \"kind\": \"modifierInvocation\",\n                \"modifierName\": {\n                  \"id\": 53999,\n                  \"name\": \"isActive\",\n                  \"nameLocations\": [\"3572:8:74\"],\n                  \"nodeType\": \"IdentifierPath\",\n                  \"referencedDeclaration\": 53865,\n                  \"src\": \"3572:8:74\"\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"3572:8:74\"\n              }\n            ],\n            \"name\": \"_postOp\",\n            \"nameLocation\": \"3440:7:74\",\n            \"overrides\": {\n              \"id\": 53998,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"3563:8:74\"\n            },\n            \"parameters\": {\n              \"id\": 53997,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 53992,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"mode\",\n                  \"nameLocation\": \"3468:4:74\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 54007,\n                  \"src\": \"3457:15:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_enum$_PostOpMode_$884\",\n                    \"typeString\": \"enum IPaymaster.PostOpMode\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53991,\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"pathNode\": {\n                      \"id\": 53990,\n                      \"name\": \"PostOpMode\",\n                      \"nameLocations\": [\"3457:10:74\"],\n                      \"nodeType\": \"IdentifierPath\",\n                      \"referencedDeclaration\": 884,\n                      \"src\": \"3457:10:74\"\n                    },\n                    \"referencedDeclaration\": 884,\n                    \"src\": \"3457:10:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_enum$_PostOpMode_$884\",\n                      \"typeString\": \"enum IPaymaster.PostOpMode\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 53994,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nameLocation\": \"-1:-1:-1\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 54007,\n                  \"src\": \"3482:14:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"calldata\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bytes_calldata_ptr\",\n                    \"typeString\": \"bytes\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53993,\n                    \"name\": \"bytes\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3482:5:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes_storage_ptr\",\n                      \"typeString\": \"bytes\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 53996,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nameLocation\": \"-1:-1:-1\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"scope\": 54007,\n                  \"src\": \"3520:7:74\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 53995,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3520:7:74\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3447:106:74\"\n            },\n            \"returnParameters\": {\n              \"id\": 54001,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"3581:0:74\"\n            },\n            \"scope\": 54008,\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"baseName\": {\n              \"id\": 53808,\n              \"name\": \"BasePaymaster\",\n              \"nameLocations\": [\"712:13:74\"],\n              \"nodeType\": \"IdentifierPath\",\n              \"referencedDeclaration\": 361,\n              \"src\": \"712:13:74\"\n            },\n            \"id\": 53809,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"712:13:74\"\n          },\n          {\n            \"baseName\": {\n              \"id\": 53810,\n              \"name\": \"InspectablePaymasterInterface\",\n              \"nameLocations\": [\"731:29:74\"],\n              \"nodeType\": \"IdentifierPath\",\n              \"referencedDeclaration\": 53775,\n              \"src\": \"731:29:74\"\n            },\n            \"id\": 53811,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"731:29:74\"\n          },\n          {\n            \"baseName\": {\n              \"id\": 53812,\n              \"name\": \"CheckoutPaymasterEventsAndErrors\",\n              \"nameLocations\": [\"766:32:74\"],\n              \"nodeType\": \"IdentifierPath\",\n              \"referencedDeclaration\": 54021,\n              \"src\": \"766:32:74\"\n            },\n            \"id\": 53813,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"766:32:74\"\n          }\n        ],\n        \"canonicalName\": \"CheckoutPaymaster\",\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 53807,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"623:54:74\",\n          \"text\": \" @title CheckoutPaymaster\\n @author Fun.xyz\"\n        },\n        \"fullyImplemented\": true,\n        \"linearizedBaseContracts\": [\n          54008, 54021, 53775, 361, 45296, 47631, 911\n        ],\n        \"name\": \"CheckoutPaymaster\",\n        \"nameLocation\": \"687:17:74\",\n        \"scope\": 54009,\n        \"usedErrors\": [54012, 54016, 54020],\n        \"usedEvents\": [45197]\n      }\n    ],\n    \"license\": \"UNLICENSED\"\n  },\n  \"id\": 74\n}\n","{\n  \"abi\": [\n    {\n      \"inputs\": [\n        { \"internalType\": \"string\", \"name\": \"name\", \"type\": \"string\" },\n        { \"internalType\": \"string\", \"name\": \"symbol\", \"type\": \"string\" },\n        { \"internalType\": \"uint8\", \"name\": \"_decimals\", \"type\": \"uint8\" }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n      ],\n      \"name\": \"airdrop\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n      ],\n      \"name\": \"allowance\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n      ],\n      \"name\": \"balanceOf\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"decimals\",\n      \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"subtractedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"decreaseAllowance\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"addedValue\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"increaseAllowance\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"mint\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"totalSupply\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"transfer\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"contractName\": \"IERC20\"\n}\n","{\n  \"abi\": [\n    { \"inputs\": [], \"stateMutability\": \"nonpayable\", \"type\": \"constructor\" },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"approved\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"operator\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"approved\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"ApprovalForAll\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n      ],\n      \"name\": \"balanceOf\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"getApproved\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"operator\", \"type\": \"address\" }\n      ],\n      \"name\": \"isApprovedForAll\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"mint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"ownerOf\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"safeTransferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"safeTransferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"operator\", \"type\": \"address\" },\n        { \"internalType\": \"bool\", \"name\": \"approved\", \"type\": \"bool\" }\n      ],\n      \"name\": \"setApprovalForAll\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes4\", \"name\": \"interfaceId\", \"type\": \"bytes4\" }\n      ],\n      \"name\": \"supportsInterface\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"tokenURI\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ]\n}\n","{\n  \"name\": \"EntryPoint\",\n  \"abi\": [\n    {\n      \"name\": \"ExecutionResult\",\n      \"type\": \"error\",\n      \"inputs\": [\n        { \"name\": \"preOpGas\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n        { \"name\": \"paid\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n        { \"name\": \"validAfter\", \"type\": \"uint48\", \"internalType\": \"uint48\" },\n        { \"name\": \"validUntil\", \"type\": \"uint48\", \"internalType\": \"uint48\" },\n        { \"name\": \"targetSuccess\", \"type\": \"bool\", \"internalType\": \"bool\" },\n        { \"name\": \"targetResult\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n      ]\n    },\n    {\n      \"name\": \"FailedOp\",\n      \"type\": \"error\",\n      \"inputs\": [\n        { \"name\": \"opIndex\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n        { \"name\": \"reason\", \"type\": \"string\", \"internalType\": \"string\" }\n      ]\n    },\n    {\n      \"name\": \"SenderAddressResult\",\n      \"type\": \"error\",\n      \"inputs\": [\n        { \"name\": \"sender\", \"type\": \"address\", \"internalType\": \"address\" }\n      ]\n    },\n    {\n      \"name\": \"SignatureValidationFailed\",\n      \"type\": \"error\",\n      \"inputs\": [\n        { \"name\": \"aggregator\", \"type\": \"address\", \"internalType\": \"address\" }\n      ]\n    },\n    {\n      \"name\": \"ValidationResult\",\n      \"type\": \"error\",\n      \"inputs\": [\n        {\n          \"name\": \"returnInfo\",\n          \"components\": [\n            {\n              \"name\": \"preOpGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            { \"name\": \"prefund\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            { \"name\": \"sigFailed\", \"type\": \"bool\", \"internalType\": \"bool\" },\n            {\n              \"name\": \"validAfter\",\n              \"type\": \"uint48\",\n              \"internalType\": \"uint48\"\n            },\n            {\n              \"name\": \"validUntil\",\n              \"type\": \"uint48\",\n              \"internalType\": \"uint48\"\n            },\n            {\n              \"name\": \"paymasterContext\",\n              \"type\": \"bytes\",\n              \"internalType\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"structIEntryPoint.ReturnInfo\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"name\": \"senderInfo\",\n          \"components\": [\n            { \"name\": \"stake\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            {\n              \"name\": \"unstakeDelaySec\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structIStakeManager.StakeInfo\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"name\": \"factoryInfo\",\n          \"components\": [\n            { \"name\": \"stake\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            {\n              \"name\": \"unstakeDelaySec\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structIStakeManager.StakeInfo\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"name\": \"paymasterInfo\",\n          \"components\": [\n            { \"name\": \"stake\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            {\n              \"name\": \"unstakeDelaySec\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structIStakeManager.StakeInfo\",\n          \"type\": \"tuple\"\n        }\n      ]\n    },\n    {\n      \"name\": \"ValidationResultWithAggregation\",\n      \"type\": \"error\",\n      \"inputs\": [\n        {\n          \"name\": \"returnInfo\",\n          \"components\": [\n            {\n              \"name\": \"preOpGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            { \"name\": \"prefund\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            { \"name\": \"sigFailed\", \"type\": \"bool\", \"internalType\": \"bool\" },\n            {\n              \"name\": \"validAfter\",\n              \"type\": \"uint48\",\n              \"internalType\": \"uint48\"\n            },\n            {\n              \"name\": \"validUntil\",\n              \"type\": \"uint48\",\n              \"internalType\": \"uint48\"\n            },\n            {\n              \"name\": \"paymasterContext\",\n              \"type\": \"bytes\",\n              \"internalType\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"structIEntryPoint.ReturnInfo\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"name\": \"senderInfo\",\n          \"components\": [\n            { \"name\": \"stake\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            {\n              \"name\": \"unstakeDelaySec\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structIStakeManager.StakeInfo\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"name\": \"factoryInfo\",\n          \"components\": [\n            { \"name\": \"stake\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            {\n              \"name\": \"unstakeDelaySec\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structIStakeManager.StakeInfo\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"name\": \"paymasterInfo\",\n          \"components\": [\n            { \"name\": \"stake\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            {\n              \"name\": \"unstakeDelaySec\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structIStakeManager.StakeInfo\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"name\": \"aggregatorInfo\",\n          \"components\": [\n            {\n              \"name\": \"aggregator\",\n              \"type\": \"address\",\n              \"internalType\": \"address\"\n            },\n            {\n              \"name\": \"stakeInfo\",\n              \"components\": [\n                {\n                  \"name\": \"stake\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"unstakeDelaySec\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"structIStakeManager.StakeInfo\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"structIEntryPoint.AggregatorStakeInfo\",\n          \"type\": \"tuple\"\n        }\n      ]\n    },\n    {\n      \"name\": \"AccountDeployed\",\n      \"anonymous\": false,\n      \"type\": \"event\",\n      \"inputs\": [\n        {\n          \"name\": \"userOpHash\",\n          \"internalType\": \"bytes32\",\n          \"type\": \"bytes32\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"sender\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"factory\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": false\n        },\n        {\n          \"name\": \"paymaster\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"BeforeExecution\",\n      \"anonymous\": false,\n      \"type\": \"event\",\n      \"inputs\": []\n    },\n    {\n      \"name\": \"Deposited\",\n      \"anonymous\": false,\n      \"type\": \"event\",\n      \"inputs\": [\n        {\n          \"name\": \"account\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"totalDeposit\",\n          \"internalType\": \"uint256\",\n          \"type\": \"uint256\",\n          \"indexed\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"SignatureAggregatorChanged\",\n      \"anonymous\": false,\n      \"type\": \"event\",\n      \"inputs\": [\n        {\n          \"name\": \"aggregator\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": true\n        }\n      ]\n    },\n    {\n      \"name\": \"StakeLocked\",\n      \"anonymous\": false,\n      \"type\": \"event\",\n      \"inputs\": [\n        {\n          \"name\": \"account\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"totalStaked\",\n          \"internalType\": \"uint256\",\n          \"type\": \"uint256\",\n          \"indexed\": false\n        },\n        {\n          \"name\": \"unstakeDelaySec\",\n          \"internalType\": \"uint256\",\n          \"type\": \"uint256\",\n          \"indexed\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"StakeUnlocked\",\n      \"anonymous\": false,\n      \"type\": \"event\",\n      \"inputs\": [\n        {\n          \"name\": \"account\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"withdrawTime\",\n          \"internalType\": \"uint256\",\n          \"type\": \"uint256\",\n          \"indexed\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"StakeWithdrawn\",\n      \"anonymous\": false,\n      \"type\": \"event\",\n      \"inputs\": [\n        {\n          \"name\": \"account\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"withdrawAddress\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": false\n        },\n        {\n          \"name\": \"amount\",\n          \"internalType\": \"uint256\",\n          \"type\": \"uint256\",\n          \"indexed\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"UserOperationEvent\",\n      \"anonymous\": false,\n      \"type\": \"event\",\n      \"inputs\": [\n        {\n          \"name\": \"userOpHash\",\n          \"internalType\": \"bytes32\",\n          \"type\": \"bytes32\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"sender\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"paymaster\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"nonce\",\n          \"internalType\": \"uint256\",\n          \"type\": \"uint256\",\n          \"indexed\": false\n        },\n        {\n          \"name\": \"success\",\n          \"internalType\": \"bool\",\n          \"type\": \"bool\",\n          \"indexed\": false\n        },\n        {\n          \"name\": \"actualGasCost\",\n          \"internalType\": \"uint256\",\n          \"type\": \"uint256\",\n          \"indexed\": false\n        },\n        {\n          \"name\": \"actualGasUsed\",\n          \"internalType\": \"uint256\",\n          \"type\": \"uint256\",\n          \"indexed\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"UserOperationRevertReason\",\n      \"anonymous\": false,\n      \"type\": \"event\",\n      \"inputs\": [\n        {\n          \"name\": \"userOpHash\",\n          \"internalType\": \"bytes32\",\n          \"type\": \"bytes32\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"sender\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"nonce\",\n          \"internalType\": \"uint256\",\n          \"type\": \"uint256\",\n          \"indexed\": false\n        },\n        {\n          \"name\": \"revertReason\",\n          \"internalType\": \"bytes\",\n          \"type\": \"bytes\",\n          \"indexed\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"Withdrawn\",\n      \"anonymous\": false,\n      \"type\": \"event\",\n      \"inputs\": [\n        {\n          \"name\": \"account\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": true\n        },\n        {\n          \"name\": \"withdrawAddress\",\n          \"internalType\": \"address\",\n          \"type\": \"address\",\n          \"indexed\": false\n        },\n        {\n          \"name\": \"amount\",\n          \"internalType\": \"uint256\",\n          \"type\": \"uint256\",\n          \"indexed\": false\n        }\n      ]\n    },\n    {\n      \"name\": \"SIG_VALIDATION_FAILED\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"inputs\": []\n    },\n    {\n      \"name\": \"_validateSenderAndPaymaster\",\n      \"outputs\": [],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"inputs\": [\n        { \"name\": \"initCode\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n        { \"name\": \"sender\", \"type\": \"address\", \"internalType\": \"address\" },\n        { \"name\": \"paymasterAndData\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n      ]\n    },\n    {\n      \"name\": \"addStake\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        {\n          \"name\": \"unstakeDelaySec\",\n          \"type\": \"uint32\",\n          \"internalType\": \"uint32\"\n        }\n      ]\n    },\n    {\n      \"name\": \"balanceOf\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"inputs\": [\n        { \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }\n      ]\n    },\n    {\n      \"name\": \"depositTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        { \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }\n      ]\n    },\n    {\n      \"name\": \"deposits\",\n      \"outputs\": [\n        { \"name\": \"deposit\", \"type\": \"uint112\", \"internalType\": \"uint112\" },\n        { \"name\": \"staked\", \"type\": \"bool\", \"internalType\": \"bool\" },\n        { \"name\": \"stake\", \"type\": \"uint112\", \"internalType\": \"uint112\" },\n        {\n          \"name\": \"unstakeDelaySec\",\n          \"type\": \"uint32\",\n          \"internalType\": \"uint32\"\n        },\n        { \"name\": \"withdrawTime\", \"type\": \"uint48\", \"internalType\": \"uint48\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"inputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }]\n    },\n    {\n      \"name\": \"getDepositInfo\",\n      \"outputs\": [\n        {\n          \"name\": \"info\",\n          \"components\": [\n            { \"name\": \"deposit\", \"type\": \"uint112\", \"internalType\": \"uint112\" },\n            { \"name\": \"staked\", \"type\": \"bool\", \"internalType\": \"bool\" },\n            { \"name\": \"stake\", \"type\": \"uint112\", \"internalType\": \"uint112\" },\n            {\n              \"name\": \"unstakeDelaySec\",\n              \"type\": \"uint32\",\n              \"internalType\": \"uint32\"\n            },\n            {\n              \"name\": \"withdrawTime\",\n              \"type\": \"uint48\",\n              \"internalType\": \"uint48\"\n            }\n          ],\n          \"internalType\": \"structIStakeManager.DepositInfo\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"inputs\": [\n        { \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }\n      ]\n    },\n    {\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        { \"name\": \"nonce\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"inputs\": [\n        { \"name\": \"sender\", \"type\": \"address\", \"internalType\": \"address\" },\n        { \"name\": \"key\", \"type\": \"uint192\", \"internalType\": \"uint192\" }\n      ]\n    },\n    {\n      \"name\": \"getSenderAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        { \"name\": \"initCode\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n      ]\n    },\n    {\n      \"name\": \"getUserOpHash\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"inputs\": [\n        {\n          \"name\": \"userOp\",\n          \"components\": [\n            { \"name\": \"sender\", \"type\": \"address\", \"internalType\": \"address\" },\n            { \"name\": \"nonce\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            { \"name\": \"initCode\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n            { \"name\": \"callData\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n            {\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\",\n              \"internalType\": \"bytes\"\n            },\n            { \"name\": \"signature\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n          ],\n          \"internalType\": \"structUserOperation\",\n          \"type\": \"tuple\"\n        }\n      ]\n    },\n    {\n      \"name\": \"handleAggregatedOps\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        {\n          \"name\": \"opsPerAggregator\",\n          \"components\": [\n            {\n              \"name\": \"userOps\",\n              \"components\": [\n                {\n                  \"name\": \"sender\",\n                  \"type\": \"address\",\n                  \"internalType\": \"address\"\n                },\n                {\n                  \"name\": \"nonce\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"initCode\",\n                  \"type\": \"bytes\",\n                  \"internalType\": \"bytes\"\n                },\n                {\n                  \"name\": \"callData\",\n                  \"type\": \"bytes\",\n                  \"internalType\": \"bytes\"\n                },\n                {\n                  \"name\": \"callGasLimit\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"verificationGasLimit\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"preVerificationGas\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"maxFeePerGas\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"maxPriorityFeePerGas\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"paymasterAndData\",\n                  \"type\": \"bytes\",\n                  \"internalType\": \"bytes\"\n                },\n                {\n                  \"name\": \"signature\",\n                  \"type\": \"bytes\",\n                  \"internalType\": \"bytes\"\n                }\n              ],\n              \"internalType\": \"structUserOperation[]\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"name\": \"aggregator\",\n              \"type\": \"address\",\n              \"internalType\": \"contractIAggregator\"\n            },\n            { \"name\": \"signature\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n          ],\n          \"internalType\": \"structIEntryPoint.UserOpsPerAggregator[]\",\n          \"type\": \"tuple[]\"\n        },\n        {\n          \"name\": \"beneficiary\",\n          \"type\": \"address\",\n          \"internalType\": \"addresspayable\"\n        }\n      ]\n    },\n    {\n      \"name\": \"handleOps\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        {\n          \"name\": \"ops\",\n          \"components\": [\n            { \"name\": \"sender\", \"type\": \"address\", \"internalType\": \"address\" },\n            { \"name\": \"nonce\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            { \"name\": \"initCode\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n            { \"name\": \"callData\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n            {\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\",\n              \"internalType\": \"bytes\"\n            },\n            { \"name\": \"signature\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n          ],\n          \"internalType\": \"structUserOperation[]\",\n          \"type\": \"tuple[]\"\n        },\n        {\n          \"name\": \"beneficiary\",\n          \"type\": \"address\",\n          \"internalType\": \"addresspayable\"\n        }\n      ]\n    },\n    {\n      \"name\": \"incrementNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        { \"name\": \"key\", \"type\": \"uint192\", \"internalType\": \"uint192\" }\n      ]\n    },\n    {\n      \"name\": \"innerHandleOp\",\n      \"outputs\": [\n        {\n          \"name\": \"actualGasCost\",\n          \"type\": \"uint256\",\n          \"internalType\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        { \"name\": \"callData\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n        {\n          \"name\": \"opInfo\",\n          \"components\": [\n            {\n              \"name\": \"mUserOp\",\n              \"components\": [\n                {\n                  \"name\": \"sender\",\n                  \"type\": \"address\",\n                  \"internalType\": \"address\"\n                },\n                {\n                  \"name\": \"nonce\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"callGasLimit\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"verificationGasLimit\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"preVerificationGas\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"paymaster\",\n                  \"type\": \"address\",\n                  \"internalType\": \"address\"\n                },\n                {\n                  \"name\": \"maxFeePerGas\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                },\n                {\n                  \"name\": \"maxPriorityFeePerGas\",\n                  \"type\": \"uint256\",\n                  \"internalType\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"structEntryPoint.MemoryUserOp\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"name\": \"userOpHash\",\n              \"type\": \"bytes32\",\n              \"internalType\": \"bytes32\"\n            },\n            { \"name\": \"prefund\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            {\n              \"name\": \"contextOffset\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            { \"name\": \"preOpGas\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n          ],\n          \"internalType\": \"structEntryPoint.UserOpInfo\",\n          \"type\": \"tuple\"\n        },\n        { \"name\": \"context\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n      ]\n    },\n    {\n      \"name\": \"nonceSequenceNumber\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"inputs\": [\n        { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n        { \"name\": \"\", \"type\": \"uint192\", \"internalType\": \"uint192\" }\n      ]\n    },\n    {\n      \"name\": \"simulateHandleOp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        {\n          \"name\": \"op\",\n          \"components\": [\n            { \"name\": \"sender\", \"type\": \"address\", \"internalType\": \"address\" },\n            { \"name\": \"nonce\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            { \"name\": \"initCode\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n            { \"name\": \"callData\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n            {\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\",\n              \"internalType\": \"bytes\"\n            },\n            { \"name\": \"signature\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n          ],\n          \"internalType\": \"structUserOperation\",\n          \"type\": \"tuple\"\n        },\n        { \"name\": \"target\", \"type\": \"address\", \"internalType\": \"address\" },\n        { \"name\": \"targetCallData\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n      ]\n    },\n    {\n      \"name\": \"simulateValidation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        {\n          \"name\": \"userOp\",\n          \"components\": [\n            { \"name\": \"sender\", \"type\": \"address\", \"internalType\": \"address\" },\n            { \"name\": \"nonce\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n            { \"name\": \"initCode\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n            { \"name\": \"callData\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n            {\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\",\n              \"internalType\": \"uint256\"\n            },\n            {\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\",\n              \"internalType\": \"bytes\"\n            },\n            { \"name\": \"signature\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n          ],\n          \"internalType\": \"structUserOperation\",\n          \"type\": \"tuple\"\n        }\n      ]\n    },\n    {\n      \"name\": \"unlockStake\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\",\n      \"inputs\": []\n    },\n    {\n      \"name\": \"withdrawStake\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        {\n          \"name\": \"withdrawAddress\",\n          \"type\": \"address\",\n          \"internalType\": \"addresspayable\"\n        }\n      ]\n    },\n    {\n      \"name\": \"withdrawTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\",\n      \"inputs\": [\n        {\n          \"name\": \"withdrawAddress\",\n          \"type\": \"address\",\n          \"internalType\": \"addresspayable\"\n        },\n        {\n          \"name\": \"withdrawAmount\",\n          \"type\": \"uint256\",\n          \"internalType\": \"uint256\"\n        }\n      ]\n    },\n    { \"type\": \"receive\", \"stateMutability\": \"payable\" }\n  ],\n  \"addresses\": {\n    \"1\": \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n    \"5\": \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n    \"10\": \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n    \"137\": \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n    \"5000\": \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n    \"8453\": \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n    \"36865\": \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n    \"42161\": \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n    \"421614\": \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n    \"534352\": \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\"\n  }\n}\n","{\n  \"name\": \"EstimationPaymaster\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEntryPoint\",\n          \"name\": \"_entryPoint\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferStarted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"contract IEntryPoint\",\n          \"name\": \"entryPoint\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"PaymasterCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"acceptOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"addDepositTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint32\",\n          \"name\": \"unstakeDelaySec\",\n          \"type\": \"uint32\"\n        }\n      ],\n      \"name\": \"addStakeToEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"name\": \"balances\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"entryPoint\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEntryPoint\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pendingOwner\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"enum IPaymaster.PostOpMode\",\n          \"name\": \"mode\",\n          \"type\": \"uint8\"\n        },\n        { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"actualGasCost\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"postOp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unlockStakeFromEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n            { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n            { \"internalType\": \"bytes\", \"name\": \"initCode\", \"type\": \"bytes\" },\n            { \"internalType\": \"bytes\", \"name\": \"callData\", \"type\": \"bytes\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\"\n            },\n            { \"internalType\": \"bytes\", \"name\": \"signature\", \"type\": \"bytes\" }\n          ],\n          \"internalType\": \"struct UserOperation\",\n          \"name\": \"userOp\",\n          \"type\": \"tuple\"\n        },\n        { \"internalType\": \"bytes32\", \"name\": \"userOpHash\", \"type\": \"bytes32\" },\n        { \"internalType\": \"uint256\", \"name\": \"maxCost\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"validatePaymasterUserOp\",\n      \"outputs\": [\n        { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n        { \"internalType\": \"uint256\", \"name\": \"sigTimeRange\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"withdrawDepositTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"withdrawAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"withdrawStakeFromEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"addresses\": {\n    \"1\": \"0xe1B7B9d686948745a6425DF97a6480f5Bf75e508\",\n    \"5\": \"0x85c7e575Ee64A30e15eB76cCEc9bdD7cc59A8D5C\",\n    \"10\": \"0x1B374E0b0bc3b8F1613a67C0b805Bc84e66E4F1F\",\n    \"137\": \"0xf6355d83c559f0Ff373C7E0A8FD6c014076E1118\",\n    \"8453\": \"0x3053451A384524C57dAF9420f8d8b8464555E1e8\",\n    \"36865\": \"0xe1B7B9d686948745a6425DF97a6480f5Bf75e508\",\n    \"42161\": \"0x5ceb145d53841d2f6255fE668e5eBbd286B2C862\",\n    \"421614\": \"0xaB9893703641d1B871B0F47f597CcAD7f922503E\",\n    \"5000\": \"0x091a5301c118A8832B4574e8B88c94A14343eb52\",\n    \"534352\": \"0x5ceb145d53841d2f6255fE668e5eBbd286B2C862\"\n  }\n}\n","{\n  \"name\": \"FeePercentOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Erc20Withdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"EthWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint120\",\n          \"name\": \"feepercent\",\n          \"type\": \"uint120\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint8\",\n          \"name\": \"decimals\",\n          \"type\": \"uint8\"\n        }\n      ],\n      \"name\": \"FeePercentSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferStarted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"acceptOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"decimals\",\n      \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"feepercent\",\n      \"outputs\": [{ \"internalType\": \"uint120\", \"name\": \"\", \"type\": \"uint120\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"getFee\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"funCut\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"recipCut\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pendingOwner\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint120\", \"name\": \"_feepercent\", \"type\": \"uint120\" },\n        { \"internalType\": \"uint8\", \"name\": \"_decimals\", \"type\": \"uint8\" }\n      ],\n      \"name\": \"setValues\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"withdrawErc\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"withdrawEth\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    { \"stateMutability\": \"payable\", \"type\": \"receive\" }\n  ],\n  \"addresses\": {\n    \"1\": \"0x118c66c1D05F80784E164541b1556045c9018261\",\n    \"5\": \"0xDDcD7DF0558536472eD448846C6608bace86f7aC\",\n    \"10\": \"0xDDcD7DF0558536472eD448846C6608bace86f7aC\",\n    \"137\": \"0xDDcD7DF0558536472eD448846C6608bace86f7aC\",\n    \"8453\": \"0xDDcD7DF0558536472eD448846C6608bace86f7aC\",\n    \"36865\": \"0x118c66c1D05F80784E164541b1556045c9018261\",\n    \"42161\": \"0xDDcD7DF0558536472eD448846C6608bace86f7aC\",\n    \"421614\": \"0x327f55ECAAa8A38BA71a1594EEFDc96F8f1b7f28\",\n    \"5000\": \"0x00422527E4b6A898F3CDA4f43Dd456daD7633c4D\",\n    \"534352\": \"0x1CaD2167bd7C42aF6ED8E2079558D43A8fC72f0b\"\n  }\n}\n","{\n  \"name\": \"FunWallet\",\n  \"abi\": [\n    { \"inputs\": [], \"stateMutability\": \"nonpayable\", \"type\": \"constructor\" },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"previousAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"beacon\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"BeaconUpgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositToEntryPoint\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newEntryPoint\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"EntryPointChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint8\",\n          \"name\": \"version\",\n          \"type\": \"uint8\"\n        }\n      ],\n      \"name\": \"Initialized\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"dest\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"TransferERC20\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"implementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Upgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"userOpHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"components\": [\n            { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n            { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n            { \"internalType\": \"bytes\", \"name\": \"initCode\", \"type\": \"bytes\" },\n            { \"internalType\": \"bytes\", \"name\": \"callData\", \"type\": \"bytes\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\"\n            },\n            { \"internalType\": \"bytes\", \"name\": \"signature\", \"type\": \"bytes\" }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"structUserOperation\",\n          \"name\": \"userOp\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"sigTimeRange\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"missingAccountFunds\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"UserOpValidated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"withdrawAddress\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"WithdrawFromEntryPoint\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"EIP712_DOMAIN\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PERMIT_TYPEHASH\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"VERSION\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"validation\", \"type\": \"address\" },\n        { \"internalType\": \"bytes\", \"name\": \"initdata\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"addValidation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"depositToEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"entryPoint\",\n      \"outputs\": [\n        { \"internalType\": \"contractIEntryPoint\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"dest\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"execFromEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"dest\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" },\n        {\n          \"components\": [\n            { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n            {\n              \"internalType\": \"addresspayable\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n          ],\n          \"internalType\": \"structUserOperationFee\",\n          \"name\": \"feedata\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"execFromEntryPointWithFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"dest\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"execFromModule\",\n      \"outputs\": [{ \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address[]\", \"name\": \"dest\", \"type\": \"address[]\" },\n        { \"internalType\": \"uint256[]\", \"name\": \"value\", \"type\": \"uint256[]\" },\n        { \"internalType\": \"bytes[]\", \"name\": \"data\", \"type\": \"bytes[]\" }\n      ],\n      \"name\": \"executeBatch\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"factory\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contractIFunWalletFactory\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"validation\", \"type\": \"address\" }\n      ],\n      \"name\": \"getNextValidation\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"uint32\", \"name\": \"key\", \"type\": \"uint32\" }],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"out\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"getPermitHash\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"key\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"getState\",\n      \"outputs\": [{ \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"key\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"getState32\",\n      \"outputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"out\", \"type\": \"bytes32\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"key\", \"type\": \"bytes32\" },\n        { \"internalType\": \"address\", \"name\": \"addr\", \"type\": \"address\" }\n      ],\n      \"name\": \"getState32WithAddr\",\n      \"outputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"out\", \"type\": \"bytes32\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getValidationCount\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getValidations\",\n      \"outputs\": [\n        { \"internalType\": \"address[]\", \"name\": \"\", \"type\": \"address[]\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes\", \"name\": \"validationData\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"initValidations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contractIEntryPoint\",\n          \"name\": \"_newEntryPoint\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"validationInitData\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"target\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" },\n        { \"internalType\": \"bytes\", \"name\": \"signature\", \"type\": \"bytes\" },\n        { \"internalType\": \"bytes32\", \"name\": \"_hash\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"isValidAction\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"out\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"validation\", \"type\": \"address\" }\n      ],\n      \"name\": \"isValidation\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n        { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" },\n        { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" },\n        { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"onERC1155BatchReceived\",\n      \"outputs\": [{ \"internalType\": \"bytes4\", \"name\": \"\", \"type\": \"bytes4\" }],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"onERC1155Received\",\n      \"outputs\": [{ \"internalType\": \"bytes4\", \"name\": \"\", \"type\": \"bytes4\" }],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"onERC721Received\",\n      \"outputs\": [{ \"internalType\": \"bytes4\", \"name\": \"\", \"type\": \"bytes4\" }],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"uint32\", \"name\": \"\", \"type\": \"uint32\" }],\n      \"name\": \"permitNonces\",\n      \"outputs\": [{ \"internalType\": \"uint224\", \"name\": \"\", \"type\": \"uint224\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"sig\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"permitTransfer\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"proxiableUUID\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"prevValidation\",\n          \"type\": \"address\"\n        },\n        { \"internalType\": \"address\", \"name\": \"validation\", \"type\": \"address\" }\n      ],\n      \"name\": \"removeValidation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"salt\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"key\", \"type\": \"bytes32\" },\n        { \"internalType\": \"bytes\", \"name\": \"val\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"setState\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"key\", \"type\": \"bytes32\" },\n        { \"internalType\": \"bytes32\", \"name\": \"val\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"setState32\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes4\", \"name\": \"interfaceId\", \"type\": \"bytes4\" }\n      ],\n      \"name\": \"supportsInterface\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" },\n        { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"tokensReceived\",\n      \"outputs\": [],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"dest\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"transferErc20\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contractIEntryPoint\",\n          \"name\": \"_newEntryPoint\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"prevValidation\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"oldValidation\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newValidation\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"newValidationInitData\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"updateValidation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"upgradeTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        },\n        { \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"upgradeToAndCall\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"sig\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"validatePermit\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n            { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n            { \"internalType\": \"bytes\", \"name\": \"initCode\", \"type\": \"bytes\" },\n            { \"internalType\": \"bytes\", \"name\": \"callData\", \"type\": \"bytes\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\"\n            },\n            { \"internalType\": \"bytes\", \"name\": \"signature\", \"type\": \"bytes\" }\n          ],\n          \"internalType\": \"structUserOperation\",\n          \"name\": \"userOp\",\n          \"type\": \"tuple\"\n        },\n        { \"internalType\": \"bytes32\", \"name\": \"userOpHash\", \"type\": \"bytes32\" },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"missingAccountFunds\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"validateUserOp\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"sigTimeRange\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"addresspayable\",\n          \"name\": \"withdrawAddress\",\n          \"type\": \"address\"\n        },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"withdrawFromEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    { \"stateMutability\": \"payable\", \"type\": \"receive\" }\n  ],\n  \"transactionHash\": \"0x3cb26c07f0cb0d58012d0656fab8f35d7b930a991eb898dcce9e656182884531\",\n  \"addresses\": {\n    \"1\": \"0xc42F0Eb7FFBAeAce750CEfE83f32c5DBC219681D\",\n    \"5\": \"0xc42F0Eb7FFBAeAce750CEfE83f32c5DBC219681D\",\n    \"10\": \"0xc42F0Eb7FFBAeAce750CEfE83f32c5DBC219681D\",\n    \"137\": \"0xc42F0Eb7FFBAeAce750CEfE83f32c5DBC219681D\",\n    \"8453\": \"0xc42F0Eb7FFBAeAce750CEfE83f32c5DBC219681D\",\n    \"36865\": \"0xc42F0Eb7FFBAeAce750CEfE83f32c5DBC219681D\",\n    \"42161\": \"0xc42F0Eb7FFBAeAce750CEfE83f32c5DBC219681D\",\n    \"421614\": \"0x502077DCE504514e3e8f35706525AaC51D6e9852\",\n    \"5000\": \"0x645E1F9102d1d5eA60d05d11B5D90Fb8c0c92169\",\n    \"534352\": \"0xA6952BaD754D6d959216D89fcA0D695fED01b7b5\"\n  }\n}\n","{\n  \"name\": \"FunWalletFactory\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contractICreate3Deployer\",\n          \"name\": \"_deployer\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_funWalletImpAddress\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"addresspayable\",\n          \"name\": \"_feeOracle\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contractIWalletInit\",\n          \"name\": \"_walletInit\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contractIEntryPoint\",\n          \"name\": \"_entryPoint\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"funWallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"implementation\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes\",\n          \"name\": \"initializerCallData\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"AccountCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"feeOracle\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"FeeOracleSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint32\",\n          \"name\": \"unstakeDelaySec\",\n          \"type\": \"uint32\"\n        }\n      ],\n      \"name\": \"addStakeToEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"initializerCallData\",\n          \"type\": \"bytes\"\n        },\n        { \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"createAccount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contractIFunWallet\",\n          \"name\": \"funWallet\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"deployer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contractICreate3Deployer\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"entryPoint\",\n      \"outputs\": [\n        { \"internalType\": \"contractIEntryPoint\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"feeOracle\",\n      \"outputs\": [\n        { \"internalType\": \"addresspayable\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"funWalletImplementation\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" }],\n      \"name\": \"getAddress\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getFeeOracle\",\n      \"outputs\": [\n        { \"internalType\": \"addresspayable\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"moduleId\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"addresspayable\",\n          \"name\": \"_feeOracle\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setFeeOracle\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unlockStakeFromEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"salt\", \"type\": \"bytes32\" },\n        { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n      ],\n      \"name\": \"verifyDeployedFrom\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"walletInit\",\n      \"outputs\": [\n        { \"internalType\": \"contractIWalletInit\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"addresspayable\",\n          \"name\": \"withdrawAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"withdrawStakeFromEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"addresses\": {\n    \"1\": \"0xBADa4B9bdc249B788A6247e4a8a9158eD0b3e504\",\n    \"5\": \"0xBADa4B9bdc249B788A6247e4a8a9158eD0b3e504\",\n    \"10\": \"0xBADa4B9bdc249B788A6247e4a8a9158eD0b3e504\",\n    \"137\": \"0xBADa4B9bdc249B788A6247e4a8a9158eD0b3e504\",\n    \"8453\": \"0xBADa4B9bdc249B788A6247e4a8a9158eD0b3e504\",\n    \"36865\": \"0xBADa4B9bdc249B788A6247e4a8a9158eD0b3e504\",\n    \"42161\": \"0xBADa4B9bdc249B788A6247e4a8a9158eD0b3e504\",\n    \"421614\": \"0x177D6C1Ae1dAb06Ac056EE2A0C89aDE0f723022d\",\n    \"5000\": \"0x55CbD830841299a398958bC0a43Be2B31B8CF73D\",\n    \"534352\": \"0xa839F61b1f6e19ecD0f0aCFE61Bc14B1A49b8FB9\"\n  }\n}\n","{\n  \"name\": \"GaslessPaymaster\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contractIEntryPoint\",\n          \"name\": \"_entryPoint\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"AddDepositTo\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes[]\"\n        }\n      ],\n      \"name\": \"BatchActions\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"locker\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"LockDeposit\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferStarted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"contractIEntryPoint\",\n          \"name\": \"entryPoint\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"PaymasterCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"opHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"sponsorCost\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"PostOpGasPaid\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"mode\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"SetListMode\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"mode\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"SetSpenderBlacklistMode\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"mode\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"SetSpenderWhitelistMode\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"locker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"unlockBlockNum\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"UnlockDepositAfter\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"WithdrawDepositTo\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"COST_OF_POST\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"VERSION\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"acceptOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"addDepositTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint32\",\n          \"name\": \"unstakeDelaySec\",\n          \"type\": \"uint32\"\n        }\n      ],\n      \"name\": \"addStakeToEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes[]\", \"name\": \"data\", \"type\": \"bytes[]\" }\n      ],\n      \"name\": \"batchActions\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"entryPoint\",\n      \"outputs\": [\n        { \"internalType\": \"contractIEntryPoint\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"getBalance\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n      ],\n      \"name\": \"getListMode\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"getSpenderBlacklistMode\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"getSpenderWhitelistMode\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n      ],\n      \"name\": \"getUnlockBlock\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"lockDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pendingOwner\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"enumIPaymaster.PostOpMode\",\n          \"name\": \"mode\",\n          \"type\": \"uint8\"\n        },\n        { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"actualGasCost\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"postOp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"bool\", \"name\": \"mode\", \"type\": \"bool\" }],\n      \"name\": \"setListMode\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"bool\", \"name\": \"mode\", \"type\": \"bool\" }\n      ],\n      \"name\": \"setSpenderBlacklistMode\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"bool\", \"name\": \"mode\", \"type\": \"bool\" }\n      ],\n      \"name\": \"setSpenderWhitelistMode\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"num\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"unlockDepositAfter\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unlockStakeFromEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n            { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n            { \"internalType\": \"bytes\", \"name\": \"initCode\", \"type\": \"bytes\" },\n            { \"internalType\": \"bytes\", \"name\": \"callData\", \"type\": \"bytes\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\"\n            },\n            { \"internalType\": \"bytes\", \"name\": \"signature\", \"type\": \"bytes\" }\n          ],\n          \"internalType\": \"structUserOperation\",\n          \"name\": \"userOp\",\n          \"type\": \"tuple\"\n        },\n        { \"internalType\": \"bytes32\", \"name\": \"userOpHash\", \"type\": \"bytes32\" },\n        { \"internalType\": \"uint256\", \"name\": \"maxCost\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"validatePaymasterUserOp\",\n      \"outputs\": [\n        { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n        { \"internalType\": \"uint256\", \"name\": \"sigTimeRange\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"addresspayable\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"withdrawDepositTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"addresspayable\",\n          \"name\": \"withdrawAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"withdrawStakeFromEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"addresses\": {\n    \"1\": \"0x670E428B165350c77AC7523854995486C1796ae3\",\n    \"5\": \"0xA6952BaD754D6d959216D89fcA0D695fED01b7b5\",\n    \"10\": \"0xA6952BaD754D6d959216D89fcA0D695fED01b7b5\",\n    \"137\": \"0xA6952BaD754D6d959216D89fcA0D695fED01b7b5\",\n    \"8453\": \"0x70795B38d1d077DA1c255f4d004Df657aEc98915\",\n    \"36865\": \"0x670E428B165350c77AC7523854995486C1796ae3\",\n    \"42161\": \"0xA0B0c6590f43951d4112092640eFb702d7b15FDD\",\n    \"421614\": \"0x3C42EfF85d0DB160c339E8c6Df78C7a4a0A6AC51\",\n    \"5000\": \"0xEe628ba7185D54dDcF66D85cad375DC661BEd67B\",\n    \"534352\": \"0xC695a41a8E1B2D396B0Ad93a88DeD975e8dBAcC8\"\n  }\n}\n","{\n  \"abi\": [\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_wstETH\", \"type\": \"address\" },\n        { \"internalType\": \"string\", \"name\": \"_name\", \"type\": \"string\" },\n        { \"internalType\": \"string\", \"name\": \"_symbol\", \"type\": \"string\" }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    { \"inputs\": [], \"name\": \"AdminZeroAddress\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"ApprovalToOwner\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"ApproveToCaller\", \"type\": \"error\" },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_firstArrayLength\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_secondArrayLength\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ArraysLengthMismatch\",\n      \"type\": \"error\"\n    },\n    { \"inputs\": [], \"name\": \"BatchesAreNotSorted\", \"type\": \"error\" },\n    {\n      \"inputs\": [],\n      \"name\": \"CantSendValueRecipientMayHaveReverted\",\n      \"type\": \"error\"\n    },\n    { \"inputs\": [], \"name\": \"EmptyBatches\", \"type\": \"error\" },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidContractVersionIncrement\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"_hint\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"InvalidHint\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"name\": \"InvalidOwnerAddress\",\n      \"type\": \"error\"\n    },\n    { \"inputs\": [], \"name\": \"InvalidReportTimestamp\", \"type\": \"error\" },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"InvalidRequestId\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"startId\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"endId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"InvalidRequestIdRange\",\n      \"type\": \"error\"\n    },\n    { \"inputs\": [], \"name\": \"InvalidState\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"NonZeroContractVersionOnInit\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"NotEnoughEther\", \"type\": \"error\" },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_sender\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"_owner\", \"type\": \"address\" }\n      ],\n      \"name\": \"NotOwner\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n      ],\n      \"name\": \"NotOwnerOrApproved\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n      ],\n      \"name\": \"NotOwnerOrApprovedForAll\",\n      \"type\": \"error\"\n    },\n    { \"inputs\": [], \"name\": \"PauseUntilMustBeInFuture\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"PausedExpected\", \"type\": \"error\" },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"RequestAlreadyClaimed\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amountOfStETH\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"RequestAmountTooLarge\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amountOfStETH\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"RequestAmountTooSmall\",\n      \"type\": \"error\"\n    },\n    { \"inputs\": [], \"name\": \"RequestIdsNotSorted\", \"type\": \"error\" },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"RequestNotFoundOrNotFinalized\",\n      \"type\": \"error\"\n    },\n    { \"inputs\": [], \"name\": \"ResumedExpected\", \"type\": \"error\" },\n    {\n      \"inputs\": [{ \"internalType\": \"string\", \"name\": \"str\", \"type\": \"string\" }],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"sent\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"maxExpected\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"TooMuchEtherToFinalize\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"realOwner\", \"type\": \"address\" }\n      ],\n      \"name\": \"TransferFromIncorrectOwner\",\n      \"type\": \"error\"\n    },\n    { \"inputs\": [], \"name\": \"TransferFromZeroAddress\", \"type\": \"error\" },\n    {\n      \"inputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"name\": \"TransferToNonIERC721Receiver\",\n      \"type\": \"error\"\n    },\n    { \"inputs\": [], \"name\": \"TransferToThemselves\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"TransferToZeroAddress\", \"type\": \"error\" },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"expected\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"received\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"UnexpectedContractVersion\",\n      \"type\": \"error\"\n    },\n    { \"inputs\": [], \"name\": \"ZeroAmountOfETH\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"ZeroMetadata\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"ZeroPauseDuration\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"ZeroRecipient\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"ZeroShareRate\", \"type\": \"error\" },\n    { \"inputs\": [], \"name\": \"ZeroTimestamp\", \"type\": \"error\" },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"approved\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"operator\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"approved\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"ApprovalForAll\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"baseURI\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"BaseURISet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"_fromTokenId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"_toTokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BatchMetadataUpdate\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"BunkerModeDisabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"_sinceTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BunkerModeEnabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"version\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ContractVersionSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"_admin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"InitializedV1\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"_tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MetadataUpdate\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"nftDescriptorAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NftDescriptorAddressSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"duration\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Paused\",\n      \"type\": \"event\"\n    },\n    { \"anonymous\": false, \"inputs\": [], \"name\": \"Resumed\", \"type\": \"event\" },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"previousAdminRole\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"newAdminRole\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"RoleAdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleGranted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleRevoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"requestId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"receiver\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amountOfETH\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"WithdrawalClaimed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"requestId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"requestor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amountOfStETH\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amountOfShares\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"WithdrawalRequested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"from\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"to\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amountOfETHLocked\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"sharesToBurn\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"WithdrawalsFinalized\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"BUNKER_MODE_DISABLED_TIMESTAMP\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DEFAULT_ADMIN_ROLE\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"FINALIZE_ROLE\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MANAGE_TOKEN_URI_ROLE\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_BATCHES_LENGTH\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_STETH_WITHDRAWAL_AMOUNT\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MIN_STETH_WITHDRAWAL_AMOUNT\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ORACLE_ROLE\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PAUSE_INFINITELY\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PAUSE_ROLE\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"RESUME_ROLE\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"STETH\",\n      \"outputs\": [\n        { \"internalType\": \"contractIStETH\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WSTETH\",\n      \"outputs\": [\n        { \"internalType\": \"contractIWstETH\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_owner\", \"type\": \"address\" }\n      ],\n      \"name\": \"balanceOf\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bunkerModeSinceTimestamp\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxShareRate\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxTimestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxRequestsPerCall\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingEthBudget\",\n              \"type\": \"uint256\"\n            },\n            { \"internalType\": \"bool\", \"name\": \"finished\", \"type\": \"bool\" },\n            {\n              \"internalType\": \"uint256[36]\",\n              \"name\": \"batches\",\n              \"type\": \"uint256[36]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"batchesLength\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structWithdrawalQueueBase.BatchesCalculationState\",\n          \"name\": \"_state\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"calculateFinalizationBatches\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingEthBudget\",\n              \"type\": \"uint256\"\n            },\n            { \"internalType\": \"bool\", \"name\": \"finished\", \"type\": \"bool\" },\n            {\n              \"internalType\": \"uint256[36]\",\n              \"name\": \"batches\",\n              \"type\": \"uint256[36]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"batchesLength\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structWithdrawalQueueBase.BatchesCalculationState\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"claimWithdrawal\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_requestIds\",\n          \"type\": \"uint256[]\"\n        },\n        { \"internalType\": \"uint256[]\", \"name\": \"_hints\", \"type\": \"uint256[]\" }\n      ],\n      \"name\": \"claimWithdrawals\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_requestIds\",\n          \"type\": \"uint256[]\"\n        },\n        { \"internalType\": \"uint256[]\", \"name\": \"_hints\", \"type\": \"uint256[]\" },\n        { \"internalType\": \"address\", \"name\": \"_recipient\", \"type\": \"address\" }\n      ],\n      \"name\": \"claimWithdrawalsTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_lastRequestIdToBeFinalized\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxShareRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"finalize\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_requestIds\",\n          \"type\": \"uint256[]\"\n        },\n        { \"internalType\": \"uint256\", \"name\": \"_firstIndex\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"_lastIndex\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"findCheckpointHints\",\n      \"outputs\": [\n        { \"internalType\": \"uint256[]\", \"name\": \"hintIds\", \"type\": \"uint256[]\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"getApproved\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getBaseURI\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_requestIds\",\n          \"type\": \"uint256[]\"\n        },\n        { \"internalType\": \"uint256[]\", \"name\": \"_hints\", \"type\": \"uint256[]\" }\n      ],\n      \"name\": \"getClaimableEther\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"claimableEthValues\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getContractVersion\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getLastCheckpointIndex\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getLastFinalizedRequestId\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getLastRequestId\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getLockedEtherAmount\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getNFTDescriptorAddress\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getResumeSinceTimestamp\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"role\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"getRoleAdmin\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"role\", \"type\": \"bytes32\" },\n        { \"internalType\": \"uint256\", \"name\": \"index\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"getRoleMember\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"role\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"getRoleMemberCount\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_owner\", \"type\": \"address\" }\n      ],\n      \"name\": \"getWithdrawalRequests\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"requestsIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_requestIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getWithdrawalStatus\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amountOfStETH\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amountOfShares\",\n              \"type\": \"uint256\"\n            },\n            { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            { \"internalType\": \"bool\", \"name\": \"isFinalized\", \"type\": \"bool\" },\n            { \"internalType\": \"bool\", \"name\": \"isClaimed\", \"type\": \"bool\" }\n          ],\n          \"internalType\": \"structWithdrawalQueueBase.WithdrawalRequestStatus[]\",\n          \"name\": \"statuses\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"role\", \"type\": \"bytes32\" },\n        { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n      ],\n      \"name\": \"grantRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"role\", \"type\": \"bytes32\" },\n        { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n      ],\n      \"name\": \"hasRole\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_admin\", \"type\": \"address\" }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_owner\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"_operator\", \"type\": \"address\" }\n      ],\n      \"name\": \"isApprovedForAll\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isBunkerModeActive\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isPaused\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bool\", \"name\": \"_isBunkerModeNow\", \"type\": \"bool\" },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bunkerStartTimestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_currentReportTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"onOracleReport\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"ownerOf\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"_duration\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"pauseFor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_pauseUntilInclusive\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"pauseUntil\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_batches\",\n          \"type\": \"uint256[]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxShareRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"prefinalize\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"ethToLock\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"sharesToBurn\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"role\", \"type\": \"bytes32\" },\n        { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n      ],\n      \"name\": \"renounceRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_amounts\",\n          \"type\": \"uint256[]\"\n        },\n        { \"internalType\": \"address\", \"name\": \"_owner\", \"type\": \"address\" }\n      ],\n      \"name\": \"requestWithdrawals\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"requestIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_amounts\",\n          \"type\": \"uint256[]\"\n        },\n        { \"internalType\": \"address\", \"name\": \"_owner\", \"type\": \"address\" },\n        {\n          \"components\": [\n            { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deadline\",\n              \"type\": \"uint256\"\n            },\n            { \"internalType\": \"uint8\", \"name\": \"v\", \"type\": \"uint8\" },\n            { \"internalType\": \"bytes32\", \"name\": \"r\", \"type\": \"bytes32\" },\n            { \"internalType\": \"bytes32\", \"name\": \"s\", \"type\": \"bytes32\" }\n          ],\n          \"internalType\": \"structWithdrawalQueue.PermitInput\",\n          \"name\": \"_permit\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"requestWithdrawalsWithPermit\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"requestIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_amounts\",\n          \"type\": \"uint256[]\"\n        },\n        { \"internalType\": \"address\", \"name\": \"_owner\", \"type\": \"address\" }\n      ],\n      \"name\": \"requestWithdrawalsWstETH\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"requestIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_amounts\",\n          \"type\": \"uint256[]\"\n        },\n        { \"internalType\": \"address\", \"name\": \"_owner\", \"type\": \"address\" },\n        {\n          \"components\": [\n            { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deadline\",\n              \"type\": \"uint256\"\n            },\n            { \"internalType\": \"uint8\", \"name\": \"v\", \"type\": \"uint8\" },\n            { \"internalType\": \"bytes32\", \"name\": \"r\", \"type\": \"bytes32\" },\n            { \"internalType\": \"bytes32\", \"name\": \"s\", \"type\": \"bytes32\" }\n          ],\n          \"internalType\": \"structWithdrawalQueue.PermitInput\",\n          \"name\": \"_permit\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"requestWithdrawalsWstETHWithPermit\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"requestIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"resume\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"role\", \"type\": \"bytes32\" },\n        { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n      ],\n      \"name\": \"revokeRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"_to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"safeTransferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"_to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"_data\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"safeTransferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_operator\", \"type\": \"address\" },\n        { \"internalType\": \"bool\", \"name\": \"_approved\", \"type\": \"bool\" }\n      ],\n      \"name\": \"setApprovalForAll\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"string\", \"name\": \"_baseURI\", \"type\": \"string\" }\n      ],\n      \"name\": \"setBaseURI\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_nftDescriptorAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setNFTDescriptorAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes4\", \"name\": \"interfaceId\", \"type\": \"bytes4\" }\n      ],\n      \"name\": \"supportsInterface\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"tokenURI\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"_to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"_requestId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unfinalizedRequestNumber\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unfinalizedStETH\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n","{\n  \"name\": \"RoleBasedAccessControl\",\n  \"abi\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddTargetWildcard\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RemoveTargetWildcard\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleBasedAccessControlInitialized\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"user\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"RuleAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"RuleAddedToRole\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"RuleDeleted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"user\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"RuleRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"RuleRemovedFromRole\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deadline\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"actionValueLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"targetSelectorMerkleRootHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"feeValueLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"feeRecipientTokenMerkleRootHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"structRule\",\n          \"name\": \"rule\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"RuleSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"userId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToRole\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"userId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromRole\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"INIT_HASH\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"TARGET_WILDCARD_RULE_ID\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WILDCARD_RULE_ID\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"ownerId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addOwner\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addRuleToRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addTargetWildcard\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addUserToRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"sender\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"nonce\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"initCode\",\n              \"type\": \"bytes\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"callData\",\n              \"type\": \"bytes\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"signature\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"structUserOperation\",\n          \"name\": \"userOp\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"authenticateUserOp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"sigTimeRange\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"deleteRule\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRule\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deadline\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"actionValueLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"targetSelectorMerkleRootHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"feeValueLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"feeRecipientTokenMerkleRootHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"structRule\",\n          \"name\": \"rule\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"key\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getState\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"state\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"key\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getState32\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"state\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"initData\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"init\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"data\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_signature\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isValidAction\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"sigTimeRange\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"data\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_signature\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"token\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"addresspayable\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structUserOperationFee\",\n          \"name\": \"feedata\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"isValidActionAndFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"moduleId\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes[]\",\n          \"name\": \"calls\",\n          \"type\": \"bytes[]\"\n        }\n      ],\n      \"name\": \"multiCall\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"ownerId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeOwner\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeRuleFromRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeTargetWildcard\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"roleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeUserFromRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"ruleId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deadline\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"actionValueLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"targetSelectorMerkleRootHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"feeValueLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"feeRecipientTokenMerkleRootHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"structRule\",\n          \"name\": \"rule\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"setRule\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"addresses\": {\n    \"1\": \"0x996eAcBd74D94C77bD6edA46dAbF99608dBb336E\",\n    \"5\": \"0x996eAcBd74D94C77bD6edA46dAbF99608dBb336E\",\n    \"10\": \"0x996eAcBd74D94C77bD6edA46dAbF99608dBb336E\",\n    \"137\": \"0x996eAcBd74D94C77bD6edA46dAbF99608dBb336E\",\n    \"8453\": \"0x996eAcBd74D94C77bD6edA46dAbF99608dBb336E\",\n    \"36865\": \"0x996eAcBd74D94C77bD6edA46dAbF99608dBb336E\",\n    \"42161\": \"0x996eAcBd74D94C77bD6edA46dAbF99608dBb336E\",\n    \"421614\": \"0x9d79D300b29d5D5eE800E914f002A385B954b8d5\",\n    \"5000\": \"0x939C13FE360eD2e48f1DC074BB3DFE0d042d40c9\",\n    \"534352\": \"0xFC69761Cb48310eB003298Ef66d13c9F68fdE787\"\n  }\n}\n","{\n  \"name\": \"TestNFT\",\n  \"abi\": [\n    { \"inputs\": [], \"stateMutability\": \"nonpayable\", \"type\": \"constructor\" },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"approved\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"operator\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"approved\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"ApprovalForAll\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n      ],\n      \"name\": \"balanceOf\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"getApproved\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"operator\", \"type\": \"address\" }\n      ],\n      \"name\": \"isApprovedForAll\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"mint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"ownerOf\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"safeTransferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"safeTransferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"operator\", \"type\": \"address\" },\n        { \"internalType\": \"bool\", \"name\": \"approved\", \"type\": \"bool\" }\n      ],\n      \"name\": \"setApprovalForAll\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes4\", \"name\": \"interfaceId\", \"type\": \"bytes4\" }\n      ],\n      \"name\": \"supportsInterface\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"tokenURI\",\n      \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenId\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"addresses\": {\n    \"1\": \"0x25E07d90a4e2e9fb627FcF5f4FAd5165dDA6d592\",\n    \"5\": \"0x25E07d90a4e2e9fb627FcF5f4FAd5165dDA6d592\",\n    \"10\": \"0x25E07d90a4e2e9fb627FcF5f4FAd5165dDA6d592\",\n    \"137\": \"0x25E07d90a4e2e9fb627FcF5f4FAd5165dDA6d592\",\n    \"8453\": \"0x25E07d90a4e2e9fb627FcF5f4FAd5165dDA6d592\",\n    \"36865\": \"0x25E07d90a4e2e9fb627FcF5f4FAd5165dDA6d592\",\n    \"42161\": \"0x25E07d90a4e2e9fb627FcF5f4FAd5165dDA6d592\",\n    \"421614\": \"0x837bF17d01aF15A9EA8BA76ccfd59B7F562CA590\",\n    \"5000\": \"0xA025B11cf8CCA0a330bD409B3cE3d355C9f3916a\",\n    \"534352\": \"0xA0B0c6590f43951d4112092640eFb702d7b15FDD\"\n  }\n}\n","{\n  \"name\": \"TokenPaymaster\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contractIEntryPoint\",\n          \"name\": \"_entryPoint\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contractIImplementationRegistry\",\n          \"name\": \"_implementationRegistry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"caller\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"AddEthDepositTo\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"AddTokenDepositTo\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address[]\",\n          \"name\": \"tokens\",\n          \"type\": \"address[]\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddTokens\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes[]\"\n        }\n      ],\n      \"name\": \"BatchActions\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"LockTokenDeposit\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferStarted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"contractIEntryPoint\",\n          \"name\": \"entryPoint\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"PaymasterCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"opHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"spenderCost\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"sponsorCost\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"PostOpGasPaid\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes\",\n          \"name\": \"context\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"actualGasCost\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"PostOpReverted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RemoveTokenData\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address[]\",\n          \"name\": \"tokens\",\n          \"type\": \"address[]\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RemoveTokens\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"mode\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"SetListMode\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"mode\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"SetSpenderBlacklistMode\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"mode\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"SetSpenderWhitelistMode\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"mode\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"SetTokenBlacklistMode\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"contractITokenPriceOracle\",\n              \"name\": \"oracle\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contractIERC20\",\n              \"name\": \"token\",\n              \"type\": \"address\"\n            },\n            { \"internalType\": \"uint8\", \"name\": \"decimals\", \"type\": \"uint8\" },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"aggregator\",\n              \"type\": \"address\"\n            }\n          ],\n          \"indexed\": true,\n          \"internalType\": \"structTokenData\",\n          \"name\": \"data\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"SetTokenData\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"mode\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"SetTokenListMode\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sponsor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"mode\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"SetTokenWhitelistMode\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"unlockBlockNum\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"UnlockTokenDepositAfter\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"caller\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"WithdrawEthDepositTo\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"WithdrawTokenDepositTo\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"COST_OF_SIG\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"COST_OF_TRANSFER\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ETH\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"VERSION\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"acceptOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accumulatedEthDust\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"addEthDepositTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint32\",\n          \"name\": \"unstakeDelaySec\",\n          \"type\": \"uint32\"\n        }\n      ],\n      \"name\": \"addStakeToEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"addTokenDepositTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address[]\", \"name\": \"_tokens\", \"type\": \"address[]\" }\n      ],\n      \"name\": \"addTokens\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes[]\", \"name\": \"data\", \"type\": \"bytes[]\" }\n      ],\n      \"name\": \"batchActions\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"entryPoint\",\n      \"outputs\": [\n        { \"internalType\": \"contractIEntryPoint\", \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n      ],\n      \"name\": \"getAllTokenData\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"unlockBlock\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAllTokens\",\n      \"outputs\": [\n        { \"internalType\": \"address[]\", \"name\": \"\", \"type\": \"address[]\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"getCanPayThroughApproval\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contractIERC20\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"getHasBalance\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"getListMode\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"getSpenderBlacklisted\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"getSpenderWhitelisted\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"getSponsorTokenUsage\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" }\n      ],\n      \"name\": \"getToken\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"contractITokenPriceOracle\",\n              \"name\": \"oracle\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contractIERC20\",\n              \"name\": \"token\",\n              \"type\": \"address\"\n            },\n            { \"internalType\": \"uint8\", \"name\": \"decimals\", \"type\": \"uint8\" },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"aggregator\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"structTokenData\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n      ],\n      \"name\": \"getTokenBalance\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"getTokenBlacklisted\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"getTokenListMode\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"_token\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"ethBought\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"getTokenValueOfEth\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"sponsor\", \"type\": \"address\" }\n      ],\n      \"name\": \"getTokenWhitelisted\",\n      \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n      ],\n      \"name\": \"getUnlockBlock\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"unlockBlock\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"implementationRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contractIImplementationRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" }\n      ],\n      \"name\": \"lockTokenDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pendingOwner\",\n      \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"enumIPaymaster.PostOpMode\",\n          \"name\": \"mode\",\n          \"type\": \"uint8\"\n        },\n        { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"actualGasCost\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"postOp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"tokenAddress\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenListIndex\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"removeTokenData\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address[]\", \"name\": \"_tokens\", \"type\": \"address[]\" }\n      ],\n      \"name\": \"removeTokens\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"bool\", \"name\": \"mode\", \"type\": \"bool\" }],\n      \"name\": \"setListMode\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"bool\", \"name\": \"mode\", \"type\": \"bool\" }\n      ],\n      \"name\": \"setSpenderBlacklistMode\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n        { \"internalType\": \"bool\", \"name\": \"mode\", \"type\": \"bool\" }\n      ],\n      \"name\": \"setSpenderWhitelistMode\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"bool\", \"name\": \"mode\", \"type\": \"bool\" }\n      ],\n      \"name\": \"setTokenBlacklistMode\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"contractITokenPriceOracle\",\n              \"name\": \"oracle\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contractIERC20\",\n              \"name\": \"token\",\n              \"type\": \"address\"\n            },\n            { \"internalType\": \"uint8\", \"name\": \"decimals\", \"type\": \"uint8\" },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"aggregator\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"structTokenData\",\n          \"name\": \"data\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"setTokenData\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"bool\", \"name\": \"mode\", \"type\": \"bool\" }],\n      \"name\": \"setTokenListMode\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"bool\", \"name\": \"mode\", \"type\": \"bool\" }\n      ],\n      \"name\": \"setTokenWhitelistMode\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n      \"name\": \"tokens\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contractITokenPriceOracle\",\n          \"name\": \"oracle\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contractIERC20\",\n          \"name\": \"token\",\n          \"type\": \"address\"\n        },\n        { \"internalType\": \"uint8\", \"name\": \"decimals\", \"type\": \"uint8\" },\n        { \"internalType\": \"address\", \"name\": \"aggregator\", \"type\": \"address\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unlockStakeFromEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"num\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"unlockTokenDepositAfter\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n            { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n            { \"internalType\": \"bytes\", \"name\": \"initCode\", \"type\": \"bytes\" },\n            { \"internalType\": \"bytes\", \"name\": \"callData\", \"type\": \"bytes\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\"\n            },\n            { \"internalType\": \"bytes\", \"name\": \"signature\", \"type\": \"bytes\" }\n          ],\n          \"internalType\": \"structUserOperation\",\n          \"name\": \"userOp\",\n          \"type\": \"tuple\"\n        },\n        { \"internalType\": \"bytes32\", \"name\": \"userOpHash\", \"type\": \"bytes32\" },\n        { \"internalType\": \"uint256\", \"name\": \"maxCost\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"validatePaymasterUserOp\",\n      \"outputs\": [\n        { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n        { \"internalType\": \"uint256\", \"name\": \"sigTimeRange\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"addresspayable\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"withdrawEthDepositTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"withdrawEthDust\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"addresspayable\",\n          \"name\": \"withdrawAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"withdrawStakeFromEntryPoint\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n        { \"internalType\": \"address\", \"name\": \"target\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"withdrawTokenDepositTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"addresses\": {\n    \"1\": \"0x6C5c2c8776Ecc5943760C68a200eC7e3650eFC2F\",\n    \"5\": \"0x2b098A9B293EE50a1362D0500A5dC519E2E34d35\",\n    \"10\": \"0x4Aabd0420D4ae964f065F9feb2fa0b04A8D65eAF\",\n    \"137\": \"0x81051ac27b665B3c28bD7398DbA111E760f1DE4c\",\n    \"8453\": \"0x31A2E8D96d96735daC5Af28A2073e6aEaF76BDe3\",\n    \"36865\": \"0x6C5c2c8776Ecc5943760C68a200eC7e3650eFC2F\",\n    \"42161\": \"0x2AF4CEc1525Fc62a0D4d91c4c1872dF5FB09c963\",\n    \"421614\": \"0x019d2CDaa0871F4aE32d3E1419F0eAFb2A3771DC\"\n  }\n}\n","{\n  \"name\": \"TokenPriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_DELAY\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WEI_IN_ETH\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"aggregatorOrToken\",\n          \"type\": \"address\"\n        },\n        { \"internalType\": \"uint256\", \"name\": \"ethAmount\", \"type\": \"uint256\" },\n        { \"internalType\": \"uint8\", \"name\": \"tokenDecimals\", \"type\": \"uint8\" }\n      ],\n      \"name\": \"getTokenValueOfEth\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenValueOfEth\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"oracleValidUntil\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"addresses\": {\n    \"1\": \"0x302275dcF9919c5449F2d53253ACD06315385272\",\n    \"5\": \"0x302275dcF9919c5449F2d53253ACD06315385272\",\n    \"10\": \"0x302275dcF9919c5449F2d53253ACD06315385272\",\n    \"137\": \"0x302275dcF9919c5449F2d53253ACD06315385272\",\n    \"8453\": \"0x302275dcF9919c5449F2d53253ACD06315385272\",\n    \"36865\": \"0x302275dcF9919c5449F2d53253ACD06315385272\",\n    \"42161\": \"0x302275dcF9919c5449F2d53253ACD06315385272\",\n    \"421614\": \"0x33CE83528023d9aee4e6321250514741F00976DB\",\n    \"5000\": \"0x46B1Aee819Af33fa9617059A3D54e5352793473B\",\n    \"534352\": \"0x3053451A384524C57dAF9420f8d8b8464555E1e8\"\n  }\n}\n","{\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"string\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [{ \"name\": \"_upgradedAddress\", \"type\": \"address\" }],\n      \"name\": \"deprecate\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        { \"name\": \"_spender\", \"type\": \"address\" },\n        { \"name\": \"_value\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"deprecated\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"bool\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [{ \"name\": \"_evilUser\", \"type\": \"address\" }],\n      \"name\": \"addBlackList\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"totalSupply\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        { \"name\": \"_from\", \"type\": \"address\" },\n        { \"name\": \"_to\", \"type\": \"address\" },\n        { \"name\": \"_value\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"upgradedAddress\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"address\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [{ \"name\": \"\", \"type\": \"address\" }],\n      \"name\": \"balances\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"decimals\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"maximumFee\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"_totalSupply\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [],\n      \"name\": \"unpause\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [{ \"name\": \"_maker\", \"type\": \"address\" }],\n      \"name\": \"getBlackListStatus\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"bool\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        { \"name\": \"\", \"type\": \"address\" },\n        { \"name\": \"\", \"type\": \"address\" }\n      ],\n      \"name\": \"allowed\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"paused\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"bool\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [{ \"name\": \"who\", \"type\": \"address\" }],\n      \"name\": \"balanceOf\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [],\n      \"name\": \"pause\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"getOwner\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"address\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"address\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"string\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        { \"name\": \"_to\", \"type\": \"address\" },\n        { \"name\": \"_value\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"transfer\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [\n        { \"name\": \"newBasisPoints\", \"type\": \"uint256\" },\n        { \"name\": \"newMaxFee\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"setParams\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [{ \"name\": \"amount\", \"type\": \"uint256\" }],\n      \"name\": \"issue\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [{ \"name\": \"amount\", \"type\": \"uint256\" }],\n      \"name\": \"redeem\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        { \"name\": \"_owner\", \"type\": \"address\" },\n        { \"name\": \"_spender\", \"type\": \"address\" }\n      ],\n      \"name\": \"allowance\",\n      \"outputs\": [{ \"name\": \"remaining\", \"type\": \"uint256\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"basisPointsRate\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [{ \"name\": \"\", \"type\": \"address\" }],\n      \"name\": \"isBlackListed\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"bool\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [{ \"name\": \"_clearedUser\", \"type\": \"address\" }],\n      \"name\": \"removeBlackList\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [],\n      \"name\": \"MAX_UINT\",\n      \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\" }],\n      \"payable\": false,\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [{ \"name\": \"newOwner\", \"type\": \"address\" }],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": false,\n      \"inputs\": [{ \"name\": \"_blackListedUser\", \"type\": \"address\" }],\n      \"name\": \"destroyBlackFunds\",\n      \"outputs\": [],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"name\": \"_initialSupply\", \"type\": \"uint256\" },\n        { \"name\": \"_name\", \"type\": \"string\" },\n        { \"name\": \"_symbol\", \"type\": \"string\" },\n        { \"name\": \"_decimals\", \"type\": \"uint256\" }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [{ \"indexed\": false, \"name\": \"amount\", \"type\": \"uint256\" }],\n      \"name\": \"Issue\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [{ \"indexed\": false, \"name\": \"amount\", \"type\": \"uint256\" }],\n      \"name\": \"Redeem\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [{ \"indexed\": false, \"name\": \"newAddress\", \"type\": \"address\" }],\n      \"name\": \"Deprecate\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        { \"indexed\": false, \"name\": \"feeBasisPoints\", \"type\": \"uint256\" },\n        { \"indexed\": false, \"name\": \"maxFee\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"Params\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        { \"indexed\": false, \"name\": \"_blackListedUser\", \"type\": \"address\" },\n        { \"indexed\": false, \"name\": \"_balance\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"DestroyedBlackFunds\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [{ \"indexed\": false, \"name\": \"_user\", \"type\": \"address\" }],\n      \"name\": \"AddedBlackList\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [{ \"indexed\": false, \"name\": \"_user\", \"type\": \"address\" }],\n      \"name\": \"RemovedBlackList\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        { \"indexed\": true, \"name\": \"owner\", \"type\": \"address\" },\n        { \"indexed\": true, \"name\": \"spender\", \"type\": \"address\" },\n        { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        { \"indexed\": true, \"name\": \"from\", \"type\": \"address\" },\n        { \"indexed\": true, \"name\": \"to\", \"type\": \"address\" },\n        { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    { \"anonymous\": false, \"inputs\": [], \"name\": \"Pause\", \"type\": \"event\" },\n    { \"anonymous\": false, \"inputs\": [], \"name\": \"Unpause\", \"type\": \"event\" }\n  ],\n  \"addresses\": {\n    \"1\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n    \"5\": \"0x5c392FFF741F3f1e1544d308f9ADD02a3C38BBaA\",\n    \"10\": \"0x94b008aA00579c1307B0EF2c499aD98a8ce58e58\",\n    \"137\": \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n    \"8453\": \"\",\n    \"36865\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n    \"42161\": \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n    \"421614\": \"0xc05e448FfDDcE0976CB4dFbFB188bD8Cc3d5c35f\",\n    \"534352\": \"0xf55bec9cafdbe8730f096aa55dad6d22d44099df\"\n  }\n}\n","{\n  \"name\": \"UserAuthentication\",\n  \"abi\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"groupId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"userIds\",\n              \"type\": \"bytes32[]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"threshold\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"structMultiSigGroup\",\n          \"name\": \"group\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"MultiSigGroupCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"groupId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MultiSigGroupDeleted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"groupId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"userIds\",\n              \"type\": \"bytes32[]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"threshold\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"structMultiSigGroup\",\n          \"name\": \"group\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"MultiSigGroupUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"wallet\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes\",\n          \"name\": \"multiSigInitData\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"UserAuthenticationInitialized\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ADMIN_ROLE\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"INIT_HASH\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"VERSION\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n            { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n            { \"internalType\": \"bytes\", \"name\": \"initCode\", \"type\": \"bytes\" },\n            { \"internalType\": \"bytes\", \"name\": \"callData\", \"type\": \"bytes\" },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"callGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"verificationGasLimit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"preVerificationGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"maxPriorityFeePerGas\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"paymasterAndData\",\n              \"type\": \"bytes\"\n            },\n            { \"internalType\": \"bytes\", \"name\": \"signature\", \"type\": \"bytes\" }\n          ],\n          \"internalType\": \"structUserOperation\",\n          \"name\": \"userOp\",\n          \"type\": \"tuple\"\n        },\n        { \"internalType\": \"bytes32\", \"name\": \"userOpHash\", \"type\": \"bytes32\" },\n        { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"authenticateUserOp\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"sigTimeRange\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"groupId\", \"type\": \"bytes32\" },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"userIds\",\n              \"type\": \"bytes32[]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"threshold\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structMultiSigGroup\",\n          \"name\": \"group\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"createMultiSigGroup\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"groupId\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"deleteMultiSigGroup\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"key\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"getState\",\n      \"outputs\": [\n        { \"internalType\": \"bytes\", \"name\": \"state\", \"type\": \"bytes\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"key\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"getState32\",\n      \"outputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"state\", \"type\": \"bytes32\" }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes\", \"name\": \"multiSigInitData\", \"type\": \"bytes\" }\n      ],\n      \"name\": \"init\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" },\n        { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n        { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" },\n        { \"internalType\": \"bytes\", \"name\": \"_signature\", \"type\": \"bytes\" },\n        { \"internalType\": \"bytes32\", \"name\": \"_hash\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"isValidAction\",\n      \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"moduleId\",\n      \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes[]\", \"name\": \"calls\", \"type\": \"bytes[]\" }\n      ],\n      \"name\": \"multiCall\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes\", \"name\": \"signature\", \"type\": \"bytes\" },\n        { \"internalType\": \"bytes32\", \"name\": \"userOpHash\", \"type\": \"bytes32\" },\n        { \"internalType\": \"bytes32\", \"name\": \"userId\", \"type\": \"bytes32\" }\n      ],\n      \"name\": \"subValidateSignatureECDSA\",\n      \"outputs\": [\n        { \"internalType\": \"uint256\", \"name\": \"sigTimeRange\", \"type\": \"uint256\" }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        { \"internalType\": \"bytes32\", \"name\": \"groupId\", \"type\": \"bytes32\" },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"userIds\",\n              \"type\": \"bytes32[]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"threshold\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"structMultiSigGroup\",\n          \"name\": \"group\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"updateMultiSigGroup\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"addresses\": {\n    \"1\": \"0xb3DeA1dd1d9aC323041850c0A15C578C883F3f6F\",\n    \"5\": \"0xb3DeA1dd1d9aC323041850c0A15C578C883F3f6F\",\n    \"10\": \"0xb3DeA1dd1d9aC323041850c0A15C578C883F3f6F\",\n    \"137\": \"0xb3DeA1dd1d9aC323041850c0A15C578C883F3f6F\",\n    \"8453\": \"0xb3DeA1dd1d9aC323041850c0A15C578C883F3f6F\",\n    \"36865\": \"0xb3DeA1dd1d9aC323041850c0A15C578C883F3f6F\",\n    \"42161\": \"0xb3DeA1dd1d9aC323041850c0A15C578C883F3f6F\",\n    \"421614\": \"0x81C464389b2ac51D39aD934732bd172c4126773b\",\n    \"5000\": \"0x73dBAFFa2B1E93D4c824B70DE8CA8926b9F18339\",\n    \"534352\": \"0xe6e015a9C1A06D348A94e964dA27CdC34CaF36E6\"\n  }\n}\n","import type { AbiError } from 'abitype'\nimport {\n  type AbiEvent,\n  type AbiFunction,\n  type Address,\n  type Hex,\n  type Log,\n  type PublicClient,\n  encodeFunctionData,\n} from 'viem'\n\nimport type { TransactionParams } from '../common'\nimport type { EnvOption } from '../config'\nimport { Chain } from '../data'\nimport { stringify } from '../utils'\n\ntype ChainReadCall = {\n  functionName: string\n  args?: unknown[]\n}\n\nexport class ContractInterface {\n  abi: ReadonlyArray<AbiError | AbiEvent | AbiFunction>\n\n  // biome-ignore lint/suspicious/noExplicitAny: Strict typing here clashes when importing from JSON\n  constructor(abi: ReadonlyArray<any>) {\n    this.abi = abi as ReadonlyArray<AbiError | AbiEvent | AbiFunction>\n  }\n\n  async readFromChain<T>(\n    address: Address,\n    functionName: string,\n    args: unknown[],\n    chainOrClient: Chain | PublicClient,\n    options?: EnvOption,\n  ): Promise<T> {\n    const client = await parseClient(chainOrClient, options)\n    try {\n      return (await client.readContract({\n        abi: this.abi,\n        address,\n        functionName,\n        args,\n      })) as T\n    } catch (e) {\n      throw new Error(\n        `Error reading from chain: \\n ${stringify(e)}. Info: ${stringify({\n          address,\n          functionName,\n          args,\n          chainOrClient,\n          client,\n        })}`,\n      )\n    }\n  }\n\n  async batchReadFromChain<T extends unknown[]>(\n    address: Address,\n    chainOrClient: Chain | PublicClient,\n    calls: ChainReadCall[],\n    options?: EnvOption,\n  ): Promise<T> {\n    const client = await parseClient(chainOrClient, options)\n    return (await Promise.all(\n      calls.map(async (call) => {\n        return this.readFromChain(\n          address,\n          call.functionName,\n          call.args ? call.args : [],\n          client,\n          options,\n        )\n      }),\n    )) as T\n  }\n\n  encodeTransactionParams(\n    address: Address,\n    functionName: string,\n    args: unknown[],\n    value = 0n,\n  ): TransactionParams {\n    const data = encodeFunctionData({\n      abi: this.abi,\n      functionName,\n      args,\n    })\n    return { to: address, data, value }\n  }\n\n  encodeData(functionName: string, args: unknown[]): Hex {\n    return encodeFunctionData({\n      abi: this.abi,\n      functionName,\n      args,\n    })\n  }\n\n  async createFilter(\n    address: Address,\n    eventName: string,\n    args: unknown[],\n    chainOrClient: PublicClient | Chain,\n    fromBlock: bigint,\n    options?: EnvOption,\n  ) {\n    const client = await parseClient(chainOrClient, options)\n    return await client.createContractEventFilter({\n      abi: this.abi,\n      address,\n      eventName,\n      args,\n      fromBlock,\n    })\n  }\n\n  async getLog(\n    address: Address,\n    name: string,\n    args: ReadonlyArray<unknown> | Record<string, unknown> | undefined,\n    chainOrClient: PublicClient | Chain,\n    fromBlock: bigint,\n    options?: EnvOption,\n  ): Promise<Log[]> {\n    const client = await parseClient(chainOrClient, options)\n    const event = getItemFromAbi(this.abi, name, 'event') as AbiEvent\n    return await client.getLogs<AbiEvent, [AbiEvent]>({\n      address,\n      event,\n      args,\n      fromBlock,\n    })\n  }\n}\n\nexport const parseClient = async (\n  chainOrClient: PublicClient | Chain,\n  options?: EnvOption,\n): Promise<PublicClient> => {\n  if (chainOrClient instanceof Chain) {\n    const chain = chainOrClient as Chain\n    return await chain.getClient(options)\n  }\n  if (typeof chainOrClient.readContract === 'function') {\n    return chainOrClient as PublicClient\n  }\n  throw new Error('No client or chain provided')\n}\n\nconst getItemFromAbi = (\n  abi: ReadonlyArray<AbiError | AbiEvent | AbiFunction>,\n  name: string,\n  type: string,\n) => {\n  const item = abi.find((item) => item.name === name && item.type === type)\n  if (!item) {\n    throw new Error(`No ${type} with name ${name} found in abi`)\n  }\n  return item\n}\n","import {\n  http,\n  type Address,\n  type Hex,\n  type Log,\n  type PublicClient,\n  createPublicClient,\n} from 'viem'\n\nimport {\n  type ServerChainInfo,\n  type UserOperation,\n  type UserOperationGasPrice,\n  estimateOp,\n  getChainFromId,\n  getChainFromName,\n  getUserOpGasPrice,\n} from '@funkit/api-base'\nimport { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO } from '@funkit/chains'\nimport {\n  ErrorCode,\n  InternalFailureError,\n  InvalidParameterError,\n  ResourceNotFoundError,\n} from '@funkit/utils'\nimport {\n  BASE_PIMLICO_PAYMASTER_AND_DATA_ESTIMATION,\n  CONTRACT_ADDRESSES,\n  ENTRYPOINT_CONTRACT_INTERFACE,\n  ETHEREUM_PIMLICO_PAYMASTER_AND_DATA_ESTIMATION,\n  type EstimateGasResult,\n  OPTIMISM_PIMLICO_PAYMASTER_AND_DATA_ESTIMATION,\n} from '../common'\nimport type { EnvOption } from '../config'\nimport { isContract } from '../utils'\nimport type { Addresses, ChainInput } from './types'\n\nexport class Chain {\n  private initialized = false\n  private id?: string\n  private name?: string\n  private addresses: Addresses = {}\n  private currency?: string\n  private rpcUrl?: string\n  private client?: PublicClient\n\n  private static chain: Chain\n\n  private constructor(chainInput: ChainInput) {\n    if (!chainInput.chainIdentifier && !chainInput.rpcUrl) {\n      throw new InvalidParameterError(\n        ErrorCode.InvalidChainIdentifier,\n        'valid chain identifier or rpcUrl is required, could be chainId, chainName, Fun Chain object, or rpcUrl',\n        'valid chain identifier or rpcUrl is required, could be chainId, chainName, Fun Chain object, or rpcUrl',\n        { chainInput },\n        'Please provide valid chain identifier or rpcUrl',\n        'https://docs.fun.xyz',\n      )\n    }\n\n    if (chainInput.rpcUrl) {\n      this.rpcUrl = chainInput.rpcUrl\n    } else if (chainInput.chainIdentifier instanceof Chain) {\n      // biome-ignore lint/correctness/noConstructorReturn: TODO - ???\n      return chainInput.chainIdentifier\n    } else if (\n      chainInput.chainIdentifier !== undefined &&\n      (typeof chainInput.chainIdentifier === 'number' ||\n        Number(chainInput.chainIdentifier))\n    ) {\n      this.id = chainInput.chainIdentifier.toString()\n    } else {\n      this.name = chainInput.chainIdentifier\n    }\n  }\n\n  public static async getChain(\n    chainInput: ChainInput,\n    options?: EnvOption,\n  ): Promise<Chain> {\n    if (chainInput.chainIdentifier instanceof Chain) {\n      return chainInput.chainIdentifier\n    }\n\n    if (\n      !Chain.chain ||\n      ((await Chain.chain.getChainId(options)) !==\n        chainInput.chainIdentifier?.toString() &&\n        (await Chain.chain.getChainName(options)) !==\n          chainInput.chainIdentifier?.toString() &&\n        (await Chain.chain.getRpcUrl(options)) !== chainInput.rpcUrl)\n    ) {\n      if (typeof chainInput.chainIdentifier === 'string') {\n        chainInput.chainIdentifier = chainInput.chainIdentifier.replace(\n          /\\s/g,\n          '',\n        )\n      }\n      if (chainInput.chainIdentifier === 'ethereum-goerli') {\n        chainInput.chainIdentifier = 'goerli'\n      }\n      if (chainInput.chainIdentifier === 'polygon') {\n        chainInput.chainIdentifier = 'polygon-mainnet'\n      }\n\n      Chain.chain = new Chain(chainInput)\n    }\n    return Chain.chain\n  }\n\n  private async init(options?: EnvOption) {\n    if (this.initialized) {\n      return\n    }\n\n    if (this.id) {\n      await this.loadChain(this.id, options)\n    } else if (this.name) {\n      await this.loadChain(this.name, options)\n    } else if (this.rpcUrl) {\n      await this.loadChainFromRpc(options)\n    }\n\n    this.initialized = true\n  }\n\n  private async loadChainFromRpc(options?: EnvOption) {\n    this.client = createPublicClient({\n      transport: http(this.rpcUrl),\n    })\n    this.id = (await this.client.getChainId()).toString()\n    await this.loadChain(this.id, options)\n  }\n\n  private async loadChain(identifier: string, options?: EnvOption) {\n    let chain: ServerChainInfo\n    if (!Number(identifier)) {\n      chain = await getChainFromName({\n        name: identifier,\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: options?.logger,\n        signal: options?.signal,\n      })\n    } else {\n      chain = await getChainFromId({\n        chainId: identifier,\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: options?.logger,\n        signal: options?.signal,\n      })\n    }\n    this.id = chain.id as string\n    this.name = chain.name\n    this.currency = chain.nativeCurrency.symbol\n    const abisAddresses = Object.keys(CONTRACT_ADDRESSES).reduce(\n      (result, key) => {\n        result[key] = CONTRACT_ADDRESSES[key][this.id]\n        return result\n      },\n      {},\n    )\n    const addresses = { ...abisAddresses }\n    // TODO: need to check if FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO contains the chain\n    const { chainInfo } = FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO[this.id] ?? {}\n    this.rpcUrl = chainInfo?.rpcUrls.default.http?.[0] || ''\n    this.client = createPublicClient({ transport: http(this.rpcUrl) })\n    Object.assign(this, { ...this, addresses })\n  }\n\n  async getChainId(options?: EnvOption): Promise<string> {\n    await this.init(options)\n    return this.id ?? ''\n  }\n\n  async getChainName(options?: EnvOption): Promise<string> {\n    await this.init(options)\n    return this.name ?? ''\n  }\n\n  async getRpcUrl(options?: EnvOption): Promise<string> {\n    await this.init(options)\n    return this.rpcUrl ?? ''\n  }\n\n  async getAddress(name: string, options?: EnvOption): Promise<Address> {\n    await this.init(options)\n    const res = this.addresses[name]\n    if (!res) {\n      throw new ResourceNotFoundError(\n        ErrorCode.AddressNotFound,\n        'address not found',\n        'address not found',\n        { name },\n        'Provide correct name to query address',\n        'https://docs.fun.xyz',\n      )\n    }\n    return res\n  }\n\n  async getCurrency(options?: EnvOption): Promise<string> {\n    await this.init(options)\n    return this.currency ?? ''\n  }\n\n  async getClient(options?: EnvOption): Promise<PublicClient> {\n    await this.init(options)\n    // biome-ignore lint/style/noNonNullAssertion: <always PublicClient>\n    return this.client!\n  }\n\n  async getFeeData(options?: EnvOption): Promise<UserOperationGasPrice> {\n    await this.init(options)\n    let result: {\n      maxFeePerGas: bigint\n      maxPriorityFeePerGas: bigint\n    }\n    try {\n      result = await getUserOpGasPrice({\n        chainId: this.id ?? '',\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: options?.logger,\n        signal: options?.signal,\n      })\n    } catch (_err) {\n      // biome-ignore lint/style/noNonNullAssertion: <always PublicClient>\n      const fallBackGasPrice = await this.client!.getGasPrice()\n      result = {\n        maxFeePerGas: fallBackGasPrice,\n        maxPriorityFeePerGas: fallBackGasPrice,\n      }\n    }\n    return result\n  }\n\n  async estimateOpGas(\n    partialOp: UserOperation,\n    options?: EnvOption,\n  ): Promise<EstimateGasResult> {\n    await this.init(options)\n    if (!this.addresses || !this.addresses.entryPointAddress) {\n      throw new InternalFailureError(\n        ErrorCode.AddressNotFound,\n        'entryPointAddress is required',\n        '',\n        { partialOp },\n        'This is an internal error, please contact support.',\n        'https://docs.fun.xyz',\n      )\n    }\n    // clone partialOp and replace paymasterAndData with a workaround for pimlico since they overestimate gas limits for simulation\n    const estimationUserOp = Object.assign({}, partialOp)\n    if (this.id === '8453') {\n      estimationUserOp.paymasterAndData =\n        BASE_PIMLICO_PAYMASTER_AND_DATA_ESTIMATION\n    } else if (this.id === '10') {\n      estimationUserOp.paymasterAndData =\n        OPTIMISM_PIMLICO_PAYMASTER_AND_DATA_ESTIMATION\n    } else if (this.id === '1' || this.id === '36865') {\n      estimationUserOp.paymasterAndData =\n        ETHEREUM_PIMLICO_PAYMASTER_AND_DATA_ESTIMATION\n    }\n\n    let { preVerificationGas, callGasLimit, verificationGasLimit } =\n      await estimateOp({\n        input: {\n          chainId: this.id ?? '',\n          entryPointAddress: this.addresses.entryPointAddress,\n          userOp: estimationUserOp,\n        },\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: options?.logger,\n        signal: options?.signal,\n      })\n    if (!preVerificationGas || !verificationGasLimit || !callGasLimit) {\n      throw new Error(\n        JSON.stringify({\n          preVerificationGas,\n          callGasLimit,\n          verificationGasLimit,\n        }),\n      )\n    }\n    callGasLimit = BigInt(callGasLimit) * 2n\n    preVerificationGas = BigInt(preVerificationGas)\n    verificationGasLimit = BigInt(verificationGasLimit) + 200_000n\n    return { preVerificationGas, verificationGasLimit, callGasLimit }\n  }\n\n  async getTxId(\n    userOpHash: string,\n    timeout = 60_000,\n    interval = 5_000,\n    fromBlock?: bigint,\n    options?: EnvOption,\n  ): Promise<Hex | null> {\n    const endtime = Date.now() + timeout\n    const client = await this.getClient(options)\n    const entryPointAddress = await this.getAddress(\n      'entryPointAddress',\n      options,\n    )\n    const fromBlockFinal = fromBlock || (await client.getBlockNumber()) - 100n\n    while (Date.now() < endtime) {\n      let events: Log[]\n      const chainId = await client.getChainId()\n      if (chainId === 84531 || chainId === 36865) {\n        events = await ENTRYPOINT_CONTRACT_INTERFACE.getLog(\n          entryPointAddress,\n          'UserOperationEvent',\n          { userOpHash },\n          client,\n          fromBlockFinal,\n          options,\n        )\n      } else {\n        const filter = await ENTRYPOINT_CONTRACT_INTERFACE.createFilter(\n          entryPointAddress,\n          'UserOperationEvent',\n          [userOpHash],\n          client,\n          fromBlockFinal,\n          options,\n        )\n        events = await client.getFilterLogs({ filter })\n      }\n\n      if (events.length > 0) {\n        return events[0].transactionHash\n      }\n      await new Promise((resolve) => setTimeout(resolve, interval))\n    }\n    return null\n  }\n\n  async addressIsContract(\n    address: Address,\n    options?: EnvOption,\n  ): Promise<boolean> {\n    return isContract(address, await this.getClient(options))\n  }\n}\n","import { toHex } from 'viem'\n\nexport * from './ApiUtils'\nexport * from './AuthUtils'\nexport * from './ChainUtils'\nexport * from './CheckoutUtils'\nexport * from './PaymasterUtils'\nexport * from './UserOpUtils'\nexport * from './TokenUtils'\nexport * from './WalletUtils'\n\nexport const stringify = (object: unknown) => {\n  return JSON.stringify(\n    object,\n    (_, value) => (typeof value === 'bigint' ? toHex(value) : value), // return everything else unchanged\n  )\n}\n","import type { HandleError, PartialAttemptOptions } from '@lifeomic/attempt'\n\nimport {\n  InvalidParameterError,\n  ResourceNotFoundError,\n  UserOpFailureError,\n} from '@funkit/utils'\n\nconst errorHandler: HandleError<unknown> = (err, context) => {\n  if (\n    err instanceof ResourceNotFoundError ||\n    err instanceof InvalidParameterError ||\n    err instanceof UserOpFailureError\n  ) {\n    context.abort()\n  }\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: default options are compatible with any type\nexport const DEFAULT_RETRY_OPTIONS: PartialAttemptOptions<any> = {\n  delay: 100,\n  initialDelay: 0,\n  maxDelay: 3000,\n  factor: 2,\n  maxAttempts: 5,\n  timeout: 0,\n  jitter: true,\n  minDelay: 0,\n  handleError: errorHandler,\n  handleTimeout: null,\n  beforeAttempt: null,\n  calculateDelay: null,\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport type { Hex } from 'viem'\nimport { generatePrivateKey as generateRandomPrivateKey } from 'viem/accounts'\n\nimport { createUser, getUserUniqueId } from '@funkit/api-base'\nimport type { EnvOption } from 'src/config'\n\nexport const getAuthUniqueId = async (\n  authId: string,\n  addr = 'NO_ADDRESS',\n  skipDBActions = false,\n  options?: EnvOption,\n) => {\n  const authUniqueId =\n    (skipDBActions\n      ? addr\n      : await getUserUniqueId({\n          authId,\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: options?.logger,\n          signal: options?.signal,\n        })) || uuidv4()\n\n  const words = authId.split('###')\n  const method = words[0].startsWith('0x') ? 'eoa' : words[0]\n  await createUser({\n    authId,\n    addr,\n    method,\n    userUniqueId: authUniqueId,\n    apiKey: globalThis.globalEnvOption.apiKey,\n    logger: options?.logger,\n    signal: options?.signal,\n  })\n\n  return authUniqueId\n}\n\nexport const generatePrivateKey = (): Hex => {\n  return generateRandomPrivateKey()\n}\n","import { getAssetFromFaucet, sendGetRequest } from '@funkit/api-base'\nimport {\n  type Address,\n  type Hex,\n  type PublicClient,\n  concat,\n  decodeAbiParameters,\n  encodeAbiParameters,\n  isAddress as isAddressViem,\n  keccak256,\n  pad,\n  parseEther,\n  toBytes,\n  toHex,\n} from 'viem'\n\nimport { ErrorCode, InvalidParameterError } from '@funkit/utils'\nimport type { Auth } from '../auth'\nimport {\n  type TransactionParams,\n  WALLET_CONTRACT_INTERFACE,\n  gasSpecificChain,\n} from '../common'\nimport type { EnvOption } from '../config'\nimport { Chain } from '../data'\nimport type { FunWallet } from '../wallet'\n\nexport const isAddress = (address: string): boolean => {\n  try {\n    const [decodedAddr] = decodeAbiParameters(\n      [{ type: 'address' }],\n      pad(address as Hex, { size: 32 }),\n    )\n    return isAddressViem(decodedAddr as string)\n  } catch (_err) {\n    return false\n  }\n}\n\nexport const fundWallet = async (\n  auth: Auth,\n  wallet: Auth | FunWallet,\n  value: number,\n  txOptions: EnvOption = globalThis.globalEnvOption,\n) => {\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const chainId = await chain.getChainId(txOptions)\n  const to = await wallet.getAddress()\n\n  let txData: TransactionParams & {\n    maxFeePerGas?: bigint\n    maxPriorityFeePerGas?: bigint\n  }\n\n  if (gasSpecificChain[chainId]) {\n    const { backupFee, backupPriorityFee, gasStationUrl } =\n      gasSpecificChain[chainId]\n\n    let maxPriorityFee: number\n    let maxFee: number\n    try {\n      const { standard } = await getGasStation(gasStationUrl, txOptions)\n      maxPriorityFee = standard.maxPriorityFee\n      maxFee = standard.maxFee\n    } catch (_err) {\n      maxPriorityFee = Number(backupPriorityFee)\n      maxFee = Number(backupFee)\n    }\n\n    txData = {\n      to,\n      data: '0x',\n      value: parseEther(`${value}`),\n      maxFeePerGas: BigInt(Math.floor(maxPriorityFee * 1e9)),\n      maxPriorityFeePerGas: BigInt(Math.floor(maxFee * 1e9)),\n    }\n  } else {\n    txData = { to, data: '0x', value: parseEther(`${value}`) }\n  }\n  const receipt = await auth.sendTx({ ...txData })\n  return receipt\n}\n\nexport const isContract = async (\n  address: Address,\n  client: PublicClient,\n): Promise<boolean> => {\n  try {\n    const code = await client.getBytecode({ address })\n    return !!code\n  } catch (_err) {\n    return false\n  }\n}\n\nexport const randomBytes = (length: number) => {\n  const bytes = new Uint8Array(length)\n  for (let i = 0; i < length; i++) {\n    bytes[i] = Math.floor(Math.random() * 256)\n  }\n\n  return toHex(bytes)\n}\n\nexport const getWalletPermitNonce = async (\n  walletAddr: Address,\n  chain: Chain,\n  nonceKey = 0,\n  options?: EnvOption,\n): Promise<bigint> => {\n  try {\n    return await WALLET_CONTRACT_INTERFACE.readFromChain(\n      walletAddr,\n      'getNonce',\n      [nonceKey],\n      chain,\n      options,\n    )\n  } catch (_err) {\n    return 0n\n  }\n}\n\nexport const getPermitHash = (\n  token: Address,\n  to: Address,\n  amount: bigint,\n  nonce: bigint,\n  walletAddr: Address,\n  chainId: bigint,\n) => {\n  const salt = keccak256(toBytes('Create3Deployer.deployers()'))\n  const EIP712_DOMAIN = keccak256(\n    encodeAbiParameters(\n      [{ type: 'string' }],\n      [\n        'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)',\n      ],\n    ),\n  )\n  const PERMIT_TYPEHASH =\n    'PermitTransferStruct(address token, address to, uint256 amount, uint256 nonce)'\n  const DOMAIN_SEPARATOR = keccak256(\n    encodeAbiParameters(\n      [\n        { type: 'bytes32' },\n        { type: 'bytes32' },\n        { type: 'bytes32' },\n        { type: 'uint256' },\n        { type: 'address' },\n        { type: 'bytes32' },\n      ],\n      [EIP712_DOMAIN, salt, keccak256(toBytes('1')), chainId, walletAddr, salt],\n    ),\n  )\n  const PERMIT_HASH = keccak256(\n    encodeAbiParameters(\n      [\n        { type: 'string' },\n        { type: 'address' },\n        { type: 'address' },\n        { type: 'uint256' },\n        { type: 'uint256' },\n      ],\n      [PERMIT_TYPEHASH, token, to, amount, nonce],\n    ),\n  )\n  return keccak256(concat([DOMAIN_SEPARATOR, PERMIT_HASH]))\n}\n\nexport const getGasStation = async (\n  gasStationUrl: string,\n  options?: EnvOption,\n): Promise<{ standard: { maxPriorityFee: number; maxFee: number } }> => {\n  return await sendGetRequest({\n    uri: gasStationUrl,\n    apiKey: globalThis.globalEnvOption.apiKey,\n    signal: options?.signal,\n  })\n}\n\nexport const useFaucet = async (\n  chainIdentifier: Chain | number | string,\n  wallet: FunWallet,\n  txOptions?: EnvOption,\n) => {\n  const chain = await Chain.getChain({ chainIdentifier }, txOptions)\n  const chainName = await chain.getChainName(txOptions)\n  if (chainName !== 'goerli') {\n    throw new InvalidParameterError(\n      ErrorCode.InvalidChainIdentifier,\n      'Only Goerli is supported',\n      'Only Goerli is supported',\n      chainIdentifier,\n      'Provide the goerli chain, 5, or goerli as the chain identifier',\n      'https://docs.fun.xyz/',\n    )\n  }\n  const walletAddress = await wallet.getAddress()\n  const [ethRequest, usdcRequest, usdtRequest, daiRequest] = await Promise.all([\n    getAssetFromFaucet({\n      token: 'eth',\n      chain: chainName,\n      walletAddress,\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: txOptions?.logger,\n      signal: txOptions?.signal,\n    }),\n    getAssetFromFaucet({\n      token: 'usdc',\n      chain: chainName,\n      walletAddress,\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: txOptions?.logger,\n      signal: txOptions?.signal,\n    }),\n    getAssetFromFaucet({\n      token: 'usdt',\n      chain: chainName,\n      walletAddress,\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: txOptions?.logger,\n      signal: txOptions?.signal,\n    }),\n    getAssetFromFaucet({\n      token: 'dai',\n      chain: chainName,\n      walletAddress,\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: txOptions?.logger,\n      signal: txOptions?.signal,\n    }),\n  ])\n  return [ethRequest, usdcRequest, usdtRequest, daiRequest]\n}\n","import { randomBytes } from './ChainUtils'\n\nexport function generateRandomCheckoutSalt() {\n  return BigInt(randomBytes(32))\n}\n\nexport function roundToNearestBottomTenth(n: number) {\n  return Math.floor(n / 10) * 10\n}\n","import { PaymasterType } from '@funkit/api-base'\nimport type { EnvOption } from '../config'\n\nexport const getPaymasterType = (txOptions: EnvOption) => {\n  if (txOptions.gasSponsor?.useCheckoutSponsor) {\n    return PaymasterType.CheckoutSponsor\n  }\n\n  if (txOptions.gasSponsor?.sponsorAddress && txOptions.gasSponsor?.token) {\n    return PaymasterType.TokenSponsor\n  }\n\n  if (txOptions.gasSponsor?.sponsorAddress) {\n    return PaymasterType.GaslessSponsor\n  }\n\n  throw Error('Invalid paymaster type')\n}\n","import {\n  type ByteArray,\n  type Hex,\n  encodeAbiParameters,\n  keccak256,\n  toBytes,\n  toHex,\n} from 'viem'\n\nimport type { UserOperation } from '@funkit/api-base'\nimport { ENTRYPOINT_CONTRACT_INTERFACE } from '../common'\nimport type { EnvOption } from '../config'\nimport type { Chain } from '../data'\n\nexport const calcPreVerificationGas = (userOp: UserOperation): bigint => {\n  const ov = DefaultGasOverheads\n  const p = Object.assign(\n    {\n      preVerificationGas: 28000,\n      signature: toHex(Buffer.alloc(ov.sigSize, 1)),\n    },\n    userOp,\n  )\n  const packed = toBytes(packUserOp(p, false))\n  const callDataCost = packed\n    .map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte))\n    .reduce((sum, x) => sum + x)\n  const ret = Math.round(\n    callDataCost +\n      ov.fixed / ov.bundleSize +\n      ov.perUserOp +\n      ov.perUserOpWord * packed.length,\n  )\n  return BigInt(ret)\n}\n\nfunction encode(\n  typevalues: {\n    type: string\n    val: unknown\n  }[],\n  forSignature: boolean,\n) {\n  const types = typevalues.map((typevalue) =>\n    typevalue.type === 'bytes' && forSignature ? 'bytes32' : typevalue.type,\n  )\n  const values = typevalues.map((typevalue) =>\n    typevalue.type === 'bytes' && forSignature\n      ? keccak256(typevalue.val as ByteArray | `0x${string}`)\n      : typevalue.val,\n  )\n\n  return encodeAbiParameters(types, values as never)\n}\n\nfunction packUserOp(op: UserOperation, forSignature = true): Hex {\n  if (forSignature) {\n    const encoded = encodeAbiParameters(\n      [userOpTypeSig],\n      [{ ...op, signature: '0x' }],\n    )\n    return `0x${encoded.slice(66, encoded.length - 64)}`\n  }\n\n  const typevalues = UserOpType.components.map((c) => ({\n    type: c.type,\n    val: op[c.name],\n  }))\n  return encode(typevalues, forSignature)\n}\n\n// Constants\n\nconst DefaultGasOverheads = {\n  fixed: 28000,\n  perUserOp: 18300,\n  perUserOpWord: 4,\n  zeroByte: 4,\n  nonZeroByte: 16,\n  bundleSize: 1,\n  sigSize: 65,\n}\n\nconst UserOpType = {\n  components: [\n    { internalType: 'address', name: 'sender', type: 'address' },\n    { internalType: 'uint256', name: 'nonce', type: 'uint256' },\n    { internalType: 'bytes', name: 'initCode', type: 'bytes' },\n    { internalType: 'bytes', name: 'callData', type: 'bytes' },\n    { internalType: 'uint256', name: 'callGasLimit', type: 'uint256' },\n    {\n      internalType: 'uint256',\n      name: 'verificationGasLimit',\n      type: 'uint256',\n    },\n    {\n      internalType: 'uint256',\n      name: 'preVerificationGas',\n      type: 'uint256',\n    },\n    { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' },\n    {\n      internalType: 'uint256',\n      name: 'maxPriorityFeePerGas',\n      type: 'uint256',\n    },\n    { internalType: 'bytes', name: 'paymasterAndData', type: 'bytes' },\n    { internalType: 'bytes', name: 'signature', type: 'bytes' },\n  ],\n  internalType: 'struct UserOperation',\n  name: 'userOp',\n  type: 'tuple',\n}\n\nconst userOpTypeSig = {\n  components: [\n    {\n      type: 'address',\n      name: 'sender',\n    },\n    {\n      type: 'uint256',\n      name: 'nonce',\n    },\n    {\n      type: 'bytes',\n      name: 'initCode',\n    },\n    {\n      type: 'bytes',\n      name: 'callData',\n    },\n    {\n      type: 'uint256',\n      name: 'callGasLimit',\n    },\n    {\n      type: 'uint256',\n      name: 'verificationGasLimit',\n    },\n    {\n      type: 'uint256',\n      name: 'preVerificationGas',\n    },\n    {\n      type: 'uint256',\n      name: 'maxFeePerGas',\n    },\n    {\n      type: 'uint256',\n      name: 'maxPriorityFeePerGas',\n    },\n    {\n      type: 'bytes',\n      name: 'paymasterAndData',\n    },\n    {\n      type: 'bytes',\n      name: 'signature',\n    },\n  ],\n  name: 'userOp',\n  type: 'tuple',\n}\n\nexport async function getOpHash(\n  chain: Chain,\n  userOp: UserOperation,\n  options?: EnvOption,\n): Promise<Hex> {\n  const entryPointAddress = await chain.getAddress('entryPointAddress', options)\n  return await ENTRYPOINT_CONTRACT_INTERFACE.readFromChain(\n    entryPointAddress,\n    'getUserOpHash',\n    [userOp],\n    chain,\n    options,\n  )\n}\n","import { getAssetErc20ByChainAndSymbol } from '@funkit/api-base'\nimport { ErrorCode, ResourceNotFoundError } from '@funkit/utils'\nimport { BASE_WRAP_TOKEN_ADDR } from '../common'\nimport type { EnvOption } from '../config'\n\n// TODO: Move to funkit/utils & add tests\nexport async function getTokenAddressBySymbolAndChainId(\n  inputSymbol,\n  inputChainId,\n  options?: EnvOption,\n) {\n  const normalizedSymbol = inputSymbol.toLowerCase()\n  // Return wrapped native token if matches any\n  if (BASE_WRAP_TOKEN_ADDR?.[inputChainId]?.[normalizedSymbol]) {\n    return BASE_WRAP_TOKEN_ADDR[inputChainId][normalizedSymbol]\n  }\n\n  const tokenInfo = await getAssetErc20ByChainAndSymbol({\n    chainId: inputChainId,\n    symbol: normalizedSymbol,\n    apiKey: globalThis.globalEnvOption.apiKey,\n    logger: options?.logger,\n    signal: options?.signal,\n  })\n\n  if (tokenInfo.address) {\n    return tokenInfo.address\n  }\n\n  throw new ResourceNotFoundError(\n    ErrorCode.TokenNotFound,\n    'token symbol does not exist on provided chain',\n    'token symbol does not exist on provided chain',\n    { symbol: inputSymbol, chainId: inputChainId },\n    'Provide correct symbol and chainId.',\n    'https://docs.fun.xyz',\n  )\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport { type Address, type Hex, keccak256, pad, toBytes } from 'viem'\n\nimport { AuthType, type Signature, type UserOperation } from '@funkit/api-base'\nimport { FACTORY_CONTRACT_INTERFACE } from '../common'\nimport type { EnvOption } from '../config'\nimport { type Chain, type Operation, encodeLoginData } from '../data'\nimport { randomBytes } from './ChainUtils'\n\nexport const generateRandomBytes32 = (): Hex => {\n  return keccak256(toBytes(uuidv4())) as Hex\n}\n\nexport const generateRandomWalletUniqueId = (): Hex => {\n  return generateRandomBytes32()\n}\n\nexport const generateRandomGroupId = (): Hex => {\n  return generateRandomBytes32()\n}\n\nexport const generateRoleId = (): Hex => {\n  return generateRandomBytes32()\n}\n\nexport const generateRuleId = (): Hex => {\n  return generateRandomBytes32()\n}\n\nexport const generateRandomNonceKey = (): bigint => {\n  return BigInt(randomBytes(24))\n}\n\nexport const generateRandomNonce = (): bigint => {\n  const randomKey = generateRandomNonceKey()\n  return randomKey << 64n\n}\n\nexport const getWalletAddress = async (\n  chain: Chain,\n  walletUniqueId: Hex,\n  options?: EnvOption,\n): Promise<Address> => {\n  const data = encodeLoginData({ salt: walletUniqueId })\n  const factoryAddress = await chain.getAddress('factoryAddress', options)\n  return await FACTORY_CONTRACT_INTERFACE.readFromChain(\n    factoryAddress,\n    'getAddress',\n    [data],\n    chain,\n    options,\n  )\n}\n\nexport const isWalletInitOp = (userOp: UserOperation): boolean => {\n  return userOp.initCode !== '0x'\n}\n\nexport const isGroupOperation = (operation: Operation): boolean => {\n  if (operation.groupId && operation.authType === AuthType.MULTI_SIG) {\n    return true\n  }\n  return false\n}\n\nexport const isSignatureMissing = (\n  userId: Hex,\n  signatures: Signature[] | undefined,\n): boolean => {\n  if (!signatures) {\n    return true\n  }\n  let sigMissing = true\n  for (const signature of signatures) {\n    if (\n      pad(signature.userId.toLowerCase() as Hex, { size: 32 }) ===\n      pad(userId.toLowerCase() as Hex, { size: 32 })\n    ) {\n      sigMissing = false\n      break\n    }\n  }\n  return sigMissing\n}\n","import type {\n  AuthType,\n  OperationData,\n  OperationMetadata,\n  OperationStatus,\n  OperationType,\n  Signature,\n  UserOperation,\n} from '@funkit/api-base'\nimport type { Address, Hex } from 'viem'\nimport type { Auth } from '../auth'\nimport {\n  DEFAULT_USEROP_GAS_LIMIT,\n  ENTRYPOINT_CONTRACT_INTERFACE,\n} from '../common/constants'\nimport type { EnvOption } from '../config'\nimport { calcPreVerificationGas } from '../utils'\nimport { Chain } from './Chain'\n\nexport class Operation implements OperationData {\n  opId?: Hex\n  chainId: string\n  opType: OperationType\n  authType: AuthType\n  groupId?: Hex\n  message?: string\n  walletAddr: Address\n  userOp: UserOperation\n  status?: OperationStatus\n  proposer: string // do not use address in case we later use non-address data as the proposer\n  proposedTime?: number\n  executedBy?: string\n  executedTime?: number\n  relatedOpIds?: Hex[]\n  signatures?: Signature[]\n  txid?: string\n  gasUsed?: string\n  opFeeUSD?: string\n  opFee?: string\n  executedBlockNumber?: number\n  executedBlockTimeStamp?: number\n\n  constructor(userOp: UserOperation, metadata: OperationMetadata) {\n    this.userOp = userOp\n    this.userOp.preVerificationGas = userOp.preVerificationGas\n      ? userOp.preVerificationGas\n      : calcPreVerificationGas(this.userOp)\n    this.opId = metadata.opId\n    this.chainId = metadata.chainId\n    this.opType = metadata.opType\n    this.authType = metadata.authType\n    this.groupId = metadata.groupId\n    this.message = metadata.message\n    this.walletAddr = metadata.walletAddr\n    this.status = metadata.status\n    this.proposer = metadata.proposer\n    this.proposedTime = metadata.proposedTime\n    this.executedBy = metadata.executedBy\n    this.executedTime = metadata.executedTime\n    this.relatedOpIds = metadata.relatedOpIds\n    this.signatures = metadata.signatures\n    this.txid = metadata.txid\n    this.gasUsed = metadata.gasUsed\n    this.opFeeUSD = metadata.opFeeUSD\n    this.opFee = metadata.opFee\n    this.executedBlockNumber = metadata.executedBlockNumber\n    this.executedBlockTimeStamp = metadata.executedBlockTimeStamp\n  }\n\n  static convertTypeToObject(op: OperationData): Operation {\n    return new Operation(op.userOp, op)\n  }\n\n  async getOpHash(chain: Chain, options?: EnvOption): Promise<Hex> {\n    const entryPointAddress = await chain.getAddress(\n      'entryPointAddress',\n      options,\n    )\n    return await ENTRYPOINT_CONTRACT_INTERFACE.readFromChain(\n      entryPointAddress,\n      'getUserOpHash',\n      [this.userOp],\n      chain,\n      options,\n    )\n  }\n\n  getMaxTxCost(): bigint {\n    const {\n      maxFeePerGas,\n      preVerificationGas,\n      callGasLimit,\n      verificationGasLimit,\n    } = this.userOp\n\n    const mul: bigint = this.userOp.paymasterAndData !== '0x' ? 3n : 1n\n    const additionalGas = preVerificationGas ? preVerificationGas : 0n\n    const requiredGas: bigint =\n      callGasLimit + verificationGasLimit * mul + additionalGas\n\n    return BigInt(maxFeePerGas) * requiredGas\n  }\n\n  async estimateGas(\n    auth: Auth,\n    userId: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    if (!this.userOp.signature || this.userOp.signature === '0x') {\n      this.userOp.signature = await auth.getEstimateGasSignature(userId, this)\n    }\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const res = await chain.estimateOpGas(\n      {\n        ...this.userOp,\n        paymasterAndData: '0x',\n        maxFeePerGas: 0n,\n        maxPriorityFeePerGas: 0n,\n        preVerificationGas: 0n,\n        callGasLimit: 0n,\n        verificationGasLimit: BigInt(DEFAULT_USEROP_GAS_LIMIT),\n      },\n      options,\n    )\n\n    this.userOp.preVerificationGas = res.preVerificationGas\n    this.userOp.verificationGasLimit = res.verificationGasLimit\n    this.userOp.callGasLimit = res.callGasLimit\n\n    return this\n  }\n}\n","import { defaultAbiCoder } from '@ethersproject/abi'\nimport { type Address, type Hex, encodeAbiParameters, pad } from 'viem'\n\nimport { AddressZero, HashZero } from '../common'\nimport type { User } from '../wallet/types'\nimport type { ExtraDataType, LoginData, WalletSignature } from './types'\n\nconst extraDataStructType = {\n  type: 'tuple',\n  components: [\n    { type: 'bytes32[]' },\n    { type: 'bytes32[]' },\n    { type: 'bytes32[]' },\n    { type: 'bytes32[]' },\n  ],\n}\n\nconst walletSigEncodingTypes = [\n  { type: 'uint8' },\n  { type: 'bytes32' },\n  { type: 'bytes32' },\n  { type: 'bytes32' },\n  { type: 'bytes' },\n  extraDataStructType,\n]\nexport function encodeLoginData(data: LoginData): Hex {\n  let { loginType, newFunWalletOwner, index, socialHandle, salt } = data\n  newFunWalletOwner = newFunWalletOwner ? newFunWalletOwner : AddressZero\n  index = index ? BigInt(index) : 0n\n  socialHandle = socialHandle ? socialHandle : '0x'\n  salt = salt ? salt : HashZero\n  loginType = loginType ? loginType : 0\n  return encodeAbiParameters(\n    [\n      {\n        type: 'tuple',\n        components: [\n          { type: 'uint8' },\n          { type: 'address' },\n          { type: 'bytes32' },\n          { type: 'uint256' },\n          { type: 'bytes' },\n        ],\n      },\n    ],\n    [[loginType, newFunWalletOwner, salt, index, socialHandle]],\n  )\n}\n\nconst parseExtraData = (data: ExtraDataType): Hex[][] => {\n  let { targetPath, selectorPath, feeRecipientPath, tokenPath } = data\n  targetPath ??= []\n  selectorPath ??= []\n  feeRecipientPath ??= []\n  tokenPath ??= []\n  return [targetPath, selectorPath, feeRecipientPath, tokenPath]\n}\n\nexport function encodeWalletSignature(data: WalletSignature): Hex {\n  const { userId, signature, extraData } = data\n  let { authType, roleId, ruleId } = data\n  roleId ??= HashZero\n  ruleId ??= HashZero\n  authType ??= 0\n  const extraDataEncoded: Hex[][] = extraData\n    ? parseExtraData(extraData)\n    : [[], [], [], []]\n  return encodeAbiParameters(walletSigEncodingTypes, [\n    authType,\n    userId,\n    roleId,\n    ruleId,\n    signature,\n    extraDataEncoded,\n  ]).toLowerCase() as Hex\n}\n\nexport function encodeUserAuthInitData(groupUsers: User[]): Hex {\n  const groupIds = groupUsers.map((user) => user.userId)\n\n  const groupInfos = groupUsers.map<[Hex[], number]>((user) => {\n    const paddedMemberIds =\n      user.groupInfo?.memberIds.map((memberId) =>\n        pad(memberId, { size: 32 }),\n      ) ?? []\n    const sortedMemberIds = paddedMemberIds.sort((a, b) => (a > b ? -1 : 1))\n    return [sortedMemberIds, user.groupInfo?.threshold ?? 0]\n  })\n\n  return defaultAbiCoder.encode(\n    ['bytes32[]', 'tuple(bytes32[],uint256)[]'],\n    [groupIds, groupInfos],\n  ) as Hex\n}\n\nexport function addresstoBytes32(data: Address): Hex {\n  return encodeAbiParameters([{ type: 'address' }], [data])\n}\n\nexport function toBytes32Arr(data: Hex[]): Hex {\n  return encodeAbiParameters([{ type: 'bytes32[]' }], [data])\n}\n","import { type Address, formatUnits, isAddress, parseUnits } from 'viem'\n\nimport {\n  ErrorCode,\n  InternalFailureError,\n  InvalidParameterError,\n} from '@funkit/utils'\nimport { ERC20_CONTRACT_INTERFACE, type TransactionParams } from '../common'\nimport type { EnvOption } from '../config'\nimport { getTokenAddressBySymbolAndChainId } from '../utils'\nimport type { Chain } from './Chain'\n\nconst wrappedNativeTokens = {\n  eth: 'weth',\n  matic: 'wmatic',\n  pol: 'wpol',\n  mnt: 'wmnt',\n}\n\nexport class Token {\n  address?: Address\n  chain: Chain\n  isNative = false\n  symbol = ''\n\n  constructor(input: Address | string, chain: Chain) {\n    this.chain = chain\n\n    if (isAddress(input)) {\n      this.address = input\n      return\n    }\n\n    if (input.toLowerCase() in wrappedNativeTokens) {\n      this.isNative = true\n    }\n\n    this.symbol = input.toLowerCase()\n  }\n\n  async getAddress(options?: EnvOption): Promise<Address> {\n    const chainId = await this.chain.getChainId(options)\n\n    if (this.isNative) {\n      const nativeName = wrappedNativeTokens[this.symbol]\n      return await getTokenAddressBySymbolAndChainId(\n        nativeName,\n        chainId,\n        options,\n      )\n    }\n    if (this.address) {\n      return this.address\n    }\n    if (this.symbol) {\n      return await getTokenAddressBySymbolAndChainId(\n        this.symbol,\n        chainId,\n        options,\n      )\n    }\n    throw new InternalFailureError(\n      ErrorCode.ServerMissingData,\n      'server missing token symbol and address info',\n      '',\n      { symbol: this.symbol, address: this.address, isNative: this.isNative },\n      'Please check token symbol and address. If things look correct, contract fun support for help',\n      'https://docs.fun.xyz',\n    )\n  }\n\n  async getDecimals(options?: EnvOption): Promise<bigint> {\n    if (this.isNative) {\n      return 18n\n    }\n    return await ERC20_CONTRACT_INTERFACE.readFromChain(\n      await this.getAddress(options),\n      'decimals',\n      [],\n      this.chain,\n      options,\n    )\n  }\n\n  async getBalance(address: Address, options?: EnvOption): Promise<string> {\n    const amount = await this.getBalanceBN(address, options)\n    const decimals = await this.getDecimals(options)\n    return formatUnits(amount, Number(decimals))\n  }\n\n  async getBalanceBN(address: Address, options?: EnvOption): Promise<bigint> {\n    const chain = this.chain\n    let amount = 0n\n    if (this.isNative) {\n      const client = await chain.getClient(options)\n      amount = await client.getBalance({ address })\n    } else {\n      amount = await ERC20_CONTRACT_INTERFACE.readFromChain(\n        await this.getAddress(options),\n        'balanceOf',\n        [address],\n        chain,\n        options,\n      )\n    }\n    return amount\n  }\n\n  async getApproval(\n    owner: string,\n    spender: string,\n    options?: EnvOption,\n  ): Promise<bigint> {\n    if (this.isNative) {\n      throw new InvalidParameterError(\n        ErrorCode.InvalidParameter,\n        'Native token can not approve',\n        'Native token can not approve',\n        { isNative: this.isNative },\n        'No need to approve native token',\n        'https://docs.fun.xyz',\n      )\n    }\n    const chain = this.chain\n    return BigInt(\n      await ERC20_CONTRACT_INTERFACE.readFromChain(\n        await this.getAddress(options),\n        'allowance',\n        [owner, spender],\n        chain,\n        options,\n      ),\n    )\n  }\n\n  async getDecimalAmount(\n    amount: number | string,\n    options?: EnvOption,\n  ): Promise<bigint> {\n    const decimals = await this.getDecimals(options)\n    return parseUnits(`${amount}`, Number(decimals))\n  }\n\n  async approve(\n    spender: string,\n    amount: number,\n    options?: EnvOption,\n  ): Promise<TransactionParams> {\n    const amountDec = await this.getDecimalAmount(amount, options)\n    const calldata = ERC20_CONTRACT_INTERFACE.encodeTransactionParams(\n      await this.getAddress(options),\n      'approve',\n      [spender, amountDec],\n    )\n    // TODO: Check if picking precise keys is actually needed\n    const { to, data, value } = calldata\n    return { to, data, value }\n  }\n\n  async transfer(\n    spender: string,\n    amount: number,\n    options?: EnvOption,\n  ): Promise<TransactionParams> {\n    const amountDec = await this.getDecimalAmount(amount, options)\n    return ERC20_CONTRACT_INTERFACE.encodeTransactionParams(\n      await this.getAddress(options),\n      'transfer',\n      [spender, amountDec],\n    )\n  }\n\n  static async getAddress(\n    data: string,\n    chain: Chain,\n    options?: EnvOption,\n  ): Promise<Address> {\n    const token = new Token(data, chain)\n    return await token.getAddress(options)\n  }\n\n  static async getDecimals(\n    data: string,\n    chain: Chain,\n    options?: EnvOption,\n  ): Promise<bigint> {\n    const token = new Token(data, chain)\n    return await token.getDecimals(options)\n  }\n\n  static async getBalance(\n    data: string,\n    address: Address,\n    chain: Chain,\n    options?: EnvOption,\n  ): Promise<string> {\n    const token = new Token(data, chain)\n    return await token.getBalance(address, options)\n  }\n\n  static async getBalanceBN(\n    data: string,\n    address: Address,\n    chain: Chain,\n    options?: EnvOption,\n  ): Promise<bigint> {\n    const token = new Token(data, chain)\n    return await token.getBalanceBN(address, options)\n  }\n\n  static async getApproval(\n    data: string,\n    owner: string,\n    spender: string,\n    chain: Chain,\n    options?: EnvOption,\n  ): Promise<bigint> {\n    const token = new Token(data, chain)\n    return await token.getApproval(owner, spender, options)\n  }\n\n  static async getDecimalAmount(\n    data: string,\n    amount: number,\n    chain: Chain,\n    options?: EnvOption,\n  ): Promise<bigint> {\n    const token = new Token(data, chain)\n    return await token.getDecimalAmount(amount, options)\n  }\n\n  static async approve(\n    data: string,\n    spender: string,\n    amount: number,\n    chain: Chain,\n    options?: EnvOption,\n  ): Promise<TransactionParams> {\n    const token = new Token(data, chain)\n    return await token.approve(spender, amount, options)\n  }\n\n  static async transfer(\n    data: string,\n    spender: string,\n    amount: number,\n    chain: Chain,\n    options?: EnvOption,\n  ): Promise<TransactionParams> {\n    const token = new Token(data, chain)\n    return await token.transfer(spender, amount, options)\n  }\n\n  static isNative(data: string): boolean {\n    return data.toLowerCase() in wrappedNativeTokens\n  }\n}\n","import { isHex } from 'viem'\n\nimport { BYTES32_LENGTH } from '../common'\n\nexport const isBytes32 = (input: string): boolean => {\n  if (!isHex(input)) {\n    return false\n  }\n  return input.length === BYTES32_LENGTH\n}\n","import { type WalletClient, createWalletClient, custom, toBytes } from 'viem'\nimport { type Chain, mainnet } from 'viem/chains'\n\ninterface web3ProviderConversionInterface {\n  // biome-ignore lint/suspicious/noExplicitAny: <these are actually typed as any on viems side>\n  provider: any\n  viemChain?: Chain\n}\n\ninterface web3SignerConversionInterface {\n  // biome-ignore lint/suspicious/noExplicitAny: <these are actually typed as any on viems side>\n  signer: any\n  viemChain?: Chain\n}\n\nexport const convertProviderToClient = ({\n  provider,\n  viemChain,\n}: web3ProviderConversionInterface): WalletClient => {\n  const chain = viemChain ? viemChain : mainnet\n  if (typeof provider.request === 'function') {\n    return createWalletClient({\n      chain,\n      transport: custom(provider),\n    })\n  }\n  if (!provider.send) {\n    throw new Error(\"Provider isn't EIP 1193 compliant\")\n  }\n  return createWalletClient({\n    chain,\n    transport: custom({\n      async request({ method, params }) {\n        const response = await provider.send(method, params)\n        return response\n      },\n    }),\n  })\n}\n\nexport const convertSignerToClient = ({\n  signer,\n  viemChain,\n}: web3SignerConversionInterface): WalletClient => {\n  const chain = viemChain ? viemChain : mainnet\n  if (signer.type === 'local') {\n    return createWalletClient({\n      chain,\n      transport: custom(signer),\n    })\n  }\n  return createWalletClient({\n    chain,\n    transport: custom({\n      async request({ method, params }) {\n        if (method === 'eth_requestAccounts') {\n          return [await signer.getAddress()]\n        }\n        if (method === 'personal_sign') {\n          return await signer.signMessage(toBytes(params[0]))\n        }\n      },\n    }),\n  })\n}\n","import { type Hash, type Hex, decodeAbiParameters, pad, toBytes } from 'viem'\n\nimport { ETH_TRANSFER_SELECTOR, WALLET_ABI } from '../common'\nimport {\n  type Chain,\n  type Operation,\n  type WalletSignature,\n  encodeWalletSignature,\n} from '../data'\nimport type { MerkleTree } from '../utils/MerkleUtils'\nimport { getSigHash } from '../utils/ViemUtils'\nimport { Auth } from './Auth'\nimport type { AuthInput, WalletCallData } from './types'\n\nconst SELECTOR_LENGTH = 10\n\nexport class SessionKeyAuth extends Auth {\n  ruleId: Hex\n  roleId: Hex\n\n  targetSelectorMerkleTree: MerkleTree\n  feeRecipientMerkleTree: MerkleTree\n\n  constructor(\n    authInput: AuthInput,\n    ruleId: Hex,\n    roleId: Hex,\n    targetSelectorMerkleTree: MerkleTree,\n    feeRecipientMerkleTree: MerkleTree,\n  ) {\n    super(authInput)\n    this.ruleId = ruleId\n    this.roleId = roleId\n    this.targetSelectorMerkleTree = targetSelectorMerkleTree\n    this.feeRecipientMerkleTree = feeRecipientMerkleTree\n  }\n\n  override async signOp(operation: Operation, chain: Chain): Promise<Hex> {\n    if (!this.targetSelectorMerkleTree) {\n      throw new Error('SessionKeyAuth not connected to wallet')\n    }\n    await this.init()\n    const opHash = await operation.getOpHash(chain)\n\n    let signature: Hash\n    if (this.signer?.type === 'local') {\n      signature = await this.signer.signMessage({\n        message: { raw: toBytes(opHash) },\n      })\n    } else if (this.client && this.account) {\n      signature = await this.client.signMessage({\n        account: this.account,\n        message: { raw: toBytes(opHash) },\n      })\n    } else {\n      throw new Error('No signer or client')\n    }\n    const target = getTargetFromCall(operation.userOp.callData as Hex)\n    const selector = getSelectorFromCall(operation.userOp.callData as Hex)\n    const walletSignature: WalletSignature = {\n      userId: await this.getUserId(),\n      signature,\n      roleId: this.roleId,\n      ruleId: this.ruleId,\n      extraData: {\n        targetPath: this.targetSelectorMerkleTree.getPathForItem(target),\n        selectorPath: this.targetSelectorMerkleTree.getPathForItem(selector),\n      },\n    }\n    return encodeWalletSignature(walletSignature)\n  }\n\n  override async getEstimateGasSignature(\n    userId: string,\n    operation: Operation,\n  ): Promise<Hex> {\n    if (!this.targetSelectorMerkleTree) {\n      throw new Error('SessionKeyAuth not connected to wallet')\n    }\n    await this.init()\n    const target = getTargetFromCall(operation.userOp.callData as Hex)\n    const selector = getSelectorFromCall(operation.userOp.callData as Hex)\n    try {\n      const walletSignature: WalletSignature = {\n        userId: pad(userId as Hex, { size: 32 }),\n        signature: pad('0x', { size: 65 }),\n        roleId: this.roleId,\n        ruleId: this.ruleId,\n        extraData: {\n          targetPath: this.targetSelectorMerkleTree.getPathForItem(target),\n          selectorPath: this.targetSelectorMerkleTree.getPathForItem(selector),\n        },\n      }\n      return encodeWalletSignature(walletSignature)\n    } catch {\n      throw new Error('Function or target is not allowed in session key')\n    }\n  }\n}\n\nexport const getTargetFromCall = (callData: Hex): Hex => {\n  return decodeCalldata(callData).target\n}\nexport const getSelectorFromCall = (callData: Hex): Hex => {\n  const out = decodeCalldata(callData).calldata.slice(0, SELECTOR_LENGTH) as Hex\n  return out === '0x' ? ETH_TRANSFER_SELECTOR : out\n}\n\nexport const decodeCalldata = (callData: Hex): WalletCallData => {\n  const execFromEntryPointFeeSelector = getSigHash(\n    WALLET_ABI,\n    'execFromEntryPointWithFee',\n  )\n  const execFromEntryPointSelector = getSigHash(\n    WALLET_ABI,\n    'execFromEntryPoint',\n  )\n  if (callData.includes(execFromEntryPointFeeSelector)) {\n    return _decodeExecWithFee(callData)\n  }\n  if (callData.includes(execFromEntryPointSelector)) {\n    return _decodeExec(callData)\n  }\n  throw new Error(\n    'invalid call data. must be execFromEntryPoint or execFromEntryPointWithFee',\n  )\n}\n\nconst _decodeExecWithFee = (callData: Hex): WalletCallData => {\n  const walletcalldata: Hex = `0x${callData.slice(SELECTOR_LENGTH)}`\n  const [target, value, calldata] = decodeAbiParameters(\n    [{ type: 'address' }, { type: 'uint256' }, { type: 'bytes' }],\n    walletcalldata,\n  )\n  return {\n    target,\n    value,\n    calldata,\n  }\n}\nconst _decodeExec = (callData: Hex): WalletCallData => {\n  const walletcalldata: Hex = `0x${callData.slice(SELECTOR_LENGTH)}`\n  const [target, value, calldata] = decodeAbiParameters(\n    [{ type: 'address' }, { type: 'uint256' }, { type: 'bytes' }],\n    walletcalldata,\n  )\n  return {\n    target,\n    value,\n    calldata,\n  }\n}\n","import type { AbiParameter } from 'abitype'\nimport { type AbiItem, getAbiItem, toFunctionSelector } from 'viem'\n\n// Copied from viem\nexport function formatAbiItem(\n  abiItem: AbiItem,\n  { includeName = false }: { includeName?: boolean } = {},\n) {\n  if (\n    abiItem.type !== 'function' &&\n    abiItem.type !== 'event' &&\n    abiItem.type !== 'error'\n  ) {\n    throw new Error(`InvalidDefinitionTypeError: ${abiItem.type}`)\n  }\n\n  return `${abiItem.name}(${formatAbiParams(abiItem.inputs, { includeName })})`\n}\n\nexport function formatAbiParams(\n  params: readonly AbiParameter[] | undefined,\n  { includeName = false }: { includeName?: boolean } = {},\n): string {\n  if (!params) {\n    return ''\n  }\n  return params\n    .map((param) => formatAbiParam(param, { includeName }))\n    .join(includeName ? ', ' : ',')\n}\n\nfunction formatAbiParam(\n  param: AbiParameter,\n  { includeName }: { includeName: boolean },\n): string {\n  if (param.type.startsWith('tuple')) {\n    return `(${formatAbiParams(\n      (param as unknown as { components: AbiParameter[] }).components,\n      { includeName },\n    )})${param.type.slice('tuple'.length)}`\n  }\n  return param.type + (includeName && param.name ? ` ${param.name}` : '')\n}\n\nexport const getSigHash = (\n  // TODO: Strict typing here clashes when importing from JSON - this is still better than any\n  abi: ReadonlyArray<{ name?: string }>,\n  functionName: string,\n) => {\n  const abiItem = getAbiItem({ abi, name: functionName })\n  if (!abiItem) {\n    throw new Error('Unable to retrieve abi')\n  }\n  const definition = formatAbiItem(abiItem)\n  return toFunctionSelector(definition)\n}\n","import { type Hex, concat, keccak256, padHex } from 'viem'\n\n// Copied from contracts repo\n\nexport const createMerkleHashes = (list: Hex[]) => {\n  const hashes = list.map((data) => keccak256(data))\n  const treeSize = 2 ** Math.ceil(Math.log2(list.length)) * 2\n  const buffer = new Array(treeSize).fill('0x')\n  arrayCopy(buffer, hashes, treeSize / 2)\n  for (let i = treeSize / 2 - hashes.length; i > 0; i--) {\n    buffer[buffer.length - i] = hashes[hashes.length - 1]\n  }\n  for (let i = 1; i < buffer.length; i++) {\n    buffer[i] = getHash(buffer, i)\n  }\n  return buffer\n}\n\nexport const getLeft = (i: number) => i * 2\nexport const getRight = (i: number) => i * 2 + 1\nexport const getParent = (index: number) => Math.floor(index / 2)\nexport const getSibling = (index: number) => {\n  const parent = getParent(index)\n  if (index % 2 === 0) {\n    return getRight(parent)\n  }\n  return getLeft(parent)\n}\n\nexport const getHash = (list: Hex[], i: number): Hex => {\n  if (list[i] === '0x') {\n    if (getRight(i) < list.length) {\n      const left = getHash(list, getLeft(i))\n      const right = getHash(list, getRight(i))\n      return getHashPair(left, right)\n    }\n    throw new Error('Invalid tree')\n  }\n  return list[i]\n}\n\nexport const getHashPair = (left: Hex, right: Hex): Hex => {\n  if (BigInt(left) < BigInt(right)) {\n    return keccak256(concat([left, right]))\n  }\n  return keccak256(concat([right, left]))\n}\n\nexport const arrayCopy = <T>(arr: T[], copy: T[], start: number) => {\n  for (let i = 0; i < copy.length; i++) {\n    arr[i + start] = copy[i]\n  }\n}\n\nexport const getPathForItem = (list: Hex[], item: Hex) => {\n  let index = list.indexOf(keccak256(item))\n  if (index === -1) {\n    throw new Error('Item not found')\n  }\n  const path: Hex[] = []\n  while (index > 1) {\n    const sibling = getSibling(index)\n    path.push(list[sibling])\n    index = getParent(index)\n  }\n  return path\n}\n\nexport const verifyPath = (root: Hex, item: Hex, path: Hex[]) => {\n  let hash = keccak256(item)\n  for (let i = 0; i < path.length; i++) {\n    hash = getHashPair(hash, path[i])\n  }\n  return hash === root\n}\n\nexport class MerkleTree {\n  tree: Hex[]\n  constructor(list: Hex[]) {\n    this.tree = createMerkleHashes(list)\n  }\n  getPathForItem(item: Hex) {\n    return getPathForItem(this.tree, item)\n  }\n  verifyPath(item: Hex, path: Hex[]) {\n    return verifyPath(this.getRootHash(), item, path)\n  }\n  getRootHash() {\n    if (this.tree.length === 0) {\n      return padHex('0x1', { size: 32 })\n    }\n    return this.tree[1]\n  }\n}\n","import type { Address } from 'viem'\n\nimport { type TransactionParams, WALLET_CONTRACT_INTERFACE } from '../common'\n\nexport const createExecuteBatchTxParams = (\n  params: TransactionParams[],\n  walletAddress: Address,\n): TransactionParams => {\n  const targets = params.map((param) => param.to)\n  const values = params.map((param) => param.value ?? 0n)\n  const datas = params.map((param) => param.data ?? '0x')\n  return WALLET_CONTRACT_INTERFACE.encodeTransactionParams(\n    walletAddress,\n    'executeBatch',\n    [targets, values, datas],\n  )\n}\n","import { pad } from 'viem'\n\nimport {\n  type TransactionParams,\n  USER_AUTHENTICATION_CONTRACT_INTERFACE,\n} from '../common'\nimport type { EnvOption } from '../config'\nimport { Chain } from '../data'\nimport type {\n  CreateGroupParams,\n  RemoveGroupParams,\n  UpdateGroupParams,\n} from './types'\n\nexport const createGroupTxParams = async (\n  params: CreateGroupParams,\n  txOptions: EnvOption = globalThis.globalEnvOption,\n): Promise<TransactionParams> => {\n  const { groupId, group } = params\n  group.userIds = group.userIds.map((userId) => {\n    return pad(userId, { size: 32 })\n  })\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const userAuthAddress = await chain.getAddress('userAuthAddress', txOptions)\n  return USER_AUTHENTICATION_CONTRACT_INTERFACE.encodeTransactionParams(\n    userAuthAddress,\n    'createMultiSigGroup',\n    [pad(groupId, { size: 32 }), group],\n  )\n}\n\nexport const updateGroupTxParams = async (\n  params: UpdateGroupParams,\n  txOptions: EnvOption = globalThis.globalEnvOption,\n): Promise<TransactionParams> => {\n  const { groupId, group } = params\n  group.userIds = group.userIds\n    .map((userId) => {\n      return pad(userId, { size: 32 })\n    })\n    .sort((a, b) => b.localeCompare(a))\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const userAuthAddress = await chain.getAddress('userAuthAddress', txOptions)\n  return USER_AUTHENTICATION_CONTRACT_INTERFACE.encodeTransactionParams(\n    userAuthAddress,\n    'updateMultiSigGroup',\n    [pad(groupId, { size: 32 }), group],\n  )\n}\n\nexport const removeGroupTxParams = async (\n  params: RemoveGroupParams,\n  txOptions: EnvOption = globalThis.globalEnvOption,\n): Promise<TransactionParams> => {\n  const { groupId } = params\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const userAuthAddress = await chain.getAddress('userAuthAddress', txOptions)\n  return USER_AUTHENTICATION_CONTRACT_INTERFACE.encodeTransactionParams(\n    userAuthAddress,\n    'deleteMultiSigGroup',\n    [pad(groupId, { size: 32 })],\n  )\n}\n","import { type Address, isAddress, parseEther } from 'viem'\n\nimport {\n  ErrorCode,\n  InternalFailureError,\n  InvalidParameterError,\n} from '@funkit/utils'\nimport {\n  APPROVE_AND_EXEC_CONTRACT_INTERFACE,\n  ERC20_CONTRACT_INTERFACE,\n  type TransactionParams,\n  WITHDRAW_QUEUE_ABI,\n} from '../common'\nimport type { EnvOption } from '../config'\nimport { Chain } from '../data'\nimport { ContractInterface } from '../viem/ContractInterface'\nimport type {\n  FinishUnstakeParams,\n  RequestUnstakeParams,\n  StakeParams,\n} from './types'\n\nconst getWithdrawQueueInterface = () => {\n  return new ContractInterface(WITHDRAW_QUEUE_ABI)\n}\n\nexport const isRequestUnstakeParams = (\n  input: RequestUnstakeParams | FinishUnstakeParams,\n): boolean => {\n  return 'amounts' in input ? input.amounts !== undefined : false\n}\nexport const isFinishUnstakeParams = (\n  input: RequestUnstakeParams | FinishUnstakeParams,\n): boolean => {\n  return input.recipient !== undefined\n}\nexport const stakeTransactionParams = async (\n  params: StakeParams,\n  txOptions: EnvOption = globalThis.globalEnvOption,\n): Promise<TransactionParams> => {\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const lidoAddress = getSteth(await chain.getChainId(txOptions))\n  return { to: lidoAddress, value: parseEther(`${params.amount}`), data: '0x' }\n}\n\nexport const requestUnstakeTransactionParams = async (\n  params: RequestUnstakeParams,\n  txOptions: EnvOption = globalThis.globalEnvOption,\n): Promise<TransactionParams> => {\n  if (!isAddress(params.recipient ?? '')) {\n    throw new InvalidParameterError(\n      ErrorCode.InvalidParameter,\n      'Recipient address is not a valid address, please make sure it is a valid checksum address.',\n      'Recipient address is not a valid address, please make sure it is a valid checksum address.',\n      { params },\n      'Please make sure it is a valid checksum address',\n      'https://docs.fun.xyz',\n    )\n  }\n  // Approve steth\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const chainId = await chain.getChainId(txOptions)\n  const steth = getSteth(chainId)\n  const withdrawalQueue: Address = getWithdrawalQueue(chainId)\n  if (\n    !steth ||\n    !withdrawalQueue ||\n    steth.length === 0 ||\n    withdrawalQueue.length === 0\n  ) {\n    throw new InvalidParameterError(\n      ErrorCode.ChainNotSupported,\n      'Incorrect chainId, staking only available on Ethereum mainnet and Goerli',\n      'Incorrect chainId, staking only available on Ethereum mainnet and Goerli',\n      { params },\n      'Provide correct chainId.',\n      'https://docs.fun.xyz',\n    )\n  }\n  const approveAmount: number = params.amounts.reduce(\n    (partialSum, a) => partialSum + a,\n    0,\n  )\n  const approveData = ERC20_CONTRACT_INTERFACE.encodeTransactionParams(\n    steth,\n    'approve',\n    [withdrawalQueue, parseEther(`${approveAmount}`)],\n  )\n\n  // Request Withdrawal\n  const requestWithdrawalData =\n    getWithdrawQueueInterface().encodeTransactionParams(\n      withdrawalQueue,\n      'requestWithdrawals',\n      [\n        params.amounts.map((amount) => parseEther(`${amount}`)),\n        params.recipient,\n      ],\n    )\n  const approveAndExecAddress = await chain.getAddress(\n    'approveAndExecAddress',\n    txOptions,\n  )\n  return APPROVE_AND_EXEC_CONTRACT_INTERFACE.encodeTransactionParams(\n    approveAndExecAddress,\n    'approveAndExecute',\n    [withdrawalQueue, 0, requestWithdrawalData.data, steth, approveData.data],\n  )\n}\n\nexport const finishUnstakeTransactionParams = async (\n  params: FinishUnstakeParams,\n  txOptions: EnvOption = globalThis.globalEnvOption,\n): Promise<TransactionParams> => {\n  if (!isAddress(params.recipient ?? '')) {\n    throw new InvalidParameterError(\n      ErrorCode.InvalidParameter,\n      'Recipient address is not a valid address, please make sure it is a valid checksum address.',\n      'Recipient address is not a valid address, please make sure it is a valid checksum address.',\n      { params },\n      'Please make sure it is a valid checksum address',\n      'https://docs.fun.xyz',\n    )\n  }\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const withdrawQueueAddress = getWithdrawalQueue(\n    await chain.getChainId(txOptions),\n  )\n  const readyToWithdrawRequestIds = (\n    await getReadyToWithdrawRequests(params, txOptions)\n  ).slice(0, 5)\n  if (readyToWithdrawRequestIds.length === 0) {\n    throw new InvalidParameterError(\n      ErrorCode.InvalidParameter,\n      'Not ready to withdraw requests',\n      'Not ready to withdraw requests',\n      { params },\n      'Please wait a bit.',\n      'https://docs.fun.xyz',\n    )\n  }\n\n  // claim batch withdrawal\n  const lastCheckpoint = await getWithdrawQueueInterface().readFromChain(\n    withdrawQueueAddress,\n    'getLastCheckpointIndex',\n    [],\n    chain,\n    txOptions,\n  )\n  const hints = await getWithdrawQueueInterface().readFromChain(\n    withdrawQueueAddress,\n    'findCheckpointHints',\n    [readyToWithdrawRequestIds, 1, lastCheckpoint],\n    chain,\n    txOptions,\n  )\n  if (!hints) {\n    throw new InternalFailureError(\n      ErrorCode.CheckPointHintsNotFound,\n      'lido checkpoint hints are not found when batching the withdrawal',\n      '',\n      { params, readyToWithdrawRequestIds, lastCheckpoint, hints },\n      'Retry later.',\n      'https://docs.fun.xyz',\n    )\n  }\n  return getWithdrawQueueInterface().encodeTransactionParams(\n    withdrawQueueAddress,\n    'claimWithdrawalsTo',\n    [readyToWithdrawRequestIds, hints, params.recipient],\n  )\n}\n\nconst getReadyToWithdrawRequests = async (\n  params: FinishUnstakeParams,\n  txOptions: EnvOption,\n): Promise<bigint[]> => {\n  if (!isAddress(params.recipient ?? '')) {\n    throw new InvalidParameterError(\n      ErrorCode.InvalidParameter,\n      'Recipient address is not a valid address, please make sure it is a valid checksum address.',\n      'Recipient address is not a valid address, please make sure it is a valid checksum address.',\n      { params },\n      'Please make sure it is a valid checksum address',\n      'https://docs.fun.xyz',\n    )\n  }\n  // check withdrawal requests\n  const chain = await Chain.getChain(\n    { chainIdentifier: txOptions.chain },\n    txOptions,\n  )\n  const withdrawalQueueAddr: Address = getWithdrawalQueue(\n    await chain.getChainId(txOptions),\n  )\n\n  const withdrawalRequests = await getWithdrawQueueInterface().readFromChain<\n    bigint[]\n  >(\n    withdrawalQueueAddr,\n    'getWithdrawalRequests',\n    [params.walletAddress],\n    chain,\n    txOptions,\n  )\n\n  // get the state of a particular nft\n  const withdrawalStatusTx = await getWithdrawQueueInterface().readFromChain<\n    { isFinalized?: boolean }[] // TODO: exact typing would be welcome\n  >(\n    withdrawalQueueAddr,\n    'getWithdrawalStatus',\n    [withdrawalRequests],\n    chain,\n    txOptions,\n  )\n\n  const readyToWithdraw: bigint[] = []\n  for (let i = 0; i < withdrawalStatusTx.length; i++) {\n    if (withdrawalStatusTx[i].isFinalized) {\n      readyToWithdraw.push(withdrawalRequests[i])\n    }\n  }\n  const readyToWithdrawRequestIds = [...readyToWithdraw].sort((a, b) => {\n    return a > b ? 1 : -1\n  })\n  return readyToWithdrawRequestIds\n}\n\nconst getWithdrawalQueue = (chainId: string): Address => {\n  switch (Number.parseInt(chainId)) {\n    case 1:\n      return '0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1'\n    case 5:\n      return '0xCF117961421cA9e546cD7f50bC73abCdB3039533'\n    case 36865:\n      return '0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1'\n    default:\n      throw new InvalidParameterError(\n        ErrorCode.ChainNotSupported,\n        'Incorrect chainId, staking only available on Ethereum mainnet and Goerli',\n        'Incorrect chainId, staking only available on Ethereum mainnet and Goerli',\n        { chainId },\n        'Provide correct chainId.',\n        'https://docs.fun.xyz',\n      )\n  }\n}\n\nconst getSteth = (chainId: string): Address => {\n  switch (Number.parseInt(chainId)) {\n    case 1:\n      return '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84'\n    case 5:\n      return '0x1643E812aE58766192Cf7D2Cf9567dF2C37e9B7F'\n    case 36865:\n      return '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84'\n    default:\n      throw new InvalidParameterError(\n        ErrorCode.ChainNotSupported,\n        'Incorrect chainId, staking only available on Ethereum mainnet and Goerli',\n        'Incorrect chainId, staking only available on Ethereum mainnet and Goerli',\n        { chainId },\n        'Provide correct chainId.',\n        'https://docs.fun.xyz',\n      )\n  }\n}\n","import { type Address, type Hex, isAddress, parseEther } from 'viem'\n\nimport { ErrorCode, InvalidParameterError } from '@funkit/utils'\nimport { ERC20_CONTRACT_INTERFACE, type TransactionParams } from '../common'\nimport type { EnvOption } from '../config'\nimport { Token } from '../data'\nimport { Chain } from '../data/Chain'\nimport type {\n  ApproveERC20Params,\n  ApproveParams,\n  TokenTransferParams,\n  TransferParams,\n} from './types'\n\nexport const isTokenTransferParams = (\n  obj: TransferParams,\n): obj is TokenTransferParams => {\n  return 'amount' in obj && 'token' in obj && 'to' in obj\n}\n\nexport const tokenTransferTransactionParams = async (\n  params: TokenTransferParams,\n  chain: Chain,\n  options?: EnvOption,\n): Promise<TransactionParams> => {\n  const { to, amount, token } = params\n  if (!isAddress(to)) {\n    throw new InvalidParameterError(\n      ErrorCode.InvalidParameter,\n      'To address is not a valid address, please make sure it is a valid checksum address.',\n      'To address is not a valid address, please make sure it is a valid checksum address.',\n      { params },\n      'Please make sure it is a valid checksum address',\n      'https://docs.fun.xyz',\n    )\n  }\n  const tokenObj = new Token(token, chain)\n  if (tokenObj.isNative) {\n    return {\n      to: to as Address,\n      data: '0x' as Hex,\n      value: parseEther(`${amount}`),\n    }\n  }\n\n  const tokenAddr = await tokenObj.getAddress(options)\n  if (!tokenAddr) {\n    throw new InvalidParameterError(\n      ErrorCode.TokenNotFound,\n      'Token address not found. Please check the token passed in.',\n      'Token address not found. Please check the token passed in.',\n      { params },\n      'Provide correct token.',\n      'https://docs.fun.xyz',\n    )\n  }\n  const convertedAmount = await tokenObj.getDecimalAmount(amount, options)\n  return ERC20_CONTRACT_INTERFACE.encodeTransactionParams(\n    tokenAddr,\n    'transfer',\n    [to, convertedAmount],\n  )\n}\n\nexport const tokenTransferFromTransactionParams = async (\n  params: TokenTransferParams,\n  chain: Chain,\n  options?: EnvOption,\n): Promise<TransactionParams> => {\n  const { to, amount, token, from } = params\n  if (!isAddress(to ?? '') || !isAddress(from ?? '')) {\n    throw new InvalidParameterError(\n      ErrorCode.InvalidParameter,\n      'To/from address is not a valid address, please make sure it is a valid checksum address.',\n      'To/from address is not a valid address, please make sure it is a valid checksum address.',\n      { params },\n      'Please make sure it is a valid checksum address',\n      'https://docs.fun.xyz',\n    )\n  }\n  const tokenObj = new Token(token, chain)\n  if (tokenObj.isNative) {\n    return {\n      to: to as Address,\n      data: '0x' as Hex,\n      value: parseEther(`${amount}`),\n    }\n  }\n\n  const tokenAddr = await tokenObj.getAddress(options)\n  if (!tokenAddr) {\n    throw new InvalidParameterError(\n      ErrorCode.TokenNotFound,\n      'Token address not found. Please check the token passed in.',\n      'Token address not found. Please check the token passed in.',\n      { params },\n      'Provide correct token.',\n      'https://docs.fun.xyz',\n    )\n  }\n  const convertedAmount = await tokenObj.getDecimalAmount(amount, options)\n  return ERC20_CONTRACT_INTERFACE.encodeTransactionParams(\n    tokenAddr,\n    'transferFrom',\n    [from, to, convertedAmount],\n  )\n}\n\nexport const isERC20ApproveParams = (\n  obj: ApproveParams,\n): obj is ApproveERC20Params => {\n  return 'amount' in obj && 'token' in obj\n}\n\nexport const erc20ApproveTransactionParams = async (\n  params: ApproveERC20Params,\n  options?: EnvOption,\n): Promise<TransactionParams> => {\n  const { spender, amount, token } = params\n  if (!isAddress(spender ?? '')) {\n    throw new InvalidParameterError(\n      ErrorCode.InvalidParameter,\n      'Spender address is not a valid address, please make sure it is a valid checksum address.',\n      'Spender address is not a valid address, please make sure it is a valid checksum address.',\n      { params },\n      'Please make sure it is a valid checksum address',\n      'https://docs.fun.xyz',\n    )\n  }\n\n  // TODO: remove this fallback after refactoring -- Panda\n  const chain = await Chain.getChain(\n    { chainIdentifier: globalThis.globalEnvOption.chain },\n    options,\n  )\n  const tokenObj = new Token(token, chain)\n  const convertedAmount = await tokenObj.getDecimalAmount(amount, options)\n  return ERC20_CONTRACT_INTERFACE.encodeTransactionParams(\n    await tokenObj.getAddress(options),\n    'approve',\n    [spender, convertedAmount],\n  )\n}\n","import type { Address, Hex } from 'viem'\n\nimport type { TransactionParams } from '../common'\nimport type { Chain } from '../data'\n\nexport interface ApproveAndExecParams {\n  approve: ApproveERC20Params\n  exec: TransactionParams\n}\n\nexport interface TokenTransferParams {\n  token: string\n  amount: number | string\n  from?: string\n  to: string\n}\n\nexport type TransferParams = TokenTransferParams\n\n// Approval Param types\nexport type ApproveParams = ApproveERC20Params | ApproveERC721Params\n\nexport interface ApproveERC20Params {\n  spender: string\n  amount: number\n  token: string\n}\n\nexport interface ApproveERC721Params {\n  spender: string\n  tokenId: number\n  collection: string\n}\n\nexport type StakeParams = {\n  amount: number // denominated in ETH\n}\n\nexport type RequestUnstakeParams = {\n  amounts: number[] // denominated in ETH\n  recipient: string\n}\n\nexport type FinishUnstakeParams = {\n  recipient: string\n  walletAddress: string\n}\n\nexport enum UniswapPoolFeeOptions {\n  lowest = 'lowest',\n  low = 'low',\n  medium = 'medium',\n  high = 'high',\n}\n\nexport type SwapParams = {\n  tokenIn: string\n  tokenOut: string\n  inAmount: number\n  slippage?: number\n  recipient?: string\n  poolFee?: UniswapPoolFeeOptions\n}\n\nexport type LimitOrderParam = {\n  tokenIn: string\n  tokenOut: string\n  tokenInAmount: number\n  tokenOutAmount: number\n  poolFee?: UniswapPoolFeeOptions\n}\n\nexport type SessionKeyParams = {\n  targetWhitelist: string[]\n  actionWhitelist: ActionWhitelistObject[]\n  feeTokenWhitelist?: string[]\n  feeRecipientWhitelist?: string[]\n  deadline: number\n  actionValueLimit?: bigint\n  feeValueLimit?: bigint\n  ruleId: Hex // 32 bytes\n  roleId: Hex // 32 bytes\n  userId?: Hex // 32 bytes\n}\n\nexport type ActionWhitelistObject = {\n  // biome-ignore lint/suspicious/noExplicitAny: <leaving as any because of json imports, converting this to Abi would require to redo all the jsons or cast them to Abi which doesn't really help>\n  abi: any\n  functionWhitelist: string[]\n}\n\nexport type RuleStruct = {\n  deadline: bigint\n  actionValueLimit: bigint\n  targetSelectorMerkleRootHash: Hex\n  feeValueLimit: bigint\n  feeRecipientTokenMerkleRootHash: Hex\n}\n\nexport type Group = {\n  userIds: Hex[]\n  threshold: number\n}\n\nexport type AddOwnerParams = {\n  ownerId: Hex\n}\n\nexport type RemoveOwnerParams = {\n  ownerId: Hex\n}\n\nexport type CreateGroupParams = {\n  groupId: Hex\n  group: Group\n}\n\nexport type AddUserToGroupParams = {\n  groupId: Hex\n  userId: Hex\n}\n\nexport type RemoveUserFromGroupParams = {\n  groupId: Hex\n  userId: Hex\n}\n\nexport type UpdateThresholdOfGroupParams = {\n  groupId: Hex\n  threshold: number\n}\n\nexport type UpdateGroupParams = {\n  groupId: Hex\n  group: Group\n}\n\nexport type RemoveGroupParams = {\n  groupId: Hex\n}\n\nexport type OneInchSwapParams = {\n  src: Address // token address or 0xeee...eee for ETH\n  dst: Address // token address or 0xeee...eee for ETH\n  amount: string // amount of src tokens to swap (in wei)\n  from: Address // wallet address\n  slippage: number // Maximum acceptable slippage percentage for the swap (e.g., 1 for 1%)\n  disableEstimate: boolean // Set to true to disable estimation of swap details\n  allowPartialFill: boolean // Set to true to allow partial filling of the swap order\n  chainId: string | Chain | number // Chain ID of the blockchain to use (e.g., 1 for Ethereum Mainnet)\n}\n\nexport type BridgeParams = {\n  fromChain: string | Chain | number\n  toChain: string | Chain | number\n  fromToken: string\n  toToken: string\n  amount: number\n  sort?: SocketSort\n  recipient?: Address\n}\nexport enum SocketSort {\n  output = 'output',\n  gas = 'gas',\n  time = 'time',\n}\n","import { ErrorCode, InvalidParameterError } from '@funkit/utils'\nimport { Chain } from '../data'\nimport type { EnvOption, GlobalEnvOption } from './types'\n\nexport function getEnvOptions(): GlobalEnvOption {\n  return globalThis.globalEnvOption\n}\n\nexport function parseOptions(option: EnvOption): GlobalEnvOption & EnvOption {\n  const globalOptions = globalThis.globalEnvOption\n  return { ...globalOptions, ...option }\n}\n\nexport async function configureEnvironment(option: GlobalEnvOption) {\n  const global = globalThis as { globalEnvOption?: GlobalEnvOption }\n  if (!global.globalEnvOption) {\n    global.globalEnvOption = {}\n  }\n  const globalEnvOption = global.globalEnvOption\n\n  globalEnvOption.apiKey = option.apiKey\n    ? option.apiKey\n    : globalEnvOption.apiKey\n  if (!globalEnvOption.apiKey) {\n    throw new InvalidParameterError(\n      ErrorCode.MissingParameter,\n      'apiKey is required',\n      'apiKey is required',\n      { option },\n      'Provide apiKey when configureEnvironment.',\n      'https://docs.fun.xyz',\n    )\n  }\n\n  if ((!option || !option.chain) && !globalEnvOption.chain) {\n    globalEnvOption.chain = await Chain.getChain({ chainIdentifier: 5 })\n  } else {\n    globalEnvOption.chain = option.chain\n      ? await Chain.getChain({ chainIdentifier: option.chain })\n      : globalEnvOption.chain\n  }\n\n  if (option.gasSponsor !== null && option.gasSponsor !== undefined) {\n    if (Object.keys(option.gasSponsor).length !== 0) {\n      if (option.gasSponsor.token) {\n        const usePermit = option.gasSponsor.usePermit !== false\n        globalEnvOption.gasSponsor = { ...option.gasSponsor, usePermit }\n      } else {\n        globalEnvOption.gasSponsor = { ...option.gasSponsor }\n      }\n    } else {\n      globalEnvOption.gasSponsor = {}\n    }\n  }\n  globalEnvOption.fee = option.fee ? option.fee : globalEnvOption.fee\n  globalEnvOption.skipDBAction =\n    option.skipDBAction === null || option.skipDBAction === undefined\n      ? globalEnvOption.skipDBAction\n      : option.skipDBAction\n}\n","import { ClientError, ErrorType } from '@funkit/utils'\n\nexport class InvalidActionError extends ClientError {\n  constructor(\n    code: string,\n    msg: string,\n    paramsUsed: unknown,\n    fixSuggestion: string,\n    docLink: string,\n  ) {\n    super(\n      ErrorType.InvalidAction,\n      code,\n      msg,\n      msg,\n      paramsUsed,\n      fixSuggestion,\n      docLink,\n    )\n  }\n}\n","import type { Address } from 'viem'\n\nimport { PaymasterType } from '@funkit/api-base'\nimport {\n  CHECKOUT_PAYMASTER_CONTRACT_INTERFACE,\n  type TransactionParams,\n} from '../common'\nimport type { EnvOption } from '../config'\nimport { Chain, Token } from '../data'\nimport { Sponsor } from './Sponsor'\n\nexport class CheckoutSponsor extends Sponsor {\n  constructor(options: EnvOption = globalThis.globalEnvOption) {\n    super(\n      options,\n      CHECKOUT_PAYMASTER_CONTRACT_INTERFACE,\n      'checkoutPaymasterAddress',\n      PaymasterType.CheckoutSponsor,\n    )\n  }\n\n  async getPaymasterAndData(options: EnvOption): Promise<string> {\n    const paymasterAddress = await this.getPaymasterAddress(options)\n    return paymasterAddress.toLowerCase()\n  }\n\n  async stake(\n    _sponsor: string,\n    amount: number,\n    options: EnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const amountdec = await Token.getDecimalAmount(\n      'eth',\n      amount,\n      chain,\n      options,\n    )\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'deposit',\n      [],\n      BigInt(amountdec),\n    )\n  }\n\n  async unstake(\n    receiver: string,\n    amount: number,\n    options: EnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const amountdec = await Token.getDecimalAmount(\n      'eth',\n      amount,\n      chain,\n      options,\n    )\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'withdrawTo',\n      [receiver, amountdec],\n    )\n  }\n\n  override async lockDeposit(): Promise<TransactionParams> {\n    throw new Error('lockDeposit is not supported on CheckoutSponsor')\n  }\n\n  override async unlockDepositAfter(\n    _blocksToWait: number,\n  ): Promise<TransactionParams> {\n    throw new Error('unlockDepositAfter is not supported on CheckoutSponsor')\n  }\n\n  /** True if the specified sponsor is in blacklist mode. **/\n  override async getListMode(\n    _sponsor: string,\n    _options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    throw new Error('getListMode is not supported on CheckoutSponsor')\n  }\n\n  override async setToBlacklistMode(): Promise<TransactionParams> {\n    throw new Error('setToBlacklistMode is not supported on Checkout Sponsor')\n  }\n\n  override async setToWhitelistMode(): Promise<TransactionParams> {\n    throw new Error('setToWhitelistMode is not supported on Checkout Sponsor')\n  }\n\n  override async batchTransaction(\n    _transactions: TransactionParams[],\n  ): Promise<TransactionParams> {\n    throw new Error('batchTransaction is not supported on Checkout Sponsor')\n  }\n\n  override async addSpenderToWhitelist(\n    _spender: Address,\n  ): Promise<TransactionParams> {\n    throw new Error(\n      'addSpenderToWhitelist is not supported on Checkout Sponsor',\n    )\n  }\n\n  override async removeSpenderFromWhitelist(\n    _spender: Address,\n  ): Promise<TransactionParams> {\n    throw new Error(\n      'removeSpenderFromWhitelist is not supported on Checkout Sponsor',\n    )\n  }\n\n  override async batchWhitelistSpenders(\n    _spenders: Address[],\n    _modes: boolean[],\n  ): Promise<TransactionParams> {\n    throw new Error(\n      'batchWhitelistSpenders is not supported on Checkout Sponsor',\n    )\n  }\n\n  override async addSpenderToBlacklist(\n    _spender: Address,\n  ): Promise<TransactionParams> {\n    throw new Error(\n      'addSpenderToBlacklist is not supported on Checkout Sponsor',\n    )\n  }\n\n  override async removeSpenderFromBlacklist(\n    _spender: Address,\n  ): Promise<TransactionParams> {\n    throw new Error(\n      'removeSpenderFromBlacklist is not supported on Checkout Sponsor',\n    )\n  }\n\n  override async batchBlacklistSpenders(\n    _spenders: Address[],\n    _modes: boolean[],\n  ): Promise<TransactionParams> {\n    throw new Error(\n      'batchBlacklistSpenders is not supported on Checkout Sponsor',\n    )\n  }\n}\n","import type { Address, Hex } from 'viem'\n\nimport type { PaymasterType } from '@funkit/api-base'\n\nimport type { TransactionParams } from '../common'\nimport type { EnvOption } from '../config'\nimport { Chain } from '../data'\nimport type { ContractInterface } from '../viem/ContractInterface'\n\nexport abstract class Sponsor {\n  sponsorAddress?: Address\n  contractInterface: ContractInterface\n  name: string\n  paymasterAddress?: Address\n  paymasterType: PaymasterType\n  chainId?: string\n\n  constructor(\n    options: EnvOption,\n    contractInterface: ContractInterface,\n    name: string,\n    paymasterType: PaymasterType,\n  ) {\n    if (\n      options.gasSponsor !== undefined &&\n      options.gasSponsor.sponsorAddress !== undefined\n    ) {\n      this.sponsorAddress = options.gasSponsor.sponsorAddress\n    }\n    this.contractInterface = contractInterface\n    this.name = name\n    this.paymasterType = paymasterType\n  }\n\n  async getPaymasterAddress(\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Address> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const chainId = await chain.getChainId(options)\n    if (!this.paymasterAddress && chainId !== this.chainId) {\n      this.paymasterAddress = await chain.getAddress(this.name, options)\n      this.chainId = chainId\n    }\n    // biome-ignore lint/style/noNonNullAssertion: TODO - uncertain - check if the 'chainId !== this.chainId' condition above is really needed\n    return this.paymasterAddress!\n  }\n\n  abstract getPaymasterAndData(options: EnvOption): Promise<string>\n\n  abstract stake(\n    sponsor: string,\n    amount: number,\n    options: EnvOption,\n  ): Promise<TransactionParams>\n\n  abstract unstake(\n    receiver: string,\n    amount: number,\n    options: EnvOption,\n  ): Promise<TransactionParams>\n\n  abstract lockDeposit(): Promise<TransactionParams>\n\n  abstract unlockDepositAfter(blocksToWait: number): Promise<TransactionParams>\n\n  /** True if the specified sponsor is in blacklist mode. **/\n  async getListMode(\n    sponsor: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getListMode',\n      [sponsor],\n      chain,\n      options,\n    )\n  }\n\n  async setToBlacklistMode(): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'setListMode',\n      [true],\n    )\n  }\n\n  async setToWhitelistMode(): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'setListMode',\n      [false],\n    )\n  }\n\n  async batchTransaction(\n    transactions: TransactionParams[],\n  ): Promise<TransactionParams> {\n    const batchActionsData: Hex[] = transactions.map(\n      (transaction) => transaction.data ?? '0x',\n    )\n    const value = transactions.reduce(\n      (acc, transaction) =>\n        transaction.value ? acc + BigInt(transaction.value) : acc,\n      0n,\n    )\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'batchActions',\n      [batchActionsData],\n      value,\n    )\n  }\n\n  async addSpenderToWhitelist(spender: Address): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'setSpenderWhitelistMode',\n      [spender, true],\n    )\n  }\n\n  async removeSpenderFromWhitelist(\n    spender: Address,\n  ): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'setSpenderWhitelistMode',\n      [spender, false],\n    )\n  }\n\n  async batchWhitelistSpenders(\n    spenders: Address[],\n    modes: boolean[],\n  ): Promise<TransactionParams> {\n    const calldata: TransactionParams[] = []\n    for (let i = 0; i < spenders.length; i++) {\n      if (modes[i]) {\n        calldata.push(await this.addSpenderToWhitelist(spenders[i]))\n      } else {\n        calldata.push(await this.removeSpenderFromWhitelist(spenders[i]))\n      }\n    }\n    return await this.batchTransaction(calldata)\n  }\n\n  async addSpenderToBlacklist(spender: Address): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'setSpenderBlacklistMode',\n      [spender, true],\n    )\n  }\n\n  async removeSpenderFromBlacklist(\n    spender: Address,\n  ): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'setSpenderBlacklistMode',\n      [spender, false],\n    )\n  }\n\n  async batchBlacklistSpenders(\n    spenders: Address[],\n    modes: boolean[],\n  ): Promise<TransactionParams> {\n    const calldata: TransactionParams[] = []\n    for (let i = 0; i < spenders.length; i++) {\n      if (modes[i]) {\n        calldata.push(await this.addSpenderToBlacklist(spenders[i]))\n      } else {\n        calldata.push(await this.removeSpenderFromBlacklist(spenders[i]))\n      }\n    }\n    return await this.batchTransaction(calldata)\n  }\n}\n","import { type Address, concat } from 'viem'\n\nimport { PaymasterType } from '@funkit/api-base'\nimport { ErrorCode, ResourceNotFoundError } from '@funkit/utils'\nimport {\n  GASLESS_PAYMASTER_CONTRACT_INTERFACE,\n  GASLESS_SPONSOR_SUPPORT_CHAINS,\n  type TransactionParams,\n} from '../common'\nimport type { EnvOption } from '../config'\nimport { Chain, Token } from '../data'\nimport { Sponsor } from './Sponsor'\nexport class GaslessSponsor extends Sponsor {\n  constructor(options: EnvOption = globalThis.globalEnvOption) {\n    super(\n      options,\n      GASLESS_PAYMASTER_CONTRACT_INTERFACE,\n      'gaslessPaymasterAddress',\n      PaymasterType.GaslessSponsor,\n    )\n  }\n\n  async getFunSponsorAddress(\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Address> {\n    if (!this.sponsorAddress) {\n      const chain = await Chain.getChain(\n        { chainIdentifier: options.chain },\n        options,\n      )\n      if (\n        GASLESS_SPONSOR_SUPPORT_CHAINS.includes(await chain.getChainId(options))\n      ) {\n        this.sponsorAddress = await chain.getAddress(\n          'funGaslessSponsorAddress',\n          options,\n        )\n      } else {\n        throw new ResourceNotFoundError(\n          ErrorCode.MissingParameter,\n          'The network you are working with does not support gasless Fun Sponsor. You will need to run and manage your own gasless sponsor.',\n          'The network you are working with does not support gasless Fun Sponsor. You will need to run and manage your own gasless sponsor.',\n          {\n            gaslessSponsorSupportChains: GASLESS_SPONSOR_SUPPORT_CHAINS,\n            chain: await chain.getChainId(options),\n          },\n          'Manage your own gasless sponsor, or use a supported network.',\n          'https://docs.fun.xyz',\n        )\n      }\n    }\n    return this.sponsorAddress\n  }\n\n  async getPaymasterAndData(\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<string> {\n    const paymasterAddress = await this.getPaymasterAddress(options)\n    const sponsor = await this.getFunSponsorAddress(options)\n    return concat([paymasterAddress, sponsor])\n  }\n\n  async stake(\n    sponsor: Address,\n    amount: number,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const amountdec = await Token.getDecimalAmount(\n      'eth',\n      amount,\n      chain,\n      options,\n    )\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'addDepositTo',\n      [sponsor, amountdec],\n      BigInt(amountdec),\n    )\n  }\n\n  async unstake(\n    receiver: Address,\n    amount: number,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const amountdec = await Token.getDecimalAmount(\n      'eth',\n      amount,\n      chain,\n      options,\n    )\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'withdrawDepositTo',\n      [receiver, amountdec],\n    )\n  }\n\n  async getUnlockBlock(\n    sponsor: Address,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<number> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getUnlockBlock',\n      [sponsor],\n      chain,\n      options,\n    )\n  }\n\n  async getLockState(\n    sponsor: Address,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    const unlockBlock = Number(await this.getUnlockBlock(sponsor, options))\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const client = await chain.getClient(options)\n    const currentBlock = await client.getBlockNumber()\n    return unlockBlock === 0 || unlockBlock > currentBlock\n  }\n\n  async getBalance(\n    sponsor: Address,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<bigint> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getBalance',\n      [sponsor],\n      chain,\n      options,\n    )\n  }\n\n  async lockDeposit(): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'lockDeposit',\n      [],\n    )\n  }\n\n  async unlockDepositAfter(blocksToWait: number): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'unlockDepositAfter',\n      [blocksToWait],\n    )\n  }\n\n  async getSpenderBlacklistMode(\n    spender: Address,\n    sponsor: Address,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getSpenderBlacklistMode',\n      [spender, sponsor],\n      chain,\n      options,\n    )\n  }\n\n  async getSpenderWhitelistMode(\n    spender: Address,\n    sponsor: Address,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getSpenderWhitelistMode',\n      [spender, sponsor],\n      chain,\n      options,\n    )\n  }\n}\n","import { type Address, concat, encodeAbiParameters } from 'viem'\n\nimport { PaymasterType, addTransaction } from '@funkit/api-base'\nimport {\n  ErrorCode,\n  InvalidParameterError,\n  ResourceNotFoundError,\n} from '@funkit/utils'\nimport type { Auth } from '../auth'\nimport { TOKEN_SPONSOR_SUPPORT_CHAINS, type TransactionParams } from '../common'\nimport {\n  AddressZero,\n  TOKEN_PAYMASTER_CONTRACT_INTERFACE,\n} from '../common/constants'\nimport type { EnvOption } from '../config'\nimport { Chain, type Operation, Token } from '../data'\nimport { getPermitHash, getWalletPermitNonce } from '../utils'\nimport { Sponsor } from './Sponsor'\nimport type { AllTokenData } from './types'\n\nexport class TokenSponsor extends Sponsor {\n  token: string\n\n  constructor(options: EnvOption = globalThis.globalEnvOption) {\n    super(\n      options,\n      TOKEN_PAYMASTER_CONTRACT_INTERFACE,\n      'tokenPaymasterAddress',\n      PaymasterType.TokenSponsor,\n    )\n    if (!options.gasSponsor?.token) {\n      throw new InvalidParameterError(\n        ErrorCode.MissingParameter,\n        'token field is missing',\n        'token field is missing',\n        { gasSponsor: options.gasSponsor },\n        'Provide correct token name or address.',\n        'https://docs.fun.xyz',\n      )\n    }\n    this.token = options.gasSponsor.token.toLowerCase()\n  }\n\n  async getFunSponsorAddress(\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Address> {\n    if (!this.sponsorAddress) {\n      const chain = await Chain.getChain(\n        { chainIdentifier: options.chain },\n        options,\n      )\n      if (\n        TOKEN_SPONSOR_SUPPORT_CHAINS.includes(await chain.getChainId(options))\n      ) {\n        this.sponsorAddress = await chain.getAddress(\n          'funTokenSponsorAddress',\n          options,\n        )\n      } else {\n        throw new ResourceNotFoundError(\n          ErrorCode.MissingParameter,\n          'The network you are working with does not support token Fun Sponsor. You will need to run and manage your own token sponsor.',\n          'The network you are working with does not support token Fun Sponsor. You will need to run and manage your own token sponsor.',\n          {\n            tokenSponsorSupportChains: TOKEN_SPONSOR_SUPPORT_CHAINS,\n            chain: await chain.getChainId(options),\n          },\n          'Manage your own token sponsor, or use a supported network',\n          'https://docs.fun.xyz',\n        )\n      }\n    }\n    return this.sponsorAddress\n  }\n\n  async getPaymasterAndData(\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<string> {\n    // TODO: temporary fallback, remove after refactoring -- Panda\n    const chain = await Chain.getChain(\n      {\n        chainIdentifier: globalThis.globalEnvOption.chain,\n      },\n      options,\n    )\n    const tokenAddress = await Token.getAddress(this.token, chain, options)\n    const paymasterAddress = await this.getPaymasterAddress(options)\n    const sponsor = await this.getFunSponsorAddress(options)\n    return concat([paymasterAddress, sponsor, tokenAddress])\n  }\n\n  async getPaymasterAndDataPermit(\n    partialOp: Operation,\n    walletAddr: Address,\n    userId: string,\n    auth: Auth,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<string> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const estimateGasSignature = await auth.getEstimateGasSignature(\n      userId,\n      partialOp,\n    )\n    partialOp.userOp.signature = estimateGasSignature.toLowerCase()\n    const estimationPaymasterAddress = await chain.getAddress(\n      'estimationPaymasterAddress',\n      options,\n    )\n    const { callGasLimit, verificationGasLimit, preVerificationGas } =\n      await chain.estimateOpGas(\n        {\n          ...partialOp.userOp,\n          paymasterAndData: estimationPaymasterAddress,\n        },\n        options,\n      )\n    const { maxFeePerGas } = await chain.getFeeData(options)\n    const paymasterAddress = await this.getPaymasterAddress(options)\n    const requiredGas =\n      (callGasLimit +\n        (verificationGasLimit + 400_000n) * 3n +\n        preVerificationGas) *\n      BigInt(maxFeePerGas)\n    const tokenAddress = await Token.getAddress(this.token, chain, options)\n    const decAmount =\n      await TOKEN_PAYMASTER_CONTRACT_INTERFACE.readFromChain<bigint>(\n        paymasterAddress,\n        'getTokenValueOfEth',\n        [tokenAddress, requiredGas],\n        chain,\n        options,\n      )\n    const nonce = await getWalletPermitNonce(\n      walletAddr,\n      chain,\n      undefined,\n      options,\n    )\n    const client = await chain.getClient(options)\n    const chainId = await client.getChainId()\n    const hash = getPermitHash(\n      tokenAddress,\n      paymasterAddress,\n      decAmount,\n      nonce,\n      walletAddr,\n      BigInt(chainId),\n    )\n    const sig = await auth.signHash(hash)\n    const encodedSig = encodeAbiParameters(\n      [\n        { type: 'address' },\n        { type: 'address' },\n        { type: 'uint256' },\n        { type: 'uint256' },\n        { type: 'bytes' },\n      ],\n      [tokenAddress, paymasterAddress, decAmount, nonce, sig],\n    )\n    const sponsor = await this.getFunSponsorAddress(options)\n    const encodedAddresses = encodeAbiParameters(\n      [{ type: 'address' }, { type: 'address' }],\n      [sponsor, tokenAddress],\n    )\n    const encodedData = encodeAbiParameters(\n      [{ type: 'bytes' }, { type: 'bytes' }],\n      [encodedAddresses, encodedSig],\n    )\n    return concat([paymasterAddress, encodedData])\n  }\n\n  async stake(\n    sponsor: Address,\n    amount: number,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const chainIdentifier = options.chain ?? globalThis.globalEnvOption.chain\n    const chain = await Chain.getChain({ chainIdentifier }, options)\n    const amountdec = await Token.getDecimalAmount(\n      'eth',\n      amount,\n      chain,\n      options,\n    )\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'addEthDepositTo',\n      [sponsor, amountdec],\n      BigInt(amountdec),\n    )\n  }\n\n  async unstake(\n    receiver: Address,\n    amount: number,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    // TODO: temporary fallback, remove after refactoring -- Panda\n    const chainIdentifier = options.chain ?? globalThis.globalEnvOption.chain\n    const chain = await Chain.getChain({ chainIdentifier }, options)\n    const amountdec = await Token.getDecimalAmount(\n      'eth',\n      amount,\n      chain,\n      options,\n    )\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'withdrawEthDepositTo',\n      [receiver, amountdec],\n    )\n  }\n\n  async getUnlockBlock(\n    sponsor: Address,\n    token: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<bigint> {\n    // TODO: temporary fallback, remove after refactoring -- Panda\n    const chain = await Chain.getChain(\n      {\n        chainIdentifier: globalThis.globalEnvOption.chain,\n      },\n      options,\n    )\n    const tokenAddr = Token.isNative(token)\n      ? AddressZero\n      : await Token.getAddress(token, chain, options)\n    return (await this.getAllTokenData(tokenAddr, sponsor, options)).unlockBlock\n  }\n\n  // false means unlocked, true means locked\n  async getLockState(\n    sponsor: Address,\n    token: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const tokenAddr = Token.isNative(token)\n      ? AddressZero\n      : await Token.getAddress(token, chain, options)\n    const unlockBlock = await this.getUnlockBlock(tokenAddr, sponsor)\n    const provider = await chain.getClient(options)\n    const currentBlock = await provider.getBlockNumber()\n    return unlockBlock === 0n || unlockBlock > currentBlock\n  }\n\n  async getTokenInfo(\n    token: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ) {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const tokenAddress = await Token.getAddress(token, chain, options)\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getToken',\n      [tokenAddress],\n      chain,\n      options,\n    )\n  }\n\n  async getAllTokenData(\n    spender: Address,\n    token: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<AllTokenData> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const tokenAddress = await Token.getAddress(token, chain, options)\n\n    const data = await this.contractInterface.readFromChain<[bigint, bigint]>(\n      await this.getPaymasterAddress(options),\n      'getAllTokenData',\n      [tokenAddress, spender],\n      chain,\n      options,\n    )\n    return {\n      unlockBlock: data[0],\n      tokenAmount: data[1],\n    }\n  }\n\n  async getTokenBalance(\n    spender: Address,\n    token: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<bigint> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n\n    const tokenData = new Token(token, chain)\n    const tokenAddress = tokenData.isNative\n      ? AddressZero\n      : await tokenData.getAddress(options)\n\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getTokenBalance',\n      [tokenAddress, spender],\n      chain,\n      options,\n    )\n  }\n\n  async getAllTokens(options: EnvOption = globalThis.globalEnvOption) {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getAllTokens',\n      [],\n      chain,\n      options,\n    )\n  }\n\n  async addUsableToken(\n    oracle: string,\n    token: string,\n    aggregator: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const decimals = await Token.getDecimals(token, chain, options)\n    const tokenAddress = await Token.getAddress(token, chain, options)\n    const data = [oracle, tokenAddress, decimals, aggregator]\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'setTokenData',\n      [data],\n    )\n  }\n\n  async depositToken(\n    token: string,\n    spender: Address,\n    amount: number,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const tokenObj = new Token(token, chain)\n    const tokenAddress = await tokenObj.getAddress(options)\n    const amountDec = await tokenObj.getDecimalAmount(amount, options)\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'addTokenDepositTo',\n      [tokenAddress, spender, amountDec],\n    )\n  }\n\n  async withdrawToken(\n    token: string,\n    receiver: Address,\n    amount: number,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const tokenObj = new Token(token, chain)\n    const tokenAddress = await tokenObj.getAddress(options)\n    const amountdec = await tokenObj.getDecimalAmount(amount, options)\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'withdrawTokenDepositTo',\n      [tokenAddress, receiver, amountdec],\n    )\n  }\n\n  async lockTokenDeposit(\n    token: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const tokenData = new Token(token, chain)\n    const tokenAddress = tokenData.isNative\n      ? AddressZero\n      : await tokenData.getAddress(options)\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'lockTokenDeposit',\n      [tokenAddress],\n    )\n  }\n\n  async unlockTokenDepositAfter(\n    token: string,\n    blocksToWait: number,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const tokenData = new Token(token, chain)\n    const tokenAddress = tokenData.isNative\n      ? AddressZero\n      : await tokenData.getAddress(options)\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'unlockTokenDepositAfter',\n      [tokenAddress, blocksToWait],\n    )\n  }\n\n  async lockDeposit(): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'lockTokenDeposit',\n      [AddressZero],\n    )\n  }\n\n  async unlockDepositAfter(blocksToWait: number): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'unlockTokenDepositAfter',\n      [AddressZero, blocksToWait],\n    )\n  }\n\n  async approve(\n    approver: Address,\n    token: string,\n    amount: number,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const gasSponsorAddress = await this.getPaymasterAddress()\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    addTransaction({\n      chainId: await chain.getChainId(options),\n      timestamp: Date.now(),\n      txid: '0x',\n      transaction: {\n        action: 'approve',\n        amount,\n        from: approver,\n        to: await this.getPaymasterAddress(options),\n        token,\n      },\n      paymasterType: this.paymasterType,\n      sponsorAddress: approver,\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: options.logger,\n      signal: options.signal,\n    })\n    return Token.approve(token, gasSponsorAddress, amount, chain, options)\n  }\n\n  async getSpenderBlacklisted(\n    spender: Address,\n    sponsor: Address,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getSpenderBlacklisted',\n      [spender, sponsor],\n      chain,\n      options,\n    )\n  }\n\n  async getSpenderWhitelisted(\n    spender: Address,\n    sponsor: Address,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getSpenderWhitelisted',\n      [spender, sponsor],\n      chain,\n      options,\n    )\n  }\n\n  async getTokenWhitelisted(\n    sponsor: Address,\n    token: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const tokenAddress = await Token.getAddress(token, chain, options)\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getTokenWhitelisted',\n      [tokenAddress, sponsor],\n      chain,\n      options,\n    )\n  }\n\n  async setTokenToWhitelistMode(): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'setTokenListMode',\n      [false],\n    )\n  }\n\n  async batchWhitelistTokens(\n    tokens: string[],\n    modes: boolean[],\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n\n    const calldata: string[] = []\n    for (let i = 0; i < tokens.length; i++) {\n      const tokenAddress = await Token.getAddress(tokens[i], chain, options)\n      calldata.push(\n        this.contractInterface.encodeData('setTokenWhitelistMode', [\n          tokenAddress,\n          modes[i],\n        ]),\n      )\n    }\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'batchActions',\n      [calldata],\n    )\n  }\n\n  async getTokenListMode(\n    sponsor: Address,\n    options: EnvOption = globalThis.globalEnvOption,\n  ) {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getTokenListMode',\n      [sponsor],\n      chain,\n      options,\n    )\n  }\n\n  async getTokenBlacklisted(\n    sponsor: Address,\n    token: string,\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const tokenAddress = await Token.getAddress(token, chain, options)\n    return await this.contractInterface.readFromChain(\n      await this.getPaymasterAddress(options),\n      'getTokenBlacklisted',\n      [tokenAddress, sponsor],\n      chain,\n      options,\n    )\n  }\n\n  async setTokenToBlacklistMode(): Promise<TransactionParams> {\n    return this.contractInterface.encodeTransactionParams(\n      await this.getPaymasterAddress(),\n      'setTokenListMode',\n      [true],\n    )\n  }\n\n  async batchBlacklistTokens(\n    tokens: string[],\n    modes: boolean[],\n    options: EnvOption = globalThis.globalEnvOption,\n  ): Promise<TransactionParams> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: options.chain },\n      options,\n    )\n    const calldata: TransactionParams[] = []\n    for (let i = 0; i < tokens.length; i++) {\n      const tokenAddress = await Token.getAddress(tokens[i], chain, options)\n      calldata.push(\n        this.contractInterface.encodeTransactionParams(\n          await this.getPaymasterAddress(),\n          'setTokenBlacklistMode',\n          [tokenAddress, modes[i]],\n        ),\n      )\n    }\n    return this.batchTransaction(calldata)\n  }\n}\n","import {\n  AuthType,\n  type ExecutionReceipt,\n  type GetWalletLidoWithdrawalsByChainIdResponse,\n  type GroupMetadata,\n  type OperationData,\n  OperationStatus,\n  OperationType,\n  addTransaction,\n  addUserToWallet,\n  checkWalletAccessInitialization,\n  createOp,\n  deleteOp,\n  executeOp,\n  getAllWalletTokens,\n  getAllWalletTokensByChainId,\n  getFullReceipt,\n  getGroups,\n  getOps,\n  getOpsOfWallet,\n  getWalletLidoWithdrawalsByChainId,\n  initializeWalletAccess,\n  scheduleOp,\n  signOp,\n} from '@funkit/api-base'\nimport {\n  http,\n  type Address,\n  type Hex,\n  concat,\n  createPublicClient,\n  encodeAbiParameters,\n  isAddress,\n  isHex,\n  keccak256,\n  pad,\n  toBytes,\n} from 'viem'\n\nimport {\n  ErrorCode,\n  InternalFailureError,\n  InvalidParameterError,\n} from '@funkit/utils'\nimport { FirstClassActions } from '../actions/FirstClassActions'\nimport type { Auth } from '../auth'\nimport {\n  ENTRYPOINT_CONTRACT_INTERFACE,\n  type TransactionParams,\n  WALLET_CONTRACT_INTERFACE,\n} from '../common'\nimport {\n  AddressZero,\n  DEFAULT_USEROP_GAS_LIMIT,\n  FACTORY_CONTRACT_INTERFACE,\n} from '../common/constants'\nimport { type EnvOption, parseOptions } from '../config'\nimport {\n  Chain,\n  type InitCodeParams,\n  type LoginData,\n  Operation,\n  Token,\n  encodeLoginData,\n  encodeUserAuthInitData,\n  toBytes32Arr,\n} from '../data'\nimport { CheckoutSponsor, GaslessSponsor, TokenSponsor } from '../sponsors'\nimport {\n  generateRandomNonceKey,\n  getWalletAddress,\n  isGroupOperation,\n  isSignatureMissing,\n  isWalletInitOp,\n} from '../utils'\nimport { getPaymasterType } from '../utils/PaymasterUtils'\nimport { isBytes32 } from '../utils/TypeUtils'\nimport type { FunWalletParams, User } from './types'\n\nexport class FunWallet extends FirstClassActions {\n  walletUniqueId?: Hex\n  userInfo?: Map<Hex, User>\n  address?: Address\n\n  /**\n   * Creates FunWallet object\n   * @constructor\n   * @param {object} params - The parameters for the constructing fun wallet - (users, uniqueId) or walletAddr\n   */\n  constructor(params: FunWalletParams | string) {\n    const chain = globalThis.globalEnvOption.chain\n    super(chain)\n    if (typeof params === 'string') {\n      if (isAddress(params as string)) {\n        this.address = params as Address\n      } else {\n        throw new InvalidParameterError(\n          ErrorCode.InvalidParameter,\n          'string input must be an address type',\n          'string input must be an address type',\n          params,\n          'Provide either (uniqueId, users) or walletAddr when constructing a FunWallet',\n          'https://docs.fun.xyz/how-to-guides/execute-transactions/create-funwallet#create-funwallet-manual-funwallet-creation',\n        )\n      }\n    } else {\n      const { users, uniqueId } = params as FunWalletParams\n      if (!uniqueId || !isBytes32(uniqueId) || !users || users.length <= 0) {\n        throw new InvalidParameterError(\n          ErrorCode.InvalidParameter,\n          'uniqueId must be bytes32 and users must be non-empty',\n          'uniqueId must be bytes32 and users must be non-empty',\n          params,\n          'The uniqueId field should be a 32 byte Hexstring and the users field should be an array of User objects',\n          'https://docs.fun.xyz/how-to-guides/execute-transactions/create-funwallet#create-funwallet-manual-funwallet-creation',\n        )\n      }\n\n      this.userInfo = new Map(\n        users?.map((user) => {\n          if (!user.userId || !isHex(user.userId)) {\n            throw new InvalidParameterError(\n              ErrorCode.InvalidParameter,\n              'userId is required and must be a hex string',\n              'userId is required and must be a hex string',\n              users,\n              'Provide hex string userId when creating a FunWallet',\n              'https://docs.fun.xyz/how-to-guides/execute-transactions/create-funwallet#create-funwallet-manual-funwallet-creation',\n            )\n          }\n\n          if (\n            user.groupInfo &&\n            (!Number.isInteger(user.groupInfo.threshold) ||\n              !Array.isArray(user.groupInfo.memberIds) ||\n              !user.groupInfo.memberIds.every((memberId) => isHex(memberId)))\n          ) {\n            throw new InvalidParameterError(\n              ErrorCode.InvalidParameter,\n              'groupInfo must be an object with threshold as integer and memberIds as array of hex strings',\n              'groupInfo must be an object with threshold as integer and memberIds as array of hex strings',\n              users,\n              'Provide valid groupInfo when creating a FunWallet',\n              'https://docs.fun.xyz/how-to-guides/execute-transactions/create-funwallet#create-funwallet-manual-funwallet-creation',\n            )\n          }\n\n          return [pad(user.userId, { size: 32 }), user] as [Hex, User]\n        }),\n      )\n\n      this.walletUniqueId = uniqueId as Hex\n    }\n  }\n\n  /**\n   * Retrieves the wallet address associated with this FunWallet. The address should be the same for all EVM chains so no input is needed\n   * If the address is not already cached, it fetches it using the wallet's unique ID and chain information.\n   * @returns {Promise<Address>} The wallet address.\n   */\n  async getAddress(\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Address> {\n    if (!this.address) {\n      const chainIdentifier = txOptions.chain\n      this.address = await getWalletAddress(\n        await Chain.getChain(\n          { chainIdentifier: chainIdentifier ?? 137 },\n          txOptions,\n        ),\n        this.walletUniqueId ?? '0x',\n        txOptions,\n      )\n    }\n    return this.address\n  }\n\n  /**\n   * Retrieves the wallet address associated with the provided unique ID using the given API key.\n   * @param {string} uniqueId - The unique ID of the wallet.\n   * @param {string} apiKey - The API key to access the required resources.\n   * @returns {Promise<Address>} The wallet address.\n   */\n  static async getAddress(\n    uniqueId: string,\n    apiKey: string,\n    options?: EnvOption,\n  ): Promise<Address> {\n    globalThis.globalEnvOption.apiKey = apiKey\n    return await getWalletAddress(\n      await Chain.getChain({ chainIdentifier: 137 }, options),\n      keccak256(toBytes(uniqueId)),\n      options,\n    )\n  }\n\n  /**\n   * Retrieves the wallet address associated with the provided unique ID in an offline environment.\n   * @param {string} uniqueId - The unique ID of the wallet.\n   * @param {string} rpcUrl - The URL of the RPC endpoint for offline querying.\n   * @param {Address} factoryAddress - The address of the factory contract.\n   * @returns {Promise<Address>} The wallet address.\n   */\n  static async getAddressOffline(\n    uniqueId: string,\n    rpcUrl: string,\n    factoryAddress: Address,\n    options?: EnvOption,\n  ) {\n    const client = createPublicClient({\n      transport: http(rpcUrl),\n    })\n    return await FACTORY_CONTRACT_INTERFACE.readFromChain(\n      factoryAddress,\n      'getAddress',\n      [keccak256(toBytes(uniqueId))],\n      client,\n      options,\n    )\n  }\n\n  /**\n   * Get all tokens for a specific chain\n   * @param {string} chainId string version of the chainId or ALL. If empty, then default to the one in globalEnvOption\n   * @param {boolean} onlyVerifiedTokens If true, only return alchemy tokens that are verified(filters spam) - defaults to false\n   * @returns JSON\n   */\n  async getTokens(\n    chainIdInput?: string,\n    onlyVerifiedTokens = false,\n    options?: EnvOption,\n  ) {\n    let chainId: string\n    if (!chainIdInput) {\n      const chain = await Chain.getChain(\n        {\n          chainIdentifier: globalThis.globalEnvOption.chain,\n        },\n        options,\n      )\n      chainId = await chain.getChainId(options)\n    } else {\n      chainId = chainIdInput\n    }\n\n    const walletAddress = await this.getAddress(options)\n    return chainId === 'ALL'\n      ? await getAllWalletTokens({\n          walletAddress,\n          onlyVerifiedTokens,\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: options?.logger,\n          signal: options?.signal,\n        })\n      : await getAllWalletTokensByChainId({\n          chainId,\n          walletAddress,\n          onlyVerifiedTokens,\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: options?.logger,\n          signal: options?.signal,\n        })\n  }\n\n  async getLidoWithdrawals(options?: EnvOption) {\n    const walletAddress = await this.getAddress(options)\n    return await getWalletLidoWithdrawalsByChainId({\n      chainId: '1',\n      walletAddress,\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: options?.logger,\n      signal: options?.signal,\n    })\n  }\n\n  /**\n   * Get all tokens on all supported chains. Merge tokens by symbol\n   * @param {string} chainIdInput string version of the chainId or ALL. If empty, then default to the one in globalEnvOption\n   * @param {*} onlyVerifiedTokens true if you want to filter out spam tokens(Uses alchemy lists)\n   * @param {boolean} checkStatus true if you want to check if the address has any pending lido withdrawals\n   * @returns JSON of all tokens owned by address\n   */\n  async getAssets(\n    chainIdInput?: string,\n    onlyVerifiedTokens = false,\n    checkStatus = false,\n    options?: EnvOption,\n  ) {\n    let chainId: string\n    if (!chainIdInput) {\n      const chain = await Chain.getChain(\n        {\n          chainIdentifier: globalThis.globalEnvOption.chain,\n        },\n        options,\n      )\n      chainId = await chain.getChainId(options)\n    } else {\n      chainId = chainIdInput\n    }\n    const tokens = await this.getTokens(chainId, onlyVerifiedTokens, options)\n    const lidoWithdrawals: GetWalletLidoWithdrawalsByChainIdResponse =\n      checkStatus ? await this.getLidoWithdrawals(options) : [[], []]\n    return { ...lidoWithdrawals, ...tokens }\n  }\n\n  /**\n   * Retrieves the nonce value for the specified sender address and nonce key.\n   * If the nonce is unavailable, a random nonce key is generated and returned as the nonce.\n   * @param {string} sender - The sender's address.\n   * @param {string} key - The nonce key (default: randomly generated).\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<bigint>} The nonce value.\n   */\n  async getNonce(\n    sender: string,\n    key = generateRandomNonceKey(),\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<bigint> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    const entryPointAddress = await chain.getAddress(\n      'entryPointAddress',\n      txOptions,\n    )\n    let nonce = undefined\n    let retryCount = 3\n    while ((nonce === undefined || nonce === null) && retryCount > 0) {\n      nonce = await ENTRYPOINT_CONTRACT_INTERFACE.readFromChain(\n        entryPointAddress,\n        'getNonce',\n        [sender, key],\n        chain,\n        txOptions,\n      )\n      retryCount--\n    }\n\n    if (nonce !== undefined && nonce !== null) {\n      return BigInt(nonce)\n    }\n    return BigInt(key << 64n)\n  }\n\n  /**\n   * Retrieves a list of operations associated with the wallet.\n   * @param {OperationStatus} status - The status of operations to retrieve (default: OperationStatus.ALL).\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<OperationData[]>} A list of operations.\n   */\n  async getOperations(\n    status: OperationStatus = OperationStatus.ALL,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<OperationData[]> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    return await getOpsOfWallet({\n      walletAddr: await this.getAddress(txOptions),\n      chainId: await chain.getChainId(txOptions),\n      status,\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: txOptions?.logger,\n      signal: txOptions?.signal,\n    })\n  }\n\n  /**\n   * Retrieves a specific operation by its ID.\n   * @param {Hex} opId - The ID of the operation to retrieve.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<OperationData>} The requested operation.\n   */\n  async getOperation(\n    opId: Hex,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<OperationData> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    return (\n      await getOps({\n        opIds: [opId],\n        chainId: await chain.getChainId(txOptions),\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: txOptions?.logger,\n        signal: txOptions?.signal,\n      })\n    )[0]\n  }\n\n  /**\n   * Retrieves a list of users associated with the wallet and their potential corresponding group information.\n   * @param {Auth} auth - The authentication instance for retrieving user information.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<User[]>} A list of users with their group information.\n   */\n  async getUsers(\n    auth: Auth,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<User[]> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    const storedUserIds = await auth.getUserIds(\n      await this.getAddress(txOptions),\n      await chain.getChainId(txOptions),\n      txOptions,\n    )\n    const userIds = new Set([...storedUserIds])\n    if (this.userInfo) {\n      for (const userId of this.userInfo.keys()) {\n        userIds.add(userId.toLowerCase() as Hex)\n      }\n    }\n\n    const users: User[] = []\n    const groupIds: Hex[] = []\n\n    for (const userId of userIds) {\n      if (\n        pad(userId, { size: 32 }).toLowerCase() === (await auth.getUserId())\n      ) {\n        users.push({ userId: pad(userId, { size: 32 }) } as User)\n      } else {\n        groupIds.push(pad(userId, { size: 32 }))\n      }\n    }\n\n    if (groupIds && groupIds.length > 0) {\n      const groups = await getGroups({\n        groupIds,\n        chainId: await chain.getChainId(txOptions),\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: txOptions?.logger,\n        signal: txOptions?.signal,\n      })\n      for (const group of groups) {\n        users.push({\n          userId: group.groupId,\n          groupInfo: {\n            threshold: group.threshold,\n            memberIds: group.memberIds,\n          },\n        })\n      }\n    }\n\n    return users\n  }\n\n  /**\n   * Checks the deployment status of the wallet's address to determine if it's a contract.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<boolean>} `true` if the address is a contract, `false` otherwise.\n   */\n  async getDeploymentStatus(\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<boolean> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    return await chain.addressIsContract(\n      await this.getAddress(txOptions),\n      txOptions,\n    )\n  }\n\n  /**\n   * Creates the wallet.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The operation to create the wallet.\n   */\n  async create(\n    auth: Auth,\n    userId: string,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    const transactionParams: TransactionParams = {\n      to: await this.getAddress(txOptions),\n      data: '0x',\n      value: 0n,\n    }\n    return await this.createOperation(\n      auth,\n      userId,\n      transactionParams,\n      txOptions,\n    )\n  }\n\n  /**\n   * Saves the wallet to the authentication system.\n   * @param auth - The auth or signer to save the wallet to.\n   * @param txOptions - The configuration options.\n   * @returns A Promise that resolves when the wallet is saved to the authentication system.\n   */\n  async saveWalletToAuth(\n    auth: Auth,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<void> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    const walletAddr = await this.getAddress(txOptions)\n    const userId = await auth.getUserId()\n    const users = await auth.getUserIds(\n      walletAddr,\n      await chain.getChainId(txOptions),\n      txOptions,\n    )\n    if (!users.includes(userId)) {\n      if (\n        (await checkWalletAccessInitialization({\n          walletAddr,\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: txOptions?.logger,\n          signal: txOptions?.signal,\n        })) === false\n      ) {\n        await initializeWalletAccess({\n          walletAddr,\n          creatorAddr: await auth.getAddress(),\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: txOptions?.logger,\n          signal: txOptions?.signal,\n        })\n      }\n      await addUserToWallet({\n        authId: await auth.getAddress(),\n        chainId: await chain.getChainId(txOptions),\n        walletAddr,\n        userIds: [userId],\n        walletUniqueId: this.walletUniqueId,\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: txOptions?.logger,\n        signal: txOptions?.signal,\n      })\n    }\n  }\n\n  /**\n   * Creates a new operation to be associated with the wallet and prepares it for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the operation.\n   * @param {TransactionParams} transactionParams - The parameters for the transaction.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The created and prepared operation.\n   */\n  async createOperation(\n    auth: Auth,\n    userId: string,\n    transactionParams: TransactionParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    if (!userId || userId === '') {\n      throw new InvalidParameterError(\n        ErrorCode.MissingParameter,\n        'userId is required',\n        'userId is required',\n        { userId },\n        'Provide userId when createOperation',\n        'https://docs.fun.xyz/how-to-guides/execute-transactions#execute-transactions',\n      )\n    }\n    const normalizedUserId = pad(userId as Hex, {\n      size: 32,\n    }).toLowerCase() as Hex\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    const sender = await this.getAddress(txOptions)\n    const initCode = (await chain.addressIsContract(sender, txOptions))\n      ? '0x'\n      : await this.getThisInitCode(chain, txOptions)\n    let paymasterAndData = '0x'\n\n    let maxFeePerGas: bigint\n    let maxPriorityFeePerGas: bigint\n    const chainId = await chain.getChainId(txOptions)\n    const OPStackChains = ['10', '8453']\n    if (OPStackChains.includes(chainId)) {\n      const gasPrice = await chain.getFeeData(txOptions)\n      maxFeePerGas = gasPrice.maxFeePerGas\n      maxPriorityFeePerGas = gasPrice.maxPriorityFeePerGas\n    } else {\n      maxFeePerGas = 1n\n      maxPriorityFeePerGas = 1n\n    }\n\n    const partialOp = {\n      callData: await this.buildCalldata(\n        auth,\n        normalizedUserId,\n        transactionParams,\n        txOptions,\n      ),\n      paymasterAndData,\n      sender,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      initCode,\n      nonce:\n        txOptions.nonce !== null && txOptions.nonce !== undefined\n          ? txOptions.nonce\n          : await this.getNonce(sender, undefined, txOptions),\n      preVerificationGas: 100_000n,\n      callGasLimit: BigInt(DEFAULT_USEROP_GAS_LIMIT),\n      verificationGasLimit: BigInt(DEFAULT_USEROP_GAS_LIMIT),\n    }\n\n    if ((await chain.getChainId(txOptions)) === '36865') {\n      partialOp.callGasLimit = BigInt(10e5)\n      partialOp.verificationGasLimit = BigInt(10e5)\n    }\n\n    const isGroupOp: boolean = (await auth.getUserId()) !== normalizedUserId\n\n    const operation: Operation = new Operation(partialOp, {\n      chainId: await chain.getChainId(txOptions),\n      opType: isGroupOp\n        ? OperationType.GROUP_OPERATION\n        : OperationType.SINGLE_OPERATION,\n      authType: isGroupOp ? AuthType.MULTI_SIG : AuthType.ECDSA,\n      walletAddr: await this.getAddress(txOptions),\n      proposer: await auth.getAddress(),\n    })\n\n    if (isGroupOp) {\n      operation.groupId = normalizedUserId\n    }\n\n    if (txOptions.gasSponsor && Object.keys(txOptions.gasSponsor).length > 0) {\n      if (txOptions.gasSponsor.token) {\n        const sponsor = new TokenSponsor(txOptions)\n        if (txOptions.gasSponsor.usePermit) {\n          paymasterAndData = (\n            await sponsor.getPaymasterAndDataPermit(\n              operation,\n              await this.getAddress(txOptions),\n              normalizedUserId,\n              auth,\n            )\n          ).toLowerCase()\n        } else {\n          paymasterAndData = (\n            await sponsor.getPaymasterAndData(txOptions)\n          ).toLowerCase()\n        }\n      } else if (txOptions.gasSponsor.useCheckoutSponsor) {\n        const sponsor = new CheckoutSponsor(txOptions)\n        paymasterAndData = (\n          await sponsor.getPaymasterAndData(txOptions)\n        ).toLowerCase()\n      } else {\n        const sponsor = new GaslessSponsor(txOptions)\n        paymasterAndData = (\n          await sponsor.getPaymasterAndData(txOptions)\n        ).toLowerCase()\n      }\n    }\n    operation.userOp.paymasterAndData = paymasterAndData\n\n    const estimatedOperation = await this.estimateOperation(\n      auth,\n      normalizedUserId,\n      operation,\n      txOptions,\n    )\n\n    if (txOptions.bypassInit) {\n      estimatedOperation.userOp.initCode = '0x'\n    }\n\n    // sign the userOp directly here as we do not have the opId yet\n    estimatedOperation.userOp.signature = await auth.signOp(\n      estimatedOperation,\n      chain,\n      isGroupOperation(operation),\n      txOptions,\n    )\n\n    if (txOptions.skipDBAction !== true) {\n      const opId = await createOp({\n        op: estimatedOperation,\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: txOptions?.logger,\n        signal: txOptions?.signal,\n      })\n      estimatedOperation.opId = opId as Hex\n      if (\n        !(await checkWalletAccessInitialization({\n          walletAddr: sender,\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: txOptions?.logger,\n          signal: txOptions?.signal,\n        }))\n      ) {\n        await initializeWalletAccess({\n          walletAddr: sender,\n          creatorAddr: await auth.getAddress(),\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: txOptions?.logger,\n          signal: txOptions?.signal,\n        })\n      }\n    }\n\n    return estimatedOperation\n  }\n\n  /**\n   * Signs an operation using the provided authentication instance and returns the signed operation.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {Operation} operation - The operation to be signed.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The signed operation.\n   */\n  async signOperation(\n    auth: Auth,\n    operation: OperationData,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    const finalOperation = Operation.convertTypeToObject(operation)\n    finalOperation.userOp.signature = await auth.signOp(\n      finalOperation,\n      chain,\n      isGroupOperation(finalOperation),\n      txOptions,\n    )\n    if (isGroupOperation(finalOperation) && txOptions.skipDBAction !== true) {\n      await signOp({\n        opId: finalOperation.opId ?? '0x',\n        chainId: await chain.getChainId(txOptions),\n        signature: finalOperation.userOp.signature as Hex,\n        signedBy: await auth.getAddress(),\n        threshold: this.userInfo?.get(finalOperation.groupId ?? '0x')?.groupInfo\n          ?.threshold,\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: txOptions?.logger,\n        signal: txOptions?.signal,\n      })\n    }\n\n    return finalOperation\n  }\n\n  /**\n   * Executes an operation and returns the execution receipt.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {Operation} operation - The operation to be executed.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<ExecutionReceipt>} The execution receipt of the operation.\n   */\n  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO - Complexity\n  async executeOperation(\n    auth: Auth,\n    operation: OperationData,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<ExecutionReceipt> {\n    const finalTxOptions = parseOptions(txOptions)\n    const finalOperation = Operation.convertTypeToObject(operation)\n    const chain = await Chain.getChain(\n      {\n        chainIdentifier: finalTxOptions.chain,\n      },\n      txOptions,\n    )\n    const chainId = await chain.getChainId(txOptions)\n    const finalOperationGroupId = finalOperation.groupId ?? '0x'\n    const finalOperationOpId = finalOperation.opId ?? '0x'\n\n    if (finalTxOptions.skipDBAction !== true) {\n      // cache group info\n      if (isGroupOperation(finalOperation)) {\n        const groups: GroupMetadata[] = await getGroups({\n          groupIds: [finalOperationGroupId],\n          chainId,\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: txOptions?.logger,\n          signal: txOptions?.signal,\n        })\n        if (groups && groups.length > 0) {\n          // could be empty as a new wallet wants to create a group\n          this.userInfo?.set(finalOperationGroupId, {\n            userId: finalOperationGroupId,\n            groupInfo: {\n              threshold: groups[0].threshold,\n              memberIds: groups[0].memberIds,\n            },\n          })\n        }\n      }\n    }\n\n    const threshold: number =\n      this.userInfo?.get(finalOperationGroupId)?.groupInfo?.threshold ?? 1\n\n    if (threshold <= 1) {\n      if (\n        !finalOperation.userOp.signature ||\n        finalOperation.userOp.signature === '0x'\n      ) {\n        finalOperation.userOp.signature = await auth.signOp(\n          finalOperation,\n          chain,\n          isGroupOperation(finalOperation),\n          txOptions,\n        )\n      }\n    } else {\n      if (finalTxOptions.skipDBAction !== true) {\n        // check remote collected signature\n        const storedOps = await getOps({\n          opIds: [finalOperationOpId],\n          chainId,\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: txOptions?.logger,\n          signal: txOptions?.signal,\n        })\n\n        let collectedSigCount: number\n        if (\n          isSignatureMissing(await auth.getUserId(), storedOps[0]?.signatures)\n        ) {\n          collectedSigCount = storedOps[0]?.signatures?.length\n            ? storedOps[0]?.signatures?.length + 1\n            : 1\n          if (collectedSigCount >= threshold) {\n            finalOperation.userOp.signature = await auth.signOp(\n              finalOperation,\n              chain,\n              isGroupOperation(finalOperation),\n              txOptions,\n            )\n          }\n        } else {\n          collectedSigCount = storedOps[0]?.signatures?.length ?? 1\n        }\n\n        if (collectedSigCount < threshold) {\n          throw new InvalidParameterError(\n            ErrorCode.InsufficientSignatures,\n            'Signatures are not sufficient to execute the operation',\n            'Signatures are not sufficient to execute the operation',\n            { threshold, collectedSigCount, chainId },\n            'Only execute operation with enough signatures',\n            'https://docs.fun.xyz/how-to-guides/execute-transactions#execute-transactions',\n          )\n        }\n      } else {\n        throw new InvalidParameterError(\n          ErrorCode.InsufficientSignatures,\n          'Signatures are not sufficient to execute the operation',\n          'Signatures are not sufficient to execute the operation',\n          { threshold, chainId, skipDBAction: finalTxOptions.skipDBAction },\n          'Only execute operation with enough signatures',\n          'https://docs.fun.xyz/how-to-guides/execute-transactions#execute-transactions',\n        )\n      }\n    }\n\n    let receipt: ExecutionReceipt\n    if (isGroupOperation(finalOperation)) {\n      receipt = await executeOp({\n        input: {\n          opId: finalOperationOpId,\n          chainId,\n          executedBy: await auth.getAddress(),\n          entryPointAddress: await chain.getAddress(\n            'entryPointAddress',\n            txOptions,\n          ),\n          signature: finalOperation.userOp.signature as Hex,\n          groupInfo: this.userInfo?.get(finalOperationGroupId)?.groupInfo,\n        },\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: txOptions.logger,\n        signal: txOptions.signal,\n      })\n    } else {\n      receipt = await executeOp({\n        input: {\n          opId: finalOperationOpId,\n          chainId,\n          executedBy: await auth.getAddress(),\n          entryPointAddress: await chain.getAddress(\n            'entryPointAddress',\n            txOptions,\n          ),\n          signature: finalOperation.userOp.signature as Hex,\n          userOp: finalOperation.userOp,\n        },\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: txOptions.logger,\n        signal: txOptions.signal,\n      })\n    }\n    receipt = await getFullReceipt({\n      opId: finalOperationOpId,\n      chainId,\n      userOpHash: receipt.userOpHash,\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: txOptions.logger,\n      signal: txOptions.signal,\n    })\n    if (\n      isWalletInitOp(finalOperation.userOp) &&\n      finalTxOptions.skipDBAction !== true\n    ) {\n      await addUserToWallet({\n        authId: await auth.getAddress(),\n        chainId,\n        walletAddr: await this.getAddress(finalTxOptions),\n        userIds: this.userInfo ? Array.from(this.userInfo.keys()) : [],\n        walletUniqueId: this.walletUniqueId,\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: finalTxOptions.logger,\n        signal: finalTxOptions.signal,\n      })\n\n      if (finalTxOptions?.gasSponsor?.sponsorAddress) {\n        const paymasterType = getPaymasterType(finalTxOptions)\n        addTransaction({\n          chainId,\n          timestamp: Date.now(),\n          txid: receipt.txId,\n          transaction: {\n            action: 'sponsor',\n            amount: -1, // Get amount from lazy processing\n            from: finalTxOptions.gasSponsor.sponsorAddress,\n            to: await this.getAddress(finalTxOptions),\n            token: 'eth',\n            txid: receipt.txId,\n          },\n          paymasterType,\n          sponsorAddress: finalTxOptions.gasSponsor.sponsorAddress,\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: finalTxOptions.logger,\n          signal: finalTxOptions.signal,\n        })\n      }\n    }\n    return receipt\n  }\n\n  /**\n   * Schedules an operation for execution and returns the scheduled operation's ID.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {Operation} finalOperation - The operation to be scheduled.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Hex>} The ID of the scheduled operation.\n   */\n  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO - Complexity\n  async scheduleOperation(\n    auth: Auth,\n    operation: Operation,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Hex> {\n    const finalTxOptions = parseOptions(txOptions)\n    const finalOperation = Operation.convertTypeToObject(operation)\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    const chainId = await chain.getChainId(txOptions)\n    const finalOperationGroupId = finalOperation.groupId ?? '0x'\n    const finalOperationOpId = finalOperation.opId ?? '0x'\n\n    if (finalTxOptions.skipDBAction !== true) {\n      // cache group info\n      if (isGroupOperation(finalOperation)) {\n        const groups: GroupMetadata[] = await getGroups({\n          groupIds: [finalOperationGroupId],\n          chainId,\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: txOptions.logger,\n          signal: txOptions.signal,\n        })\n        if (groups && groups.length > 0) {\n          // could be empty as a new wallet wants to create a group\n          this.userInfo?.set(finalOperationGroupId, {\n            userId: finalOperationGroupId,\n            groupInfo: {\n              threshold: groups[0].threshold,\n              memberIds: groups[0].memberIds,\n            },\n          })\n        }\n      }\n    }\n\n    const threshold: number =\n      this.userInfo?.get(finalOperationGroupId)?.groupInfo?.threshold ?? 1\n\n    if (threshold <= 1) {\n      if (\n        !finalOperation.userOp.signature ||\n        finalOperation.userOp.signature === '0x'\n      ) {\n        finalOperation.userOp.signature = await auth.signOp(\n          finalOperation,\n          chain,\n          isGroupOperation(finalOperation),\n          txOptions,\n        )\n      }\n    } else {\n      if (finalTxOptions.skipDBAction !== true) {\n        // check remote collected signature\n        const storedOps = await getOps({\n          opIds: [finalOperationOpId],\n          chainId,\n          apiKey: globalThis.globalEnvOption.apiKey,\n          logger: txOptions.logger,\n          signal: txOptions.signal,\n        })\n\n        let collectedSigCount: number\n        if (\n          isSignatureMissing(await auth.getUserId(), storedOps[0]?.signatures)\n        ) {\n          collectedSigCount = storedOps[0]?.signatures?.length\n            ? storedOps[0]?.signatures?.length + 1\n            : 1\n          if (collectedSigCount >= threshold) {\n            finalOperation.userOp.signature = await auth.signOp(\n              finalOperation,\n              chain,\n              isGroupOperation(finalOperation),\n              txOptions,\n            )\n          }\n        } else {\n          collectedSigCount = storedOps[0]?.signatures?.length ?? 1\n        }\n\n        if (collectedSigCount < threshold) {\n          throw new InvalidParameterError(\n            ErrorCode.InsufficientSignatures,\n            'Signatures are not sufficient to execute the operation',\n            'Signatures are not sufficient to execute the operation',\n            { threshold, collectedSigCount, chainId },\n            'Only execute operation with enough signatures',\n            'https://docs.fun.xyz/how-to-guides/execute-transactions#execute-transactions',\n          )\n        }\n      } else {\n        throw new InvalidParameterError(\n          ErrorCode.InsufficientSignatures,\n          'Signatures are not sufficient to execute the operation',\n          'Signatures are not sufficient to execute the operation',\n          { threshold, chainId, skipDBAction: finalTxOptions.skipDBAction },\n          'Only execute operation with enough signatures',\n          'https://docs.fun.xyz/how-to-guides/execute-transactions#execute-transactions',\n        )\n      }\n    }\n\n    if (isGroupOperation(finalOperation)) {\n      await scheduleOp({\n        input: {\n          opId: finalOperationOpId,\n          chainId,\n          scheduledBy: await auth.getAddress(),\n          entryPointAddress: await chain.getAddress(\n            'entryPointAddress',\n            txOptions,\n          ),\n          signature: finalOperation.userOp.signature as Hex,\n          groupInfo: this.userInfo?.get(finalOperationGroupId)?.groupInfo,\n        },\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: txOptions.logger,\n        signal: txOptions.signal,\n      })\n    } else {\n      await scheduleOp({\n        input: {\n          opId: finalOperationOpId,\n          chainId,\n          scheduledBy: await auth.getAddress(),\n          entryPointAddress: await chain.getAddress(\n            'entryPointAddress',\n            txOptions,\n          ),\n          signature: finalOperation.userOp.signature as Hex,\n          userOp: finalOperation.userOp,\n        },\n        apiKey: globalThis.globalEnvOption.apiKey,\n        logger: txOptions.logger,\n        signal: txOptions.signal,\n      })\n    }\n    if (!finalOperation.opId) {\n      throw new InternalFailureError(\n        ErrorCode.ServerFailure,\n        'Operation id is required',\n        '',\n        finalOperation,\n        'Make sure you are scheduling a valid operation',\n        'https://docs.fun.xyz/',\n      )\n    }\n    return finalOperation.opId\n  }\n\n  /**\n   * Removes an operation from the system using its ID.\n   * @param {Auth} _ - The authentication instance (not used in this method).\n   * @param {Hex} operationId - The ID of the operation to be removed.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<void>} A promise that resolves after the operation is removed.\n   */\n  async removeOperation(\n    _: Auth,\n    operationId: Hex,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<void> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    await deleteOp({\n      opId: operationId,\n      chainId: await chain.getChainId(txOptions),\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: txOptions?.logger,\n      signal: txOptions?.signal,\n    })\n  }\n\n  /**\n   * Creates and prepares a rejection operation for an existing operation.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} groupId - The ID of the group to which the operation belongs.\n   * @param {Operation} operation - The operation to be rejected.\n   * @param {string} rejectionMessage - Optional rejection message.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared rejection operation.\n   */\n  async createRejectOperation(\n    auth: Auth,\n    groupId: string,\n    operation: OperationData,\n    rejectionMessage?: string,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ) {\n    const rejectOperation = await this.transfer(\n      auth,\n      groupId,\n      { to: await this.getAddress(txOptions), amount: 0, token: 'eth' },\n      {\n        ...txOptions,\n        skipDBAction: true,\n        nonce: BigInt(operation.userOp.nonce),\n      },\n    )\n    if (rejectionMessage) {\n      rejectOperation.message = rejectionMessage\n    }\n    rejectOperation.relatedOpIds = [operation.opId ?? '0x']\n    rejectOperation.opType = OperationType.REJECTION\n    rejectOperation.opId = (await createOp({\n      op: rejectOperation,\n      apiKey: globalThis.globalEnvOption.apiKey,\n      logger: txOptions.logger,\n      signal: txOptions.signal,\n    })) as Hex\n    return rejectOperation\n  }\n\n  /**\n   * Estimates the gas cost for executing an operation and returns the updated operation with gas estimation details.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the operation.\n   * @param {Operation} operation - The operation for which to estimate gas.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The updated operation with gas estimation details.\n   */\n  async estimateOperation(\n    auth: Auth,\n    userId: string,\n    operation: Operation,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    const estimateGasSignature = await auth.getEstimateGasSignature(\n      userId,\n      operation,\n    )\n    operation.userOp.signature = estimateGasSignature.toLowerCase()\n    // FIXME: Nov 22 - Skipping estimation as pimlico will throw errors now unless state is mocked\n    // https://fun-xyz.slack.com/archives/C04Q5T1MQP3/p1732304544612249?thread_ts=1732302272.386699&cid=C04Q5T1MQP3\n    // const estimationPaymasterAddress = await chain.getAddress(\n    //   'estimationPaymasterAddress',\n    // )\n    const paymasterAndData = operation.userOp.paymasterAndData\n    // const res = await chain.estimateOpGas({\n    //   ...operation.userOp,\n    //   paymasterAndData: estimationPaymasterAddress,\n    // })\n    operation.userOp = {\n      ...operation.userOp,\n      // ...res,\n      paymasterAndData,\n    }\n\n    const { maxFeePerGas, maxPriorityFeePerGas } =\n      await chain.getFeeData(txOptions)\n    operation.userOp.maxFeePerGas = maxFeePerGas\n    operation.userOp.maxPriorityFeePerGas = maxPriorityFeePerGas\n    return operation\n  }\n\n  private async getThisInitCode(chain: Chain, options?: EnvOption) {\n    const owners: Hex[] = this.userInfo ? Array.from(this.userInfo.keys()) : []\n    const entryPointAddress = await chain.getAddress(\n      'entryPointAddress',\n      options,\n    )\n    const factoryAddress = await chain.getAddress('factoryAddress', options)\n    const rbac = await chain.getAddress('rbacAddress', options)\n    const userAuth = await chain.getAddress('userAuthAddress', options)\n\n    const loginData: LoginData = {\n      salt: this.walletUniqueId,\n    }\n\n    const rbacInitData = toBytes32Arr(owners)\n\n    let userAuthInitData = '0x' as Hex\n    const groupUsers: User[] = this.userInfo\n      ? Array.from(this.userInfo.values()).filter(\n          (user) => user.groupInfo !== null && user.groupInfo !== undefined,\n        )\n      : []\n    if (groupUsers.length > 0) {\n      userAuthInitData = encodeUserAuthInitData(groupUsers)\n    }\n\n    const initCodeParams: InitCodeParams = {\n      entryPointAddress,\n      factoryAddress,\n      implementationAddress: AddressZero,\n      loginData,\n      verificationAddresses: [rbac, userAuth],\n      verificationData: [rbacInitData, userAuthInitData],\n    }\n\n    return this.getInitCode(initCodeParams)\n  }\n\n  private getInitCode(input: InitCodeParams) {\n    const encodedVerificationInitdata = encodeAbiParameters(\n      [\n        {\n          type: 'address[]',\n          name: 'verificationAddresses',\n        },\n        {\n          type: 'bytes[]',\n          name: 'verificationData',\n        },\n      ],\n      [input.verificationAddresses, input.verificationData],\n    )\n    const initializerCallData = WALLET_CONTRACT_INTERFACE.encodeData(\n      'initialize',\n      [input.entryPointAddress, encodedVerificationInitdata],\n    )\n\n    const data = FACTORY_CONTRACT_INTERFACE.encodeData('createAccount', [\n      initializerCallData,\n      encodeLoginData(input.loginData),\n    ])\n    return concat([input.factoryAddress, data])\n  }\n\n  /**\n   * Encodes arbitrary transactions calls to include fees\n   * @param params Transaction Params, generated from various calldata generating functions\n   * @param options EnvOptions to read fee data from\n   * @returns calldata to be passed into createUserOperation\n   */\n  private async buildCalldata(\n    auth: Auth,\n    userId: string,\n    params: TransactionParams,\n    options: EnvOption,\n  ): Promise<Hex> {\n    if (!params.value) {\n      params.value = 0n\n    }\n    if (options.fee) {\n      if (\n        !options.fee.token &&\n        options.gasSponsor &&\n        options.gasSponsor.token\n      ) {\n        options.fee.token = options.gasSponsor.token\n      }\n      if (!options.fee.token) {\n        throw new InvalidParameterError(\n          ErrorCode.MissingParameter,\n          'EnvOption.fee.token or EnvOption.gasSponsor.token is required',\n          'EnvOption.fee.token or EnvOption.gasSponsor.token is required',\n          { options },\n          'Provide EnvOption.fee.token or EnvOption.gasSponsor.token when calling wallet.createOperation',\n          'https://docs.fun.xyz/how-to-guides/execute-transactions#execute-transactions',\n        )\n      }\n      if (!options.fee.recipient) {\n        throw new InvalidParameterError(\n          ErrorCode.MissingParameter,\n          'EnvOption.fee.recipient is required',\n          'EnvOption.fee.recipient is required',\n          { options },\n          'Provide EnvOption.fee.recipient when calling wallet.createOperation',\n          'https://docs.fun.xyz/how-to-guides/execute-transactions#execute-transactions',\n        )\n      }\n\n      const chain = await Chain.getChain(\n        { chainIdentifier: options.chain },\n        options,\n      )\n      const token = new Token(options.fee.token, chain)\n      if (options.fee.gasPercent && !token.isNative) {\n        throw new InvalidParameterError(\n          ErrorCode.InvalidParameterCombination,\n          'GasPercent is only valid for native tokens',\n          'GasPercent is only valid for native tokens',\n          { options },\n          'Use native token as the fee token if you want to charge fee based on percentage',\n          'https://docs.fun.xyz/how-to-guides/configure-environment/set-developer-fee',\n        )\n      }\n\n      if (token.isNative) {\n        options.fee.token = AddressZero\n      } else {\n        options.fee.token = await token.getAddress(options)\n      }\n\n      if (options.fee.amount) {\n        options.fee.amount = Number(\n          await token.getDecimalAmount(options.fee.amount, options),\n        )\n      } else if (options.fee.gasPercent) {\n        const feedata = [options.fee.token, options.fee.recipient, 1]\n        const estimateGasCalldata = WALLET_CONTRACT_INTERFACE.encodeData(\n          'execFromEntryPointWithFee',\n          [params.to, params.value, params.data, feedata],\n        )\n        const operation = await this.createOperation(\n          auth,\n          userId,\n          { to: params.to, value: params.value, data: estimateGasCalldata },\n          { ...options, fee: undefined },\n        )\n        const gasUsed = operation.getMaxTxCost()\n        options.fee.amount = Math.ceil(\n          (Number(gasUsed) * options.fee.gasPercent) / 100,\n        )\n      } else {\n        throw new InvalidParameterError(\n          ErrorCode.MissingParameter,\n          'EnvOption.fee.amount or EnvOption.fee.gasPercent is required',\n          'EnvOption.fee.amount or EnvOption.fee.gasPercent is required',\n          { options },\n          'Provide either EnvOption.fee.amount or EnvOption.fee.gasPercent when calling wallet.createOperation',\n          'https://docs.fun.xyz/how-to-guides/configure-environment/set-developer-fee',\n        )\n      }\n      const feedata = [\n        options.fee.token,\n        options.fee.recipient,\n        options.fee.amount,\n      ]\n      return WALLET_CONTRACT_INTERFACE.encodeData('execFromEntryPointWithFee', [\n        params.to,\n        params.value,\n        params.data,\n        feedata,\n      ])\n    }\n    return WALLET_CONTRACT_INTERFACE.encodeData('execFromEntryPoint', [\n      params.to,\n      params.value,\n      params.data,\n    ])\n  }\n}\n","import { type Address, pad } from 'viem'\n\nimport {\n  ErrorCode,\n  InvalidParameterError,\n  ResourceNotFoundError,\n} from '@funkit/utils'\nimport type { Auth } from '../auth'\nimport type { TransactionParams } from '../common'\nimport type { EnvOption } from '../config'\nimport { Chain, type Operation } from '../data'\nimport { getOnChainGroupData } from '../utils/GroupUtils'\nimport {\n  addOwnerTxParams,\n  createSessionKeyTransactionParams,\n  removeOwnerTxParams,\n} from './AccessControl'\nimport { createExecuteBatchTxParams } from './BatchActions'\nimport {\n  createGroupTxParams,\n  removeGroupTxParams,\n  updateGroupTxParams,\n} from './Group'\nimport {\n  finishUnstakeTransactionParams,\n  isFinishUnstakeParams,\n  isRequestUnstakeParams,\n  requestUnstakeTransactionParams,\n  stakeTransactionParams,\n} from './Stake'\nimport {\n  erc20ApproveTransactionParams,\n  isERC20ApproveParams,\n  isTokenTransferParams,\n  tokenTransferFromTransactionParams,\n  tokenTransferTransactionParams,\n} from './Token'\nimport type {\n  AddOwnerParams,\n  AddUserToGroupParams,\n  ApproveParams,\n  CreateGroupParams,\n  FinishUnstakeParams,\n  RemoveGroupParams,\n  RemoveOwnerParams,\n  RemoveUserFromGroupParams,\n  RequestUnstakeParams,\n  SessionKeyParams,\n  StakeParams,\n  TransferParams,\n  UpdateGroupParams,\n  UpdateThresholdOfGroupParams,\n} from './types'\n\nexport abstract class FirstClassActions {\n  protected chain: Chain\n\n  constructor(chain: Chain) {\n    this.chain = chain\n  }\n\n  /**\n   * Creates a new operation to be associated with the wallet and prepares it for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the operation.\n   * @param {TransactionParams} transactionParams - The parameters for the transaction.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The created and prepared operation.\n   */\n  abstract createOperation(\n    auth: Auth,\n    userId: string,\n    transactionParams: TransactionParams,\n    txOptions: EnvOption,\n  ): Promise<Operation>\n\n  /**\n   * Retrieves the wallet address associated with this FunWallet. The address should be the same for all EVM chains so no input is needed\n   * If the address is not already cached, it fetches it using the wallet's unique ID and chain information.\n   * @returns {Promise<Address>} The wallet address.\n   */\n  abstract getAddress(options?: EnvOption): Promise<Address>\n\n  /**\n   * Initiates a transfer operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the transfer.\n   * @param {TransferParams} params - The parameters for the transfer.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared transfer operation.\n   * @throws {InvalidParameterError} When provided parameters are missing or incorrect.\n   */\n  async transfer(\n    auth: Auth,\n    userId: string,\n    params: TransferParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    const overrideChain = await Chain.getChain(\n      { chainIdentifier: txOptions?.chain },\n      txOptions,\n    )\n    let transactionParams: TransactionParams\n    if (isTokenTransferParams(params)) {\n      if (params.from) {\n        transactionParams = await tokenTransferFromTransactionParams(\n          params,\n          overrideChain ?? this.chain,\n          txOptions,\n        )\n      } else {\n        transactionParams = await tokenTransferTransactionParams(\n          params,\n          overrideChain ?? this.chain,\n          txOptions,\n        )\n      }\n    } else {\n      throw new InvalidParameterError(\n        ErrorCode.InvalidParameter,\n        'Params were missing or incorrect',\n        'Params were missing or incorrect',\n        { params },\n        'Provide correct transfer params.',\n        'https://docs.fun.xyz',\n      )\n    }\n    return await this.createOperation(\n      auth,\n      userId,\n      transactionParams,\n      txOptions,\n    )\n  }\n\n  /**\n   * Initiates a erc20/erc721 token approval operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the token approval.\n   * @param {ApproveParams} params - The parameters for the token approval.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared token approval operation.\n   * @throws {InvalidParameterError} When provided parameters are missing or incorrect.\n   */\n  async tokenApprove(\n    auth: Auth,\n    userId: string,\n    params: ApproveParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    let transactionParams: TransactionParams\n    if (isERC20ApproveParams(params)) {\n      transactionParams = await erc20ApproveTransactionParams(params, txOptions)\n    } else {\n      throw new InvalidParameterError(\n        ErrorCode.InvalidParameter,\n        'Params were missing or incorrect',\n        'Params were missing or incorrect',\n        { params },\n        'Provide correct token approve params.',\n        'https://docs.fun.xyz',\n      )\n    }\n    return await this.createOperation(\n      auth,\n      userId,\n      transactionParams,\n      txOptions,\n    )\n  }\n\n  /**\n   * Initiates a stake operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the stake operation.\n   * @param {StakeParams} params - The parameters for the stake operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared stake operation.\n   */\n  async stake(\n    auth: Auth,\n    userId: string,\n    params: StakeParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    const transactionParams = await stakeTransactionParams(params, txOptions)\n    return await this.createOperation(\n      auth,\n      userId,\n      transactionParams,\n      txOptions,\n    )\n  }\n\n  /**\n   * Initiates an unstake operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the unstake operation.\n   * @param {RequestUnstakeParams | FinishUnstakeParams} params - The parameters for the unstake operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared unstake operation.\n   * @throws {InvalidParameterError} When provided parameters are missing or incorrect.\n   */\n  async unstake(\n    auth: Auth,\n    userId: string,\n    params: RequestUnstakeParams | FinishUnstakeParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    params.recipient ??= await this.getAddress(txOptions)\n    let transactionParams: TransactionParams\n    if (isRequestUnstakeParams(params)) {\n      transactionParams = await requestUnstakeTransactionParams(\n        params as RequestUnstakeParams,\n        txOptions,\n      )\n    } else if (isFinishUnstakeParams(params)) {\n      transactionParams = await finishUnstakeTransactionParams(\n        params as FinishUnstakeParams,\n        txOptions,\n      )\n    } else {\n      throw new InvalidParameterError(\n        ErrorCode.InvalidParameter,\n        'Params were missing or incorrect',\n        'Params were missing or incorrect',\n        { params },\n        'Provide correct unstake params.',\n        'https://docs.fun.xyz',\n      )\n    }\n    return await this.createOperation(\n      auth,\n      userId,\n      transactionParams,\n      txOptions,\n    )\n  }\n\n  /**\n   * Initiates a session key creation operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the session key creation.\n   * @param {SessionKeyParams} params - The parameters for the session key creation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared session key creation operation.\n   */\n  async createSessionKey(\n    auth: Auth,\n    userId: string,\n    params: SessionKeyParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    const transactionParams = await createSessionKeyTransactionParams(\n      params,\n      txOptions,\n    )\n    return await this.createOperation(\n      auth,\n      userId,\n      transactionParams,\n      txOptions,\n    )\n  }\n\n  /**\n   * Initiates an add owner operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the add owner operation.\n   * @param {AddOwnerParams} params - The parameters for the add owner operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared add owner operation.\n   */\n  async addOwner(\n    auth: Auth,\n    userId: string,\n    params: AddOwnerParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    const txParams = await addOwnerTxParams(params, txOptions)\n    return await this.createOperation(auth, userId, txParams, txOptions)\n  }\n\n  /**\n   * Initiates a remove owner operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the remove owner operation.\n   * @param {RemoveOwnerParams} params - The parameters for the remove owner operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared remove owner operation.\n   */\n  async removeOwner(\n    auth: Auth,\n    userId: string,\n    params: RemoveOwnerParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    const txParams = await removeOwnerTxParams(params, txOptions)\n    return await this.createOperation(auth, userId, txParams, txOptions)\n  }\n\n  /**\n   * Initiates a create group operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the create group operation.\n   * @param {CreateGroupParams} params - The parameters for the create group operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared create group operation.\n   */\n  async createGroup(\n    auth: Auth,\n    userId: string,\n    params: CreateGroupParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    const txParams = await createGroupTxParams(params, txOptions)\n    return await this.createOperation(auth, userId, txParams, txOptions)\n  }\n\n  /**\n   * Initiates an add user to group operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the add user to group operation.\n   * @param {AddUserToGroupParams} params - The parameters for the add user to group operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared add user to group operation.\n   */\n  async addUserToGroup(\n    auth: Auth,\n    userId: string,\n    params: AddUserToGroupParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    params.userId = pad(params.userId, { size: 32 })\n    params.groupId = pad(params.groupId, { size: 32 })\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    const onChainGroupData = await getOnChainGroupData(\n      params.groupId,\n      chain,\n      await this.getAddress(txOptions),\n      txOptions,\n    )\n    if (!onChainGroupData || onChainGroupData.memberIds.length === 0) {\n      throw new ResourceNotFoundError(\n        ErrorCode.GroupNotFound,\n        'group is not found',\n        'group is not found',\n        { params },\n        'Provide correct groupId and chainId.',\n        'https://docs.fun.xyz',\n      )\n    }\n\n    const originalMembers = new Set(onChainGroupData.memberIds)\n    const members = new Set(onChainGroupData.memberIds)\n    members.add(params.userId)\n    if (members.size <= originalMembers.size) {\n      throw new InvalidParameterError(\n        ErrorCode.UserAlreadyExists,\n        'user already exists in group',\n        'user already exists in group',\n        { params, originalMembers, userId: params.userId },\n        'Catch this error and swallow it as the user is already added.',\n        'https://docs.fun.xyz',\n      )\n    }\n\n    const updateGroupParams: UpdateGroupParams = {\n      groupId: params.groupId,\n      group: {\n        userIds: Array.from(members),\n        threshold: onChainGroupData.threshold,\n      },\n    }\n\n    const txParams = await updateGroupTxParams(updateGroupParams, txOptions)\n    return await this.createOperation(auth, userId, txParams, txOptions)\n  }\n\n  /**\n   * Initiates a remove user from group operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the remove user from group operation.\n   * @param {RemoveUserFromGroupParams} params - The parameters for the remove user from group operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared remove user from group operation.\n   */\n  async removeUserFromGroup(\n    auth: Auth,\n    userId: string,\n    params: RemoveUserFromGroupParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    params.userId = pad(params.userId, { size: 32 })\n    params.groupId = pad(params.groupId, { size: 32 })\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    const onChainGroupData = await getOnChainGroupData(\n      params.groupId,\n      chain,\n      await this.getAddress(txOptions),\n      txOptions,\n    )\n    if (!onChainGroupData || onChainGroupData.memberIds.length === 0) {\n      throw new ResourceNotFoundError(\n        ErrorCode.GroupNotFound,\n        'group is not found',\n        'group is not found',\n        { params },\n        'Provide correct groupId and chainId.',\n        'https://docs.fun.xyz',\n      )\n    }\n\n    const originalMembers = new Set(onChainGroupData.memberIds)\n    const members = new Set(onChainGroupData.memberIds)\n    members.delete(params.userId)\n    if (members.size >= originalMembers.size) {\n      throw new ResourceNotFoundError(\n        ErrorCode.UserNotFound,\n        'user does not exist in group',\n        'user does not exist in group',\n        { params, originalMembers, userId: params.userId },\n        'Catch this error and swallow it as the user does not exist in the group.',\n        'https://docs.fun.xyz',\n      )\n    }\n\n    const updateGroupParams: UpdateGroupParams = {\n      groupId: params.groupId,\n      group: {\n        userIds: Array.from(members),\n        threshold: onChainGroupData.threshold,\n      },\n    }\n    const txParams = await updateGroupTxParams(updateGroupParams, txOptions)\n    return await this.createOperation(auth, userId, txParams, txOptions)\n  }\n\n  /**\n   * Initiates an update threshold of group operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the update threshold of group operation.\n   * @param {UpdateThresholdOfGroupParams} params - The parameters for the update threshold of group operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared update threshold of group operation.\n   */\n  async updateThresholdOfGroup(\n    auth: Auth,\n    userId: string,\n    params: UpdateThresholdOfGroupParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    params.groupId = pad(params.groupId, { size: 32 })\n    const chain = await Chain.getChain(\n      { chainIdentifier: txOptions.chain },\n      txOptions,\n    )\n    const onChainGroupData = await getOnChainGroupData(\n      params.groupId,\n      chain,\n      await this.getAddress(txOptions),\n      txOptions,\n    )\n    if (!onChainGroupData || onChainGroupData.memberIds.length === 0) {\n      throw new ResourceNotFoundError(\n        ErrorCode.GroupNotFound,\n        'group is not found',\n        'group is not found',\n        { params },\n        'Provide correct groupId and chainId.',\n        'https://docs.fun.xyz',\n      )\n    }\n\n    if (\n      !Number.isInteger(params.threshold) ||\n      params.threshold < 1 ||\n      params.threshold > onChainGroupData.memberIds.length\n    ) {\n      throw new InvalidParameterError(\n        ErrorCode.InvalidThreshold,\n        'threshold can not be 0 or bigger than number of members in the group',\n        'threshold can not be 0 or bigger than number of members in the group',\n        { params, memberIds: onChainGroupData.memberIds },\n        'Provide proper threshold number.',\n        'https://docs.fun.xyz',\n      )\n    }\n\n    const updateGroupParams: UpdateGroupParams = {\n      groupId: params.groupId,\n      group: {\n        userIds: onChainGroupData.memberIds,\n        threshold: params.threshold,\n      },\n    }\n    const txParams = await updateGroupTxParams(updateGroupParams, txOptions)\n    return await this.createOperation(auth, userId, txParams, txOptions)\n  }\n\n  /**\n   * Initiates a remove group operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the remove group operation.\n   * @param {RemoveGroupParams} params - The parameters for the remove group operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared remove group operation.\n   */\n  async removeGroup(\n    auth: Auth,\n    userId: string,\n    params: RemoveGroupParams,\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    params.groupId = pad(params.groupId, { size: 32 })\n    const txParams = await removeGroupTxParams(params, txOptions)\n    return await this.createOperation(auth, userId, txParams, txOptions)\n  }\n\n  /**\n   * Initiates a batch operation and returns the prepared operation for execution.\n   * @param {Auth} auth - The authentication instance for the user.\n   * @param {string} userId - The ID of the user initiating the batch operation.\n   * @param {TransactionParams[]} params - An array of transaction parameters for the batch operation.\n   * @param {EnvOption} txOptions - Transaction environment options (default: global environment options).\n   * @returns {Promise<Operation>} The prepared batch operation.\n   */\n  async createBatchOperation(\n    auth: Auth,\n    userId: string,\n    params: TransactionParams[],\n    txOptions: EnvOption = globalThis.globalEnvOption,\n  ): Promise<Operation> {\n    const walletAddress = await this.getAddress(txOptions)\n    const txParams = createExecuteBatchTxParams(params, walletAddress)\n    return await this.createOperation(auth, userId, txParams, txOptions)\n  }\n}\n","import {\n  type Address,\n  type Hex,\n  concat,\n  decodeAbiParameters,\n  keccak256,\n} from 'viem'\n\nimport type { GroupInfo } from '@funkit/api-base'\nimport type { EnvOption } from 'src/config'\nimport { WALLET_CONTRACT_INTERFACE } from '../common'\nimport type { Chain } from '../data'\n\nexport async function getOnChainGroupData(\n  groupId: Hex,\n  chain: Chain,\n  walletAddr: Address,\n  options?: EnvOption,\n): Promise<GroupInfo> {\n  const userAuthContractAddr = await chain.getAddress(\n    'userAuthAddress',\n    options,\n  )\n  const groupKey = keccak256(concat([groupId, userAuthContractAddr]))\n\n  let storedGroupData: Hex\n\n  try {\n    storedGroupData = await WALLET_CONTRACT_INTERFACE.readFromChain(\n      walletAddr,\n      'getState',\n      [groupKey],\n      chain,\n      options,\n    )\n  } catch (err) {\n    // If contract returns \"0x\", readFromChain throws\n    if (err instanceof Error && err.message.match(/returned no data/)) {\n      storedGroupData = '0x'\n    } else {\n      throw err\n    }\n  }\n\n  if (storedGroupData === '0x') {\n    return {\n      memberIds: [],\n      threshold: 0,\n    }\n  }\n\n  const [storedGroup] = decodeAbiParameters(\n    [\n      {\n        type: 'tuple',\n        components: [{ type: 'bytes32[]' }, { type: 'uint256' }],\n      },\n    ],\n    storedGroupData,\n  )\n\n  return {\n    memberIds: storedGroup[0] as Hex[],\n    threshold: Number(storedGroup[1]),\n  }\n}\n"]}