[
 {
  "type": "constructor",
  "inputs": [
   {
    "name": "poolManager_",
    "type": "address",
    "internalType": "contract IPoolManager"
   },
   {
    "name": "stackRegistry_",
    "type": "address",
    "internalType": "contract IHookrStackRegistryV1"
   },
   {
    "name": "protocolRecipient_",
    "type": "address",
    "internalType": "address"
   }
  ],
  "stateMutability": "nonpayable"
 },
 {
  "type": "function",
  "name": "AUTO_BURN_ATTRIBUTION_KEY",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "CONFIG_SCHEMA_HASH",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "DEAD",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "address"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "EXCLUSIVE_GROUP",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "MAX_GUARD_BLOCKS",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "MAX_PROTOCOL_SHARE_BPS",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint16",
    "internalType": "uint16"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "MAX_QUOTE_DECIMALS",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "MAX_SQRT_PRICE_LIMIT",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint160",
    "internalType": "uint160"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "MAX_TOTAL_FEE_PIPS",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint24",
    "internalType": "uint24"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "MIN_POT_BUY_WEI",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint96",
    "internalType": "uint96"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "MIN_SQRT_PRICE_LIMIT",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint160",
    "internalType": "uint160"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "MODULE_KEY",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "MODULE_VERSION",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint32",
    "internalType": "uint32"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "NATIVE_CUT_ATTRIBUTION_KEY",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "PHASE_MASK",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint8",
    "internalType": "uint8"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "PROTOCOL_SHARE_ATTRIBUTION_KEY",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "accountingInvariant",
  "inputs": [
   {
    "name": "quote",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "afterSwap",
  "inputs": [
   {
    "name": "",
    "type": "tuple",
    "internalType": "struct HookrModuleTypesV1.AfterSwapContext",
    "components": [
     {
      "name": "poolId",
      "type": "bytes32",
      "internalType": "bytes32"
     },
     {
      "name": "sender",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "payer",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "recipient",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "subject",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "quote",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "trustedCaller",
      "type": "bool",
      "internalType": "bool"
     },
     {
      "name": "isBuy",
      "type": "bool",
      "internalType": "bool"
     },
     {
      "name": "exactInput",
      "type": "bool",
      "internalType": "bool"
     },
     {
      "name": "zeroForOne",
      "type": "bool",
      "internalType": "bool"
     },
     {
      "name": "amountSpecified",
      "type": "int256",
      "internalType": "int256"
     },
     {
      "name": "sqrtPriceLimitX96",
      "type": "uint160",
      "internalType": "uint160"
     },
     {
      "name": "amount0",
      "type": "int128",
      "internalType": "int128"
     },
     {
      "name": "amount1",
      "type": "int128",
      "internalType": "int128"
     },
     {
      "name": "hookData",
      "type": "bytes",
      "internalType": "bytes"
     }
    ]
   },
   {
    "name": "",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "tuple",
    "internalType": "struct HookrModuleTypesV1.ModuleResult",
    "components": [
     {
      "name": "lpFeeSurchargePips",
      "type": "uint24",
      "internalType": "uint24"
     },
     {
      "name": "quoteTakeBps",
      "type": "uint16",
      "internalType": "uint16"
     },
     {
      "name": "claimRecipient",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "attributionKey",
      "type": "bytes32",
      "internalType": "bytes32"
     }
    ]
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "afterSwapStateful",
  "inputs": [
   {
    "name": "context",
    "type": "tuple",
    "internalType": "struct HookrStatefulModuleTypesV1.AfterSwapContext",
    "components": [
     {
      "name": "swapContext",
      "type": "tuple",
      "internalType": "struct HookrModuleTypesV1.AfterSwapContext",
      "components": [
       {
        "name": "poolId",
        "type": "bytes32",
        "internalType": "bytes32"
       },
       {
        "name": "sender",
        "type": "address",
        "internalType": "address"
       },
       {
        "name": "payer",
        "type": "address",
        "internalType": "address"
       },
       {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
       },
       {
        "name": "subject",
        "type": "address",
        "internalType": "address"
       },
       {
        "name": "quote",
        "type": "address",
        "internalType": "address"
       },
       {
        "name": "trustedCaller",
        "type": "bool",
        "internalType": "bool"
       },
       {
        "name": "isBuy",
        "type": "bool",
        "internalType": "bool"
       },
       {
        "name": "exactInput",
        "type": "bool",
        "internalType": "bool"
       },
       {
        "name": "zeroForOne",
        "type": "bool",
        "internalType": "bool"
       },
       {
        "name": "amountSpecified",
        "type": "int256",
        "internalType": "int256"
       },
       {
        "name": "sqrtPriceLimitX96",
        "type": "uint160",
        "internalType": "uint160"
       },
       {
        "name": "amount0",
        "type": "int128",
        "internalType": "int128"
       },
       {
        "name": "amount1",
        "type": "int128",
        "internalType": "int128"
       },
       {
        "name": "hookData",
        "type": "bytes",
        "internalType": "bytes"
       }
      ]
     },
     {
      "name": "effectiveLpFeePips",
      "type": "uint24",
      "internalType": "uint24"
     },
     {
      "name": "aggregateSpecifiedQuoteTake",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "aggregateQuoteDonation",
      "type": "uint128",
      "internalType": "uint128"
     }
    ]
   },
   {
    "name": "config",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "result",
    "type": "tuple",
    "internalType": "struct HookrStatefulModuleTypesV1.AfterSwapResult",
    "components": [
     {
      "name": "quoteTakePips",
      "type": "uint24",
      "internalType": "uint24"
     },
     {
      "name": "subjectTakeBps",
      "type": "uint16",
      "internalType": "uint16"
     },
     {
      "name": "quoteTakeAmount",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "subjectTakeAmount",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "claimRecipient",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "subjectRecipient",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "quoteAttributionKey",
      "type": "bytes32",
      "internalType": "bytes32"
     },
     {
      "name": "subjectAttributionKey",
      "type": "bytes32",
      "internalType": "bytes32"
     }
    ]
   }
  ],
  "stateMutability": "nonpayable"
 },
 {
  "type": "function",
  "name": "beforeAddLiquidity",
  "inputs": [
   {
    "name": "context",
    "type": "tuple",
    "internalType": "struct HookrModuleTypesV1.LiquidityContext",
    "components": [
     {
      "name": "poolId",
      "type": "bytes32",
      "internalType": "bytes32"
     },
     {
      "name": "sender",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "subject",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "quote",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "tickLower",
      "type": "int24",
      "internalType": "int24"
     },
     {
      "name": "tickUpper",
      "type": "int24",
      "internalType": "int24"
     },
     {
      "name": "liquidityDelta",
      "type": "int256",
      "internalType": "int256"
     },
     {
      "name": "salt",
      "type": "bytes32",
      "internalType": "bytes32"
     },
     {
      "name": "hookData",
      "type": "bytes",
      "internalType": "bytes"
     }
    ]
   },
   {
    "name": "config",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "allowed",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "beforeSwap",
  "inputs": [
   {
    "name": "",
    "type": "tuple",
    "internalType": "struct HookrModuleTypesV1.SwapContext",
    "components": [
     {
      "name": "poolId",
      "type": "bytes32",
      "internalType": "bytes32"
     },
     {
      "name": "sender",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "payer",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "recipient",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "subject",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "quote",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "trustedCaller",
      "type": "bool",
      "internalType": "bool"
     },
     {
      "name": "isBuy",
      "type": "bool",
      "internalType": "bool"
     },
     {
      "name": "exactInput",
      "type": "bool",
      "internalType": "bool"
     },
     {
      "name": "zeroForOne",
      "type": "bool",
      "internalType": "bool"
     },
     {
      "name": "amountSpecified",
      "type": "int256",
      "internalType": "int256"
     },
     {
      "name": "sqrtPriceLimitX96",
      "type": "uint160",
      "internalType": "uint160"
     },
     {
      "name": "hookData",
      "type": "bytes",
      "internalType": "bytes"
     }
    ]
   },
   {
    "name": "",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "tuple",
    "internalType": "struct HookrModuleTypesV1.ModuleResult",
    "components": [
     {
      "name": "lpFeeSurchargePips",
      "type": "uint24",
      "internalType": "uint24"
     },
     {
      "name": "quoteTakeBps",
      "type": "uint16",
      "internalType": "uint16"
     },
     {
      "name": "claimRecipient",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "attributionKey",
      "type": "bytes32",
      "internalType": "bytes32"
     }
    ]
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "beforeSwapStateful",
  "inputs": [
   {
    "name": "context",
    "type": "tuple",
    "internalType": "struct HookrStatefulModuleTypesV1.BeforeSwapContext",
    "components": [
     {
      "name": "swapContext",
      "type": "tuple",
      "internalType": "struct HookrModuleTypesV1.SwapContext",
      "components": [
       {
        "name": "poolId",
        "type": "bytes32",
        "internalType": "bytes32"
       },
       {
        "name": "sender",
        "type": "address",
        "internalType": "address"
       },
       {
        "name": "payer",
        "type": "address",
        "internalType": "address"
       },
       {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
       },
       {
        "name": "subject",
        "type": "address",
        "internalType": "address"
       },
       {
        "name": "quote",
        "type": "address",
        "internalType": "address"
       },
       {
        "name": "trustedCaller",
        "type": "bool",
        "internalType": "bool"
       },
       {
        "name": "isBuy",
        "type": "bool",
        "internalType": "bool"
       },
       {
        "name": "exactInput",
        "type": "bool",
        "internalType": "bool"
       },
       {
        "name": "zeroForOne",
        "type": "bool",
        "internalType": "bool"
       },
       {
        "name": "amountSpecified",
        "type": "int256",
        "internalType": "int256"
       },
       {
        "name": "sqrtPriceLimitX96",
        "type": "uint160",
        "internalType": "uint160"
       },
       {
        "name": "hookData",
        "type": "bytes",
        "internalType": "bytes"
       }
      ]
     },
     {
      "name": "baseLpFeePips",
      "type": "uint24",
      "internalType": "uint24"
     }
    ]
   },
   {
    "name": "config",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "result",
    "type": "tuple",
    "internalType": "struct HookrStatefulModuleTypesV1.BeforeSwapResult",
    "components": [
     {
      "name": "lpFeeSurchargePips",
      "type": "uint24",
      "internalType": "uint24"
     },
     {
      "name": "quoteTakeBps",
      "type": "uint16",
      "internalType": "uint16"
     },
     {
      "name": "quoteTakePips",
      "type": "uint24",
      "internalType": "uint24"
     },
     {
      "name": "quoteDonationWeightBps",
      "type": "uint16",
      "internalType": "uint16"
     },
     {
      "name": "quoteEscrowWeightBps",
      "type": "uint16",
      "internalType": "uint16"
     },
     {
      "name": "quoteRoyaltyBps",
      "type": "uint16",
      "internalType": "uint16"
     },
     {
      "name": "quoteTakeAmount",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "quoteDonationAmount",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "claimRecipient",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "attributionKey",
      "type": "bytes32",
      "internalType": "bytes32"
     }
    ]
   }
  ],
  "stateMutability": "nonpayable"
 },
 {
  "type": "function",
  "name": "claim",
  "inputs": [
   {
    "name": "quote",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "type": "function",
  "name": "claimBalance",
  "inputs": [
   {
    "name": "quote",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "claimTo",
  "inputs": [
   {
    "name": "quote",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "to",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "type": "function",
  "name": "claimable",
  "inputs": [
   {
    "name": "quote",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "account",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "configSchemaHash",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "contractName",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "string",
    "internalType": "string"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "contractVersion",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "string",
    "internalType": "string"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "exclusiveGroup",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "guardBuyAmount",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint96",
    "internalType": "uint96"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "guardBuyBlock",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "blockNumber",
    "type": "uint40",
    "internalType": "uint40"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "guardLpEarnedQuote",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "moduleKey",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "moduleVersion",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint32",
    "internalType": "uint32"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "phaseMask",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint8",
    "internalType": "uint8"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "poolManager",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "contract IPoolManager"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "potBuyCount",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "count",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "potLastQualifyingBlock",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "blockNumber",
    "type": "uint40",
    "internalType": "uint40"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "potWei",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "protocolRecipient",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "address"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "protocolShareByStream",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   },
   {
    "name": "stream",
    "type": "uint8",
    "internalType": "uint8"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "requiresLockedFoundingPosition",
  "inputs": [
   {
    "name": "config",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "required",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "stackRegistry",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "contract IHookrStackRegistryV1"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "statefulModuleMagic",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "totalBurnedTokens",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "totalClaimLiability",
  "inputs": [
   {
    "name": "quote",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "totalHookFeesWei",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "totalLpDonatedWei",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "totalPotPaidWei",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "totalProtocolShareWei",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "outputs": [
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "unlockCallback",
  "inputs": [
   {
    "name": "data",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "stateMutability": "nonpayable"
 },
 {
  "type": "function",
  "name": "validateConfig",
  "inputs": [
   {
    "name": "config",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "configHash",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "validateProtocolShare",
  "inputs": [
   {
    "name": "config",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "enforced",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "validateStack",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "internalType": "bytes32"
   },
   {
    "name": "kernel",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "subject",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "quote",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "config",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "caps",
    "type": "tuple",
    "internalType": "struct HookrModuleTypesV1.ModuleConfigCaps",
    "components": [
     {
      "name": "configHash",
      "type": "bytes32",
      "internalType": "bytes32"
     },
     {
      "name": "maxLpFeeSurchargePips",
      "type": "uint24",
      "internalType": "uint24"
     },
     {
      "name": "maxSpecifiedQuoteTakeBps",
      "type": "uint16",
      "internalType": "uint16"
     },
     {
      "name": "maxUnspecifiedQuoteTakeBps",
      "type": "uint16",
      "internalType": "uint16"
     },
     {
      "name": "maxSubjectTakeBps",
      "type": "uint16",
      "internalType": "uint16"
     }
    ]
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "event",
  "name": "AutoBurn",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "indexed": true,
    "internalType": "bytes32"
   },
   {
    "name": "tokensBurned",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   }
  ],
  "anonymous": false
 },
 {
  "type": "event",
  "name": "Claimed",
  "inputs": [
   {
    "name": "quote",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   },
   {
    "name": "account",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   },
   {
    "name": "to",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   },
   {
    "name": "amount",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   }
  ],
  "anonymous": false
 },
 {
  "type": "event",
  "name": "HookFeesAccrued",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "indexed": true,
    "internalType": "bytes32"
   },
   {
    "name": "burnWei",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   },
   {
    "name": "lpWei",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   },
   {
    "name": "potWeiAdded",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   },
   {
    "name": "royaltyWei",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   },
   {
    "name": "royaltyTo",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   }
  ],
  "anonymous": false
 },
 {
  "type": "event",
  "name": "JackpotHit",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "indexed": true,
    "internalType": "bytes32"
   },
   {
    "name": "winner",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   },
   {
    "name": "amountWei",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   },
   {
    "name": "buyCount",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   }
  ],
  "anonymous": false
 },
 {
  "type": "event",
  "name": "LpRewardsDonated",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "indexed": true,
    "internalType": "bytes32"
   },
   {
    "name": "amountWei",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   }
  ],
  "anonymous": false
 },
 {
  "type": "event",
  "name": "ProtocolShareAccrued",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "indexed": true,
    "internalType": "bytes32"
   },
   {
    "name": "stream",
    "type": "uint8",
    "indexed": true,
    "internalType": "enum HookrNativeMechanicsBlockV2.ProtocolStream"
   },
   {
    "name": "amount",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   }
  ],
  "anonymous": false
 },
 {
  "type": "error",
  "name": "ClaimTransferFailed",
  "inputs": []
 },
 {
  "type": "error",
  "name": "ExactOutputBlockedDuringGuard",
  "inputs": []
 },
 {
  "type": "error",
  "name": "ExternalLiquidityBlockedDuringGuard",
  "inputs": []
 },
 {
  "type": "error",
  "name": "HookNotCalled",
  "inputs": []
 },
 {
  "type": "error",
  "name": "InvalidConfig",
  "inputs": []
 },
 {
  "type": "error",
  "name": "InvalidPotRecipient",
  "inputs": []
 },
 {
  "type": "error",
  "name": "InvalidRuntimeContext",
  "inputs": []
 },
 {
  "type": "error",
  "name": "MaxBuyExceeded",
  "inputs": [
   {
    "name": "attemptedQuoteAmount",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "maxQuoteAmount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "NotKernel",
  "inputs": []
 },
 {
  "type": "error",
  "name": "NotPoolManager",
  "inputs": []
 },
 {
  "type": "error",
  "name": "NothingToClaim",
  "inputs": []
 },
 {
  "type": "error",
  "name": "PartialFillUnsupportedWithInputCuts",
  "inputs": []
 },
 {
  "type": "error",
  "name": "ProtocolShareNotEnforced",
  "inputs": []
 },
 {
  "type": "error",
  "name": "StatefulKernelRequired",
  "inputs": []
 },
 {
  "type": "error",
  "name": "ZeroAddress",
  "inputs": []
 }
]