[
    {
      "type": "constructor",
      "inputs": [
        {
          "name": "core",
          "type": "address",
          "internalType": "contract ICore"
        }
      ],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "afterCollectFees",
      "inputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "",
          "type": "tuple",
          "internalType": "struct PoolKey",
          "components": [
            {
              "name": "token0",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "token1",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "config",
              "type": "bytes32",
              "internalType": "Config"
            }
          ]
        },
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        },
        {
          "name": "",
          "type": "tuple",
          "internalType": "struct Bounds",
          "components": [
            {
              "name": "lower",
              "type": "int32",
              "internalType": "int32"
            },
            {
              "name": "upper",
              "type": "int32",
              "internalType": "int32"
            }
          ]
        },
        {
          "name": "",
          "type": "uint128",
          "internalType": "uint128"
        },
        {
          "name": "",
          "type": "uint128",
          "internalType": "uint128"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "afterInitializePool",
      "inputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "key",
          "type": "tuple",
          "internalType": "struct PoolKey",
          "components": [
            {
              "name": "token0",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "token1",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "config",
              "type": "bytes32",
              "internalType": "Config"
            }
          ]
        },
        {
          "name": "",
          "type": "int32",
          "internalType": "int32"
        },
        {
          "name": "",
          "type": "uint96",
          "internalType": "SqrtRatio"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "afterSwap",
      "inputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "",
          "type": "tuple",
          "internalType": "struct PoolKey",
          "components": [
            {
              "name": "token0",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "token1",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "config",
              "type": "bytes32",
              "internalType": "Config"
            }
          ]
        },
        {
          "name": "",
          "type": "int128",
          "internalType": "int128"
        },
        {
          "name": "",
          "type": "bool",
          "internalType": "bool"
        },
        {
          "name": "",
          "type": "uint96",
          "internalType": "SqrtRatio"
        },
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "",
          "type": "int128",
          "internalType": "int128"
        },
        {
          "name": "",
          "type": "int128",
          "internalType": "int128"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "afterUpdatePosition",
      "inputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "",
          "type": "tuple",
          "internalType": "struct PoolKey",
          "components": [
            {
              "name": "token0",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "token1",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "config",
              "type": "bytes32",
              "internalType": "Config"
            }
          ]
        },
        {
          "name": "",
          "type": "tuple",
          "internalType": "struct UpdatePositionParameters",
          "components": [
            {
              "name": "salt",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "bounds",
              "type": "tuple",
              "internalType": "struct Bounds",
              "components": [
                {
                  "name": "lower",
                  "type": "int32",
                  "internalType": "int32"
                },
                {
                  "name": "upper",
                  "type": "int32",
                  "internalType": "int32"
                }
              ]
            },
            {
              "name": "liquidityDelta",
              "type": "int128",
              "internalType": "int128"
            }
          ]
        },
        {
          "name": "",
          "type": "int128",
          "internalType": "int128"
        },
        {
          "name": "",
          "type": "int128",
          "internalType": "int128"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "beforeCollectFees",
      "inputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "",
          "type": "tuple",
          "internalType": "struct PoolKey",
          "components": [
            {
              "name": "token0",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "token1",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "config",
              "type": "bytes32",
              "internalType": "Config"
            }
          ]
        },
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        },
        {
          "name": "",
          "type": "tuple",
          "internalType": "struct Bounds",
          "components": [
            {
              "name": "lower",
              "type": "int32",
              "internalType": "int32"
            },
            {
              "name": "upper",
              "type": "int32",
              "internalType": "int32"
            }
          ]
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "beforeInitializePool",
      "inputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "",
          "type": "tuple",
          "internalType": "struct PoolKey",
          "components": [
            {
              "name": "token0",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "token1",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "config",
              "type": "bytes32",
              "internalType": "Config"
            }
          ]
        },
        {
          "name": "",
          "type": "int32",
          "internalType": "int32"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "beforeSwap",
      "inputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "poolKey",
          "type": "tuple",
          "internalType": "struct PoolKey",
          "components": [
            {
              "name": "token0",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "token1",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "config",
              "type": "bytes32",
              "internalType": "Config"
            }
          ]
        },
        {
          "name": "",
          "type": "int128",
          "internalType": "int128"
        },
        {
          "name": "",
          "type": "bool",
          "internalType": "bool"
        },
        {
          "name": "",
          "type": "uint96",
          "internalType": "SqrtRatio"
        },
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "beforeUpdatePosition",
      "inputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "poolKey",
          "type": "tuple",
          "internalType": "struct PoolKey",
          "components": [
            {
              "name": "token0",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "token1",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "config",
              "type": "bytes32",
              "internalType": "Config"
            }
          ]
        },
        {
          "name": "",
          "type": "tuple",
          "internalType": "struct UpdatePositionParameters",
          "components": [
            {
              "name": "salt",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "bounds",
              "type": "tuple",
              "internalType": "struct Bounds",
              "components": [
                {
                  "name": "lower",
                  "type": "int32",
                  "internalType": "int32"
                },
                {
                  "name": "upper",
                  "type": "int32",
                  "internalType": "int32"
                }
              ]
            },
            {
              "name": "liquidityDelta",
              "type": "int128",
              "internalType": "int128"
            }
          ]
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "forwarded",
      "inputs": [
        {
          "name": "id",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "originalLocker",
          "type": "address",
          "internalType": "address"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "locked",
      "inputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "sload",
      "inputs": [
        {
          "name": "slot",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "tload",
      "inputs": [
        {
          "name": "slot",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "event",
      "name": "OrderProceedsWithdrawn",
      "inputs": [
        {
          "name": "owner",
          "type": "address",
          "indexed": false,
          "internalType": "address"
        },
        {
          "name": "salt",
          "type": "bytes32",
          "indexed": false,
          "internalType": "bytes32"
        },
        {
          "name": "orderKey",
          "type": "tuple",
          "indexed": false,
          "internalType": "struct OrderKey",
          "components": [
            {
              "name": "sellToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "buyToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "fee",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "startTime",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "endTime",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "name": "amount",
          "type": "uint128",
          "indexed": false,
          "internalType": "uint128"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "OrderUpdated",
      "inputs": [
        {
          "name": "owner",
          "type": "address",
          "indexed": false,
          "internalType": "address"
        },
        {
          "name": "salt",
          "type": "bytes32",
          "indexed": false,
          "internalType": "bytes32"
        },
        {
          "name": "orderKey",
          "type": "tuple",
          "indexed": false,
          "internalType": "struct OrderKey",
          "components": [
            {
              "name": "sellToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "buyToken",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "fee",
              "type": "uint64",
              "internalType": "uint64"
            },
            {
              "name": "startTime",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "endTime",
              "type": "uint256",
              "internalType": "uint256"
            }
          ]
        },
        {
          "name": "saleRateDelta",
          "type": "int112",
          "indexed": false,
          "internalType": "int112"
        }
      ],
      "anonymous": false
    },
    {
      "type": "error",
      "name": "BaseForwardeeAccountantOnly",
      "inputs": []
    },
    {
      "type": "error",
      "name": "CallPointNotImplemented",
      "inputs": []
    },
    {
      "type": "error",
      "name": "CoreOnly",
      "inputs": []
    },
    {
      "type": "error",
      "name": "InvalidTimestamps",
      "inputs": []
    },
    {
      "type": "error",
      "name": "MaxSaleRateDeltaPerTick",
      "inputs": []
    },
    {
      "type": "error",
      "name": "MustCollectProceedsBeforeCanceling",
      "inputs": []
    },
    {
      "type": "error",
      "name": "OrderAlreadyEnded",
      "inputs": []
    },
    {
      "type": "error",
      "name": "TickSpacingMustBeMaximum",
      "inputs": []
    },
    {
      "type": "error",
      "name": "TimeNumOrdersOverflow",
      "inputs": []
    }
]