[
 {
  "type": "constructor",
  "inputs": [
   {
    "name": "poolManager_",
    "type": "address",
    "internalType": "contract IPoolManager"
   },
   {
    "name": "stackRegistry_",
    "type": "address",
    "internalType": "contract IHookrStackRegistryV1"
   },
   {
    "name": "coordinator_",
    "type": "address",
    "internalType": "address"
   }
  ],
  "stateMutability": "nonpayable"
 },
 {
  "type": "receive",
  "stateMutability": "payable"
 },
 {
  "type": "function",
  "name": "DYNAMIC_FEE_FLAG",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint24",
    "internalType": "uint24"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "KERNEL_FAMILY_ID",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "MAX_MODULE_DATA_LENGTH",
  "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": "MIN_SQRT_PRICE_LIMIT",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint160",
    "internalType": "uint160"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "ROUTER_INTEGRATION_KIND",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "view"
 },
 {
  "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": "coordinator",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "address"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "coordinatorCodeHash",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "exactInput",
  "inputs": [
   {
    "name": "params",
    "type": "tuple",
    "internalType": "struct HookrKernelRouterV3.ExactInputParams",
    "components": [
     {
      "name": "key",
      "type": "tuple",
      "internalType": "struct PoolKey",
      "components": [
       {
        "name": "currency0",
        "type": "address",
        "internalType": "Currency"
       },
       {
        "name": "currency1",
        "type": "address",
        "internalType": "Currency"
       },
       {
        "name": "fee",
        "type": "uint24",
        "internalType": "uint24"
       },
       {
        "name": "tickSpacing",
        "type": "int24",
        "internalType": "int24"
       },
       {
        "name": "hooks",
        "type": "address",
        "internalType": "contract IHooks"
       }
      ]
     },
     {
      "name": "zeroForOne",
      "type": "bool",
      "internalType": "bool"
     },
     {
      "name": "amountIn",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "amountOutMinimum",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "sqrtPriceLimitX96",
      "type": "uint160",
      "internalType": "uint160"
     },
     {
      "name": "recipient",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "deadline",
      "type": "uint256",
      "internalType": "uint256"
     }
    ]
   },
   {
    "name": "moduleData",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "amountOut",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "payable"
 },
 {
  "type": "function",
  "name": "exactInputInitialBuy",
  "inputs": [
   {
    "name": "params",
    "type": "tuple",
    "internalType": "struct IHookrKernelRouterV2.InitialBuyParams",
    "components": [
     {
      "name": "key",
      "type": "tuple",
      "internalType": "struct PoolKey",
      "components": [
       {
        "name": "currency0",
        "type": "address",
        "internalType": "Currency"
       },
       {
        "name": "currency1",
        "type": "address",
        "internalType": "Currency"
       },
       {
        "name": "fee",
        "type": "uint24",
        "internalType": "uint24"
       },
       {
        "name": "tickSpacing",
        "type": "int24",
        "internalType": "int24"
       },
       {
        "name": "hooks",
        "type": "address",
        "internalType": "contract IHooks"
       }
      ]
     },
     {
      "name": "creator",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "quoteAmountIn",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "subjectAmountOutMinimum",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "deadline",
      "type": "uint256",
      "internalType": "uint256"
     }
    ]
   },
   {
    "name": "moduleData",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "quoteAmountIn",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "subjectAmountOut",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "payable"
 },
 {
  "type": "function",
  "name": "exactOutput",
  "inputs": [
   {
    "name": "params",
    "type": "tuple",
    "internalType": "struct HookrKernelRouterV3.ExactOutputParams",
    "components": [
     {
      "name": "key",
      "type": "tuple",
      "internalType": "struct PoolKey",
      "components": [
       {
        "name": "currency0",
        "type": "address",
        "internalType": "Currency"
       },
       {
        "name": "currency1",
        "type": "address",
        "internalType": "Currency"
       },
       {
        "name": "fee",
        "type": "uint24",
        "internalType": "uint24"
       },
       {
        "name": "tickSpacing",
        "type": "int24",
        "internalType": "int24"
       },
       {
        "name": "hooks",
        "type": "address",
        "internalType": "contract IHooks"
       }
      ]
     },
     {
      "name": "zeroForOne",
      "type": "bool",
      "internalType": "bool"
     },
     {
      "name": "amountOut",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "amountInMaximum",
      "type": "uint128",
      "internalType": "uint128"
     },
     {
      "name": "sqrtPriceLimitX96",
      "type": "uint160",
      "internalType": "uint160"
     },
     {
      "name": "recipient",
      "type": "address",
      "internalType": "address"
     },
     {
      "name": "deadline",
      "type": "uint256",
      "internalType": "uint256"
     }
    ]
   },
   {
    "name": "moduleData",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "amountIn",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "payable"
 },
 {
  "type": "function",
  "name": "integrationFamilyId",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "integrationKind",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "integrationVersion",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint32",
    "internalType": "uint32"
   }
  ],
  "stateMutability": "pure"
 },
 {
  "type": "function",
  "name": "poolManager",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "contract IPoolManager"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "stackRegistry",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "contract IHookrStackRegistryV1"
   }
  ],
  "stateMutability": "view"
 },
 {
  "type": "function",
  "name": "unlockCallback",
  "inputs": [
   {
    "name": "rawData",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "bytes",
    "internalType": "bytes"
   }
  ],
  "stateMutability": "nonpayable"
 },
 {
  "type": "event",
  "name": "SwapExecuted",
  "inputs": [
   {
    "name": "poolId",
    "type": "bytes32",
    "indexed": true,
    "internalType": "PoolId"
   },
   {
    "name": "stackHash",
    "type": "bytes32",
    "indexed": true,
    "internalType": "bytes32"
   },
   {
    "name": "payer",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   },
   {
    "name": "recipient",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   },
   {
    "name": "kernel",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   },
   {
    "name": "currencyIn",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   },
   {
    "name": "currencyOut",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   },
   {
    "name": "exactInput",
    "type": "bool",
    "indexed": false,
    "internalType": "bool"
   },
   {
    "name": "amountIn",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   },
   {
    "name": "amountOut",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   },
   {
    "name": "moduleDataHash",
    "type": "bytes32",
    "indexed": false,
    "internalType": "bytes32"
   }
  ],
  "anonymous": false
 },
 {
  "type": "error",
  "name": "BalanceQueryFailed",
  "inputs": []
 },
 {
  "type": "error",
  "name": "CallbackNotActive",
  "inputs": []
 },
 {
  "type": "error",
  "name": "CallbackNotCompleted",
  "inputs": []
 },
 {
  "type": "error",
  "name": "CoordinatorCodeHashMismatch",
  "inputs": [
   {
    "name": "expected",
    "type": "bytes32",
    "internalType": "bytes32"
   },
   {
    "name": "actual",
    "type": "bytes32",
    "internalType": "bytes32"
   }
  ]
 },
 {
  "type": "error",
  "name": "DeadlineExpired",
  "inputs": [
   {
    "name": "deadline",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "timestamp",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "InputDebitMismatch",
  "inputs": [
   {
    "name": "expected",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "debited",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "InvalidAmount",
  "inputs": []
 },
 {
  "type": "error",
  "name": "InvalidNativeValue",
  "inputs": [
   {
    "name": "expected",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "received",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "InvalidRecipient",
  "inputs": []
 },
 {
  "type": "error",
  "name": "InvalidSqrtPriceLimit",
  "inputs": []
 },
 {
  "type": "error",
  "name": "InvalidStack",
  "inputs": []
 },
 {
  "type": "error",
  "name": "InvalidWiring",
  "inputs": []
 },
 {
  "type": "error",
  "name": "ModuleDataTooLarge",
  "inputs": []
 },
 {
  "type": "error",
  "name": "NotCoordinator",
  "inputs": [
   {
    "name": "expected",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "actual",
    "type": "address",
    "internalType": "address"
   }
  ]
 },
 {
  "type": "error",
  "name": "NotPoolManager",
  "inputs": []
 },
 {
  "type": "error",
  "name": "OutputCustodyMismatch",
  "inputs": [
   {
    "name": "expected",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "received",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "OutputDeliveryMismatch",
  "inputs": [
   {
    "name": "expected",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "received",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "PartialFill",
  "inputs": [
   {
    "name": "expected",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "actual",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "Reentrancy",
  "inputs": []
 },
 {
  "type": "error",
  "name": "RetainedBalance",
  "inputs": [
   {
    "name": "currency",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "expected",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "actual",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "SettlementMismatch",
  "inputs": [
   {
    "name": "expected",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "settled",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "StackNotInitialized",
  "inputs": []
 },
 {
  "type": "error",
  "name": "TooLittleReceived",
  "inputs": [
   {
    "name": "minimum",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "received",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "TooMuchRequested",
  "inputs": [
   {
    "name": "maximum",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "requested",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "type": "error",
  "name": "TransferFailed",
  "inputs": []
 },
 {
  "type": "error",
  "name": "UnexpectedDelta",
  "inputs": []
 },
 {
  "type": "error",
  "name": "UnexpectedNativeSender",
  "inputs": []
 },
 {
  "type": "error",
  "name": "UntrustedStackRouter",
  "inputs": [
   {
    "name": "expected",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "actual",
    "type": "address",
    "internalType": "address"
   }
  ]
 }
]