UNISWAP_V3_NFT_TOKEN_MANGAGER_ABI = [{"inputs": [{"internalType": "address", "name": "_factory", "type": "address"},
                                                 {"internalType": "address", "name": "_WETH9", "type": "address"},
                                                 {"internalType": "address", "name": "_tokenDescriptor_",
                                                  "type": "address"}], "stateMutability": "nonpayable",
                                      "type": "constructor"}, {"anonymous": False, "inputs": [
    {"indexed": True, "internalType": "address", "name": "owner", "type": "address"},
    {"indexed": True, "internalType": "address", "name": "approved", "type": "address"},
    {"indexed": True, "internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "Approval",
                                                               "type": "event"}, {"anonymous": False, "inputs": [
    {"indexed": True, "internalType": "address", "name": "owner", "type": "address"},
    {"indexed": True, "internalType": "address", "name": "operator", "type": "address"},
    {"indexed": False, "internalType": "bool", "name": "approved", "type": "bool"}], "name": "ApprovalForAll",
                                                                                  "type": "event"}, {"anonymous": False,
                                                                                                     "inputs": [{
                                                                                                                    "indexed": True,
                                                                                                                    "internalType": "uint256",
                                                                                                                    "name": "tokenId",
                                                                                                                    "type": "uint256"},
                                                                                                                {
                                                                                                                    "indexed": False,
                                                                                                                    "internalType": "address",
                                                                                                                    "name": "recipient",
                                                                                                                    "type": "address"},
                                                                                                                {
                                                                                                                    "indexed": False,
                                                                                                                    "internalType": "uint256",
                                                                                                                    "name": "amount0",
                                                                                                                    "type": "uint256"},
                                                                                                                {
                                                                                                                    "indexed": False,
                                                                                                                    "internalType": "uint256",
                                                                                                                    "name": "amount1",
                                                                                                                    "type": "uint256"}],
                                                                                                     "name": "Collect",
                                                                                                     "type": "event"},
                                     {"anonymous": False, "inputs": [
                                         {"indexed": True, "internalType": "uint256", "name": "tokenId",
                                          "type": "uint256"},
                                         {"indexed": False, "internalType": "uint128", "name": "liquidity",
                                          "type": "uint128"},
                                         {"indexed": False, "internalType": "uint256", "name": "amount0",
                                          "type": "uint256"},
                                         {"indexed": False, "internalType": "uint256", "name": "amount1",
                                          "type": "uint256"}], "name": "DecreaseLiquidity", "type": "event"},
                                     {"anonymous": False, "inputs": [
                                         {"indexed": True, "internalType": "uint256", "name": "tokenId",
                                          "type": "uint256"},
                                         {"indexed": False, "internalType": "uint128", "name": "liquidity",
                                          "type": "uint128"},
                                         {"indexed": False, "internalType": "uint256", "name": "amount0",
                                          "type": "uint256"},
                                         {"indexed": False, "internalType": "uint256", "name": "amount1",
                                          "type": "uint256"}], "name": "IncreaseLiquidity", "type": "event"},
                                     {"anonymous": False, "inputs": [
                                         {"indexed": True, "internalType": "address", "name": "from",
                                          "type": "address"},
                                         {"indexed": True, "internalType": "address", "name": "to", "type": "address"},
                                         {"indexed": True, "internalType": "uint256", "name": "tokenId",
                                          "type": "uint256"}], "name": "Transfer", "type": "event"},
                                     {"inputs": [], "name": "DOMAIN_SEPARATOR",
                                      "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}],
                                      "stateMutability": "view", "type": "function"},
                                     {"inputs": [], "name": "PERMIT_TYPEHASH",
                                      "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}],
                                      "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "WETH9",
                                                                                       "outputs": [
                                                                                           {"internalType": "address",
                                                                                            "name": "",
                                                                                            "type": "address"}],
                                                                                       "stateMutability": "view",
                                                                                       "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "to", "type": "address"},
                                                    {"internalType": "uint256", "name": "tokenId", "type": "uint256"}],
                                         "name": "approve", "outputs": [], "stateMutability": "nonpayable",
                                         "type": "function"},
                                     {"inputs": [{"internalType": "address", "name": "owner", "type": "address"}],
                                      "name": "balanceOf",
                                      "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}],
                                      "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "baseURI",
                                                                                       "outputs": [
                                                                                           {"internalType": "string",
                                                                                            "name": "",
                                                                                            "type": "string"}],
                                                                                       "stateMutability": "pure",
                                                                                       "type": "function"},
                                     {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}],
                                      "name": "burn", "outputs": [], "stateMutability": "payable", "type": "function"},
                                     {"inputs": [{"components": [
                                         {"internalType": "uint256", "name": "tokenId", "type": "uint256"},
                                         {"internalType": "address", "name": "recipient", "type": "address"},
                                         {"internalType": "uint128", "name": "amount0Max", "type": "uint128"},
                                         {"internalType": "uint128", "name": "amount1Max", "type": "uint128"}],
                                                  "internalType": "struct INonfungiblePositionManager.CollectParams",
                                                  "name": "params", "type": "tuple"}], "name": "collect",
                                      "outputs": [{"internalType": "uint256", "name": "amount0", "type": "uint256"},
                                                  {"internalType": "uint256", "name": "amount1", "type": "uint256"}],
                                      "stateMutability": "payable", "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "token0", "type": "address"},
                                                    {"internalType": "address", "name": "token1", "type": "address"},
                                                    {"internalType": "uint24", "name": "fee", "type": "uint24"},
                                                    {"internalType": "uint160", "name": "sqrtPriceX96",
                                                     "type": "uint160"}], "name": "createAndInitializePoolIfNecessary",
                                         "outputs": [{"internalType": "address", "name": "pool", "type": "address"}],
                                         "stateMutability": "payable", "type": "function"}, {"inputs": [{"components": [
        {"internalType": "uint256", "name": "tokenId", "type": "uint256"},
        {"internalType": "uint128", "name": "liquidity", "type": "uint128"},
        {"internalType": "uint256", "name": "amount0Min", "type": "uint256"},
        {"internalType": "uint256", "name": "amount1Min", "type": "uint256"},
        {"internalType": "uint256", "name": "deadline", "type": "uint256"}],
                                                                                                         "internalType": "struct INonfungiblePositionManager.DecreaseLiquidityParams",
                                                                                                         "name": "params",
                                                                                                         "type": "tuple"}],
                                                                                             "name": "decreaseLiquidity",
                                                                                             "outputs": [{
                                                                                                             "internalType": "uint256",
                                                                                                             "name": "amount0",
                                                                                                             "type": "uint256"},
                                                                                                         {
                                                                                                             "internalType": "uint256",
                                                                                                             "name": "amount1",
                                                                                                             "type": "uint256"}],
                                                                                             "stateMutability": "payable",
                                                                                             "type": "function"},
                                     {"inputs": [], "name": "factory",
                                      "outputs": [{"internalType": "address", "name": "", "type": "address"}],
                                      "stateMutability": "view", "type": "function"},
                                     {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}],
                                      "name": "getApproved",
                                      "outputs": [{"internalType": "address", "name": "", "type": "address"}],
                                      "stateMutability": "view", "type": "function"}, {"inputs": [{"components": [
        {"internalType": "uint256", "name": "tokenId", "type": "uint256"},
        {"internalType": "uint256", "name": "amount0Desired", "type": "uint256"},
        {"internalType": "uint256", "name": "amount1Desired", "type": "uint256"},
        {"internalType": "uint256", "name": "amount0Min", "type": "uint256"},
        {"internalType": "uint256", "name": "amount1Min", "type": "uint256"},
        {"internalType": "uint256", "name": "deadline", "type": "uint256"}],
                                                                                                   "internalType": "struct INonfungiblePositionManager.IncreaseLiquidityParams",
                                                                                                   "name": "params",
                                                                                                   "type": "tuple"}],
                                                                                       "name": "increaseLiquidity",
                                                                                       "outputs": [
                                                                                           {"internalType": "uint128",
                                                                                            "name": "liquidity",
                                                                                            "type": "uint128"},
                                                                                           {"internalType": "uint256",
                                                                                            "name": "amount0",
                                                                                            "type": "uint256"},
                                                                                           {"internalType": "uint256",
                                                                                            "name": "amount1",
                                                                                            "type": "uint256"}],
                                                                                       "stateMutability": "payable",
                                                                                       "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "owner", "type": "address"},
                                                    {"internalType": "address", "name": "operator", "type": "address"}],
                                         "name": "isApprovedForAll",
                                         "outputs": [{"internalType": "bool", "name": "", "type": "bool"}],
                                         "stateMutability": "view", "type": "function"}, {"inputs": [{"components": [
        {"internalType": "address", "name": "token0", "type": "address"},
        {"internalType": "address", "name": "token1", "type": "address"},
        {"internalType": "uint24", "name": "fee", "type": "uint24"},
        {"internalType": "int24", "name": "tickLower", "type": "int24"},
        {"internalType": "int24", "name": "tickUpper", "type": "int24"},
        {"internalType": "uint256", "name": "amount0Desired", "type": "uint256"},
        {"internalType": "uint256", "name": "amount1Desired", "type": "uint256"},
        {"internalType": "uint256", "name": "amount0Min", "type": "uint256"},
        {"internalType": "uint256", "name": "amount1Min", "type": "uint256"},
        {"internalType": "address", "name": "recipient", "type": "address"},
        {"internalType": "uint256", "name": "deadline", "type": "uint256"}],
                                                                                                      "internalType": "struct INonfungiblePositionManager.MintParams",
                                                                                                      "name": "params",
                                                                                                      "type": "tuple"}],
                                                                                          "name": "mint", "outputs": [
            {"internalType": "uint256", "name": "tokenId", "type": "uint256"},
            {"internalType": "uint128", "name": "liquidity", "type": "uint128"},
            {"internalType": "uint256", "name": "amount0", "type": "uint256"},
            {"internalType": "uint256", "name": "amount1", "type": "uint256"}], "stateMutability": "payable",
                                                                                          "type": "function"},
                                     {"inputs": [{"internalType": "bytes[]", "name": "data", "type": "bytes[]"}],
                                      "name": "multicall",
                                      "outputs": [{"internalType": "bytes[]", "name": "results", "type": "bytes[]"}],
                                      "stateMutability": "payable", "type": "function"}, {"inputs": [], "name": "name",
                                                                                          "outputs": [
                                                                                              {"internalType": "string",
                                                                                               "name": "",
                                                                                               "type": "string"}],
                                                                                          "stateMutability": "view",
                                                                                          "type": "function"},
                                     {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}],
                                      "name": "ownerOf",
                                      "outputs": [{"internalType": "address", "name": "", "type": "address"}],
                                      "stateMutability": "view", "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "spender", "type": "address"},
                                                    {"internalType": "uint256", "name": "tokenId", "type": "uint256"},
                                                    {"internalType": "uint256", "name": "deadline", "type": "uint256"},
                                                    {"internalType": "uint8", "name": "v", "type": "uint8"},
                                                    {"internalType": "bytes32", "name": "r", "type": "bytes32"},
                                                    {"internalType": "bytes32", "name": "s", "type": "bytes32"}],
                                         "name": "permit", "outputs": [], "stateMutability": "payable",
                                         "type": "function"},
                                     {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}],
                                      "name": "positions",
                                      "outputs": [{"internalType": "uint96", "name": "nonce", "type": "uint96"},
                                                  {"internalType": "address", "name": "operator", "type": "address"},
                                                  {"internalType": "address", "name": "token0", "type": "address"},
                                                  {"internalType": "address", "name": "token1", "type": "address"},
                                                  {"internalType": "uint24", "name": "fee", "type": "uint24"},
                                                  {"internalType": "int24", "name": "tickLower", "type": "int24"},
                                                  {"internalType": "int24", "name": "tickUpper", "type": "int24"},
                                                  {"internalType": "uint128", "name": "liquidity", "type": "uint128"},
                                                  {"internalType": "uint256", "name": "feeGrowthInside0LastX128",
                                                   "type": "uint256"},
                                                  {"internalType": "uint256", "name": "feeGrowthInside1LastX128",
                                                   "type": "uint256"},
                                                  {"internalType": "uint128", "name": "tokensOwed0", "type": "uint128"},
                                                  {"internalType": "uint128", "name": "tokensOwed1",
                                                   "type": "uint128"}], "stateMutability": "view", "type": "function"},
                                     {"inputs": [], "name": "refundETH", "outputs": [], "stateMutability": "payable",
                                      "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "from", "type": "address"},
                                                    {"internalType": "address", "name": "to", "type": "address"},
                                                    {"internalType": "uint256", "name": "tokenId", "type": "uint256"}],
                                         "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable",
                                         "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "from", "type": "address"},
                                                    {"internalType": "address", "name": "to", "type": "address"},
                                                    {"internalType": "uint256", "name": "tokenId", "type": "uint256"},
                                                    {"internalType": "bytes", "name": "_data", "type": "bytes"}],
                                         "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable",
                                         "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "token", "type": "address"},
                                                    {"internalType": "uint256", "name": "value", "type": "uint256"},
                                                    {"internalType": "uint256", "name": "deadline", "type": "uint256"},
                                                    {"internalType": "uint8", "name": "v", "type": "uint8"},
                                                    {"internalType": "bytes32", "name": "r", "type": "bytes32"},
                                                    {"internalType": "bytes32", "name": "s", "type": "bytes32"}],
                                         "name": "selfPermit", "outputs": [], "stateMutability": "payable",
                                         "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "token", "type": "address"},
                                                    {"internalType": "uint256", "name": "nonce", "type": "uint256"},
                                                    {"internalType": "uint256", "name": "expiry", "type": "uint256"},
                                                    {"internalType": "uint8", "name": "v", "type": "uint8"},
                                                    {"internalType": "bytes32", "name": "r", "type": "bytes32"},
                                                    {"internalType": "bytes32", "name": "s", "type": "bytes32"}],
                                         "name": "selfPermitAllowed", "outputs": [], "stateMutability": "payable",
                                         "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "token", "type": "address"},
                                                    {"internalType": "uint256", "name": "nonce", "type": "uint256"},
                                                    {"internalType": "uint256", "name": "expiry", "type": "uint256"},
                                                    {"internalType": "uint8", "name": "v", "type": "uint8"},
                                                    {"internalType": "bytes32", "name": "r", "type": "bytes32"},
                                                    {"internalType": "bytes32", "name": "s", "type": "bytes32"}],
                                         "name": "selfPermitAllowedIfNecessary", "outputs": [],
                                         "stateMutability": "payable", "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "token", "type": "address"},
                                                    {"internalType": "uint256", "name": "value", "type": "uint256"},
                                                    {"internalType": "uint256", "name": "deadline", "type": "uint256"},
                                                    {"internalType": "uint8", "name": "v", "type": "uint8"},
                                                    {"internalType": "bytes32", "name": "r", "type": "bytes32"},
                                                    {"internalType": "bytes32", "name": "s", "type": "bytes32"}],
                                         "name": "selfPermitIfNecessary", "outputs": [], "stateMutability": "payable",
                                         "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "operator", "type": "address"},
                                                    {"internalType": "bool", "name": "approved", "type": "bool"}],
                                         "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable",
                                         "type": "function"},
                                     {"inputs": [{"internalType": "bytes4", "name": "interfaceId", "type": "bytes4"}],
                                      "name": "supportsInterface",
                                      "outputs": [{"internalType": "bool", "name": "", "type": "bool"}],
                                      "stateMutability": "view", "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "token", "type": "address"},
                                                    {"internalType": "uint256", "name": "amountMinimum",
                                                     "type": "uint256"},
                                                    {"internalType": "address", "name": "recipient",
                                                     "type": "address"}], "name": "sweepToken", "outputs": [],
                                         "stateMutability": "payable", "type": "function"},
                                     {"inputs": [], "name": "symbol",
                                      "outputs": [{"internalType": "string", "name": "", "type": "string"}],
                                      "stateMutability": "view", "type": "function"},
                                     {"inputs": [{"internalType": "uint256", "name": "index", "type": "uint256"}],
                                      "name": "tokenByIndex",
                                      "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}],
                                      "stateMutability": "view", "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "owner", "type": "address"},
                                                    {"internalType": "uint256", "name": "index", "type": "uint256"}],
                                         "name": "tokenOfOwnerByIndex",
                                         "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}],
                                         "stateMutability": "view", "type": "function"},
                                     {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}],
                                      "name": "tokenURI",
                                      "outputs": [{"internalType": "string", "name": "", "type": "string"}],
                                      "stateMutability": "view", "type": "function"},
                                     {"inputs": [], "name": "totalSupply",
                                      "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}],
                                      "stateMutability": "view", "type": "function"}, {
                                         "inputs": [{"internalType": "address", "name": "from", "type": "address"},
                                                    {"internalType": "address", "name": "to", "type": "address"},
                                                    {"internalType": "uint256", "name": "tokenId", "type": "uint256"}],
                                         "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable",
                                         "type": "function"}, {"inputs": [
        {"internalType": "uint256", "name": "amount0Owed", "type": "uint256"},
        {"internalType": "uint256", "name": "amount1Owed", "type": "uint256"},
        {"internalType": "bytes", "name": "data", "type": "bytes"}], "name": "uniswapV3MintCallback", "outputs": [],
                                                               "stateMutability": "nonpayable", "type": "function"}, {
                                         "inputs": [
                                             {"internalType": "uint256", "name": "amountMinimum", "type": "uint256"},
                                             {"internalType": "address", "name": "recipient", "type": "address"}],
                                         "name": "unwrapWETH9", "outputs": [], "stateMutability": "payable",
                                         "type": "function"}, {"stateMutability": "payable", "type": "receive"}]
