{
  "contractName": "IUniswapV3Factory",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        }
      ],
      "name": "FeeAmountEnabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "PoolCreated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        }
      ],
      "name": "feeAmountTickSpacing",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        }
      ],
      "name": "getPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        }
      ],
      "name": "createPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "int24",
          "name": "tickSpacing",
          "type": "int24"
        }
      ],
      "name": "enableFeeAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.8+commit.0bbfe453\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"}],\"name\":\"FeeAmountEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"createPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"}],\"name\":\"enableFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"feeAmountTickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"createPool(address,address,uint24)\":{\"details\":\"tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments are invalid.\",\"params\":{\"fee\":\"The desired fee for the pool\",\"tokenA\":\"One of the two tokens in the desired pool\",\"tokenB\":\"The other of the two tokens in the desired pool\"},\"returns\":{\"pool\":\"The address of the newly created pool\"}},\"enableFeeAmount(uint24,int24)\":{\"details\":\"Fee amounts may never be removed once enabled\",\"params\":{\"fee\":\"The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)\",\"tickSpacing\":\"The spacing between ticks to be enforced for all pools created with the given fee amount\"}},\"feeAmountTickSpacing(uint24)\":{\"details\":\"A fee amount can never be removed, so this value should be hard coded or cached in the calling context\",\"params\":{\"fee\":\"The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee\"},\"returns\":{\"_0\":\"The tick spacing\"}},\"getPool(address,address,uint24)\":{\"details\":\"tokenA and tokenB may be passed in either token0/token1 or token1/token0 order\",\"params\":{\"fee\":\"The fee collected upon every swap in the pool, denominated in hundredths of a bip\",\"tokenA\":\"The contract address of either token0 or token1\",\"tokenB\":\"The contract address of the other token\"},\"returns\":{\"pool\":\"The pool address\"}},\"owner()\":{\"details\":\"Can be changed by the current owner via setOwner\",\"returns\":{\"_0\":\"The address of the factory owner\"}},\"setOwner(address)\":{\"details\":\"Must be called by the current owner\",\"params\":{\"_owner\":\"The new owner of the factory\"}}},\"title\":\"The interface for the Uniswap V3 Factory\"},\"userdoc\":{\"methods\":{\"createPool(address,address,uint24)\":{\"notice\":\"Creates a pool for the given two tokens and fee\"},\"enableFeeAmount(uint24,int24)\":{\"notice\":\"Enables a fee amount with the given tickSpacing\"},\"feeAmountTickSpacing(uint24)\":{\"notice\":\"Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled\"},\"getPool(address,address,uint24)\":{\"notice\":\"Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist\"},\"owner()\":{\"notice\":\"Returns the current owner of the factory\"},\"setOwner(address)\":{\"notice\":\"Updates the owner of the factory\"}},\"notice\":\"The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees\"}},\"settings\":{\"compilationTarget\":{\"project:/contracts/interfaces/uniswap/IUniswapV3Factory.sol\":\"IUniswapV3Factory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"project:/contracts/interfaces/uniswap/IUniswapV3Factory.sol\":{\"keccak256\":\"0x481936e26021d5a9d68da06803eb1c8474673d281c256c14a471764c59c031e6\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bc9fe1be26c5828a84b928222facaefea5e74cbfa756f061a08b612636a4eadb\",\"dweb:/ipfs/QmPKCJxxUmjQnRhA7bzVhYeqKoFbJeRVUvbYwY9BYDRk2H\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title The interface for the Uniswap V3 Factory\n/// @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees\ninterface IUniswapV3Factory {\n    /// @notice Emitted when the owner of the factory is changed\n    /// @param oldOwner The owner before the owner was changed\n    /// @param newOwner The owner after the owner was changed\n    event OwnerChanged(address indexed oldOwner, address indexed newOwner);\n\n    /// @notice Emitted when a pool is created\n    /// @param token0 The first token of the pool by address sort order\n    /// @param token1 The second token of the pool by address sort order\n    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip\n    /// @param tickSpacing The minimum number of ticks between initialized ticks\n    /// @param pool The address of the created pool\n    event PoolCreated(\n        address indexed token0,\n        address indexed token1,\n        uint24 indexed fee,\n        int24 tickSpacing,\n        address pool\n    );\n\n    /// @notice Emitted when a new fee amount is enabled for pool creation via the factory\n    /// @param fee The enabled fee, denominated in hundredths of a bip\n    /// @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee\n    event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing);\n\n    /// @notice Returns the current owner of the factory\n    /// @dev Can be changed by the current owner via setOwner\n    /// @return The address of the factory owner\n    function owner() external view returns (address);\n\n    /// @notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled\n    /// @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context\n    /// @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee\n    /// @return The tick spacing\n    function feeAmountTickSpacing(uint24 fee) external view returns (int24);\n\n    /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist\n    /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order\n    /// @param tokenA The contract address of either token0 or token1\n    /// @param tokenB The contract address of the other token\n    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip\n    /// @return pool The pool address\n    function getPool(\n        address tokenA,\n        address tokenB,\n        uint24 fee\n    ) external view returns (address pool);\n\n    /// @notice Creates a pool for the given two tokens and fee\n    /// @param tokenA One of the two tokens in the desired pool\n    /// @param tokenB The other of the two tokens in the desired pool\n    /// @param fee The desired fee for the pool\n    /// @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved\n    /// from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments\n    /// are invalid.\n    /// @return pool The address of the newly created pool\n    function createPool(\n        address tokenA,\n        address tokenB,\n        uint24 fee\n    ) external returns (address pool);\n\n    /// @notice Updates the owner of the factory\n    /// @dev Must be called by the current owner\n    /// @param _owner The new owner of the factory\n    function setOwner(address _owner) external;\n\n    /// @notice Enables a fee amount with the given tickSpacing\n    /// @dev Fee amounts may never be removed once enabled\n    /// @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)\n    /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount\n    function enableFeeAmount(uint24 fee, int24 tickSpacing) external;\n}",
  "sourcePath": "/home/thezviad_gmail_com/src/swappa/contracts/interfaces/uniswap/IUniswapV3Factory.sol",
  "ast": {
    "absolutePath": "project:/contracts/interfaces/uniswap/IUniswapV3Factory.sol",
    "exportedSymbols": {
      "IUniswapV3Factory": [
        2808
      ]
    },
    "id": 2809,
    "license": "GPL-2.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2727,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "45:24:30"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": {
          "id": 2728,
          "nodeType": "StructuredDocumentation",
          "src": "71:163:30",
          "text": "@title The interface for the Uniswap V3 Factory\n @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees"
        },
        "fullyImplemented": false,
        "id": 2808,
        "linearizedBaseContracts": [
          2808
        ],
        "name": "IUniswapV3Factory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 2729,
              "nodeType": "StructuredDocumentation",
              "src": "268:185:30",
              "text": "@notice Emitted when the owner of the factory is changed\n @param oldOwner The owner before the owner was changed\n @param newOwner The owner after the owner was changed"
            },
            "id": 2735,
            "name": "OwnerChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2734,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2731,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "oldOwner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2735,
                  "src": "477:24:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2730,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "477:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2733,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2735,
                  "src": "503:24:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2732,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "503:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "476:52:30"
            },
            "src": "458:71:30"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2736,
              "nodeType": "StructuredDocumentation",
              "src": "535:421:30",
              "text": "@notice Emitted when a pool is created\n @param token0 The first token of the pool by address sort order\n @param token1 The second token of the pool by address sort order\n @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip\n @param tickSpacing The minimum number of ticks between initialized ticks\n @param pool The address of the created pool"
            },
            "id": 2748,
            "name": "PoolCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2747,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2738,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token0",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2748,
                  "src": "988:22:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2737,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "988:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2740,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token1",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2748,
                  "src": "1020:22:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2739,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1020:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2742,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "fee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2748,
                  "src": "1052:18:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 2741,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "1052:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2744,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tickSpacing",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2748,
                  "src": "1080:17:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 2743,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "1080:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2746,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "pool",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2748,
                  "src": "1107:12:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2745,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1107:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "978:147:30"
            },
            "src": "961:165:30"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2749,
              "nodeType": "StructuredDocumentation",
              "src": "1132:275:30",
              "text": "@notice Emitted when a new fee amount is enabled for pool creation via the factory\n @param fee The enabled fee, denominated in hundredths of a bip\n @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee"
            },
            "id": 2755,
            "name": "FeeAmountEnabled",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2751,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "fee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2755,
                  "src": "1435:18:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 2750,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "1435:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2753,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "tickSpacing",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2755,
                  "src": "1455:25:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 2752,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "1455:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1434:47:30"
            },
            "src": "1412:70:30"
          },
          {
            "body": null,
            "documentation": {
              "id": 2756,
              "nodeType": "StructuredDocumentation",
              "src": "1488:163:30",
              "text": "@notice Returns the current owner of the factory\n @dev Can be changed by the current owner via setOwner\n @return The address of the factory owner"
            },
            "functionSelector": "8da5cb5b",
            "id": 2761,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "owner",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2757,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1670:2:30"
            },
            "returnParameters": {
              "id": 2760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2759,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2761,
                  "src": "1696:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2758,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1696:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1695:9:30"
            },
            "scope": 2808,
            "src": "1656:49:30",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2762,
              "nodeType": "StructuredDocumentation",
              "src": "1711:348:30",
              "text": "@notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled\n @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context\n @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee\n @return The tick spacing"
            },
            "functionSelector": "22afcccb",
            "id": 2769,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "feeAmountTickSpacing",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2764,
                  "mutability": "mutable",
                  "name": "fee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2769,
                  "src": "2094:10:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 2763,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2094:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2093:12:30"
            },
            "returnParameters": {
              "id": 2768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2767,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2769,
                  "src": "2129:5:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 2766,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2129:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2128:7:30"
            },
            "scope": 2808,
            "src": "2064:72:30",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2770,
              "nodeType": "StructuredDocumentation",
              "src": "2142:471:30",
              "text": "@notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist\n @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order\n @param tokenA The contract address of either token0 or token1\n @param tokenB The contract address of the other token\n @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip\n @return pool The pool address"
            },
            "functionSelector": "1698ee82",
            "id": 2781,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getPool",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2772,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2781,
                  "src": "2644:14:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2771,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2644:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2774,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2781,
                  "src": "2668:14:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2773,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2668:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2776,
                  "mutability": "mutable",
                  "name": "fee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2781,
                  "src": "2692:10:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 2775,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2692:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2634:74:30"
            },
            "returnParameters": {
              "id": 2780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2779,
                  "mutability": "mutable",
                  "name": "pool",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2781,
                  "src": "2732:12:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2732:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2731:14:30"
            },
            "scope": 2808,
            "src": "2618:128:30",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2782,
              "nodeType": "StructuredDocumentation",
              "src": "2752:554:30",
              "text": "@notice Creates a pool for the given two tokens and fee\n @param tokenA One of the two tokens in the desired pool\n @param tokenB The other of the two tokens in the desired pool\n @param fee The desired fee for the pool\n @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved\n from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments\n are invalid.\n @return pool The address of the newly created pool"
            },
            "functionSelector": "a1671295",
            "id": 2793,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "createPool",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2784,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2793,
                  "src": "3340:14:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2783,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3340:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2786,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2793,
                  "src": "3364:14:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2785,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3364:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2788,
                  "mutability": "mutable",
                  "name": "fee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2793,
                  "src": "3388:10:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 2787,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "3388:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3330:74:30"
            },
            "returnParameters": {
              "id": 2792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2791,
                  "mutability": "mutable",
                  "name": "pool",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2793,
                  "src": "3423:12:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3423:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3422:14:30"
            },
            "scope": 2808,
            "src": "3311:126:30",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2794,
              "nodeType": "StructuredDocumentation",
              "src": "3443:144:30",
              "text": "@notice Updates the owner of the factory\n @dev Must be called by the current owner\n @param _owner The new owner of the factory"
            },
            "functionSelector": "13af4035",
            "id": 2799,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setOwner",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2797,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2796,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2799,
                  "src": "3610:14:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2795,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3610:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3609:16:30"
            },
            "returnParameters": {
              "id": 2798,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3634:0:30"
            },
            "scope": 2808,
            "src": "3592:43:30",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2800,
              "nodeType": "StructuredDocumentation",
              "src": "3641:326:30",
              "text": "@notice Enables a fee amount with the given tickSpacing\n @dev Fee amounts may never be removed once enabled\n @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)\n @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount"
            },
            "functionSelector": "8a7c195f",
            "id": 2807,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "enableFeeAmount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2802,
                  "mutability": "mutable",
                  "name": "fee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2807,
                  "src": "3997:10:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 2801,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "3997:6:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2804,
                  "mutability": "mutable",
                  "name": "tickSpacing",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2807,
                  "src": "4009:17:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 2803,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "4009:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3996:31:30"
            },
            "returnParameters": {
              "id": 2806,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4036:0:30"
            },
            "scope": 2808,
            "src": "3972:65:30",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 2809,
        "src": "234:3805:30"
      }
    ],
    "src": "45:3994:30"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/interfaces/uniswap/IUniswapV3Factory.sol",
      "exportedSymbols": {
        "IUniswapV3Factory": [
          2808
        ]
      },
      "license": "GPL-2.0-or-later"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            ">=",
            "0.5",
            ".0"
          ]
        },
        "id": 2727,
        "name": "PragmaDirective",
        "src": "45:24:30"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "interface",
          "fullyImplemented": false,
          "linearizedBaseContracts": [
            2808
          ],
          "name": "IUniswapV3Factory",
          "scope": 2809
        },
        "children": [
          {
            "attributes": {
              "text": "@title The interface for the Uniswap V3 Factory\n @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees"
            },
            "id": 2728,
            "name": "StructuredDocumentation",
            "src": "71:163:30"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "OwnerChanged"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Emitted when the owner of the factory is changed\n @param oldOwner The owner before the owner was changed\n @param newOwner The owner after the owner was changed"
                },
                "id": 2729,
                "name": "StructuredDocumentation",
                "src": "268:185:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "oldOwner",
                      "overrides": null,
                      "scope": 2735,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2730,
                        "name": "ElementaryTypeName",
                        "src": "477:7:30"
                      }
                    ],
                    "id": 2731,
                    "name": "VariableDeclaration",
                    "src": "477:24:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "newOwner",
                      "overrides": null,
                      "scope": 2735,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2732,
                        "name": "ElementaryTypeName",
                        "src": "503:7:30"
                      }
                    ],
                    "id": 2733,
                    "name": "VariableDeclaration",
                    "src": "503:24:30"
                  }
                ],
                "id": 2734,
                "name": "ParameterList",
                "src": "476:52:30"
              }
            ],
            "id": 2735,
            "name": "EventDefinition",
            "src": "458:71:30"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "PoolCreated"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Emitted when a pool is created\n @param token0 The first token of the pool by address sort order\n @param token1 The second token of the pool by address sort order\n @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip\n @param tickSpacing The minimum number of ticks between initialized ticks\n @param pool The address of the created pool"
                },
                "id": 2736,
                "name": "StructuredDocumentation",
                "src": "535:421:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "token0",
                      "overrides": null,
                      "scope": 2748,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2737,
                        "name": "ElementaryTypeName",
                        "src": "988:7:30"
                      }
                    ],
                    "id": 2738,
                    "name": "VariableDeclaration",
                    "src": "988:22:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "token1",
                      "overrides": null,
                      "scope": 2748,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2739,
                        "name": "ElementaryTypeName",
                        "src": "1020:7:30"
                      }
                    ],
                    "id": 2740,
                    "name": "VariableDeclaration",
                    "src": "1020:22:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "fee",
                      "overrides": null,
                      "scope": 2748,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint24",
                          "type": "uint24"
                        },
                        "id": 2741,
                        "name": "ElementaryTypeName",
                        "src": "1052:6:30"
                      }
                    ],
                    "id": 2742,
                    "name": "VariableDeclaration",
                    "src": "1052:18:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "tickSpacing",
                      "overrides": null,
                      "scope": 2748,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 2743,
                        "name": "ElementaryTypeName",
                        "src": "1080:5:30"
                      }
                    ],
                    "id": 2744,
                    "name": "VariableDeclaration",
                    "src": "1080:17:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "pool",
                      "overrides": null,
                      "scope": 2748,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2745,
                        "name": "ElementaryTypeName",
                        "src": "1107:7:30"
                      }
                    ],
                    "id": 2746,
                    "name": "VariableDeclaration",
                    "src": "1107:12:30"
                  }
                ],
                "id": 2747,
                "name": "ParameterList",
                "src": "978:147:30"
              }
            ],
            "id": 2748,
            "name": "EventDefinition",
            "src": "961:165:30"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "FeeAmountEnabled"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Emitted when a new fee amount is enabled for pool creation via the factory\n @param fee The enabled fee, denominated in hundredths of a bip\n @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee"
                },
                "id": 2749,
                "name": "StructuredDocumentation",
                "src": "1132:275:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "fee",
                      "overrides": null,
                      "scope": 2755,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint24",
                          "type": "uint24"
                        },
                        "id": 2750,
                        "name": "ElementaryTypeName",
                        "src": "1435:6:30"
                      }
                    ],
                    "id": 2751,
                    "name": "VariableDeclaration",
                    "src": "1435:18:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "tickSpacing",
                      "overrides": null,
                      "scope": 2755,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 2752,
                        "name": "ElementaryTypeName",
                        "src": "1455:5:30"
                      }
                    ],
                    "id": 2753,
                    "name": "VariableDeclaration",
                    "src": "1455:25:30"
                  }
                ],
                "id": 2754,
                "name": "ParameterList",
                "src": "1434:47:30"
              }
            ],
            "id": 2755,
            "name": "EventDefinition",
            "src": "1412:70:30"
          },
          {
            "attributes": {
              "body": null,
              "functionSelector": "8da5cb5b",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "owner",
              "overrides": null,
              "scope": 2808,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Returns the current owner of the factory\n @dev Can be changed by the current owner via setOwner\n @return The address of the factory owner"
                },
                "id": 2756,
                "name": "StructuredDocumentation",
                "src": "1488:163:30"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2757,
                "name": "ParameterList",
                "src": "1670:2:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 2761,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2758,
                        "name": "ElementaryTypeName",
                        "src": "1696:7:30"
                      }
                    ],
                    "id": 2759,
                    "name": "VariableDeclaration",
                    "src": "1696:7:30"
                  }
                ],
                "id": 2760,
                "name": "ParameterList",
                "src": "1695:9:30"
              }
            ],
            "id": 2761,
            "name": "FunctionDefinition",
            "src": "1656:49:30"
          },
          {
            "attributes": {
              "body": null,
              "functionSelector": "22afcccb",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "feeAmountTickSpacing",
              "overrides": null,
              "scope": 2808,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled\n @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context\n @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee\n @return The tick spacing"
                },
                "id": 2762,
                "name": "StructuredDocumentation",
                "src": "1711:348:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "fee",
                      "overrides": null,
                      "scope": 2769,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint24",
                          "type": "uint24"
                        },
                        "id": 2763,
                        "name": "ElementaryTypeName",
                        "src": "2094:6:30"
                      }
                    ],
                    "id": 2764,
                    "name": "VariableDeclaration",
                    "src": "2094:10:30"
                  }
                ],
                "id": 2765,
                "name": "ParameterList",
                "src": "2093:12:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 2769,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 2766,
                        "name": "ElementaryTypeName",
                        "src": "2129:5:30"
                      }
                    ],
                    "id": 2767,
                    "name": "VariableDeclaration",
                    "src": "2129:5:30"
                  }
                ],
                "id": 2768,
                "name": "ParameterList",
                "src": "2128:7:30"
              }
            ],
            "id": 2769,
            "name": "FunctionDefinition",
            "src": "2064:72:30"
          },
          {
            "attributes": {
              "body": null,
              "functionSelector": "1698ee82",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getPool",
              "overrides": null,
              "scope": 2808,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist\n @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order\n @param tokenA The contract address of either token0 or token1\n @param tokenB The contract address of the other token\n @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip\n @return pool The pool address"
                },
                "id": 2770,
                "name": "StructuredDocumentation",
                "src": "2142:471:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenA",
                      "overrides": null,
                      "scope": 2781,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2771,
                        "name": "ElementaryTypeName",
                        "src": "2644:7:30"
                      }
                    ],
                    "id": 2772,
                    "name": "VariableDeclaration",
                    "src": "2644:14:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenB",
                      "overrides": null,
                      "scope": 2781,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2773,
                        "name": "ElementaryTypeName",
                        "src": "2668:7:30"
                      }
                    ],
                    "id": 2774,
                    "name": "VariableDeclaration",
                    "src": "2668:14:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "fee",
                      "overrides": null,
                      "scope": 2781,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint24",
                          "type": "uint24"
                        },
                        "id": 2775,
                        "name": "ElementaryTypeName",
                        "src": "2692:6:30"
                      }
                    ],
                    "id": 2776,
                    "name": "VariableDeclaration",
                    "src": "2692:10:30"
                  }
                ],
                "id": 2777,
                "name": "ParameterList",
                "src": "2634:74:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "pool",
                      "overrides": null,
                      "scope": 2781,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2778,
                        "name": "ElementaryTypeName",
                        "src": "2732:7:30"
                      }
                    ],
                    "id": 2779,
                    "name": "VariableDeclaration",
                    "src": "2732:12:30"
                  }
                ],
                "id": 2780,
                "name": "ParameterList",
                "src": "2731:14:30"
              }
            ],
            "id": 2781,
            "name": "FunctionDefinition",
            "src": "2618:128:30"
          },
          {
            "attributes": {
              "body": null,
              "functionSelector": "a1671295",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "createPool",
              "overrides": null,
              "scope": 2808,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Creates a pool for the given two tokens and fee\n @param tokenA One of the two tokens in the desired pool\n @param tokenB The other of the two tokens in the desired pool\n @param fee The desired fee for the pool\n @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved\n from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments\n are invalid.\n @return pool The address of the newly created pool"
                },
                "id": 2782,
                "name": "StructuredDocumentation",
                "src": "2752:554:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenA",
                      "overrides": null,
                      "scope": 2793,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2783,
                        "name": "ElementaryTypeName",
                        "src": "3340:7:30"
                      }
                    ],
                    "id": 2784,
                    "name": "VariableDeclaration",
                    "src": "3340:14:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenB",
                      "overrides": null,
                      "scope": 2793,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2785,
                        "name": "ElementaryTypeName",
                        "src": "3364:7:30"
                      }
                    ],
                    "id": 2786,
                    "name": "VariableDeclaration",
                    "src": "3364:14:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "fee",
                      "overrides": null,
                      "scope": 2793,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint24",
                          "type": "uint24"
                        },
                        "id": 2787,
                        "name": "ElementaryTypeName",
                        "src": "3388:6:30"
                      }
                    ],
                    "id": 2788,
                    "name": "VariableDeclaration",
                    "src": "3388:10:30"
                  }
                ],
                "id": 2789,
                "name": "ParameterList",
                "src": "3330:74:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "pool",
                      "overrides": null,
                      "scope": 2793,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2790,
                        "name": "ElementaryTypeName",
                        "src": "3423:7:30"
                      }
                    ],
                    "id": 2791,
                    "name": "VariableDeclaration",
                    "src": "3423:12:30"
                  }
                ],
                "id": 2792,
                "name": "ParameterList",
                "src": "3422:14:30"
              }
            ],
            "id": 2793,
            "name": "FunctionDefinition",
            "src": "3311:126:30"
          },
          {
            "attributes": {
              "body": null,
              "functionSelector": "13af4035",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setOwner",
              "overrides": null,
              "scope": 2808,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Updates the owner of the factory\n @dev Must be called by the current owner\n @param _owner The new owner of the factory"
                },
                "id": 2794,
                "name": "StructuredDocumentation",
                "src": "3443:144:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_owner",
                      "overrides": null,
                      "scope": 2799,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2795,
                        "name": "ElementaryTypeName",
                        "src": "3610:7:30"
                      }
                    ],
                    "id": 2796,
                    "name": "VariableDeclaration",
                    "src": "3610:14:30"
                  }
                ],
                "id": 2797,
                "name": "ParameterList",
                "src": "3609:16:30"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2798,
                "name": "ParameterList",
                "src": "3634:0:30"
              }
            ],
            "id": 2799,
            "name": "FunctionDefinition",
            "src": "3592:43:30"
          },
          {
            "attributes": {
              "body": null,
              "functionSelector": "8a7c195f",
              "implemented": false,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "enableFeeAmount",
              "overrides": null,
              "scope": 2808,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Enables a fee amount with the given tickSpacing\n @dev Fee amounts may never be removed once enabled\n @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)\n @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount"
                },
                "id": 2800,
                "name": "StructuredDocumentation",
                "src": "3641:326:30"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "fee",
                      "overrides": null,
                      "scope": 2807,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint24",
                          "type": "uint24"
                        },
                        "id": 2801,
                        "name": "ElementaryTypeName",
                        "src": "3997:6:30"
                      }
                    ],
                    "id": 2802,
                    "name": "VariableDeclaration",
                    "src": "3997:10:30"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tickSpacing",
                      "overrides": null,
                      "scope": 2807,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 2803,
                        "name": "ElementaryTypeName",
                        "src": "4009:5:30"
                      }
                    ],
                    "id": 2804,
                    "name": "VariableDeclaration",
                    "src": "4009:17:30"
                  }
                ],
                "id": 2805,
                "name": "ParameterList",
                "src": "3996:31:30"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2806,
                "name": "ParameterList",
                "src": "4036:0:30"
              }
            ],
            "id": 2807,
            "name": "FunctionDefinition",
            "src": "3972:65:30"
          }
        ],
        "id": 2808,
        "name": "ContractDefinition",
        "src": "234:3805:30"
      }
    ],
    "id": 2809,
    "name": "SourceUnit",
    "src": "45:3994:30"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.8+commit.0bbfe453.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-02-07T17:50:42.784Z",
  "devdoc": {
    "methods": {
      "createPool(address,address,uint24)": {
        "details": "tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments are invalid.",
        "params": {
          "fee": "The desired fee for the pool",
          "tokenA": "One of the two tokens in the desired pool",
          "tokenB": "The other of the two tokens in the desired pool"
        },
        "returns": {
          "pool": "The address of the newly created pool"
        }
      },
      "enableFeeAmount(uint24,int24)": {
        "details": "Fee amounts may never be removed once enabled",
        "params": {
          "fee": "The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)",
          "tickSpacing": "The spacing between ticks to be enforced for all pools created with the given fee amount"
        }
      },
      "feeAmountTickSpacing(uint24)": {
        "details": "A fee amount can never be removed, so this value should be hard coded or cached in the calling context",
        "params": {
          "fee": "The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee"
        },
        "returns": {
          "_0": "The tick spacing"
        }
      },
      "getPool(address,address,uint24)": {
        "details": "tokenA and tokenB may be passed in either token0/token1 or token1/token0 order",
        "params": {
          "fee": "The fee collected upon every swap in the pool, denominated in hundredths of a bip",
          "tokenA": "The contract address of either token0 or token1",
          "tokenB": "The contract address of the other token"
        },
        "returns": {
          "pool": "The pool address"
        }
      },
      "owner()": {
        "details": "Can be changed by the current owner via setOwner",
        "returns": {
          "_0": "The address of the factory owner"
        }
      },
      "setOwner(address)": {
        "details": "Must be called by the current owner",
        "params": {
          "_owner": "The new owner of the factory"
        }
      }
    },
    "title": "The interface for the Uniswap V3 Factory"
  },
  "userdoc": {
    "methods": {
      "createPool(address,address,uint24)": {
        "notice": "Creates a pool for the given two tokens and fee"
      },
      "enableFeeAmount(uint24,int24)": {
        "notice": "Enables a fee amount with the given tickSpacing"
      },
      "feeAmountTickSpacing(uint24)": {
        "notice": "Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled"
      },
      "getPool(address,address,uint24)": {
        "notice": "Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist"
      },
      "owner()": {
        "notice": "Returns the current owner of the factory"
      },
      "setOwner(address)": {
        "notice": "Updates the owner of the factory"
      }
    },
    "notice": "The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees"
  }
}