{
  "abi": [
    {
      "type": "function",
      "name": "adjustRatePerSecond",
      "inputs": [
        { "name": "streamId", "type": "uint256", "internalType": "uint256" },
        { "name": "newRatePerSecond", "type": "uint128", "internalType": "UD21x18" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "aggregateAmount",
      "inputs": [{ "name": "token", "type": "address", "internalType": "contract IERC20" }],
      "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "approve",
      "inputs": [
        { "name": "to", "type": "address", "internalType": "address" },
        { "name": "tokenId", "type": "uint256", "internalType": "uint256" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "balanceOf",
      "inputs": [{ "name": "owner", "type": "address", "internalType": "address" }],
      "outputs": [{ "name": "balance", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "batch",
      "inputs": [{ "name": "calls", "type": "bytes[]", "internalType": "bytes[]" }],
      "outputs": [{ "name": "results", "type": "bytes[]", "internalType": "bytes[]" }],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "calculateMinFeeWei",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "minFeeWei", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "comptroller",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "contract ISablierComptroller" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "coveredDebtOf",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "coveredDebt", "type": "uint128", "internalType": "uint128" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "create",
      "inputs": [
        { "name": "sender", "type": "address", "internalType": "address" },
        { "name": "recipient", "type": "address", "internalType": "address" },
        { "name": "ratePerSecond", "type": "uint128", "internalType": "UD21x18" },
        { "name": "startTime", "type": "uint40", "internalType": "uint40" },
        { "name": "token", "type": "address", "internalType": "contract IERC20" },
        { "name": "transferable", "type": "bool", "internalType": "bool" }
      ],
      "outputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "createAndDeposit",
      "inputs": [
        { "name": "sender", "type": "address", "internalType": "address" },
        { "name": "recipient", "type": "address", "internalType": "address" },
        { "name": "ratePerSecond", "type": "uint128", "internalType": "UD21x18" },
        { "name": "startTime", "type": "uint40", "internalType": "uint40" },
        { "name": "token", "type": "address", "internalType": "contract IERC20" },
        { "name": "transferable", "type": "bool", "internalType": "bool" },
        { "name": "amount", "type": "uint128", "internalType": "uint128" }
      ],
      "outputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "depletionTimeOf",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "depletionTime", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "deposit",
      "inputs": [
        { "name": "streamId", "type": "uint256", "internalType": "uint256" },
        { "name": "amount", "type": "uint128", "internalType": "uint128" },
        { "name": "sender", "type": "address", "internalType": "address" },
        { "name": "recipient", "type": "address", "internalType": "address" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "depositAndPause",
      "inputs": [
        { "name": "streamId", "type": "uint256", "internalType": "uint256" },
        { "name": "amount", "type": "uint128", "internalType": "uint128" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "getApproved",
      "inputs": [{ "name": "tokenId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "operator", "type": "address", "internalType": "address" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getBalance",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "balance", "type": "uint128", "internalType": "uint128" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getRatePerSecond",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "ratePerSecond", "type": "uint128", "internalType": "UD21x18" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getRecipient",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "recipient", "type": "address", "internalType": "address" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getSender",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "sender", "type": "address", "internalType": "address" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getSnapshotDebtScaled",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "snapshotDebtScaled", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getSnapshotTime",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "snapshotTime", "type": "uint40", "internalType": "uint40" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getStream",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [
        {
          "name": "stream",
          "type": "tuple",
          "internalType": "struct Flow.Stream",
          "components": [
            { "name": "balance", "type": "uint128", "internalType": "uint128" },
            { "name": "ratePerSecond", "type": "uint128", "internalType": "UD21x18" },
            { "name": "sender", "type": "address", "internalType": "address" },
            { "name": "snapshotTime", "type": "uint40", "internalType": "uint40" },
            { "name": "isStream", "type": "bool", "internalType": "bool" },
            { "name": "isTransferable", "type": "bool", "internalType": "bool" },
            { "name": "isVoided", "type": "bool", "internalType": "bool" },
            { "name": "token", "type": "address", "internalType": "contract IERC20" },
            { "name": "tokenDecimals", "type": "uint8", "internalType": "uint8" },
            { "name": "snapshotDebtScaled", "type": "uint256", "internalType": "uint256" }
          ]
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getToken",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "token", "type": "address", "internalType": "contract IERC20" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getTokenDecimals",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "tokenDecimals", "type": "uint8", "internalType": "uint8" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "isApprovedForAll",
      "inputs": [
        { "name": "owner", "type": "address", "internalType": "address" },
        { "name": "operator", "type": "address", "internalType": "address" }
      ],
      "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "isStream",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "result", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "isTransferable",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "result", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "isVoided",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "result", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "name",
      "inputs": [],
      "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "nativeToken",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "nextStreamId",
      "inputs": [],
      "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "nftDescriptor",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "contract IFlowNFTDescriptor" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "ongoingDebtScaledOf",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "ongoingDebtScaled", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "ownerOf",
      "inputs": [{ "name": "tokenId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "owner", "type": "address", "internalType": "address" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "pause",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "recover",
      "inputs": [
        { "name": "token", "type": "address", "internalType": "contract IERC20" },
        { "name": "to", "type": "address", "internalType": "address" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "refund",
      "inputs": [
        { "name": "streamId", "type": "uint256", "internalType": "uint256" },
        { "name": "amount", "type": "uint128", "internalType": "uint128" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "refundAndPause",
      "inputs": [
        { "name": "streamId", "type": "uint256", "internalType": "uint256" },
        { "name": "amount", "type": "uint128", "internalType": "uint128" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "refundMax",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "refundedAmount", "type": "uint128", "internalType": "uint128" }],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "refundableAmountOf",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "refundableAmount", "type": "uint128", "internalType": "uint128" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "restart",
      "inputs": [
        { "name": "streamId", "type": "uint256", "internalType": "uint256" },
        { "name": "ratePerSecond", "type": "uint128", "internalType": "UD21x18" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "restartAndDeposit",
      "inputs": [
        { "name": "streamId", "type": "uint256", "internalType": "uint256" },
        { "name": "ratePerSecond", "type": "uint128", "internalType": "UD21x18" },
        { "name": "amount", "type": "uint128", "internalType": "uint128" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "safeTransferFrom",
      "inputs": [
        { "name": "from", "type": "address", "internalType": "address" },
        { "name": "to", "type": "address", "internalType": "address" },
        { "name": "tokenId", "type": "uint256", "internalType": "uint256" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "safeTransferFrom",
      "inputs": [
        { "name": "from", "type": "address", "internalType": "address" },
        { "name": "to", "type": "address", "internalType": "address" },
        { "name": "tokenId", "type": "uint256", "internalType": "uint256" },
        { "name": "data", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "setApprovalForAll",
      "inputs": [
        { "name": "operator", "type": "address", "internalType": "address" },
        { "name": "approved", "type": "bool", "internalType": "bool" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "setComptroller",
      "inputs": [{ "name": "newComptroller", "type": "address", "internalType": "contract ISablierComptroller" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "setNFTDescriptor",
      "inputs": [{ "name": "newNFTDescriptor", "type": "address", "internalType": "contract IFlowNFTDescriptor" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "setNativeToken",
      "inputs": [{ "name": "newNativeToken", "type": "address", "internalType": "address" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "statusOf",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "status", "type": "uint8", "internalType": "enum Flow.Status" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "supportsInterface",
      "inputs": [{ "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" }],
      "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "symbol",
      "inputs": [],
      "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "tokenURI",
      "inputs": [{ "name": "tokenId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "totalDebtOf",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "totalDebt", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "transferFeesToComptroller",
      "inputs": [],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "transferFrom",
      "inputs": [
        { "name": "from", "type": "address", "internalType": "address" },
        { "name": "to", "type": "address", "internalType": "address" },
        { "name": "tokenId", "type": "uint256", "internalType": "uint256" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "transferFromPayable",
      "inputs": [
        { "name": "from", "type": "address", "internalType": "address" },
        { "name": "to", "type": "address", "internalType": "address" },
        { "name": "streamId", "type": "uint256", "internalType": "uint256" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "transferTokens",
      "inputs": [
        { "name": "token", "type": "address", "internalType": "contract IERC20" },
        { "name": "to", "type": "address", "internalType": "address" },
        { "name": "amount", "type": "uint128", "internalType": "uint128" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "uncoveredDebtOf",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "uncoveredDebt", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "void",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "withdraw",
      "inputs": [
        { "name": "streamId", "type": "uint256", "internalType": "uint256" },
        { "name": "to", "type": "address", "internalType": "address" },
        { "name": "amount", "type": "uint128", "internalType": "uint128" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "withdrawMax",
      "inputs": [
        { "name": "streamId", "type": "uint256", "internalType": "uint256" },
        { "name": "to", "type": "address", "internalType": "address" }
      ],
      "outputs": [{ "name": "withdrawnAmount", "type": "uint128", "internalType": "uint128" }],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "withdrawableAmountOf",
      "inputs": [{ "name": "streamId", "type": "uint256", "internalType": "uint256" }],
      "outputs": [{ "name": "withdrawableAmount", "type": "uint128", "internalType": "uint128" }],
      "stateMutability": "view"
    },
    {
      "type": "event",
      "name": "AdjustFlowStream",
      "inputs": [
        { "name": "streamId", "type": "uint256", "indexed": true, "internalType": "uint256" },
        { "name": "totalDebt", "type": "uint256", "indexed": false, "internalType": "uint256" },
        { "name": "oldRatePerSecond", "type": "uint128", "indexed": false, "internalType": "UD21x18" },
        { "name": "newRatePerSecond", "type": "uint128", "indexed": false, "internalType": "UD21x18" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Approval",
      "inputs": [
        { "name": "owner", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "approved", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "tokenId", "type": "uint256", "indexed": true, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "ApprovalForAll",
      "inputs": [
        { "name": "owner", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "operator", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "approved", "type": "bool", "indexed": false, "internalType": "bool" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "BatchMetadataUpdate",
      "inputs": [
        { "name": "_fromTokenId", "type": "uint256", "indexed": false, "internalType": "uint256" },
        { "name": "_toTokenId", "type": "uint256", "indexed": false, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "CreateFlowStream",
      "inputs": [
        { "name": "streamId", "type": "uint256", "indexed": false, "internalType": "uint256" },
        { "name": "creator", "type": "address", "indexed": false, "internalType": "address" },
        { "name": "sender", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "recipient", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "ratePerSecond", "type": "uint128", "indexed": false, "internalType": "UD21x18" },
        { "name": "snapshotTime", "type": "uint40", "indexed": false, "internalType": "uint40" },
        { "name": "token", "type": "address", "indexed": true, "internalType": "contract IERC20" },
        { "name": "transferable", "type": "bool", "indexed": false, "internalType": "bool" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "DepositFlowStream",
      "inputs": [
        { "name": "streamId", "type": "uint256", "indexed": true, "internalType": "uint256" },
        { "name": "funder", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "MetadataUpdate",
      "inputs": [{ "name": "_tokenId", "type": "uint256", "indexed": false, "internalType": "uint256" }],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "PauseFlowStream",
      "inputs": [
        { "name": "streamId", "type": "uint256", "indexed": true, "internalType": "uint256" },
        { "name": "sender", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "recipient", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "totalDebt", "type": "uint256", "indexed": false, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "RefundFromFlowStream",
      "inputs": [
        { "name": "streamId", "type": "uint256", "indexed": true, "internalType": "uint256" },
        { "name": "sender", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "RestartFlowStream",
      "inputs": [
        { "name": "streamId", "type": "uint256", "indexed": true, "internalType": "uint256" },
        { "name": "sender", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "ratePerSecond", "type": "uint128", "indexed": false, "internalType": "UD21x18" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "SetComptroller",
      "inputs": [
        {
          "name": "oldComptroller",
          "type": "address",
          "indexed": false,
          "internalType": "contract ISablierComptroller"
        },
        {
          "name": "newComptroller",
          "type": "address",
          "indexed": false,
          "internalType": "contract ISablierComptroller"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "SetNFTDescriptor",
      "inputs": [
        { "name": "comptroller", "type": "address", "indexed": true, "internalType": "contract ISablierComptroller" },
        {
          "name": "oldNFTDescriptor",
          "type": "address",
          "indexed": false,
          "internalType": "contract IFlowNFTDescriptor"
        },
        {
          "name": "newNFTDescriptor",
          "type": "address",
          "indexed": false,
          "internalType": "contract IFlowNFTDescriptor"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "SetNativeToken",
      "inputs": [
        { "name": "comptroller", "type": "address", "indexed": true, "internalType": "contract ISablierComptroller" },
        { "name": "nativeToken", "type": "address", "indexed": false, "internalType": "address" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Transfer",
      "inputs": [
        { "name": "from", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "to", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "tokenId", "type": "uint256", "indexed": true, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "TransferFeesToComptroller",
      "inputs": [
        { "name": "comptroller", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "feeAmount", "type": "uint256", "indexed": false, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "VoidFlowStream",
      "inputs": [
        { "name": "streamId", "type": "uint256", "indexed": true, "internalType": "uint256" },
        { "name": "sender", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "recipient", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "caller", "type": "address", "indexed": false, "internalType": "address" },
        { "name": "newTotalDebt", "type": "uint256", "indexed": false, "internalType": "uint256" },
        { "name": "writtenOffDebt", "type": "uint256", "indexed": false, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "WithdrawFromFlowStream",
      "inputs": [
        { "name": "streamId", "type": "uint256", "indexed": true, "internalType": "uint256" },
        { "name": "to", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "token", "type": "address", "indexed": true, "internalType": "contract IERC20" },
        { "name": "caller", "type": "address", "indexed": false, "internalType": "address" },
        { "name": "withdrawAmount", "type": "uint128", "indexed": false, "internalType": "uint128" }
      ],
      "anonymous": false
    }
  ],
  "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} },
  "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} },
  "methodIdentifiers": {
    "adjustRatePerSecond(uint256,uint128)": "a8a482a6",
    "aggregateAmount(address)": "ec01da3b",
    "approve(address,uint256)": "095ea7b3",
    "balanceOf(address)": "70a08231",
    "batch(bytes[])": "1e897afb",
    "calculateMinFeeWei(uint256)": "cca138e5",
    "comptroller()": "5fe3b567",
    "coveredDebtOf(uint256)": "42e3e23d",
    "create(address,address,uint128,uint40,address,bool)": "5f2a0beb",
    "createAndDeposit(address,address,uint128,uint40,address,bool,uint128)": "36af277f",
    "depletionTimeOf(uint256)": "d4b80884",
    "deposit(uint256,uint128,address,address)": "b61f7583",
    "depositAndPause(uint256,uint128)": "bcbd019e",
    "getApproved(uint256)": "081812fc",
    "getBalance(uint256)": "1e010439",
    "getRatePerSecond(uint256)": "80448da3",
    "getRecipient(uint256)": "6d0cee75",
    "getSender(uint256)": "b971302a",
    "getSnapshotDebtScaled(uint256)": "450ac908",
    "getSnapshotTime(uint256)": "eb5710d8",
    "getStream(uint256)": "894e9a0d",
    "getToken(uint256)": "e4b50cb8",
    "getTokenDecimals(uint256)": "a7de07cd",
    "isApprovedForAll(address,address)": "e985e9c5",
    "isStream(uint256)": "b8a3be66",
    "isTransferable(uint256)": "b2564569",
    "isVoided(uint256)": "569f4c59",
    "name()": "06fdde03",
    "nativeToken()": "e1758bd8",
    "nextStreamId()": "1e99d569",
    "nftDescriptor()": "44267570",
    "ongoingDebtScaledOf(uint256)": "7ddf9228",
    "ownerOf(uint256)": "6352211e",
    "pause(uint256)": "136439dd",
    "recover(address,address)": "648bf774",
    "refund(uint256,uint128)": "81632a86",
    "refundAndPause(uint256,uint128)": "379d871a",
    "refundMax(uint256)": "0c699624",
    "refundableAmountOf(uint256)": "1400ecec",
    "restart(uint256,uint128)": "ebb6f79a",
    "restartAndDeposit(uint256,uint128,uint128)": "1f0cce58",
    "safeTransferFrom(address,address,uint256)": "42842e0e",
    "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
    "setApprovalForAll(address,bool)": "a22cb465",
    "setComptroller(address)": "8bad38dd",
    "setNFTDescriptor(address)": "7cad6cd1",
    "setNativeToken(address)": "6da1e102",
    "statusOf(uint256)": "ad35efd4",
    "supportsInterface(bytes4)": "01ffc9a7",
    "symbol()": "95d89b41",
    "tokenURI(uint256)": "c87b56dd",
    "totalDebtOf(uint256)": "08b87923",
    "transferFeesToComptroller()": "78f82ce7",
    "transferFrom(address,address,uint256)": "23b872dd",
    "transferFromPayable(address,address,uint256)": "d90e27d7",
    "transferTokens(address,address,uint128)": "28f8b77d",
    "uncoveredDebtOf(uint256)": "bc7a2d6c",
    "void(uint256)": "5ea2145b",
    "withdraw(uint256,address,uint128)": "fdd46d60",
    "withdrawMax(uint256,address)": "ea5ead19",
    "withdrawableAmountOf(uint256)": "d975dfed"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.29+commit.ab55807c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"UD21x18\",\"name\":\"oldRatePerSecond\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"UD21x18\",\"name\":\"newRatePerSecond\",\"type\":\"uint128\"}],\"name\":\"AdjustFlowStream\",\"type\":\"event\"},{\"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\":false,\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"}],\"name\":\"BatchMetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"UD21x18\",\"name\":\"ratePerSecond\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"snapshotTime\",\"type\":\"uint40\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"transferable\",\"type\":\"bool\"}],\"name\":\"CreateFlowStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"funder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"DepositFlowStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"PauseFlowStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"RefundFromFlowStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"UD21x18\",\"name\":\"ratePerSecond\",\"type\":\"uint128\"}],\"name\":\"RestartFlowStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract ISablierComptroller\",\"name\":\"oldComptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract ISablierComptroller\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"SetComptroller\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISablierComptroller\",\"name\":\"comptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IFlowNFTDescriptor\",\"name\":\"oldNFTDescriptor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IFlowNFTDescriptor\",\"name\":\"newNFTDescriptor\",\"type\":\"address\"}],\"name\":\"SetNFTDescriptor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISablierComptroller\",\"name\":\"comptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nativeToken\",\"type\":\"address\"}],\"name\":\"SetNativeToken\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"TransferFeesToComptroller\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalDebt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"writtenOffDebt\",\"type\":\"uint256\"}],\"name\":\"VoidFlowStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"withdrawAmount\",\"type\":\"uint128\"}],\"name\":\"WithdrawFromFlowStream\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"UD21x18\",\"name\":\"newRatePerSecond\",\"type\":\"uint128\"}],\"name\":\"adjustRatePerSecond\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"aggregateAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"calls\",\"type\":\"bytes[]\"}],\"name\":\"batch\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"calculateMinFeeWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minFeeWei\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"comptroller\",\"outputs\":[{\"internalType\":\"contract ISablierComptroller\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"coveredDebtOf\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"coveredDebt\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"UD21x18\",\"name\":\"ratePerSecond\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"startTime\",\"type\":\"uint40\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"transferable\",\"type\":\"bool\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"UD21x18\",\"name\":\"ratePerSecond\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"startTime\",\"type\":\"uint40\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"transferable\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"createAndDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"depletionTimeOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"depletionTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"depositAndPause\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"balance\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getRatePerSecond\",\"outputs\":[{\"internalType\":\"UD21x18\",\"name\":\"ratePerSecond\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getSnapshotDebtScaled\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotDebtScaled\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getSnapshotTime\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"snapshotTime\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getStream\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"balance\",\"type\":\"uint128\"},{\"internalType\":\"UD21x18\",\"name\":\"ratePerSecond\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint40\",\"name\":\"snapshotTime\",\"type\":\"uint40\"},{\"internalType\":\"bool\",\"name\":\"isStream\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isTransferable\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isVoided\",\"type\":\"bool\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"snapshotDebtScaled\",\"type\":\"uint256\"}],\"internalType\":\"struct Flow.Stream\",\"name\":\"stream\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getTokenDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"isStream\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"isTransferable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"isVoided\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextStreamId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nftDescriptor\",\"outputs\":[{\"internalType\":\"contract IFlowNFTDescriptor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"ongoingDebtScaledOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ongoingDebtScaled\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"recover\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"refund\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"refundAndPause\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"refundMax\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"refundedAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"refundableAmountOf\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"refundableAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"UD21x18\",\"name\":\"ratePerSecond\",\"type\":\"uint128\"}],\"name\":\"restart\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"UD21x18\",\"name\":\"ratePerSecond\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"restartAndDeposit\",\"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\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISablierComptroller\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"setComptroller\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IFlowNFTDescriptor\",\"name\":\"newNFTDescriptor\",\"type\":\"address\"}],\"name\":\"setNFTDescriptor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newNativeToken\",\"type\":\"address\"}],\"name\":\"setNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"statusOf\",\"outputs\":[{\"internalType\":\"enum Flow.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"totalDebtOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferFeesToComptroller\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"transferFromPayable\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"transferTokens\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"uncoveredDebtOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"uncoveredDebt\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"void\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawMax\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"withdrawnAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"withdrawableAmountOf\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"withdrawableAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AdjustFlowStream(uint256,uint256,uint128,uint128)\":{\"params\":{\"newRatePerSecond\":\"The new rate per second, denoted as a fixed-point number where 1e18 is 1 token per second.\",\"oldRatePerSecond\":\"The old rate per second, denoted as a fixed-point number where 1e18 is 1 token per second.\",\"streamId\":\"The ID of the stream.\",\"totalDebt\":\"The total debt at the time of the update, denoted in token's decimals.\"}},\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"BatchMetadataUpdate(uint256,uint256)\":{\"details\":\"This event emits when the metadata of a range of tokens is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFTs.\"},\"CreateFlowStream(uint256,address,address,address,uint128,uint40,address,bool)\":{\"params\":{\"creator\":\"The address creating the stream.\",\"ratePerSecond\":\"The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second.\",\"recipient\":\"The address receiving the tokens, as well as the NFT owner.\",\"sender\":\"The address streaming the tokens, which is able to adjust and pause the stream.\",\"snapshotTime\":\"The timestamp when the stream begins accumulating debt.\",\"streamId\":\"The ID of the newly created stream.\",\"token\":\"The contract address of the ERC-20 token to be streamed.\",\"transferable\":\"Boolean indicating whether the stream NFT is transferable or not.\"}},\"DepositFlowStream(uint256,address,uint128)\":{\"params\":{\"amount\":\"The amount of tokens deposited into the stream, denoted in token's decimals.\",\"funder\":\"The address that made the deposit.\",\"streamId\":\"The ID of the stream.\"}},\"MetadataUpdate(uint256)\":{\"details\":\"This event emits when the metadata of a token is changed. So that the third-party platforms such as NFT market could timely update the images and related attributes of the NFT.\"},\"PauseFlowStream(uint256,address,address,uint256)\":{\"params\":{\"recipient\":\"The stream's recipient address.\",\"sender\":\"The stream's sender address.\",\"streamId\":\"The ID of the stream.\",\"totalDebt\":\"The amount of tokens owed by the sender to the recipient, denoted in token's decimals.\"}},\"RefundFromFlowStream(uint256,address,uint128)\":{\"params\":{\"amount\":\"The amount of tokens refunded to the sender, denoted in token's decimals.\",\"sender\":\"The stream's sender address.\",\"streamId\":\"The ID of the stream.\"}},\"RestartFlowStream(uint256,address,uint128)\":{\"params\":{\"ratePerSecond\":\"The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second.\",\"sender\":\"The stream's sender address.\",\"streamId\":\"The ID of the stream.\"}},\"SetNFTDescriptor(address,address,address)\":{\"params\":{\"comptroller\":\"The address of the current comptroller.\",\"newNFTDescriptor\":\"The address of the new NFT descriptor contract.\",\"oldNFTDescriptor\":\"The address of the old NFT descriptor contract.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"},\"VoidFlowStream(uint256,address,address,address,uint256,uint256)\":{\"params\":{\"caller\":\"The address that performed the void, which can be the sender, recipient or an approved operator.\",\"newTotalDebt\":\"The new total debt, denoted in token's decimals.\",\"recipient\":\"The stream's recipient address.\",\"sender\":\"The stream's sender address.\",\"streamId\":\"The ID of the stream.\",\"writtenOffDebt\":\"The amount of debt written off by the caller, denoted in token's decimals.\"}},\"WithdrawFromFlowStream(uint256,address,address,address,uint128)\":{\"params\":{\"caller\":\"The address that performed the withdrawal, which can be the recipient or an approved operator.\",\"streamId\":\"The ID of the stream.\",\"to\":\"The address that received the withdrawn tokens.\",\"token\":\"The contract address of the ERC-20 token that was withdrawn.\",\"withdrawAmount\":\"The amount withdrawn to the recipient, denoted in token's decimals.\"}}},\"kind\":\"dev\",\"methods\":{\"adjustRatePerSecond(uint256,uint128)\":{\"details\":\"Emits a {AdjustFlowStream} and {MetadataUpdate} event. Notes: - If the snapshot time is not in the future, it updates both the snapshot time and snapshot debt. Requirements: - Must not be delegate called. - `streamId` must not reference a null, paused, or voided stream. - `msg.sender` must be the stream's sender. - `newRatePerSecond` must be greater than zero and must be different from the current rate per second.\",\"params\":{\"newRatePerSecond\":\"The new rate per second, denoted as a fixed-point number where 1e18 is 1 token per second.\",\"streamId\":\"The ID of the stream to adjust.\"}},\"aggregateAmount(address)\":{\"details\":\"If tokens are directly transferred to the contract without using the stream creation functions, the ERC-20 balance may be greater than the aggregate amount.\",\"params\":{\"token\":\"The ERC-20 token for the query.\"}},\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"batch(bytes[])\":{\"details\":\"Since `msg.value` can be reused across calls, be VERY CAREFUL when using it. Refer to https://paradigm.xyz/2021/08/two-rights-might-make-a-wrong for more information.\",\"params\":{\"calls\":\"An array of inputs for each call.\"},\"returns\":{\"results\":\"An array of results from each call. Empty when the calls do not return anything.\"}},\"calculateMinFeeWei(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"coveredDebtOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"create(address,address,uint128,uint40,address,bool)\":{\"details\":\"Emits a {CreateFlowStream} and {MetadataUpdate} event. Requirements: - Must not be delegate called. - `sender` must not be the zero address. - `recipient` must not be the zero address. - If `startTime` is in the future, the `ratePerSecond` must be greater than zero. - The `token` must not be the native token. - The `token`'s decimals must be less than or equal to 18.\",\"params\":{\"ratePerSecond\":\"The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second.\",\"recipient\":\"The address receiving the tokens.\",\"sender\":\"The address streaming the tokens, which is able to adjust and pause the stream. It doesn't have to be the same as `msg.sender`.\",\"startTime\":\"The timestamp when the stream starts. A sentinel value of zero means the stream will be created with the snapshot time as `block.timestamp`.\",\"token\":\"The contract address of the ERC-20 token to be streamed.\",\"transferable\":\"Boolean indicating if the stream NFT is transferable.\"},\"returns\":{\"streamId\":\"The ID of the newly created stream.\"}},\"createAndDeposit(address,address,uint128,uint40,address,bool,uint128)\":{\"details\":\"Emits a {Transfer}, {CreateFlowStream}, {DepositFlowStream} and {MetadataUpdate} event. Notes: - Refer to the notes in {create} and {deposit}. Requirements: - Refer to the requirements in {create} and {deposit}.\",\"params\":{\"amount\":\"The deposit amount, denoted in token's decimals.\",\"ratePerSecond\":\"The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second.\",\"recipient\":\"The address receiving the tokens.\",\"sender\":\"The address streaming the tokens. It doesn't have to be the same as `msg.sender`.\",\"startTime\":\"The timestamp when the stream starts. A sentinel value of zero means the stream will be created with the snapshot time as `block.timestamp`.\",\"token\":\"The contract address of the ERC-20 token to be streamed.\",\"transferable\":\"Boolean indicating if the stream NFT is transferable.\"},\"returns\":{\"streamId\":\"The ID of the newly created stream.\"}},\"depletionTimeOf(uint256)\":{\"details\":\"Reverts on the following conditions: - If `streamId` references a paused or a null stream. - If stream balance is zero.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"deposit(uint256,uint128,address,address)\":{\"details\":\"Emits a {Transfer}, {DepositFlowStream} and {MetadataUpdate} event. Requirements: - Must not be delegate called. - `streamId` must not reference a null or a voided stream. - `amount` must be greater than zero. - `sender` and `recipient` must match the stream's sender and recipient addresses.\",\"params\":{\"amount\":\"The deposit amount, denoted in token's decimals.\",\"recipient\":\"The stream's recipient address.\",\"sender\":\"The stream's sender address.\",\"streamId\":\"The ID of the stream to deposit to.\"}},\"depositAndPause(uint256,uint128)\":{\"details\":\"Emits a {Transfer}, {DepositFlowStream}, {PauseFlowStream} and {MetadataUpdate} event. Notes: - Refer to the notes in {deposit} and {pause}. Requirements: - Refer to the requirements in {deposit} and {pause}.\",\"params\":{\"amount\":\"The deposit amount, denoted in token's decimals.\",\"streamId\":\"The ID of the stream to deposit to, and then pause.\"}},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"getBalance(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getRatePerSecond(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The ID of the stream to make the query for.\"}},\"getRecipient(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getSender(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getSnapshotDebtScaled(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getSnapshotTime(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The ID of the stream to make the query for.\"}},\"getStream(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getToken(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The ID of the stream to make the query for.\"}},\"getTokenDecimals(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The ID of the stream to make the query for.\"}},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"isStream(uint256)\":{\"details\":\"Does not revert if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"isTransferable(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"isVoided(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"name()\":{\"details\":\"Returns the token collection name.\"},\"nativeToken()\":{\"details\":\"The native tokens on some chains have a dual interface as ERC-20. For example, on Polygon the $POL token is the native token and has an ERC-20 version at 0x0000000000000000000000000000000000001010. This means that `address(this).balance` returns the same value as `balanceOf(address(this))`. To avoid any unintended behavior, these tokens cannot be used in Sablier. As an alternative, users can use the Wrapped version of the token, i.e. WMATIC, which is a standard ERC-20 token.\"},\"nextStreamId()\":{\"returns\":{\"_0\":\"The next stream ID.\"}},\"ongoingDebtScaledOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"pause(uint256)\":{\"details\":\"Emits a {PauseFlowStream} and {MetadataUpdate} event. Notes: - It updates snapshot debt and snapshot time. - It sets the rate per second to zero. Requirements: - Must not be delegate called. - `streamId` must not reference a null, pending or paused stream. - `msg.sender` must be the stream's sender.\",\"params\":{\"streamId\":\"The ID of the stream to pause.\"}},\"recover(address,address)\":{\"details\":\"Notes: - The surplus amount is defined as the difference between the total balance of the contract for the provided ERC-20 token and the sum of balances of all streams created using the same ERC-20 token. Requirements: - `msg.sender` must be the comptroller contract.\",\"params\":{\"to\":\"The address to send the surplus amount.\",\"token\":\"The contract address of the ERC-20 token to recover for.\"}},\"refund(uint256,uint128)\":{\"details\":\"Emits a {Transfer}, {RefundFromFlowStream} and {MetadataUpdate} event. Requirements: - Must not be delegate called. - `streamId` must not reference a null stream. - `msg.sender` must be the sender. - `amount` must be greater than zero and must not exceed the refundable amount.\",\"params\":{\"amount\":\"The amount to refund, denoted in token's decimals.\",\"streamId\":\"The ID of the stream to refund from.\"}},\"refundAndPause(uint256,uint128)\":{\"details\":\"Emits a {Transfer}, {RefundFromFlowStream}, {PauseFlowStream} and {MetadataUpdate} event. Notes: - Refer to the notes in {pause}. Requirements: - Refer to the requirements in {refund} and {pause}.\",\"params\":{\"amount\":\"The amount to refund, denoted in token's decimals.\",\"streamId\":\"The ID of the stream to refund from and then pause.\"}},\"refundMax(uint256)\":{\"details\":\"Emits a {Transfer}, {RefundFromFlowStream} and {MetadataUpdate} event. Requirements: - Refer to the requirements in {refund}.\",\"params\":{\"streamId\":\"The ID of the stream to refund from.\"},\"returns\":{\"refundedAmount\":\"The amount refunded to the stream sender, denoted in token's decimals.\"}},\"refundableAmountOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"restart(uint256,uint128)\":{\"details\":\"Emits a {RestartFlowStream} and {MetadataUpdate} event. Notes: - It updates snapshot debt and snapshot time. Requirements: - Must not be delegate called. - `streamId` must not reference a null stream, must be paused, and must not be voided. - `msg.sender` must be the stream's sender. - `ratePerSecond` must be greater than zero.\",\"params\":{\"ratePerSecond\":\"The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second.\",\"streamId\":\"The ID of the stream to restart.\"}},\"restartAndDeposit(uint256,uint128,uint128)\":{\"details\":\"Emits a {RestartFlowStream}, {Transfer}, {DepositFlowStream} and {MetadataUpdate} event. Notes: - Refer to the notes in {restart} and {deposit}. Requirements: - `amount` must be greater than zero. - Refer to the requirements in {restart}.\",\"params\":{\"amount\":\"The deposit amount, denoted in token's decimals.\",\"ratePerSecond\":\"The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second.\",\"streamId\":\"The ID of the stream to restart.\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or   {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon   a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon   a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event.\"},\"setComptroller(address)\":{\"details\":\"Emits a {SetComptroller} event. Requirements: - `msg.sender` must be the current comptroller. - The new comptroller must return `true` from {supportsInterface} with the comptroller's minimal interface ID which is defined as the XOR of the following function selectors: 1. {calculateMinFeeWeiFor} 2. {convertUSDFeeToWei} 3. {execute} 4. {getMinFeeUSDFor}\",\"params\":{\"newComptroller\":\"The address of the new comptroller contract.\"}},\"setNFTDescriptor(address)\":{\"details\":\"Emits a {SetNFTDescriptor} and {BatchMetadataUpdate} event. Notes: - Does not revert if the NFT descriptor is the same. Requirements: - `msg.sender` must be the comptroller contract.\",\"params\":{\"newNFTDescriptor\":\"The address of the new NFT descriptor contract.\"}},\"setNativeToken(address)\":{\"details\":\"For more information, see the documentation for {nativeToken}. Emits a {SetNativeToken} event. Requirements: - `msg.sender` must be the comptroller contract. - `newNativeToken` must not be the zero address. - The native token must not be already set.\",\"params\":{\"newNativeToken\":\"The address of the native token.\"}},\"statusOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream. Integrators should exercise caution when depending on the return value of this function as streams can be paused and resumed at any moment.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"totalDebtOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"transferFeesToComptroller()\":{\"details\":\"Emits a {TransferFeesToComptroller} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"},\"transferFromPayable(address,address,uint256)\":{\"params\":{\"from\":\"The owner of the stream ID.\",\"streamId\":\"The ID of the stream NFT to transfer.\",\"to\":\"The address of the new owner of the stream ID.\"}},\"transferTokens(address,address,uint128)\":{\"details\":\"Emits a {Transfer} event. Requirements: - `msg.sender` must have approved this contract to spend at least `amount` tokens.\",\"params\":{\"amount\":\"The amount of tokens to transfer, denoted in token's decimals.\",\"to\":\"The address receiving the tokens.\",\"token\":\"The contract address of the ERC-20 token to be transferred.\"}},\"uncoveredDebtOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"void(uint256)\":{\"details\":\"Emits a {VoidFlowStream} and {MetadataUpdate} event. Notes: - It sets snapshot time to the `block.timestamp`. - Voiding an insolvent stream sets the snapshot debt to the stream's balance making the uncovered debt to become zero. - Voiding a solvent stream updates the snapshot debt by adding up ongoing debt. - It sets the rate per second to zero. - A voided stream cannot be restarted. Requirements: - Must not be delegate called. - `streamId` must not reference a null or a voided stream. - `msg.sender` must either be the stream's sender, recipient or an approved third party.\",\"params\":{\"streamId\":\"The ID of the stream to void.\"}},\"withdraw(uint256,address,uint128)\":{\"details\":\"Emits a {Transfer}, {WithdrawFromFlowStream} and {MetadataUpdate} event. Notes: - It sets the snapshot time to the `block.timestamp` if `amount` is greater than snapshot debt. Requirements: - Must not be delegate called. - `streamId` must not reference a null stream. - `to` must not be the zero address. - `to` must be the recipient if `msg.sender` is not the stream's recipient or an approved third party. - `amount` must  be greater than zero and must not exceed the withdrawable amount. - `msg.value` must be greater than or equal to the minimum fee in wei for the stream's sender.\",\"params\":{\"amount\":\"The amount to withdraw, denoted in token's decimals.\",\"streamId\":\"The ID of the stream to withdraw from.\",\"to\":\"The address receiving the withdrawn tokens.\"}},\"withdrawMax(uint256,address)\":{\"details\":\"Emits a {Transfer}, {WithdrawFromFlowStream} and {MetadataUpdate} event. Notes: - Refer to the notes in {withdraw}. Requirements: - Refer to the requirements in {withdraw}.\",\"params\":{\"streamId\":\"The ID of the stream to withdraw from.\",\"to\":\"The address receiving the withdrawn tokens.\"},\"returns\":{\"withdrawnAmount\":\"The amount withdrawn to the recipient, denoted in token's decimals.\"}},\"withdrawableAmountOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"},\"returns\":{\"withdrawableAmount\":\"The amount that the recipient can withdraw.\"}}},\"title\":\"ISablierFlow\",\"version\":1},\"userdoc\":{\"events\":{\"AdjustFlowStream(uint256,uint256,uint128,uint128)\":{\"notice\":\"Emitted when the rate per second is updated by the sender.\"},\"CreateFlowStream(uint256,address,address,address,uint128,uint40,address,bool)\":{\"notice\":\"Emitted when a Flow stream is created.\"},\"DepositFlowStream(uint256,address,uint128)\":{\"notice\":\"Emitted when a stream is funded.\"},\"PauseFlowStream(uint256,address,address,uint256)\":{\"notice\":\"Emitted when a stream is paused by the sender.\"},\"RefundFromFlowStream(uint256,address,uint128)\":{\"notice\":\"Emitted when a sender is refunded from a stream.\"},\"RestartFlowStream(uint256,address,uint128)\":{\"notice\":\"Emitted when a stream is restarted by the sender.\"},\"SetComptroller(address,address)\":{\"notice\":\"Emitted when the comptroller address is set by the admin.\"},\"SetNFTDescriptor(address,address,address)\":{\"notice\":\"Emitted when the comptroller sets a new NFT descriptor contract.\"},\"SetNativeToken(address,address)\":{\"notice\":\"Emitted when the native token address is set by the comptroller.\"},\"TransferFeesToComptroller(address,uint256)\":{\"notice\":\"Emitted when the fees are transferred to the comptroller contract.\"},\"VoidFlowStream(uint256,address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a stream is voided by the sender, recipient or an approved operator.\"},\"WithdrawFromFlowStream(uint256,address,address,address,uint128)\":{\"notice\":\"Emitted when tokens are withdrawn from a stream by a recipient or an approved operator.\"}},\"kind\":\"user\",\"methods\":{\"adjustRatePerSecond(uint256,uint128)\":{\"notice\":\"Changes the stream's rate per second.\"},\"aggregateAmount(address)\":{\"notice\":\"Retrieves the aggregate amount across all streams, denoted in units of the token's decimals.\"},\"batch(bytes[])\":{\"notice\":\"Allows batched calls to self, i.e., `this` contract.\"},\"calculateMinFeeWei(uint256)\":{\"notice\":\"Calculates the minimum fee in wei required to withdraw from the given stream ID.\"},\"comptroller()\":{\"notice\":\"Retrieves the address of the comptroller contract.\"},\"coveredDebtOf(uint256)\":{\"notice\":\"Returns the amount of debt covered by the stream balance, denoted in token's decimals.\"},\"create(address,address,uint128,uint40,address,bool)\":{\"notice\":\"Creates a new Flow stream by setting the snapshot time to `startTime` and leaving the balance to zero. The stream is wrapped in an ERC-721 NFT.\"},\"createAndDeposit(address,address,uint128,uint40,address,bool,uint128)\":{\"notice\":\"Creates a new Flow stream by setting the snapshot time to `startTime` and the balance to `amount`. The stream is wrapped in an ERC-721 NFT.\"},\"depletionTimeOf(uint256)\":{\"notice\":\"Returns the time at which the total debt exceeds stream balance. If the total debt exceeds the stream balance, it returns 0.\"},\"deposit(uint256,uint128,address,address)\":{\"notice\":\"Makes a deposit in a stream.\"},\"depositAndPause(uint256,uint128)\":{\"notice\":\"Deposits tokens in a stream and pauses it.\"},\"getBalance(uint256)\":{\"notice\":\"Retrieves the balance of the stream, i.e. the total deposited amounts subtracted by the total withdrawn amounts, denoted in token's decimals.\"},\"getRatePerSecond(uint256)\":{\"notice\":\"Retrieves the rate per second of the stream, denoted as a fixed-point number where 1e18 is 1 token per second.\"},\"getRecipient(uint256)\":{\"notice\":\"Retrieves the stream's recipient.\"},\"getSender(uint256)\":{\"notice\":\"Retrieves the stream's sender.\"},\"getSnapshotDebtScaled(uint256)\":{\"notice\":\"Retrieves the snapshot debt of the stream, denoted as a fixed-point number where 1e18 is 1 token.\"},\"getSnapshotTime(uint256)\":{\"notice\":\"Retrieves the snapshot time of the stream, which is a Unix timestamp.\"},\"getStream(uint256)\":{\"notice\":\"Retrieves the stream entity.\"},\"getToken(uint256)\":{\"notice\":\"Retrieves the token of the stream.\"},\"getTokenDecimals(uint256)\":{\"notice\":\"Retrieves the token decimals of the stream.\"},\"isStream(uint256)\":{\"notice\":\"Retrieves a flag indicating whether the stream exists.\"},\"isTransferable(uint256)\":{\"notice\":\"Retrieves a flag indicating whether the stream NFT is transferable.\"},\"isVoided(uint256)\":{\"notice\":\"Retrieves a flag indicating whether the stream is voided.\"},\"nativeToken()\":{\"notice\":\"Retrieves the address of the ERC-20 interface of the native token, if it exists.\"},\"nextStreamId()\":{\"notice\":\"Counter for stream ids.\"},\"nftDescriptor()\":{\"notice\":\"Contract that generates the non-fungible token URI.\"},\"ongoingDebtScaledOf(uint256)\":{\"notice\":\"Returns the amount of debt accrued since the snapshot time until now, denoted as a fixed-point number where 1e18 is 1 token. If the stream is pending, it returns zero.\"},\"pause(uint256)\":{\"notice\":\"Pauses the stream.\"},\"recover(address,address)\":{\"notice\":\"Recover the surplus amount of tokens.\"},\"refund(uint256,uint128)\":{\"notice\":\"Refunds the provided amount of tokens from the stream to the sender's address.\"},\"refundAndPause(uint256,uint128)\":{\"notice\":\"Refunds the provided amount of tokens from the stream to the sender's address.\"},\"refundMax(uint256)\":{\"notice\":\"Refunds the entire refundable amount of tokens from the stream to the sender's address.\"},\"refundableAmountOf(uint256)\":{\"notice\":\"Returns the amount that the sender can be refunded from the stream, denoted in token's decimals.\"},\"restart(uint256,uint128)\":{\"notice\":\"Restarts the stream with the provided rate per second.\"},\"restartAndDeposit(uint256,uint128,uint128)\":{\"notice\":\"Restarts the stream with the provided rate per second, and makes a deposit.\"},\"setComptroller(address)\":{\"notice\":\"Sets the comptroller to a new address.\"},\"setNFTDescriptor(address)\":{\"notice\":\"Sets a new NFT descriptor contract, which produces the URI describing the Sablier stream NFTs.\"},\"setNativeToken(address)\":{\"notice\":\"Sets the native token address. Once set, it cannot be changed.\"},\"statusOf(uint256)\":{\"notice\":\"Returns the stream's status.\"},\"totalDebtOf(uint256)\":{\"notice\":\"Returns the total amount owed by the sender to the recipient, denoted in token's decimals.\"},\"transferFeesToComptroller()\":{\"notice\":\"Transfers the fees to the comptroller contract.\"},\"transferFromPayable(address,address,uint256)\":{\"notice\":\"Wrapper for {IERC721.transferFrom} with the `payable` specifier so that it can be called in conjunction with other functions using {IBatch.batch}. Requirements: - Refer to the requirements of `transferFrom` in: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/e4f70216d759d8e6a64144a9e1f7bbeed78e7079/contracts/token/ERC721/IERC721.sol#L75-L91. \"},\"transferTokens(address,address,uint128)\":{\"notice\":\"A helper to transfer ERC-20 tokens from the caller to the provided address. Useful for paying one-time bonuses.\"},\"uncoveredDebtOf(uint256)\":{\"notice\":\"Returns the amount of debt not covered by the stream balance, denoted in token's decimals.\"},\"void(uint256)\":{\"notice\":\"Voids a stream.\"},\"withdraw(uint256,address,uint128)\":{\"notice\":\"Withdraws the provided `amount` to the provided `to` address.\"},\"withdrawMax(uint256,address)\":{\"notice\":\"Withdraws the entire withdrawable amount to the provided `to` address.\"},\"withdrawableAmountOf(uint256)\":{\"notice\":\"Calculates the amount that the recipient can withdraw from the stream, denoted in token decimals. This is an alias for `coveredDebtOf`.\"}},\"notice\":\"Creates and manages Flow streams with linear streaming functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ISablierFlow.sol\":\"ISablierFlow\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@arbitrum/=node_modules/@arbitrum/\",\":@chainlink/=node_modules/@chainlink/\",\":@eth-optimism/=node_modules/@eth-optimism/\",\":@offchainlabs/=node_modules/@offchainlabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/=node_modules/@prb/\",\":@sablier/=node_modules/@sablier/\",\":@scroll-tech/=node_modules/@scroll-tech/\",\":@zksync/=node_modules/@zksync/\",\":forge-std/=node_modules/forge-std/\"],\"viaIR\":true},\"sources\":{\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC4906.sol\":{\"keccak256\":\"0x1b8691e244f6e11d987459993671db0af33e6a29f7805eac6a9925cc6b601957\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9e2a5efc2e14e98f5fe91bbab769199b4987a40dd3b96075b04957fda2ae80f\",\"dweb:/ipfs/QmbAjrSSVBiJ6MbgF7Jkr53m674iGMZ6haWbbRrWDZJraK\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b\",\"dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0x8225a3898d2f11f585da1fb82234800e9717fa080dbe53d450fd429a3a632e99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2dcbf39ca575f68f32f0d1c66391de94082424956e7585e849813966f8c0fc05\",\"dweb:/ipfs/QmYvk8vXFDUJHrmqbtutYXfoLomLBosYLyBzuPoYBxsQ42\"]},\"node_modules/@prb/math/src/UD21x18.sol\":{\"keccak256\":\"0xb0176747ae9c9f329bce39730d4d315b839e73a815494ddf2de2094aa9056957\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://534a82fe091627f9d01e665ac763daf56981b30b3976269f8e5c33a84a2dbebc\",\"dweb:/ipfs/QmYiiGJNr4S4ypYB4KGBPMTMiNskert8Cp4s6uf1CU3k73\"]},\"node_modules/@prb/math/src/sd1x18/Casting.sol\":{\"keccak256\":\"0x5d365f655f01598926c5d4fe5cda277f2cc7736fe38f943c11a32009077ddd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56b378bd6039819bc12e5f17dabd9492e1410b3281f9df496cf8210539101a11\",\"dweb:/ipfs/QmcMaE64ZWMg9cFhYxdTuG8nfzeDdNuTRHMMoFXi6tSZGu\"]},\"node_modules/@prb/math/src/sd1x18/Constants.sol\":{\"keccak256\":\"0xc14cc32061863d83912f9616de86f3c34f1ac58614b7d504c6ce07ee8efdb8e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://22483b1282dda6a556b0232f008a5a3296bbfd76b1886e6b72bf351b7c554fab\",\"dweb:/ipfs/QmYX9cYkrFxBbhZNKsb6uUxtrc2chmAj7vuc7UKRPGMwos\"]},\"node_modules/@prb/math/src/sd1x18/Errors.sol\":{\"keccak256\":\"0xc3c8b1ab3d19889c356c222a3a2186d45dfc1d3a17b9ad88159bb64ee457baa6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84fbe57569246403f778330bd7723018dfcb5f0ec50d7b1d82cc983c94a54bca\",\"dweb:/ipfs/QmWssAAnovc2EVjt58rTnxraE9B1RMivwTvYCYgpnr6oSE\"]},\"node_modules/@prb/math/src/sd1x18/ValueType.sol\":{\"keccak256\":\"0xaa9dc7b562faf45264390d80e2ea10c5295bb8a4f10d76261a3f9c04363734c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6ca36acd15f5cb47cf124ddec289f84e1011f2d29056159e4570435629a3353\",\"dweb:/ipfs/QmUKdiLmZpAkNCq2TKxrPbQPUhiRFXGfjGSnY1VeHVu4y6\"]},\"node_modules/@prb/math/src/sd21x18/Casting.sol\":{\"keccak256\":\"0x4a16adddb9ab1f6939dd4567c77205015a11081cb840029b84bbb6fdaf78ee36\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5003b2f4cd2fc1413da36bc63107c6e83a88d29693e8f97b54f300fa78f9c6d2\",\"dweb:/ipfs/QmaNJn91NLrZmeeGqnFQV1FTrLVSW852zHyWTrWJ5pf1pd\"]},\"node_modules/@prb/math/src/sd21x18/Constants.sol\":{\"keccak256\":\"0x501c2d5cfdea9450422182059c8df1cb6a859901a07bd59631c3fa24edcc79d4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4669a65001c92919671fd879d33ce0e5030b602a7ba4d36bd2308128d8d1f396\",\"dweb:/ipfs/QmUC3bJ3qdkCmLMw3WHBcEqvuC4tExT2LXzUhgu5KQ3vi3\"]},\"node_modules/@prb/math/src/sd21x18/Errors.sol\":{\"keccak256\":\"0xc5422ee47eb139274e538e758fb40177a1ba22c2113ef3b3446102f0150bfe0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1981e052e9e86e1b0e4e55a057a7af4739aedd4ead2d60e3eaa40fb703594ee\",\"dweb:/ipfs/QmPK5qSujnyk1R8ues4RhDMy1tRKKyjQ31YJTviTKq7GML\"]},\"node_modules/@prb/math/src/sd21x18/ValueType.sol\":{\"keccak256\":\"0x532bba888370bed393464412f4ef3462d654802e71c953ad02d078e3d2701092\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://922a4e8dd813602f72d165aa1dfdf2c29b971a2abe73bebca7cd81a32ee2c880\",\"dweb:/ipfs/QmTBAJnx1r3sZpbQAuTgQtsTtvjZbpDwhCJRzkhzUumbdf\"]},\"node_modules/@prb/math/src/sd59x18/Casting.sol\":{\"keccak256\":\"0xdf70d8e70c6d6325f3f7eb028c484bc7189ef902f1d4b5b220af2e550bb5fc39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0b15bcd36129c5cb163d57a117435afb171182018dd6d1e766a5f49cf1f4b63d\",\"dweb:/ipfs/QmbjzkMBH4FM2rdxGbx9LQ65wVERijNcu7R9C8dQmH3y4n\"]},\"node_modules/@prb/math/src/sd59x18/Constants.sol\":{\"keccak256\":\"0x9bcb8dd6b3e886d140ad1c32747a4f6d29a492529ceb835be878ae837aa6cc3a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c4045c633e3618e7e90a768d92415b2f20f781fe129b4f4e26fa88f7dbf9201f\",\"dweb:/ipfs/Qmbet95pizwPno82cJ383wJtgQRSQKESmhVZ1vDrgAu7Si\"]},\"node_modules/@prb/math/src/sd59x18/Errors.sol\":{\"keccak256\":\"0x0a79c28c85fc8a450b0801ff2e66114eac4ec565819f5d1d8738904658fe33e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9e0d4fd3c998019fb8555d9e26c03bec42a8513bdf4185aeac2da3a000abaebf\",\"dweb:/ipfs/QmahFJHXcX4RwPxaQbUf6LVZEk8NSpjCV3Eif7i9iqC6Mk\"]},\"node_modules/@prb/math/src/sd59x18/Helpers.sol\":{\"keccak256\":\"0x208570f1657cf730cb6c3d81aa14030e0d45cf906cdedea5059369d7df4bb716\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c78ca900edafa9338d4e3649a55ab0c84f76468d8a22fb945ba6d01e70f8fed\",\"dweb:/ipfs/QmeP4hQYfNxcATd1FsasdD4ebyu2vrC9K1N68swxUJzzZD\"]},\"node_modules/@prb/math/src/sd59x18/Math.sol\":{\"keccak256\":\"0xd8e8b51db9b3e2fa31a60f6b8ce4ea0112c3364442ede5992aa0aa7a2c925c84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c56913970e34ee7b142047b21f1856a511cbdc3473b7c50418a8490e19cd462\",\"dweb:/ipfs/QmfG1F9CBDjPYD7NXora9awFfdpvBMY9SCg5pMLCFRv9tD\"]},\"node_modules/@prb/math/src/sd59x18/ValueType.sol\":{\"keccak256\":\"0x76597ba64d37d66e0178512bc9bbc1a031a7634c45e5d5c6e9da87f46952dc9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36148899ad874814e9292636fb974d2eec61f1bcc0875ec39cf444d70ba40919\",\"dweb:/ipfs/QmadUe4kH2FPcdxvhCKy8yiezCvPWor4VcPzqLYSAaGDDb\"]},\"node_modules/@prb/math/src/ud21x18/Casting.sol\":{\"keccak256\":\"0x3821aa57604f6e5b7c9c5c5cc97a6d71116e673cf3fee5f76fcd42b4cefded65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a80399c6b38ab45cc10d0a6683d50340cd89d9a085b6d0dcfb81e7c4e5b3ce09\",\"dweb:/ipfs/QmWNW2YD2LMkqrpAtJYeeuHN329Rx7mvfmrjsCo1p6akTL\"]},\"node_modules/@prb/math/src/ud21x18/Constants.sol\":{\"keccak256\":\"0x0997574a1ced6c43bde6d9c9175edc5ad64cbb920a0969a9db68eea543747601\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c09f03345a6779b002b38ffc3954258accbb2b1d0d5506d42c3bd7f117304f60\",\"dweb:/ipfs/QmTeBXRCE7H2HpqKUNsZN7Nk3rdBnFmbAUFom3E1PJeGuV\"]},\"node_modules/@prb/math/src/ud21x18/Errors.sol\":{\"keccak256\":\"0x35a1fb789b90f8c90865884d3023deb17fcca5c7146b5ddef823496d835a5415\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0af359d07ba25bdc90de7c05ed6216833932caa75d4a02fcfc51ceeaba5a4e80\",\"dweb:/ipfs/QmavBFw73Xfp1qJiN6P1gk2Dfr8ByWo3dyCPVgDHtko2gq\"]},\"node_modules/@prb/math/src/ud21x18/ValueType.sol\":{\"keccak256\":\"0x24838b2b1da371b9259d8ee21534a9f0cb5796aba75a4efca2374627952bee25\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://897e6b79308651671c7f3c91a0069e778b47356c9ba3f86e238398ab7f2623af\",\"dweb:/ipfs/QmZbLw3tJVRZFQnV9jWQUmF43gna841adSG2TAiwDAifGU\"]},\"node_modules/@prb/math/src/ud2x18/Casting.sol\":{\"keccak256\":\"0x0f3141ed054e7c29dbe1acb4b88b18eb05d60e998fba6b4e503a6799faa356d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1e2468fc4c458082aaf4aa2e35af9ba3702f207e3c8533dd1e7da11ad605eae\",\"dweb:/ipfs/QmSm7iRH1eo4cJCwcAiiXWRH9Hn1urSS4tMdbaFbFGuTyL\"]},\"node_modules/@prb/math/src/ud2x18/Constants.sol\":{\"keccak256\":\"0x29b0e050c865899e1fb9022b460a7829cdee248c44c4299f068ba80695eec3fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cbaef16b662fac235349bcf97bc980dd0cba15d4e6230caae61224cdac8ea6d9\",\"dweb:/ipfs/QmZQa5XBhi7k3yhtCd8wVpnwW8htfU4sjXxWhxRypMBYkC\"]},\"node_modules/@prb/math/src/ud2x18/Errors.sol\":{\"keccak256\":\"0x3b27e2a57438cd30d9c130f84aace24d547e5ed58e8689691d7d92ad2db38ddd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://841cf9fb45443899c6b659300bbf503c3fd2c1a1e83b7f0e28620eed457f7437\",\"dweb:/ipfs/QmUqg8WscP5yQPw3UMUCWaB9RLU6nryGzseuyhAjNnDc1i\"]},\"node_modules/@prb/math/src/ud2x18/ValueType.sol\":{\"keccak256\":\"0x975a2e69b48f34a4c0bd80e8a5609ac67b7264c91992c0944f9ebe7b9e3fc9d0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65d012521c475295d7e70b7d526fcc0911d0f238ea938719d77251bba00c9b41\",\"dweb:/ipfs/QmexEvTQCCBPYRWAYnomZX5M7C2EkXQRAXqEYMNUZfazCs\"]},\"node_modules/@prb/math/src/ud60x18/Casting.sol\":{\"keccak256\":\"0x0803318ddc98b4ba8fbfe70e5ee08d78387fe6ae00982b9960518085a751d7b6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e68a2f780b2e33fa5416eb60f9daa81f014c2591119f4b67bed1217d5530780\",\"dweb:/ipfs/QmZe7JTWvbfKqMnu4sxUwWCtLcCay9hH71VZUpoFCdENcr\"]},\"node_modules/@prb/math/src/ud60x18/Constants.sol\":{\"keccak256\":\"0x2b80d26153d3fdcfb3a9ca772d9309d31ed1275f5b8b54c3ffb54d3652b37d90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e3a6673a156f635db94dc176baaa7274db8f9bec4461cd1152596253550ee3b\",\"dweb:/ipfs/Qmc9zT4kNSbMYaXcnbxNVqmb3P3m46ieaQxkwxqLwsvRA5\"]},\"node_modules/@prb/math/src/ud60x18/Errors.sol\":{\"keccak256\":\"0xbab6b0e303d32f3a9d9e2fe881f0392b8c59a73051a4d34f21a403b3961b3044\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86a019bcf2510d0691287329dc057479cc0abc48a5e15f245e7f15c03052d2c8\",\"dweb:/ipfs/QmeXe5pbpDHvN5DZ8puXmH2RJ25zDHj55wpiStWtNQPvq6\"]},\"node_modules/@prb/math/src/ud60x18/Helpers.sol\":{\"keccak256\":\"0xf5faff881391d2c060029499a666cc5f0bea90a213150bb476fae8f02a5df268\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76105fa22bb1b5f1fa99abf9c4fbc9577a02c7bc204f271754c407f0d75489f5\",\"dweb:/ipfs/QmVNGZSTniDuZus5DdbFubqJXCLtTaZit7YPm4ntjr5Lgr\"]},\"node_modules/@prb/math/src/ud60x18/Math.sol\":{\"keccak256\":\"0xc4e51dfd9af62938e277e90fa724099f239d33727a35909ed48c292a76faf2fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d731537cbc50b852c21d28625aeb2c329729afc23a7b86ff9d8ee5878f47e9d6\",\"dweb:/ipfs/QmS7Cj4pAdPZcTp7RqYXyxBc9EYX92CT8icfkNigktUsLr\"]},\"node_modules/@prb/math/src/ud60x18/ValueType.sol\":{\"keccak256\":\"0x1b200baf25d01a8b91b97b42114248636f742b5b7028487ef4daef6621e378a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b5708ed017206bda2197654e80bea9f37b3a9993434bb066c903c2865e028f47\",\"dweb:/ipfs/QmTyotZk2J5YvWkNvB2qhXBMgRGWW2UgPqR4JPocrXSr8n\"]},\"node_modules/@sablier/evm-utils/src/interfaces/IAdminable.sol\":{\"keccak256\":\"0x3228d63e9b0b951030c73c42bb071e64f0ff0eadbcbeefad3f29a48366539c26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acc90ad2bec0e84349b56611b35b56bfb75a5930fd1babb2bd638fbbb15bd126\",\"dweb:/ipfs/QmSLnHx6bo4BQeBKYferfEhZo1Z4xCXdDF1bzJoHUafHt4\"]},\"node_modules/@sablier/evm-utils/src/interfaces/IBatch.sol\":{\"keccak256\":\"0x6d3aab84cb0529afc1e8b4a2ad4f89feb15c76b6a515a14fdf4b98887d856ae4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://77e68471ec663dda763ac40bb7c35d47b2a87e262461dad9a2f03377f928e758\",\"dweb:/ipfs/QmdvAq7XyNAUA8uLhnFrWuBgZAjNjoq6BaY5AyjFKvC8Xh\"]},\"node_modules/@sablier/evm-utils/src/interfaces/IComptrollerable.sol\":{\"keccak256\":\"0xdbc32762b87590be38095a84789906fa7a23fd2c2c112859504549ef3be17522\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://14ac13726bb7435ce310dd437a9b58852ca0c35640949e898c803a33a30dee8b\",\"dweb:/ipfs/QmeeKPApvBHbUF3S98qCnB26Aw67KTQF2GFyGQZCxykyMW\"]},\"node_modules/@sablier/evm-utils/src/interfaces/IRoleAdminable.sol\":{\"keccak256\":\"0x391cb4bd4bae01e3efdb84f63635644ed6329b72e8a5105ad53833551e8ba825\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ccca9da1c044c15cf0b647a4572c05f5d498fb18b3685a85a8836f7110cb1bc4\",\"dweb:/ipfs/QmfAKHqvgKQUgpC6VomTjTkc1tDnsbVJD5bLn8wL8KuTFV\"]},\"node_modules/@sablier/evm-utils/src/interfaces/ISablierComptroller.sol\":{\"keccak256\":\"0x5c52e70a6c083611d4b5518d17d025f70d322ee2c61d81f20f3fe50f4bd824ba\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5c07b2076065f1c65a59176ada3459be53f78e59a2055d9ae92b226edafa484c\",\"dweb:/ipfs/QmXYRDkBSWUBza1pi439ErzeLoaLUT8Zvj2yWcFZ5F1rgX\"]},\"src/interfaces/IFlowNFTDescriptor.sol\":{\"keccak256\":\"0xdf964042ae7c74f03909d020fbb63e0ae56aeb2fa47213e3775a1e3263d00e54\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0d4ede276be940185ea0b638c8f38f68232b6f4394ce0a69c2c729bc761aec82\",\"dweb:/ipfs/QmSgivdvgxrY7n6XbLQcGp645nRw1y2272iJUVhQyfnWUp\"]},\"src/interfaces/ISablierFlow.sol\":{\"keccak256\":\"0xdeca4fafe101540ce7112f1dd18ef74b19152960436e47a0b69198b2508b6bbe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://627c9eae5e8bd5ff2732d542a0387643bcac278e0e9510dd4bb712905842d652\",\"dweb:/ipfs/QmcV4D7jLSqAP27R86fSugGYj4MrToWE7JpTkEYgKqrYAa\"]},\"src/interfaces/ISablierFlowState.sol\":{\"keccak256\":\"0x34de979793f5ae6efea67b31f6884e469f4436c8add0dc1c7e1151926db316e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c25ab6522693ad95750b56bd5f7b2889a9291395d77ae4f417f0c45f5f165f08\",\"dweb:/ipfs/QmZpeUNJzwriC9aSbKacojNCy3HtY7JBGthC4Vs3sWt83f\"]},\"src/types/DataTypes.sol\":{\"keccak256\":\"0x73391073cf39bd553a0128aa4af5ea937d604a87393bbe37689727ccf10cf67f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2b32bbf9314ec331953938b36102f91fa6e899879cc450a34bd0bd397e618a9e\",\"dweb:/ipfs/QmbtxAvTVpvWBipLm3ALAdHhGXa6BoXZreBFGW9pfinoYE\"]}},\"version\":1}",
  "metadata": {
    "compiler": { "version": "0.8.29+commit.ab55807c" },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256", "indexed": true },
            { "internalType": "uint256", "name": "totalDebt", "type": "uint256", "indexed": false },
            { "internalType": "UD21x18", "name": "oldRatePerSecond", "type": "uint128", "indexed": false },
            { "internalType": "UD21x18", "name": "newRatePerSecond", "type": "uint128", "indexed": false }
          ],
          "type": "event",
          "name": "AdjustFlowStream",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "address", "name": "owner", "type": "address", "indexed": true },
            { "internalType": "address", "name": "approved", "type": "address", "indexed": true },
            { "internalType": "uint256", "name": "tokenId", "type": "uint256", "indexed": true }
          ],
          "type": "event",
          "name": "Approval",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "address", "name": "owner", "type": "address", "indexed": true },
            { "internalType": "address", "name": "operator", "type": "address", "indexed": true },
            { "internalType": "bool", "name": "approved", "type": "bool", "indexed": false }
          ],
          "type": "event",
          "name": "ApprovalForAll",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "_fromTokenId", "type": "uint256", "indexed": false },
            { "internalType": "uint256", "name": "_toTokenId", "type": "uint256", "indexed": false }
          ],
          "type": "event",
          "name": "BatchMetadataUpdate",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256", "indexed": false },
            { "internalType": "address", "name": "creator", "type": "address", "indexed": false },
            { "internalType": "address", "name": "sender", "type": "address", "indexed": true },
            { "internalType": "address", "name": "recipient", "type": "address", "indexed": true },
            { "internalType": "UD21x18", "name": "ratePerSecond", "type": "uint128", "indexed": false },
            { "internalType": "uint40", "name": "snapshotTime", "type": "uint40", "indexed": false },
            { "internalType": "contract IERC20", "name": "token", "type": "address", "indexed": true },
            { "internalType": "bool", "name": "transferable", "type": "bool", "indexed": false }
          ],
          "type": "event",
          "name": "CreateFlowStream",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256", "indexed": true },
            { "internalType": "address", "name": "funder", "type": "address", "indexed": true },
            { "internalType": "uint128", "name": "amount", "type": "uint128", "indexed": false }
          ],
          "type": "event",
          "name": "DepositFlowStream",
          "anonymous": false
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "_tokenId", "type": "uint256", "indexed": false }],
          "type": "event",
          "name": "MetadataUpdate",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256", "indexed": true },
            { "internalType": "address", "name": "sender", "type": "address", "indexed": true },
            { "internalType": "address", "name": "recipient", "type": "address", "indexed": true },
            { "internalType": "uint256", "name": "totalDebt", "type": "uint256", "indexed": false }
          ],
          "type": "event",
          "name": "PauseFlowStream",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256", "indexed": true },
            { "internalType": "address", "name": "sender", "type": "address", "indexed": true },
            { "internalType": "uint128", "name": "amount", "type": "uint128", "indexed": false }
          ],
          "type": "event",
          "name": "RefundFromFlowStream",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256", "indexed": true },
            { "internalType": "address", "name": "sender", "type": "address", "indexed": true },
            { "internalType": "UD21x18", "name": "ratePerSecond", "type": "uint128", "indexed": false }
          ],
          "type": "event",
          "name": "RestartFlowStream",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "contract ISablierComptroller",
              "name": "oldComptroller",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "contract ISablierComptroller",
              "name": "newComptroller",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "SetComptroller",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "contract ISablierComptroller",
              "name": "comptroller",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "contract IFlowNFTDescriptor",
              "name": "oldNFTDescriptor",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "contract IFlowNFTDescriptor",
              "name": "newNFTDescriptor",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "SetNFTDescriptor",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "contract ISablierComptroller",
              "name": "comptroller",
              "type": "address",
              "indexed": true
            },
            { "internalType": "address", "name": "nativeToken", "type": "address", "indexed": false }
          ],
          "type": "event",
          "name": "SetNativeToken",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "address", "name": "from", "type": "address", "indexed": true },
            { "internalType": "address", "name": "to", "type": "address", "indexed": true },
            { "internalType": "uint256", "name": "tokenId", "type": "uint256", "indexed": true }
          ],
          "type": "event",
          "name": "Transfer",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "address", "name": "comptroller", "type": "address", "indexed": true },
            { "internalType": "uint256", "name": "feeAmount", "type": "uint256", "indexed": false }
          ],
          "type": "event",
          "name": "TransferFeesToComptroller",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256", "indexed": true },
            { "internalType": "address", "name": "sender", "type": "address", "indexed": true },
            { "internalType": "address", "name": "recipient", "type": "address", "indexed": true },
            { "internalType": "address", "name": "caller", "type": "address", "indexed": false },
            { "internalType": "uint256", "name": "newTotalDebt", "type": "uint256", "indexed": false },
            { "internalType": "uint256", "name": "writtenOffDebt", "type": "uint256", "indexed": false }
          ],
          "type": "event",
          "name": "VoidFlowStream",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256", "indexed": true },
            { "internalType": "address", "name": "to", "type": "address", "indexed": true },
            { "internalType": "contract IERC20", "name": "token", "type": "address", "indexed": true },
            { "internalType": "address", "name": "caller", "type": "address", "indexed": false },
            { "internalType": "uint128", "name": "withdrawAmount", "type": "uint128", "indexed": false }
          ],
          "type": "event",
          "name": "WithdrawFromFlowStream",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256" },
            { "internalType": "UD21x18", "name": "newRatePerSecond", "type": "uint128" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "adjustRatePerSecond"
        },
        {
          "inputs": [{ "internalType": "contract IERC20", "name": "token", "type": "address" }],
          "stateMutability": "view",
          "type": "function",
          "name": "aggregateAmount",
          "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "to", "type": "address" },
            { "internalType": "uint256", "name": "tokenId", "type": "uint256" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approve"
        },
        {
          "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [{ "internalType": "uint256", "name": "balance", "type": "uint256" }]
        },
        {
          "inputs": [{ "internalType": "bytes[]", "name": "calls", "type": "bytes[]" }],
          "stateMutability": "payable",
          "type": "function",
          "name": "batch",
          "outputs": [{ "internalType": "bytes[]", "name": "results", "type": "bytes[]" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "calculateMinFeeWei",
          "outputs": [{ "internalType": "uint256", "name": "minFeeWei", "type": "uint256" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "comptroller",
          "outputs": [{ "internalType": "contract ISablierComptroller", "name": "", "type": "address" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "coveredDebtOf",
          "outputs": [{ "internalType": "uint128", "name": "coveredDebt", "type": "uint128" }]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "sender", "type": "address" },
            { "internalType": "address", "name": "recipient", "type": "address" },
            { "internalType": "UD21x18", "name": "ratePerSecond", "type": "uint128" },
            { "internalType": "uint40", "name": "startTime", "type": "uint40" },
            { "internalType": "contract IERC20", "name": "token", "type": "address" },
            { "internalType": "bool", "name": "transferable", "type": "bool" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "create",
          "outputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "sender", "type": "address" },
            { "internalType": "address", "name": "recipient", "type": "address" },
            { "internalType": "UD21x18", "name": "ratePerSecond", "type": "uint128" },
            { "internalType": "uint40", "name": "startTime", "type": "uint40" },
            { "internalType": "contract IERC20", "name": "token", "type": "address" },
            { "internalType": "bool", "name": "transferable", "type": "bool" },
            { "internalType": "uint128", "name": "amount", "type": "uint128" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "createAndDeposit",
          "outputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "depletionTimeOf",
          "outputs": [{ "internalType": "uint256", "name": "depletionTime", "type": "uint256" }]
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256" },
            { "internalType": "uint128", "name": "amount", "type": "uint128" },
            { "internalType": "address", "name": "sender", "type": "address" },
            { "internalType": "address", "name": "recipient", "type": "address" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "deposit"
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256" },
            { "internalType": "uint128", "name": "amount", "type": "uint128" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "depositAndPause"
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getApproved",
          "outputs": [{ "internalType": "address", "name": "operator", "type": "address" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getBalance",
          "outputs": [{ "internalType": "uint128", "name": "balance", "type": "uint128" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getRatePerSecond",
          "outputs": [{ "internalType": "UD21x18", "name": "ratePerSecond", "type": "uint128" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getRecipient",
          "outputs": [{ "internalType": "address", "name": "recipient", "type": "address" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getSender",
          "outputs": [{ "internalType": "address", "name": "sender", "type": "address" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getSnapshotDebtScaled",
          "outputs": [{ "internalType": "uint256", "name": "snapshotDebtScaled", "type": "uint256" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getSnapshotTime",
          "outputs": [{ "internalType": "uint40", "name": "snapshotTime", "type": "uint40" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getStream",
          "outputs": [
            {
              "internalType": "struct Flow.Stream",
              "name": "stream",
              "type": "tuple",
              "components": [
                { "internalType": "uint128", "name": "balance", "type": "uint128" },
                { "internalType": "UD21x18", "name": "ratePerSecond", "type": "uint128" },
                { "internalType": "address", "name": "sender", "type": "address" },
                { "internalType": "uint40", "name": "snapshotTime", "type": "uint40" },
                { "internalType": "bool", "name": "isStream", "type": "bool" },
                { "internalType": "bool", "name": "isTransferable", "type": "bool" },
                { "internalType": "bool", "name": "isVoided", "type": "bool" },
                { "internalType": "contract IERC20", "name": "token", "type": "address" },
                { "internalType": "uint8", "name": "tokenDecimals", "type": "uint8" },
                { "internalType": "uint256", "name": "snapshotDebtScaled", "type": "uint256" }
              ]
            }
          ]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getToken",
          "outputs": [{ "internalType": "contract IERC20", "name": "token", "type": "address" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "getTokenDecimals",
          "outputs": [{ "internalType": "uint8", "name": "tokenDecimals", "type": "uint8" }]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "owner", "type": "address" },
            { "internalType": "address", "name": "operator", "type": "address" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "isApprovedForAll",
          "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "isStream",
          "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "isTransferable",
          "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "isVoided",
          "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "name",
          "outputs": [{ "internalType": "string", "name": "", "type": "string" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "nativeToken",
          "outputs": [{ "internalType": "address", "name": "", "type": "address" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "nextStreamId",
          "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "nftDescriptor",
          "outputs": [{ "internalType": "contract IFlowNFTDescriptor", "name": "", "type": "address" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "ongoingDebtScaledOf",
          "outputs": [{ "internalType": "uint256", "name": "ongoingDebtScaled", "type": "uint256" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "ownerOf",
          "outputs": [{ "internalType": "address", "name": "owner", "type": "address" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "payable",
          "type": "function",
          "name": "pause"
        },
        {
          "inputs": [
            { "internalType": "contract IERC20", "name": "token", "type": "address" },
            { "internalType": "address", "name": "to", "type": "address" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "recover"
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256" },
            { "internalType": "uint128", "name": "amount", "type": "uint128" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "refund"
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256" },
            { "internalType": "uint128", "name": "amount", "type": "uint128" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "refundAndPause"
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "payable",
          "type": "function",
          "name": "refundMax",
          "outputs": [{ "internalType": "uint128", "name": "refundedAmount", "type": "uint128" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "refundableAmountOf",
          "outputs": [{ "internalType": "uint128", "name": "refundableAmount", "type": "uint128" }]
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256" },
            { "internalType": "UD21x18", "name": "ratePerSecond", "type": "uint128" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "restart"
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256" },
            { "internalType": "UD21x18", "name": "ratePerSecond", "type": "uint128" },
            { "internalType": "uint128", "name": "amount", "type": "uint128" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "restartAndDeposit"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "from", "type": "address" },
            { "internalType": "address", "name": "to", "type": "address" },
            { "internalType": "uint256", "name": "tokenId", "type": "uint256" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "safeTransferFrom"
        },
        {
          "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" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "safeTransferFrom"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "operator", "type": "address" },
            { "internalType": "bool", "name": "approved", "type": "bool" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setApprovalForAll"
        },
        {
          "inputs": [{ "internalType": "contract ISablierComptroller", "name": "newComptroller", "type": "address" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setComptroller"
        },
        {
          "inputs": [{ "internalType": "contract IFlowNFTDescriptor", "name": "newNFTDescriptor", "type": "address" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setNFTDescriptor"
        },
        {
          "inputs": [{ "internalType": "address", "name": "newNativeToken", "type": "address" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setNativeToken"
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "statusOf",
          "outputs": [{ "internalType": "enum Flow.Status", "name": "status", "type": "uint8" }]
        },
        {
          "inputs": [{ "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" }],
          "stateMutability": "view",
          "type": "function",
          "name": "supportsInterface",
          "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "symbol",
          "outputs": [{ "internalType": "string", "name": "", "type": "string" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "tokenURI",
          "outputs": [{ "internalType": "string", "name": "", "type": "string" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "totalDebtOf",
          "outputs": [{ "internalType": "uint256", "name": "totalDebt", "type": "uint256" }]
        },
        { "inputs": [], "stateMutability": "nonpayable", "type": "function", "name": "transferFeesToComptroller" },
        {
          "inputs": [
            { "internalType": "address", "name": "from", "type": "address" },
            { "internalType": "address", "name": "to", "type": "address" },
            { "internalType": "uint256", "name": "tokenId", "type": "uint256" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferFrom"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "from", "type": "address" },
            { "internalType": "address", "name": "to", "type": "address" },
            { "internalType": "uint256", "name": "streamId", "type": "uint256" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "transferFromPayable"
        },
        {
          "inputs": [
            { "internalType": "contract IERC20", "name": "token", "type": "address" },
            { "internalType": "address", "name": "to", "type": "address" },
            { "internalType": "uint128", "name": "amount", "type": "uint128" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "transferTokens"
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "uncoveredDebtOf",
          "outputs": [{ "internalType": "uint256", "name": "uncoveredDebt", "type": "uint256" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "payable",
          "type": "function",
          "name": "void"
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256" },
            { "internalType": "address", "name": "to", "type": "address" },
            { "internalType": "uint128", "name": "amount", "type": "uint128" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "withdraw"
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "streamId", "type": "uint256" },
            { "internalType": "address", "name": "to", "type": "address" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "withdrawMax",
          "outputs": [{ "internalType": "uint128", "name": "withdrawnAmount", "type": "uint128" }]
        },
        {
          "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
          "stateMutability": "view",
          "type": "function",
          "name": "withdrawableAmountOf",
          "outputs": [{ "internalType": "uint128", "name": "withdrawableAmount", "type": "uint128" }]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "adjustRatePerSecond(uint256,uint128)": {
            "details": "Emits a {AdjustFlowStream} and {MetadataUpdate} event. Notes: - If the snapshot time is not in the future, it updates both the snapshot time and snapshot debt. Requirements: - Must not be delegate called. - `streamId` must not reference a null, paused, or voided stream. - `msg.sender` must be the stream's sender. - `newRatePerSecond` must be greater than zero and must be different from the current rate per second.",
            "params": {
              "newRatePerSecond": "The new rate per second, denoted as a fixed-point number where 1e18 is 1 token per second.",
              "streamId": "The ID of the stream to adjust."
            }
          },
          "aggregateAmount(address)": {
            "details": "If tokens are directly transferred to the contract without using the stream creation functions, the ERC-20 balance may be greater than the aggregate amount.",
            "params": { "token": "The ERC-20 token for the query." }
          },
          "approve(address,uint256)": {
            "details": "Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event."
          },
          "balanceOf(address)": { "details": "Returns the number of tokens in ``owner``'s account." },
          "batch(bytes[])": {
            "details": "Since `msg.value` can be reused across calls, be VERY CAREFUL when using it. Refer to https://paradigm.xyz/2021/08/two-rights-might-make-a-wrong for more information.",
            "params": { "calls": "An array of inputs for each call." },
            "returns": { "results": "An array of results from each call. Empty when the calls do not return anything." }
          },
          "calculateMinFeeWei(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "coveredDebtOf(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "create(address,address,uint128,uint40,address,bool)": {
            "details": "Emits a {CreateFlowStream} and {MetadataUpdate} event. Requirements: - Must not be delegate called. - `sender` must not be the zero address. - `recipient` must not be the zero address. - If `startTime` is in the future, the `ratePerSecond` must be greater than zero. - The `token` must not be the native token. - The `token`'s decimals must be less than or equal to 18.",
            "params": {
              "ratePerSecond": "The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second.",
              "recipient": "The address receiving the tokens.",
              "sender": "The address streaming the tokens, which is able to adjust and pause the stream. It doesn't have to be the same as `msg.sender`.",
              "startTime": "The timestamp when the stream starts. A sentinel value of zero means the stream will be created with the snapshot time as `block.timestamp`.",
              "token": "The contract address of the ERC-20 token to be streamed.",
              "transferable": "Boolean indicating if the stream NFT is transferable."
            },
            "returns": { "streamId": "The ID of the newly created stream." }
          },
          "createAndDeposit(address,address,uint128,uint40,address,bool,uint128)": {
            "details": "Emits a {Transfer}, {CreateFlowStream}, {DepositFlowStream} and {MetadataUpdate} event. Notes: - Refer to the notes in {create} and {deposit}. Requirements: - Refer to the requirements in {create} and {deposit}.",
            "params": {
              "amount": "The deposit amount, denoted in token's decimals.",
              "ratePerSecond": "The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second.",
              "recipient": "The address receiving the tokens.",
              "sender": "The address streaming the tokens. It doesn't have to be the same as `msg.sender`.",
              "startTime": "The timestamp when the stream starts. A sentinel value of zero means the stream will be created with the snapshot time as `block.timestamp`.",
              "token": "The contract address of the ERC-20 token to be streamed.",
              "transferable": "Boolean indicating if the stream NFT is transferable."
            },
            "returns": { "streamId": "The ID of the newly created stream." }
          },
          "depletionTimeOf(uint256)": {
            "details": "Reverts on the following conditions: - If `streamId` references a paused or a null stream. - If stream balance is zero.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "deposit(uint256,uint128,address,address)": {
            "details": "Emits a {Transfer}, {DepositFlowStream} and {MetadataUpdate} event. Requirements: - Must not be delegate called. - `streamId` must not reference a null or a voided stream. - `amount` must be greater than zero. - `sender` and `recipient` must match the stream's sender and recipient addresses.",
            "params": {
              "amount": "The deposit amount, denoted in token's decimals.",
              "recipient": "The stream's recipient address.",
              "sender": "The stream's sender address.",
              "streamId": "The ID of the stream to deposit to."
            }
          },
          "depositAndPause(uint256,uint128)": {
            "details": "Emits a {Transfer}, {DepositFlowStream}, {PauseFlowStream} and {MetadataUpdate} event. Notes: - Refer to the notes in {deposit} and {pause}. Requirements: - Refer to the requirements in {deposit} and {pause}.",
            "params": {
              "amount": "The deposit amount, denoted in token's decimals.",
              "streamId": "The ID of the stream to deposit to, and then pause."
            }
          },
          "getApproved(uint256)": {
            "details": "Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."
          },
          "getBalance(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "getRatePerSecond(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The ID of the stream to make the query for." }
          },
          "getRecipient(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "getSender(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "getSnapshotDebtScaled(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "getSnapshotTime(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The ID of the stream to make the query for." }
          },
          "getStream(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "getToken(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The ID of the stream to make the query for." }
          },
          "getTokenDecimals(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The ID of the stream to make the query for." }
          },
          "isApprovedForAll(address,address)": {
            "details": "Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"
          },
          "isStream(uint256)": {
            "details": "Does not revert if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "isTransferable(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "isVoided(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "name()": { "details": "Returns the token collection name." },
          "nativeToken()": {
            "details": "The native tokens on some chains have a dual interface as ERC-20. For example, on Polygon the $POL token is the native token and has an ERC-20 version at 0x0000000000000000000000000000000000001010. This means that `address(this).balance` returns the same value as `balanceOf(address(this))`. To avoid any unintended behavior, these tokens cannot be used in Sablier. As an alternative, users can use the Wrapped version of the token, i.e. WMATIC, which is a standard ERC-20 token."
          },
          "nextStreamId()": { "returns": { "_0": "The next stream ID." } },
          "ongoingDebtScaledOf(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "ownerOf(uint256)": {
            "details": "Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."
          },
          "pause(uint256)": {
            "details": "Emits a {PauseFlowStream} and {MetadataUpdate} event. Notes: - It updates snapshot debt and snapshot time. - It sets the rate per second to zero. Requirements: - Must not be delegate called. - `streamId` must not reference a null, pending or paused stream. - `msg.sender` must be the stream's sender.",
            "params": { "streamId": "The ID of the stream to pause." }
          },
          "recover(address,address)": {
            "details": "Notes: - The surplus amount is defined as the difference between the total balance of the contract for the provided ERC-20 token and the sum of balances of all streams created using the same ERC-20 token. Requirements: - `msg.sender` must be the comptroller contract.",
            "params": {
              "to": "The address to send the surplus amount.",
              "token": "The contract address of the ERC-20 token to recover for."
            }
          },
          "refund(uint256,uint128)": {
            "details": "Emits a {Transfer}, {RefundFromFlowStream} and {MetadataUpdate} event. Requirements: - Must not be delegate called. - `streamId` must not reference a null stream. - `msg.sender` must be the sender. - `amount` must be greater than zero and must not exceed the refundable amount.",
            "params": {
              "amount": "The amount to refund, denoted in token's decimals.",
              "streamId": "The ID of the stream to refund from."
            }
          },
          "refundAndPause(uint256,uint128)": {
            "details": "Emits a {Transfer}, {RefundFromFlowStream}, {PauseFlowStream} and {MetadataUpdate} event. Notes: - Refer to the notes in {pause}. Requirements: - Refer to the requirements in {refund} and {pause}.",
            "params": {
              "amount": "The amount to refund, denoted in token's decimals.",
              "streamId": "The ID of the stream to refund from and then pause."
            }
          },
          "refundMax(uint256)": {
            "details": "Emits a {Transfer}, {RefundFromFlowStream} and {MetadataUpdate} event. Requirements: - Refer to the requirements in {refund}.",
            "params": { "streamId": "The ID of the stream to refund from." },
            "returns": { "refundedAmount": "The amount refunded to the stream sender, denoted in token's decimals." }
          },
          "refundableAmountOf(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "restart(uint256,uint128)": {
            "details": "Emits a {RestartFlowStream} and {MetadataUpdate} event. Notes: - It updates snapshot debt and snapshot time. Requirements: - Must not be delegate called. - `streamId` must not reference a null stream, must be paused, and must not be voided. - `msg.sender` must be the stream's sender. - `ratePerSecond` must be greater than zero.",
            "params": {
              "ratePerSecond": "The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second.",
              "streamId": "The ID of the stream to restart."
            }
          },
          "restartAndDeposit(uint256,uint128,uint128)": {
            "details": "Emits a {RestartFlowStream}, {Transfer}, {DepositFlowStream} and {MetadataUpdate} event. Notes: - Refer to the notes in {restart} and {deposit}. Requirements: - `amount` must be greater than zero. - Refer to the requirements in {restart}.",
            "params": {
              "amount": "The deposit amount, denoted in token's decimals.",
              "ratePerSecond": "The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second.",
              "streamId": "The ID of the stream to restart."
            }
          },
          "safeTransferFrom(address,address,uint256)": {
            "details": "Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or   {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon   a safe transfer. Emits a {Transfer} event."
          },
          "safeTransferFrom(address,address,uint256,bytes)": {
            "details": "Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon   a safe transfer. Emits a {Transfer} event."
          },
          "setApprovalForAll(address,bool)": {
            "details": "Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event."
          },
          "setComptroller(address)": {
            "details": "Emits a {SetComptroller} event. Requirements: - `msg.sender` must be the current comptroller. - The new comptroller must return `true` from {supportsInterface} with the comptroller's minimal interface ID which is defined as the XOR of the following function selectors: 1. {calculateMinFeeWeiFor} 2. {convertUSDFeeToWei} 3. {execute} 4. {getMinFeeUSDFor}",
            "params": { "newComptroller": "The address of the new comptroller contract." }
          },
          "setNFTDescriptor(address)": {
            "details": "Emits a {SetNFTDescriptor} and {BatchMetadataUpdate} event. Notes: - Does not revert if the NFT descriptor is the same. Requirements: - `msg.sender` must be the comptroller contract.",
            "params": { "newNFTDescriptor": "The address of the new NFT descriptor contract." }
          },
          "setNativeToken(address)": {
            "details": "For more information, see the documentation for {nativeToken}. Emits a {SetNativeToken} event. Requirements: - `msg.sender` must be the comptroller contract. - `newNativeToken` must not be the zero address. - The native token must not be already set.",
            "params": { "newNativeToken": "The address of the native token." }
          },
          "statusOf(uint256)": {
            "details": "Reverts if `streamId` references a null stream. Integrators should exercise caution when depending on the return value of this function as streams can be paused and resumed at any moment.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "supportsInterface(bytes4)": {
            "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
          },
          "symbol()": { "details": "Returns the token collection symbol." },
          "tokenURI(uint256)": { "details": "Returns the Uniform Resource Identifier (URI) for `tokenId` token." },
          "totalDebtOf(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "transferFeesToComptroller()": { "details": "Emits a {TransferFeesToComptroller} event." },
          "transferFrom(address,address,uint256)": {
            "details": "Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event."
          },
          "transferFromPayable(address,address,uint256)": {
            "params": {
              "from": "The owner of the stream ID.",
              "streamId": "The ID of the stream NFT to transfer.",
              "to": "The address of the new owner of the stream ID."
            }
          },
          "transferTokens(address,address,uint128)": {
            "details": "Emits a {Transfer} event. Requirements: - `msg.sender` must have approved this contract to spend at least `amount` tokens.",
            "params": {
              "amount": "The amount of tokens to transfer, denoted in token's decimals.",
              "to": "The address receiving the tokens.",
              "token": "The contract address of the ERC-20 token to be transferred."
            }
          },
          "uncoveredDebtOf(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." }
          },
          "void(uint256)": {
            "details": "Emits a {VoidFlowStream} and {MetadataUpdate} event. Notes: - It sets snapshot time to the `block.timestamp`. - Voiding an insolvent stream sets the snapshot debt to the stream's balance making the uncovered debt to become zero. - Voiding a solvent stream updates the snapshot debt by adding up ongoing debt. - It sets the rate per second to zero. - A voided stream cannot be restarted. Requirements: - Must not be delegate called. - `streamId` must not reference a null or a voided stream. - `msg.sender` must either be the stream's sender, recipient or an approved third party.",
            "params": { "streamId": "The ID of the stream to void." }
          },
          "withdraw(uint256,address,uint128)": {
            "details": "Emits a {Transfer}, {WithdrawFromFlowStream} and {MetadataUpdate} event. Notes: - It sets the snapshot time to the `block.timestamp` if `amount` is greater than snapshot debt. Requirements: - Must not be delegate called. - `streamId` must not reference a null stream. - `to` must not be the zero address. - `to` must be the recipient if `msg.sender` is not the stream's recipient or an approved third party. - `amount` must  be greater than zero and must not exceed the withdrawable amount. - `msg.value` must be greater than or equal to the minimum fee in wei for the stream's sender.",
            "params": {
              "amount": "The amount to withdraw, denoted in token's decimals.",
              "streamId": "The ID of the stream to withdraw from.",
              "to": "The address receiving the withdrawn tokens."
            }
          },
          "withdrawMax(uint256,address)": {
            "details": "Emits a {Transfer}, {WithdrawFromFlowStream} and {MetadataUpdate} event. Notes: - Refer to the notes in {withdraw}. Requirements: - Refer to the requirements in {withdraw}.",
            "params": {
              "streamId": "The ID of the stream to withdraw from.",
              "to": "The address receiving the withdrawn tokens."
            },
            "returns": { "withdrawnAmount": "The amount withdrawn to the recipient, denoted in token's decimals." }
          },
          "withdrawableAmountOf(uint256)": {
            "details": "Reverts if `streamId` references a null stream.",
            "params": { "streamId": "The stream ID for the query." },
            "returns": { "withdrawableAmount": "The amount that the recipient can withdraw." }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "adjustRatePerSecond(uint256,uint128)": { "notice": "Changes the stream's rate per second." },
          "aggregateAmount(address)": {
            "notice": "Retrieves the aggregate amount across all streams, denoted in units of the token's decimals."
          },
          "batch(bytes[])": { "notice": "Allows batched calls to self, i.e., `this` contract." },
          "calculateMinFeeWei(uint256)": {
            "notice": "Calculates the minimum fee in wei required to withdraw from the given stream ID."
          },
          "comptroller()": { "notice": "Retrieves the address of the comptroller contract." },
          "coveredDebtOf(uint256)": {
            "notice": "Returns the amount of debt covered by the stream balance, denoted in token's decimals."
          },
          "create(address,address,uint128,uint40,address,bool)": {
            "notice": "Creates a new Flow stream by setting the snapshot time to `startTime` and leaving the balance to zero. The stream is wrapped in an ERC-721 NFT."
          },
          "createAndDeposit(address,address,uint128,uint40,address,bool,uint128)": {
            "notice": "Creates a new Flow stream by setting the snapshot time to `startTime` and the balance to `amount`. The stream is wrapped in an ERC-721 NFT."
          },
          "depletionTimeOf(uint256)": {
            "notice": "Returns the time at which the total debt exceeds stream balance. If the total debt exceeds the stream balance, it returns 0."
          },
          "deposit(uint256,uint128,address,address)": { "notice": "Makes a deposit in a stream." },
          "depositAndPause(uint256,uint128)": { "notice": "Deposits tokens in a stream and pauses it." },
          "getBalance(uint256)": {
            "notice": "Retrieves the balance of the stream, i.e. the total deposited amounts subtracted by the total withdrawn amounts, denoted in token's decimals."
          },
          "getRatePerSecond(uint256)": {
            "notice": "Retrieves the rate per second of the stream, denoted as a fixed-point number where 1e18 is 1 token per second."
          },
          "getRecipient(uint256)": { "notice": "Retrieves the stream's recipient." },
          "getSender(uint256)": { "notice": "Retrieves the stream's sender." },
          "getSnapshotDebtScaled(uint256)": {
            "notice": "Retrieves the snapshot debt of the stream, denoted as a fixed-point number where 1e18 is 1 token."
          },
          "getSnapshotTime(uint256)": {
            "notice": "Retrieves the snapshot time of the stream, which is a Unix timestamp."
          },
          "getStream(uint256)": { "notice": "Retrieves the stream entity." },
          "getToken(uint256)": { "notice": "Retrieves the token of the stream." },
          "getTokenDecimals(uint256)": { "notice": "Retrieves the token decimals of the stream." },
          "isStream(uint256)": { "notice": "Retrieves a flag indicating whether the stream exists." },
          "isTransferable(uint256)": {
            "notice": "Retrieves a flag indicating whether the stream NFT is transferable."
          },
          "isVoided(uint256)": { "notice": "Retrieves a flag indicating whether the stream is voided." },
          "nativeToken()": {
            "notice": "Retrieves the address of the ERC-20 interface of the native token, if it exists."
          },
          "nextStreamId()": { "notice": "Counter for stream ids." },
          "nftDescriptor()": { "notice": "Contract that generates the non-fungible token URI." },
          "ongoingDebtScaledOf(uint256)": {
            "notice": "Returns the amount of debt accrued since the snapshot time until now, denoted as a fixed-point number where 1e18 is 1 token. If the stream is pending, it returns zero."
          },
          "pause(uint256)": { "notice": "Pauses the stream." },
          "recover(address,address)": { "notice": "Recover the surplus amount of tokens." },
          "refund(uint256,uint128)": {
            "notice": "Refunds the provided amount of tokens from the stream to the sender's address."
          },
          "refundAndPause(uint256,uint128)": {
            "notice": "Refunds the provided amount of tokens from the stream to the sender's address."
          },
          "refundMax(uint256)": {
            "notice": "Refunds the entire refundable amount of tokens from the stream to the sender's address."
          },
          "refundableAmountOf(uint256)": {
            "notice": "Returns the amount that the sender can be refunded from the stream, denoted in token's decimals."
          },
          "restart(uint256,uint128)": { "notice": "Restarts the stream with the provided rate per second." },
          "restartAndDeposit(uint256,uint128,uint128)": {
            "notice": "Restarts the stream with the provided rate per second, and makes a deposit."
          },
          "setComptroller(address)": { "notice": "Sets the comptroller to a new address." },
          "setNFTDescriptor(address)": {
            "notice": "Sets a new NFT descriptor contract, which produces the URI describing the Sablier stream NFTs."
          },
          "setNativeToken(address)": { "notice": "Sets the native token address. Once set, it cannot be changed." },
          "statusOf(uint256)": { "notice": "Returns the stream's status." },
          "totalDebtOf(uint256)": {
            "notice": "Returns the total amount owed by the sender to the recipient, denoted in token's decimals."
          },
          "transferFeesToComptroller()": { "notice": "Transfers the fees to the comptroller contract." },
          "transferFromPayable(address,address,uint256)": {
            "notice": "Wrapper for {IERC721.transferFrom} with the `payable` specifier so that it can be called in conjunction with other functions using {IBatch.batch}. Requirements: - Refer to the requirements of `transferFrom` in: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/e4f70216d759d8e6a64144a9e1f7bbeed78e7079/contracts/token/ERC721/IERC721.sol#L75-L91. "
          },
          "transferTokens(address,address,uint128)": {
            "notice": "A helper to transfer ERC-20 tokens from the caller to the provided address. Useful for paying one-time bonuses."
          },
          "uncoveredDebtOf(uint256)": {
            "notice": "Returns the amount of debt not covered by the stream balance, denoted in token's decimals."
          },
          "void(uint256)": { "notice": "Voids a stream." },
          "withdraw(uint256,address,uint128)": {
            "notice": "Withdraws the provided `amount` to the provided `to` address."
          },
          "withdrawMax(uint256,address)": {
            "notice": "Withdraws the entire withdrawable amount to the provided `to` address."
          },
          "withdrawableAmountOf(uint256)": {
            "notice": "Calculates the amount that the recipient can withdraw from the stream, denoted in token decimals. This is an alias for `coveredDebtOf`."
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@arbitrum/=node_modules/@arbitrum/",
        "@chainlink/=node_modules/@chainlink/",
        "@eth-optimism/=node_modules/@eth-optimism/",
        "@offchainlabs/=node_modules/@offchainlabs/",
        "@openzeppelin/=node_modules/@openzeppelin/",
        "@prb/=node_modules/@prb/",
        "@sablier/=node_modules/@sablier/",
        "@scroll-tech/=node_modules/@scroll-tech/",
        "@zksync/=node_modules/@zksync/",
        "forge-std/=node_modules/forge-std/"
      ],
      "optimizer": { "enabled": true, "runs": 1000000 },
      "metadata": { "bytecodeHash": "ipfs" },
      "compilationTarget": { "src/interfaces/ISablierFlow.sol": "ISablierFlow" },
      "evmVersion": "shanghai",
      "libraries": {},
      "viaIR": true
    },
    "sources": {
      "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": {
        "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
        "urls": [
          "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
          "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/interfaces/IERC4906.sol": {
        "keccak256": "0x1b8691e244f6e11d987459993671db0af33e6a29f7805eac6a9925cc6b601957",
        "urls": [
          "bzz-raw://a9e2a5efc2e14e98f5fe91bbab769199b4987a40dd3b96075b04957fda2ae80f",
          "dweb:/ipfs/QmbAjrSSVBiJ6MbgF7Jkr53m674iGMZ6haWbbRrWDZJraK"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/interfaces/IERC721.sol": {
        "keccak256": "0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d",
        "urls": [
          "bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b",
          "dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol": {
        "keccak256": "0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d",
        "urls": [
          "bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196",
          "dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
        "urls": [
          "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
          "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "keccak256": "0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261",
        "urls": [
          "bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11",
          "dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "keccak256": "0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1",
        "urls": [
          "bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02",
          "dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE"
        ],
        "license": "MIT"
      },
      "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
        "urls": [
          "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
          "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/Common.sol": {
        "keccak256": "0x8225a3898d2f11f585da1fb82234800e9717fa080dbe53d450fd429a3a632e99",
        "urls": [
          "bzz-raw://2dcbf39ca575f68f32f0d1c66391de94082424956e7585e849813966f8c0fc05",
          "dweb:/ipfs/QmYvk8vXFDUJHrmqbtutYXfoLomLBosYLyBzuPoYBxsQ42"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/UD21x18.sol": {
        "keccak256": "0xb0176747ae9c9f329bce39730d4d315b839e73a815494ddf2de2094aa9056957",
        "urls": [
          "bzz-raw://534a82fe091627f9d01e665ac763daf56981b30b3976269f8e5c33a84a2dbebc",
          "dweb:/ipfs/QmYiiGJNr4S4ypYB4KGBPMTMiNskert8Cp4s6uf1CU3k73"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd1x18/Casting.sol": {
        "keccak256": "0x5d365f655f01598926c5d4fe5cda277f2cc7736fe38f943c11a32009077ddd5c",
        "urls": [
          "bzz-raw://56b378bd6039819bc12e5f17dabd9492e1410b3281f9df496cf8210539101a11",
          "dweb:/ipfs/QmcMaE64ZWMg9cFhYxdTuG8nfzeDdNuTRHMMoFXi6tSZGu"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd1x18/Constants.sol": {
        "keccak256": "0xc14cc32061863d83912f9616de86f3c34f1ac58614b7d504c6ce07ee8efdb8e8",
        "urls": [
          "bzz-raw://22483b1282dda6a556b0232f008a5a3296bbfd76b1886e6b72bf351b7c554fab",
          "dweb:/ipfs/QmYX9cYkrFxBbhZNKsb6uUxtrc2chmAj7vuc7UKRPGMwos"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd1x18/Errors.sol": {
        "keccak256": "0xc3c8b1ab3d19889c356c222a3a2186d45dfc1d3a17b9ad88159bb64ee457baa6",
        "urls": [
          "bzz-raw://84fbe57569246403f778330bd7723018dfcb5f0ec50d7b1d82cc983c94a54bca",
          "dweb:/ipfs/QmWssAAnovc2EVjt58rTnxraE9B1RMivwTvYCYgpnr6oSE"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd1x18/ValueType.sol": {
        "keccak256": "0xaa9dc7b562faf45264390d80e2ea10c5295bb8a4f10d76261a3f9c04363734c0",
        "urls": [
          "bzz-raw://c6ca36acd15f5cb47cf124ddec289f84e1011f2d29056159e4570435629a3353",
          "dweb:/ipfs/QmUKdiLmZpAkNCq2TKxrPbQPUhiRFXGfjGSnY1VeHVu4y6"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd21x18/Casting.sol": {
        "keccak256": "0x4a16adddb9ab1f6939dd4567c77205015a11081cb840029b84bbb6fdaf78ee36",
        "urls": [
          "bzz-raw://5003b2f4cd2fc1413da36bc63107c6e83a88d29693e8f97b54f300fa78f9c6d2",
          "dweb:/ipfs/QmaNJn91NLrZmeeGqnFQV1FTrLVSW852zHyWTrWJ5pf1pd"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd21x18/Constants.sol": {
        "keccak256": "0x501c2d5cfdea9450422182059c8df1cb6a859901a07bd59631c3fa24edcc79d4",
        "urls": [
          "bzz-raw://4669a65001c92919671fd879d33ce0e5030b602a7ba4d36bd2308128d8d1f396",
          "dweb:/ipfs/QmUC3bJ3qdkCmLMw3WHBcEqvuC4tExT2LXzUhgu5KQ3vi3"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd21x18/Errors.sol": {
        "keccak256": "0xc5422ee47eb139274e538e758fb40177a1ba22c2113ef3b3446102f0150bfe0a",
        "urls": [
          "bzz-raw://a1981e052e9e86e1b0e4e55a057a7af4739aedd4ead2d60e3eaa40fb703594ee",
          "dweb:/ipfs/QmPK5qSujnyk1R8ues4RhDMy1tRKKyjQ31YJTviTKq7GML"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd21x18/ValueType.sol": {
        "keccak256": "0x532bba888370bed393464412f4ef3462d654802e71c953ad02d078e3d2701092",
        "urls": [
          "bzz-raw://922a4e8dd813602f72d165aa1dfdf2c29b971a2abe73bebca7cd81a32ee2c880",
          "dweb:/ipfs/QmTBAJnx1r3sZpbQAuTgQtsTtvjZbpDwhCJRzkhzUumbdf"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd59x18/Casting.sol": {
        "keccak256": "0xdf70d8e70c6d6325f3f7eb028c484bc7189ef902f1d4b5b220af2e550bb5fc39",
        "urls": [
          "bzz-raw://0b15bcd36129c5cb163d57a117435afb171182018dd6d1e766a5f49cf1f4b63d",
          "dweb:/ipfs/QmbjzkMBH4FM2rdxGbx9LQ65wVERijNcu7R9C8dQmH3y4n"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd59x18/Constants.sol": {
        "keccak256": "0x9bcb8dd6b3e886d140ad1c32747a4f6d29a492529ceb835be878ae837aa6cc3a",
        "urls": [
          "bzz-raw://c4045c633e3618e7e90a768d92415b2f20f781fe129b4f4e26fa88f7dbf9201f",
          "dweb:/ipfs/Qmbet95pizwPno82cJ383wJtgQRSQKESmhVZ1vDrgAu7Si"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd59x18/Errors.sol": {
        "keccak256": "0x0a79c28c85fc8a450b0801ff2e66114eac4ec565819f5d1d8738904658fe33e2",
        "urls": [
          "bzz-raw://9e0d4fd3c998019fb8555d9e26c03bec42a8513bdf4185aeac2da3a000abaebf",
          "dweb:/ipfs/QmahFJHXcX4RwPxaQbUf6LVZEk8NSpjCV3Eif7i9iqC6Mk"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd59x18/Helpers.sol": {
        "keccak256": "0x208570f1657cf730cb6c3d81aa14030e0d45cf906cdedea5059369d7df4bb716",
        "urls": [
          "bzz-raw://4c78ca900edafa9338d4e3649a55ab0c84f76468d8a22fb945ba6d01e70f8fed",
          "dweb:/ipfs/QmeP4hQYfNxcATd1FsasdD4ebyu2vrC9K1N68swxUJzzZD"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd59x18/Math.sol": {
        "keccak256": "0xd8e8b51db9b3e2fa31a60f6b8ce4ea0112c3364442ede5992aa0aa7a2c925c84",
        "urls": [
          "bzz-raw://3c56913970e34ee7b142047b21f1856a511cbdc3473b7c50418a8490e19cd462",
          "dweb:/ipfs/QmfG1F9CBDjPYD7NXora9awFfdpvBMY9SCg5pMLCFRv9tD"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/sd59x18/ValueType.sol": {
        "keccak256": "0x76597ba64d37d66e0178512bc9bbc1a031a7634c45e5d5c6e9da87f46952dc9d",
        "urls": [
          "bzz-raw://36148899ad874814e9292636fb974d2eec61f1bcc0875ec39cf444d70ba40919",
          "dweb:/ipfs/QmadUe4kH2FPcdxvhCKy8yiezCvPWor4VcPzqLYSAaGDDb"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud21x18/Casting.sol": {
        "keccak256": "0x3821aa57604f6e5b7c9c5c5cc97a6d71116e673cf3fee5f76fcd42b4cefded65",
        "urls": [
          "bzz-raw://a80399c6b38ab45cc10d0a6683d50340cd89d9a085b6d0dcfb81e7c4e5b3ce09",
          "dweb:/ipfs/QmWNW2YD2LMkqrpAtJYeeuHN329Rx7mvfmrjsCo1p6akTL"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud21x18/Constants.sol": {
        "keccak256": "0x0997574a1ced6c43bde6d9c9175edc5ad64cbb920a0969a9db68eea543747601",
        "urls": [
          "bzz-raw://c09f03345a6779b002b38ffc3954258accbb2b1d0d5506d42c3bd7f117304f60",
          "dweb:/ipfs/QmTeBXRCE7H2HpqKUNsZN7Nk3rdBnFmbAUFom3E1PJeGuV"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud21x18/Errors.sol": {
        "keccak256": "0x35a1fb789b90f8c90865884d3023deb17fcca5c7146b5ddef823496d835a5415",
        "urls": [
          "bzz-raw://0af359d07ba25bdc90de7c05ed6216833932caa75d4a02fcfc51ceeaba5a4e80",
          "dweb:/ipfs/QmavBFw73Xfp1qJiN6P1gk2Dfr8ByWo3dyCPVgDHtko2gq"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud21x18/ValueType.sol": {
        "keccak256": "0x24838b2b1da371b9259d8ee21534a9f0cb5796aba75a4efca2374627952bee25",
        "urls": [
          "bzz-raw://897e6b79308651671c7f3c91a0069e778b47356c9ba3f86e238398ab7f2623af",
          "dweb:/ipfs/QmZbLw3tJVRZFQnV9jWQUmF43gna841adSG2TAiwDAifGU"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud2x18/Casting.sol": {
        "keccak256": "0x0f3141ed054e7c29dbe1acb4b88b18eb05d60e998fba6b4e503a6799faa356d6",
        "urls": [
          "bzz-raw://b1e2468fc4c458082aaf4aa2e35af9ba3702f207e3c8533dd1e7da11ad605eae",
          "dweb:/ipfs/QmSm7iRH1eo4cJCwcAiiXWRH9Hn1urSS4tMdbaFbFGuTyL"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud2x18/Constants.sol": {
        "keccak256": "0x29b0e050c865899e1fb9022b460a7829cdee248c44c4299f068ba80695eec3fc",
        "urls": [
          "bzz-raw://cbaef16b662fac235349bcf97bc980dd0cba15d4e6230caae61224cdac8ea6d9",
          "dweb:/ipfs/QmZQa5XBhi7k3yhtCd8wVpnwW8htfU4sjXxWhxRypMBYkC"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud2x18/Errors.sol": {
        "keccak256": "0x3b27e2a57438cd30d9c130f84aace24d547e5ed58e8689691d7d92ad2db38ddd",
        "urls": [
          "bzz-raw://841cf9fb45443899c6b659300bbf503c3fd2c1a1e83b7f0e28620eed457f7437",
          "dweb:/ipfs/QmUqg8WscP5yQPw3UMUCWaB9RLU6nryGzseuyhAjNnDc1i"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud2x18/ValueType.sol": {
        "keccak256": "0x975a2e69b48f34a4c0bd80e8a5609ac67b7264c91992c0944f9ebe7b9e3fc9d0",
        "urls": [
          "bzz-raw://65d012521c475295d7e70b7d526fcc0911d0f238ea938719d77251bba00c9b41",
          "dweb:/ipfs/QmexEvTQCCBPYRWAYnomZX5M7C2EkXQRAXqEYMNUZfazCs"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud60x18/Casting.sol": {
        "keccak256": "0x0803318ddc98b4ba8fbfe70e5ee08d78387fe6ae00982b9960518085a751d7b6",
        "urls": [
          "bzz-raw://2e68a2f780b2e33fa5416eb60f9daa81f014c2591119f4b67bed1217d5530780",
          "dweb:/ipfs/QmZe7JTWvbfKqMnu4sxUwWCtLcCay9hH71VZUpoFCdENcr"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud60x18/Constants.sol": {
        "keccak256": "0x2b80d26153d3fdcfb3a9ca772d9309d31ed1275f5b8b54c3ffb54d3652b37d90",
        "urls": [
          "bzz-raw://7e3a6673a156f635db94dc176baaa7274db8f9bec4461cd1152596253550ee3b",
          "dweb:/ipfs/Qmc9zT4kNSbMYaXcnbxNVqmb3P3m46ieaQxkwxqLwsvRA5"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud60x18/Errors.sol": {
        "keccak256": "0xbab6b0e303d32f3a9d9e2fe881f0392b8c59a73051a4d34f21a403b3961b3044",
        "urls": [
          "bzz-raw://86a019bcf2510d0691287329dc057479cc0abc48a5e15f245e7f15c03052d2c8",
          "dweb:/ipfs/QmeXe5pbpDHvN5DZ8puXmH2RJ25zDHj55wpiStWtNQPvq6"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud60x18/Helpers.sol": {
        "keccak256": "0xf5faff881391d2c060029499a666cc5f0bea90a213150bb476fae8f02a5df268",
        "urls": [
          "bzz-raw://76105fa22bb1b5f1fa99abf9c4fbc9577a02c7bc204f271754c407f0d75489f5",
          "dweb:/ipfs/QmVNGZSTniDuZus5DdbFubqJXCLtTaZit7YPm4ntjr5Lgr"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud60x18/Math.sol": {
        "keccak256": "0xc4e51dfd9af62938e277e90fa724099f239d33727a35909ed48c292a76faf2fc",
        "urls": [
          "bzz-raw://d731537cbc50b852c21d28625aeb2c329729afc23a7b86ff9d8ee5878f47e9d6",
          "dweb:/ipfs/QmS7Cj4pAdPZcTp7RqYXyxBc9EYX92CT8icfkNigktUsLr"
        ],
        "license": "MIT"
      },
      "node_modules/@prb/math/src/ud60x18/ValueType.sol": {
        "keccak256": "0x1b200baf25d01a8b91b97b42114248636f742b5b7028487ef4daef6621e378a3",
        "urls": [
          "bzz-raw://b5708ed017206bda2197654e80bea9f37b3a9993434bb066c903c2865e028f47",
          "dweb:/ipfs/QmTyotZk2J5YvWkNvB2qhXBMgRGWW2UgPqR4JPocrXSr8n"
        ],
        "license": "MIT"
      },
      "node_modules/@sablier/evm-utils/src/interfaces/IAdminable.sol": {
        "keccak256": "0x3228d63e9b0b951030c73c42bb071e64f0ff0eadbcbeefad3f29a48366539c26",
        "urls": [
          "bzz-raw://acc90ad2bec0e84349b56611b35b56bfb75a5930fd1babb2bd638fbbb15bd126",
          "dweb:/ipfs/QmSLnHx6bo4BQeBKYferfEhZo1Z4xCXdDF1bzJoHUafHt4"
        ],
        "license": "GPL-3.0-or-later"
      },
      "node_modules/@sablier/evm-utils/src/interfaces/IBatch.sol": {
        "keccak256": "0x6d3aab84cb0529afc1e8b4a2ad4f89feb15c76b6a515a14fdf4b98887d856ae4",
        "urls": [
          "bzz-raw://77e68471ec663dda763ac40bb7c35d47b2a87e262461dad9a2f03377f928e758",
          "dweb:/ipfs/QmdvAq7XyNAUA8uLhnFrWuBgZAjNjoq6BaY5AyjFKvC8Xh"
        ],
        "license": "GPL-3.0-or-later"
      },
      "node_modules/@sablier/evm-utils/src/interfaces/IComptrollerable.sol": {
        "keccak256": "0xdbc32762b87590be38095a84789906fa7a23fd2c2c112859504549ef3be17522",
        "urls": [
          "bzz-raw://14ac13726bb7435ce310dd437a9b58852ca0c35640949e898c803a33a30dee8b",
          "dweb:/ipfs/QmeeKPApvBHbUF3S98qCnB26Aw67KTQF2GFyGQZCxykyMW"
        ],
        "license": "GPL-3.0-or-later"
      },
      "node_modules/@sablier/evm-utils/src/interfaces/IRoleAdminable.sol": {
        "keccak256": "0x391cb4bd4bae01e3efdb84f63635644ed6329b72e8a5105ad53833551e8ba825",
        "urls": [
          "bzz-raw://ccca9da1c044c15cf0b647a4572c05f5d498fb18b3685a85a8836f7110cb1bc4",
          "dweb:/ipfs/QmfAKHqvgKQUgpC6VomTjTkc1tDnsbVJD5bLn8wL8KuTFV"
        ],
        "license": "GPL-3.0-or-later"
      },
      "node_modules/@sablier/evm-utils/src/interfaces/ISablierComptroller.sol": {
        "keccak256": "0x5c52e70a6c083611d4b5518d17d025f70d322ee2c61d81f20f3fe50f4bd824ba",
        "urls": [
          "bzz-raw://5c07b2076065f1c65a59176ada3459be53f78e59a2055d9ae92b226edafa484c",
          "dweb:/ipfs/QmXYRDkBSWUBza1pi439ErzeLoaLUT8Zvj2yWcFZ5F1rgX"
        ],
        "license": "GPL-3.0-or-later"
      },
      "src/interfaces/IFlowNFTDescriptor.sol": {
        "keccak256": "0xdf964042ae7c74f03909d020fbb63e0ae56aeb2fa47213e3775a1e3263d00e54",
        "urls": [
          "bzz-raw://0d4ede276be940185ea0b638c8f38f68232b6f4394ce0a69c2c729bc761aec82",
          "dweb:/ipfs/QmSgivdvgxrY7n6XbLQcGp645nRw1y2272iJUVhQyfnWUp"
        ],
        "license": "GPL-3.0-or-later"
      },
      "src/interfaces/ISablierFlow.sol": {
        "keccak256": "0xdeca4fafe101540ce7112f1dd18ef74b19152960436e47a0b69198b2508b6bbe",
        "urls": [
          "bzz-raw://627c9eae5e8bd5ff2732d542a0387643bcac278e0e9510dd4bb712905842d652",
          "dweb:/ipfs/QmcV4D7jLSqAP27R86fSugGYj4MrToWE7JpTkEYgKqrYAa"
        ],
        "license": "GPL-3.0-or-later"
      },
      "src/interfaces/ISablierFlowState.sol": {
        "keccak256": "0x34de979793f5ae6efea67b31f6884e469f4436c8add0dc1c7e1151926db316e3",
        "urls": [
          "bzz-raw://c25ab6522693ad95750b56bd5f7b2889a9291395d77ae4f417f0c45f5f165f08",
          "dweb:/ipfs/QmZpeUNJzwriC9aSbKacojNCy3HtY7JBGthC4Vs3sWt83f"
        ],
        "license": "GPL-3.0-or-later"
      },
      "src/types/DataTypes.sol": {
        "keccak256": "0x73391073cf39bd553a0128aa4af5ea937d604a87393bbe37689727ccf10cf67f",
        "urls": [
          "bzz-raw://2b32bbf9314ec331953938b36102f91fa6e899879cc450a34bd0bd397e618a9e",
          "dweb:/ipfs/QmbtxAvTVpvWBipLm3ALAdHhGXa6BoXZreBFGW9pfinoYE"
        ],
        "license": "GPL-3.0-or-later"
      }
    },
    "version": 1
  },
  "id": 86
}
