{"abi":[{"type":"function","name":"MAX_BROKER_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"UD60x18"}],"stateMutability":"view"},{"type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"allowToHook","inputs":[{"name":"recipient","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"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":"burn","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancel","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancelMultiple","inputs":[{"name":"streamIds","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createWithDurations","inputs":[{"name":"params","type":"tuple","internalType":"struct LockupLinear.CreateWithDurations","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"recipient","type":"address","internalType":"address"},{"name":"totalAmount","type":"uint128","internalType":"uint128"},{"name":"asset","type":"address","internalType":"contract IERC20"},{"name":"cancelable","type":"bool","internalType":"bool"},{"name":"transferable","type":"bool","internalType":"bool"},{"name":"durations","type":"tuple","internalType":"struct LockupLinear.Durations","components":[{"name":"cliff","type":"uint40","internalType":"uint40"},{"name":"total","type":"uint40","internalType":"uint40"}]},{"name":"broker","type":"tuple","internalType":"struct Broker","components":[{"name":"account","type":"address","internalType":"address"},{"name":"fee","type":"uint256","internalType":"UD60x18"}]}]}],"outputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"createWithTimestamps","inputs":[{"name":"params","type":"tuple","internalType":"struct LockupLinear.CreateWithTimestamps","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"recipient","type":"address","internalType":"address"},{"name":"totalAmount","type":"uint128","internalType":"uint128"},{"name":"asset","type":"address","internalType":"contract IERC20"},{"name":"cancelable","type":"bool","internalType":"bool"},{"name":"transferable","type":"bool","internalType":"bool"},{"name":"timestamps","type":"tuple","internalType":"struct LockupLinear.Timestamps","components":[{"name":"start","type":"uint40","internalType":"uint40"},{"name":"cliff","type":"uint40","internalType":"uint40"},{"name":"end","type":"uint40","internalType":"uint40"}]},{"name":"broker","type":"tuple","internalType":"struct Broker","components":[{"name":"account","type":"address","internalType":"address"},{"name":"fee","type":"uint256","internalType":"UD60x18"}]}]}],"outputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"getApproved","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"operator","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getAsset","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"asset","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"getCliffTime","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"cliffTime","type":"uint40","internalType":"uint40"}],"stateMutability":"view"},{"type":"function","name":"getDepositedAmount","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"depositedAmount","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"getEndTime","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"endTime","type":"uint40","internalType":"uint40"}],"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":"getRefundedAmount","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"refundedAmount","type":"uint128","internalType":"uint128"}],"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":"getStartTime","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"startTime","type":"uint40","internalType":"uint40"}],"stateMutability":"view"},{"type":"function","name":"getStream","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"stream","type":"tuple","internalType":"struct LockupLinear.StreamLL","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"recipient","type":"address","internalType":"address"},{"name":"startTime","type":"uint40","internalType":"uint40"},{"name":"isCancelable","type":"bool","internalType":"bool"},{"name":"wasCanceled","type":"bool","internalType":"bool"},{"name":"asset","type":"address","internalType":"contract IERC20"},{"name":"endTime","type":"uint40","internalType":"uint40"},{"name":"isDepleted","type":"bool","internalType":"bool"},{"name":"isStream","type":"bool","internalType":"bool"},{"name":"isTransferable","type":"bool","internalType":"bool"},{"name":"amounts","type":"tuple","internalType":"struct Lockup.Amounts","components":[{"name":"deposited","type":"uint128","internalType":"uint128"},{"name":"withdrawn","type":"uint128","internalType":"uint128"},{"name":"refunded","type":"uint128","internalType":"uint128"}]},{"name":"cliffTime","type":"uint40","internalType":"uint40"}]}],"stateMutability":"view"},{"type":"function","name":"getTimestamps","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"timestamps","type":"tuple","internalType":"struct LockupLinear.Timestamps","components":[{"name":"start","type":"uint40","internalType":"uint40"},{"name":"cliff","type":"uint40","internalType":"uint40"},{"name":"end","type":"uint40","internalType":"uint40"}]}],"stateMutability":"view"},{"type":"function","name":"getWithdrawnAmount","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"withdrawnAmount","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"isAllowedToHook","inputs":[{"name":"recipient","type":"address","internalType":"address"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"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":"isCancelable","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isCold","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isDepleted","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"result","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":"isWarm","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":"nextStreamId","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"nftDescriptor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ISablierV2NFTDescriptor"}],"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":"refundableAmountOf","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"refundableAmount","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"renounce","inputs":[{"name":"streamId","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"}],"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":"setNFTDescriptor","inputs":[{"name":"newNFTDescriptor","type":"address","internalType":"contract ISablierV2NFTDescriptor"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"statusOf","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"status","type":"uint8","internalType":"enum Lockup.Status"}],"stateMutability":"view"},{"type":"function","name":"streamedAmountOf","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"streamedAmount","type":"uint128","internalType":"uint128"}],"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":"transferAdmin","inputs":[{"name":"newAdmin","type":"address","internalType":"address"}],"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":"wasCanceled","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"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":"nonpayable"},{"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":"nonpayable"},{"type":"function","name":"withdrawMaxAndTransfer","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"},{"name":"newRecipient","type":"address","internalType":"address"}],"outputs":[{"name":"withdrawnAmount","type":"uint128","internalType":"uint128"}],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawMultiple","inputs":[{"name":"streamIds","type":"uint256[]","internalType":"uint256[]"},{"name":"amounts","type":"uint128[]","internalType":"uint128[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawableAmountOf","inputs":[{"name":"streamId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"withdrawableAmount","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"event","name":"AllowToHook","inputs":[{"name":"admin","type":"address","indexed":true,"internalType":"address"},{"name":"recipient","type":"address","indexed":false,"internalType":"address"}],"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":"CancelLockupStream","inputs":[{"name":"streamId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"asset","type":"address","indexed":true,"internalType":"contract IERC20"},{"name":"senderAmount","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"recipientAmount","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"CreateLockupLinearStream","inputs":[{"name":"streamId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"funder","type":"address","indexed":false,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amounts","type":"tuple","indexed":false,"internalType":"struct Lockup.CreateAmounts","components":[{"name":"deposit","type":"uint128","internalType":"uint128"},{"name":"brokerFee","type":"uint128","internalType":"uint128"}]},{"name":"asset","type":"address","indexed":true,"internalType":"contract IERC20"},{"name":"cancelable","type":"bool","indexed":false,"internalType":"bool"},{"name":"transferable","type":"bool","indexed":false,"internalType":"bool"},{"name":"timestamps","type":"tuple","indexed":false,"internalType":"struct LockupLinear.Timestamps","components":[{"name":"start","type":"uint40","internalType":"uint40"},{"name":"cliff","type":"uint40","internalType":"uint40"},{"name":"end","type":"uint40","internalType":"uint40"}]},{"name":"broker","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"MetadataUpdate","inputs":[{"name":"_tokenId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RenounceLockupStream","inputs":[{"name":"streamId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SetNFTDescriptor","inputs":[{"name":"admin","type":"address","indexed":true,"internalType":"address"},{"name":"oldNFTDescriptor","type":"address","indexed":false,"internalType":"contract ISablierV2NFTDescriptor"},{"name":"newNFTDescriptor","type":"address","indexed":false,"internalType":"contract ISablierV2NFTDescriptor"}],"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":"TransferAdmin","inputs":[{"name":"oldAdmin","type":"address","indexed":true,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"WithdrawFromLockupStream","inputs":[{"name":"streamId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"asset","type":"address","indexed":true,"internalType":"contract IERC20"},{"name":"amount","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"MAX_BROKER_FEE()":"027b6744","admin()":"f851a440","allowToHook(address)":"406887cb","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","cancel(uint256)":"40e58ee5","cancelMultiple(uint256[])":"8659c270","createWithDurations((address,address,uint128,address,bool,bool,(uint40,uint40),(address,uint256)))":"ab167ccc","createWithTimestamps((address,address,uint128,address,bool,bool,(uint40,uint40,uint40),(address,uint256)))":"53b15727","getApproved(uint256)":"081812fc","getAsset(uint256)":"eac8f5b8","getCliffTime(uint256)":"780a82c8","getDepositedAmount(uint256)":"a80fc071","getEndTime(uint256)":"9067b677","getRecipient(uint256)":"6d0cee75","getRefundedAmount(uint256)":"d4dbd20b","getSender(uint256)":"b971302a","getStartTime(uint256)":"bc2be1be","getStream(uint256)":"894e9a0d","getTimestamps(uint256)":"57404b12","getWithdrawnAmount(uint256)":"d511609f","isAllowedToHook(address)":"303acc85","isApprovedForAll(address,address)":"e985e9c5","isCancelable(uint256)":"4857501f","isCold(uint256)":"8f69b993","isDepleted(uint256)":"425d30dd","isStream(uint256)":"b8a3be66","isTransferable(uint256)":"b2564569","isWarm(uint256)":"1c1cdd4c","name()":"06fdde03","nextStreamId()":"1e99d569","nftDescriptor()":"44267570","ownerOf(uint256)":"6352211e","refundableAmountOf(uint256)":"1400ecec","renounce(uint256)":"7de6b1db","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","setNFTDescriptor(address)":"7cad6cd1","statusOf(uint256)":"ad35efd4","streamedAmountOf(uint256)":"4869e12d","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenURI(uint256)":"c87b56dd","transferAdmin(address)":"75829def","transferFrom(address,address,uint256)":"23b872dd","wasCanceled(uint256)":"f590c176","withdraw(uint256,address,uint128)":"fdd46d60","withdrawMax(uint256,address)":"ea5ead19","withdrawMaxAndTransfer(uint256,address)":"c156a11d","withdrawMultiple(uint256[],uint128[])":"4cc55e11","withdrawableAmountOf(uint256)":"d975dfed"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"AllowToHook\",\"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\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"senderAmount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"recipientAmount\",\"type\":\"uint128\"}],\"name\":\"CancelLockupStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"funder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"deposit\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"brokerFee\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"struct Lockup.CreateAmounts\",\"name\":\"amounts\",\"type\":\"tuple\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"cancelable\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"transferable\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint40\",\"name\":\"start\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"cliff\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"end\",\"type\":\"uint40\"}],\"indexed\":false,\"internalType\":\"struct LockupLinear.Timestamps\",\"name\":\"timestamps\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"broker\",\"type\":\"address\"}],\"name\":\"CreateLockupLinearStream\",\"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\"}],\"name\":\"RenounceLockupStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract ISablierV2NFTDescriptor\",\"name\":\"oldNFTDescriptor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract ISablierV2NFTDescriptor\",\"name\":\"newNFTDescriptor\",\"type\":\"address\"}],\"name\":\"SetNFTDescriptor\",\"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\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"TransferAdmin\",\"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\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"WithdrawFromLockupStream\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_BROKER_FEE\",\"outputs\":[{\"internalType\":\"UD60x18\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"allowToHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"streamIds\",\"type\":\"uint256[]\"}],\"name\":\"cancelMultiple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"totalAmount\",\"type\":\"uint128\"},{\"internalType\":\"contract IERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"cancelable\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"transferable\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint40\",\"name\":\"cliff\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"total\",\"type\":\"uint40\"}],\"internalType\":\"struct LockupLinear.Durations\",\"name\":\"durations\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"UD60x18\",\"name\":\"fee\",\"type\":\"uint256\"}],\"internalType\":\"struct Broker\",\"name\":\"broker\",\"type\":\"tuple\"}],\"internalType\":\"struct LockupLinear.CreateWithDurations\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"createWithDurations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"totalAmount\",\"type\":\"uint128\"},{\"internalType\":\"contract IERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"cancelable\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"transferable\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint40\",\"name\":\"start\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"cliff\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"end\",\"type\":\"uint40\"}],\"internalType\":\"struct LockupLinear.Timestamps\",\"name\":\"timestamps\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"UD60x18\",\"name\":\"fee\",\"type\":\"uint256\"}],\"internalType\":\"struct Broker\",\"name\":\"broker\",\"type\":\"tuple\"}],\"internalType\":\"struct LockupLinear.CreateWithTimestamps\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"createWithTimestamps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"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\":\"getAsset\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getCliffTime\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"cliffTime\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getDepositedAmount\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"depositedAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getEndTime\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"endTime\",\"type\":\"uint40\"}],\"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\":\"getRefundedAmount\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"refundedAmount\",\"type\":\"uint128\"}],\"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\":\"getStartTime\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"startTime\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getStream\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint40\",\"name\":\"startTime\",\"type\":\"uint40\"},{\"internalType\":\"bool\",\"name\":\"isCancelable\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"wasCanceled\",\"type\":\"bool\"},{\"internalType\":\"contract IERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint40\",\"name\":\"endTime\",\"type\":\"uint40\"},{\"internalType\":\"bool\",\"name\":\"isDepleted\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isStream\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isTransferable\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"deposited\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"withdrawn\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"refunded\",\"type\":\"uint128\"}],\"internalType\":\"struct Lockup.Amounts\",\"name\":\"amounts\",\"type\":\"tuple\"},{\"internalType\":\"uint40\",\"name\":\"cliffTime\",\"type\":\"uint40\"}],\"internalType\":\"struct LockupLinear.StreamLL\",\"name\":\"stream\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getTimestamps\",\"outputs\":[{\"components\":[{\"internalType\":\"uint40\",\"name\":\"start\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"cliff\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"end\",\"type\":\"uint40\"}],\"internalType\":\"struct LockupLinear.Timestamps\",\"name\":\"timestamps\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getWithdrawnAmount\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"withdrawnAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"isAllowedToHook\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"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\":\"isCancelable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"isCold\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"isDepleted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"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\":\"isWarm\",\"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\":\"nextStreamId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nftDescriptor\",\"outputs\":[{\"internalType\":\"contract ISablierV2NFTDescriptor\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"refundableAmountOf\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"refundableAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"renounce\",\"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\":\"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 ISablierV2NFTDescriptor\",\"name\":\"newNFTDescriptor\",\"type\":\"address\"}],\"name\":\"setNFTDescriptor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"statusOf\",\"outputs\":[{\"internalType\":\"enum Lockup.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"streamedAmountOf\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"streamedAmount\",\"type\":\"uint128\"}],\"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\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"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\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"wasCanceled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"nonpayable\",\"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\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"withdrawMaxAndTransfer\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"withdrawnAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"streamIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint128[]\",\"name\":\"amounts\",\"type\":\"uint128[]\"}],\"name\":\"withdrawMultiple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"withdrawableAmountOf\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"withdrawableAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AllowToHook(address,address)\":{\"params\":{\"admin\":\"The address of the current contract admin.\",\"recipient\":\"The address of the recipient contract put on the allowlist.\"}},\"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.\"},\"CancelLockupStream(uint256,address,address,address,uint128,uint128)\":{\"params\":{\"asset\":\"The contract address of the ERC-20 asset to be distributed.\",\"recipient\":\"The address of the stream's recipient.\",\"recipientAmount\":\"The amount of assets left for the stream's recipient to withdraw, denoted in units of the asset's decimals.\",\"sender\":\"The address of the stream's sender.\",\"senderAmount\":\"The amount of assets refunded to the stream's sender, denoted in units of the asset's decimals.\",\"streamId\":\"The ID of the stream.\"}},\"CreateLockupLinearStream(uint256,address,address,address,(uint128,uint128),address,bool,bool,(uint40,uint40,uint40),address)\":{\"params\":{\"amounts\":\"Struct containing (i) the deposit amount, and (ii) the broker fee amount, both denoted in units of the asset's decimals.\",\"asset\":\"The contract address of the ERC-20 asset to be distributed.\",\"broker\":\"The address of the broker who has helped create the stream, e.g. a front-end website.\",\"cancelable\":\"Boolean indicating whether the stream will be cancelable or not.\",\"funder\":\"The address which funded the stream.\",\"recipient\":\"The address receiving the assets.\",\"sender\":\"The address distributing the assets, which will have the ability to cancel the stream.\",\"streamId\":\"The ID of the newly created stream.\",\"timestamps\":\"Struct containing (i) the stream's start time, (ii) cliff time, and (iii) end time, all as Unix timestamps.\",\"transferable\":\"Boolean indicating whether the stream NFT is transferable or not.\"}},\"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.\"},\"RenounceLockupStream(uint256)\":{\"params\":{\"streamId\":\"The ID of the stream.\"}},\"SetNFTDescriptor(address,address,address)\":{\"params\":{\"admin\":\"The address of the current contract admin.\",\"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`.\"},\"TransferAdmin(address,address)\":{\"params\":{\"newAdmin\":\"The address of the new admin.\",\"oldAdmin\":\"The address of the old admin.\"}},\"WithdrawFromLockupStream(uint256,address,address,uint128)\":{\"params\":{\"amount\":\"The amount of assets withdrawn, denoted in units of the asset's decimals.\",\"asset\":\"The contract address of the ERC-20 asset to be distributed.\",\"streamId\":\"The ID of the stream.\",\"to\":\"The address that has received the withdrawn assets.\"}}},\"kind\":\"dev\",\"methods\":{\"MAX_BROKER_FEE()\":{\"details\":\"This value is hard coded as a constant.\"},\"allowToHook(address)\":{\"details\":\"Emits an {AllowToHook} event. Notes: - Does not revert if the contract is already on the allowlist. - This is an irreversible operation. The contract cannot be removed from the allowlist. Requirements: - `msg.sender` must be the contract admin. - `recipient` must have a non-zero code size. - `recipient` must implement {ISablierLockupRecipient}.\",\"params\":{\"recipient\":\"The address of the contract to allow for hooks.\"}},\"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.\"},\"burn(uint256)\":{\"details\":\"Emits a {Transfer} event. Requirements: - Must not be delegate called. - `streamId` must reference a depleted stream. - The NFT must exist. - `msg.sender` must be either the NFT owner or an approved third party.\",\"params\":{\"streamId\":\"The ID of the stream NFT to burn.\"}},\"cancel(uint256)\":{\"details\":\"Emits a {Transfer}, {CancelLockupStream}, and {MetadataUpdate} event. Notes: - If there any assets left for the recipient to withdraw, the stream is marked as canceled. Otherwise, the stream is marked as depleted. - This function attempts to invoke a hook on the recipient, if the resolved address is a contract. Requirements: - Must not be delegate called. - The stream must be warm and cancelable. - `msg.sender` must be the stream's sender.\",\"params\":{\"streamId\":\"The ID of the stream to cancel.\"}},\"cancelMultiple(uint256[])\":{\"details\":\"Emits multiple {Transfer}, {CancelLockupStream}, and {MetadataUpdate} events. Notes: - Refer to the notes in {cancel}. Requirements: - All requirements from {cancel} must be met for each stream.\",\"params\":{\"streamIds\":\"The IDs of the streams to cancel.\"}},\"createWithDurations((address,address,uint128,address,bool,bool,(uint40,uint40),(address,uint256)))\":{\"details\":\"Emits a {Transfer} and {CreateLockupLinearStream} event. Requirements: - All requirements in {createWithTimestamps} must be met for the calculated parameters.\",\"params\":{\"params\":\"Struct encapsulating the function parameters, which are documented in {DataTypes}.\"},\"returns\":{\"streamId\":\"The ID of the newly created stream.\"}},\"createWithTimestamps((address,address,uint128,address,bool,bool,(uint40,uint40,uint40),(address,uint256)))\":{\"details\":\"Emits a {Transfer} and {CreateLockupLinearStream} event. Notes: - A cliff time of zero means there is no cliff. - As long as the times are ordered, it is not an error for the start or the cliff time to be in the past. Requirements: - Must not be delegate called. - `params.totalAmount` must be greater than zero. - If set, `params.broker.fee` must not be greater than `MAX_BROKER_FEE`. - `params.timestamps.start` must be greater than zero and less than `params.timestamps.end`. - If set, `params.timestamps.cliff` must be greater than `params.timestamps.start` and less than `params.timestamps.end`. - `params.timestamps.end` must be in the future. - `params.recipient` must not be the zero address. - `msg.sender` must have allowed this contract to spend at least `params.totalAmount` assets.\",\"params\":{\"params\":\"Struct encapsulating the function parameters, which are documented in {DataTypes}.\"},\"returns\":{\"streamId\":\"The ID of the newly created stream.\"}},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"getAsset(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getCliffTime(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getDepositedAmount(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getEndTime(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getRecipient(uint256)\":{\"details\":\"Reverts if the NFT has been burned.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getRefundedAmount(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.\"}},\"getStartTime(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"getStream(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"},\"returns\":{\"stream\":\"See the documentation in {DataTypes}.\"}},\"getTimestamps(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"},\"returns\":{\"timestamps\":\"See the documentation in {DataTypes}.\"}},\"getWithdrawnAmount(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"isAllowedToHook(address)\":{\"details\":\"See {ISablierLockupRecipient} for more information.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"isCancelable(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"isCold(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"isDepleted(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"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.\"}},\"isWarm(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"refundableAmountOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"renounce(uint256)\":{\"details\":\"Emits a {RenounceLockupStream} and {MetadataUpdate} event. Notes: - This is an irreversible operation. Requirements: - Must not be delegate called. - `streamId` must reference a warm stream. - `msg.sender` must be the stream's sender. - The stream must be cancelable.\",\"params\":{\"streamId\":\"The ID of the stream to renounce.\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 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.\"},\"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 contract admin.\",\"params\":{\"newNFTDescriptor\":\"The address of the new NFT descriptor contract.\"}},\"statusOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"streamedAmountOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream. Notes: - Upon cancellation of the stream, the amount streamed is calculated as the difference between the deposited amount and the refunded amount. Ultimately, when the stream becomes depleted, the streamed amount is equivalent to the total amount withdrawn.\",\"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[EIP 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.\"},\"transferAdmin(address)\":{\"details\":\"Notes: - Does not revert if the admin is the same. - This function can potentially leave the contract without an admin, thereby removing any functionality that is only available to the admin. Requirements: - `msg.sender` must be the contract admin.\",\"params\":{\"newAdmin\":\"The address of the new admin.\"}},\"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 ERC721 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.\"},\"wasCanceled(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}},\"withdraw(uint256,address,uint128)\":{\"details\":\"Emits a {Transfer}, {WithdrawFromLockupStream}, and {MetadataUpdate} event. Notes: - This function attempts to call a hook on the recipient of the stream, unless `msg.sender` is the recipient. Requirements: - Must not be delegate called. - `streamId` must not reference a null or depleted stream. - `to` must not be the zero address. - `amount` must be greater than zero and must not exceed the withdrawable amount. - `to` must be the recipient if `msg.sender` is not the stream's recipient or an approved third party.\",\"params\":{\"amount\":\"The amount to withdraw, denoted in units of the asset's decimals.\",\"streamId\":\"The ID of the stream to withdraw from.\",\"to\":\"The address receiving the withdrawn assets.\"}},\"withdrawMax(uint256,address)\":{\"details\":\"Emits a {Transfer}, {WithdrawFromLockupStream}, 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 assets.\"},\"returns\":{\"withdrawnAmount\":\"The amount withdrawn, denoted in units of the asset's decimals.\"}},\"withdrawMaxAndTransfer(uint256,address)\":{\"details\":\"Emits a {WithdrawFromLockupStream} and a {Transfer} event. Notes: - If the withdrawable amount is zero, the withdrawal is skipped. - Refer to the notes in {withdraw}. Requirements: - `msg.sender` must be the stream's recipient. - Refer to the requirements in {withdraw}. - Refer to the requirements in {IERC721.transferFrom}.\",\"params\":{\"newRecipient\":\"The address of the new owner of the stream NFT.\",\"streamId\":\"The ID of the stream NFT to transfer.\"},\"returns\":{\"withdrawnAmount\":\"The amount withdrawn, denoted in units of the asset's decimals.\"}},\"withdrawMultiple(uint256[],uint128[])\":{\"details\":\"Emits multiple {Transfer}, {WithdrawFromLockupStream}, and {MetadataUpdate} events. Notes: - This function attempts to call a hook on the recipient of each stream, unless `msg.sender` is the recipient. Requirements: - Must not be delegate called. - There must be an equal number of `streamIds` and `amounts`. - Each stream ID in the array must not reference a null or depleted stream. - Each amount in the array must be greater than zero and must not exceed the withdrawable amount.\",\"params\":{\"amounts\":\"The amounts to withdraw, denoted in units of the asset's decimals.\",\"streamIds\":\"The IDs of the streams to withdraw from.\"}},\"withdrawableAmountOf(uint256)\":{\"details\":\"Reverts if `streamId` references a null stream.\",\"params\":{\"streamId\":\"The stream ID for the query.\"}}},\"title\":\"ISablierV2LockupLinear\",\"version\":1},\"userdoc\":{\"events\":{\"AllowToHook(address,address)\":{\"notice\":\"Emitted when the admin allows a new recipient contract to hook to Sablier.\"},\"CancelLockupStream(uint256,address,address,address,uint128,uint128)\":{\"notice\":\"Emitted when a stream is canceled.\"},\"CreateLockupLinearStream(uint256,address,address,address,(uint128,uint128),address,bool,bool,(uint40,uint40,uint40),address)\":{\"notice\":\"Emitted when a stream is created.\"},\"RenounceLockupStream(uint256)\":{\"notice\":\"Emitted when a sender gives up the right to cancel a stream.\"},\"SetNFTDescriptor(address,address,address)\":{\"notice\":\"Emitted when the admin sets a new NFT descriptor contract.\"},\"TransferAdmin(address,address)\":{\"notice\":\"Emitted when the admin is transferred.\"},\"WithdrawFromLockupStream(uint256,address,address,uint128)\":{\"notice\":\"Emitted when assets are withdrawn from a stream.\"}},\"kind\":\"user\",\"methods\":{\"MAX_BROKER_FEE()\":{\"notice\":\"Retrieves the maximum broker fee that can be charged by the broker, denoted as a fixed-point number where 1e18 is 100%.\"},\"admin()\":{\"notice\":\"The address of the admin account or contract.\"},\"allowToHook(address)\":{\"notice\":\"Allows a recipient contract to hook to Sablier when a stream is canceled or when assets are withdrawn. Useful for implementing contracts that hold streams on behalf of users, such as vaults or staking contracts.\"},\"burn(uint256)\":{\"notice\":\"Burns the NFT associated with the stream.\"},\"cancel(uint256)\":{\"notice\":\"Cancels the stream and refunds any remaining assets to the sender.\"},\"cancelMultiple(uint256[])\":{\"notice\":\"Cancels multiple streams and refunds any remaining assets to the sender.\"},\"createWithDurations((address,address,uint128,address,bool,bool,(uint40,uint40),(address,uint256)))\":{\"notice\":\"Creates a stream by setting the start time to `block.timestamp`, and the end time to the sum of `block.timestamp` and `params.durations.total`. The stream is funded by `msg.sender` and is wrapped in an ERC-721 NFT.\"},\"createWithTimestamps((address,address,uint128,address,bool,bool,(uint40,uint40,uint40),(address,uint256)))\":{\"notice\":\"Creates a stream with the provided start time and end time. The stream is funded by `msg.sender` and is wrapped in an ERC-721 NFT.\"},\"getAsset(uint256)\":{\"notice\":\"Retrieves the address of the ERC-20 asset to be distributed.\"},\"getCliffTime(uint256)\":{\"notice\":\"Retrieves the stream's cliff time, which is a Unix timestamp.  A value of zero means there is no cliff.\"},\"getDepositedAmount(uint256)\":{\"notice\":\"Retrieves the amount deposited in the stream, denoted in units of the asset's decimals.\"},\"getEndTime(uint256)\":{\"notice\":\"Retrieves the stream's end time, which is a Unix timestamp.\"},\"getRecipient(uint256)\":{\"notice\":\"Retrieves the stream's recipient.\"},\"getRefundedAmount(uint256)\":{\"notice\":\"Retrieves the amount refunded to the sender after a cancellation, denoted in units of the asset's decimals. This amount is always zero unless the stream was canceled.\"},\"getSender(uint256)\":{\"notice\":\"Retrieves the stream's sender.\"},\"getStartTime(uint256)\":{\"notice\":\"Retrieves the stream's start time, which is a Unix timestamp.\"},\"getStream(uint256)\":{\"notice\":\"Retrieves the full stream details.\"},\"getTimestamps(uint256)\":{\"notice\":\"Retrieves the stream's start, cliff and end timestamps.\"},\"getWithdrawnAmount(uint256)\":{\"notice\":\"Retrieves the amount withdrawn from the stream, denoted in units of the asset's decimals.\"},\"isAllowedToHook(address)\":{\"notice\":\"Retrieves a flag indicating whether the provided address is a contract allowed to hook to Sablier when a stream is canceled or when assets are withdrawn.\"},\"isCancelable(uint256)\":{\"notice\":\"Retrieves a flag indicating whether the stream can be canceled. When the stream is cold, this flag is always `false`.\"},\"isCold(uint256)\":{\"notice\":\"Retrieves a flag indicating whether the stream is cold, i.e. settled, canceled, or depleted.\"},\"isDepleted(uint256)\":{\"notice\":\"Retrieves a flag indicating whether the stream is depleted.\"},\"isStream(uint256)\":{\"notice\":\"Retrieves a flag indicating whether the stream exists.\"},\"isTransferable(uint256)\":{\"notice\":\"Retrieves a flag indicating whether the stream NFT can be transferred.\"},\"isWarm(uint256)\":{\"notice\":\"Retrieves a flag indicating whether the stream is warm, i.e. either pending or streaming.\"},\"nextStreamId()\":{\"notice\":\"Counter for stream IDs, used in the create functions.\"},\"nftDescriptor()\":{\"notice\":\"Contract that generates the non-fungible token URI.\"},\"refundableAmountOf(uint256)\":{\"notice\":\"Calculates the amount that the sender would be refunded if the stream were canceled, denoted in units of the asset's decimals.\"},\"renounce(uint256)\":{\"notice\":\"Removes the right of the stream's sender to cancel the stream.\"},\"setNFTDescriptor(address)\":{\"notice\":\"Sets a new NFT descriptor contract, which produces the URI describing the Sablier stream NFTs.\"},\"statusOf(uint256)\":{\"notice\":\"Retrieves the stream's status.\"},\"streamedAmountOf(uint256)\":{\"notice\":\"Calculates the amount streamed to the recipient, denoted in units of the asset's decimals.\"},\"transferAdmin(address)\":{\"notice\":\"Transfers the contract admin to a new address.\"},\"wasCanceled(uint256)\":{\"notice\":\"Retrieves a flag indicating whether the stream was canceled.\"},\"withdraw(uint256,address,uint128)\":{\"notice\":\"Withdraws the provided amount of assets from the stream to the `to` address.\"},\"withdrawMax(uint256,address)\":{\"notice\":\"Withdraws the maximum withdrawable amount from the stream to the provided address `to`.\"},\"withdrawMaxAndTransfer(uint256,address)\":{\"notice\":\"Withdraws the maximum withdrawable amount from the stream to the current recipient, and transfers the NFT to `newRecipient`.\"},\"withdrawMultiple(uint256[],uint128[])\":{\"notice\":\"Withdraws assets from streams to the recipient of each stream.\"},\"withdrawableAmountOf(uint256)\":{\"notice\":\"Calculates the amount that the recipient can withdraw from the stream, denoted in units of the asset's decimals.\"}},\"notice\":\"Creates and manages Lockup streams with a linear distribution function.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ISablierV2LockupLinear.sol\":\"ISablierV2LockupLinear\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":@prb/math/=node_modules/@prb/math/\",\":forge-std/=node_modules/forge-std/\",\":solady/=node_modules/solady/\",\":solarray/=node_modules/solarray/\"],\"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\":\"0xb31b86c03f4677dcffa4655285d62433509513be9bafa0e04984565052d34e44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a89c6fb0cd5fef4244500b633f63def9f2bb2134debb961e590bd5a2910662fd\",\"dweb:/ipfs/QmNqWyCxyopvb99RbRomPpfTZGXRi5MnzgpFXE2BFLLgMc\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b\",\"dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"]},\"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\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"]},\"node_modules/@prb/math/src/UD2x18.sol\":{\"keccak256\":\"0xfb624e24cd8bb790fa08e7827819de85504a86e20e961fa4ad126c65b6d90641\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd795b8df250e7eedc68e2dba1afbb60357ce8f22f21bed212b5a9046d2057d2\",\"dweb:/ipfs/QmUHtrSr8Gb6bvSe2rCWPA5YrJq72UiJARYr1gZqFVRsYH\"]},\"node_modules/@prb/math/src/UD60x18.sol\":{\"keccak256\":\"0xb98c6f74275914d279e8af6c502c2b1f50d5f6e1ed418d3b0153f5a193206c48\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a750edde2955f160806a51083a12185fb04e20efca0e3a7ebd127dc1acc049a9\",\"dweb:/ipfs/QmeAre3mThopoQPB9mSXZq6jck59QZ7JbDFR83urd2SLvp\"]},\"node_modules/@prb/math/src/sd1x18/Casting.sol\":{\"keccak256\":\"0x9e49e2b37c1bb845861740805edaaef3fe951a7b96eef16ce84fbf76e8278670\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3f65f257f9f516f2b40ca30b1c999819777111bd59a92376df6c5823453165a\",\"dweb:/ipfs/QmVQRKMS6ibv6x9qWXLJp2KZw9qs6Yz1sYZQWoSBQM8Pkz\"]},\"node_modules/@prb/math/src/sd1x18/Constants.sol\":{\"keccak256\":\"0x6496165b80552785a4b65a239b96e2a5fedf62fe54f002eeed72d75e566d7585\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3a1623b9a1e03f548787d9f876a26647090f40db765a32a99167cb89da145339\",\"dweb:/ipfs/QmezifZR7md7GzQisgdUmYKWJx1zuiqosVRsmJyNkvJxK9\"]},\"node_modules/@prb/math/src/sd1x18/Errors.sol\":{\"keccak256\":\"0x836cb42ba619ca369fd4765bc47fefc3c3621369c5861882af14660aca5057ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://58873bcebf7398f63c6d3f234073fb6739fe4fae87428010cd0bc1aa68f53499\",\"dweb:/ipfs/QmZSZ9z4ZQUGRc1TRiL2F9AL7ysnGRXwRtocMa2zhxHFDp\"]},\"node_modules/@prb/math/src/sd1x18/ValueType.sol\":{\"keccak256\":\"0x2f86f1aa9fca42f40808b51a879b406ac51817647bdb9642f8a79dd8fdb754a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://31559dfc012ebe40fcdb38c45e7edfa16406f11c6ea219e8676749f20dbbb5dd\",\"dweb:/ipfs/QmXeYzF9hYQphVExJRp41Vkebrs51k7xgr3jXfKgdD87XC\"]},\"node_modules/@prb/math/src/sd59x18/Casting.sol\":{\"keccak256\":\"0x3b21b60ec2998c3ae32f647412da51d3683b3f183a807198cc8d157499484f99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08a49ba7ebf592a89e1a81e5987351e7810e371f4c3d2356d9b5a9b58462c809\",\"dweb:/ipfs/QmcvyHaUzd74eYjcZWQgUDFJfYrU8kFohiB1H5cs8HgUDp\"]},\"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\":\"0xa6d00fe5efa215ac0df25c896e3da99a12fb61e799644b2ec32da947313d3db4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cbfcf2d9681a2af1e076439791e2853b466066d867bfcbbf6b46b4a4476f712f\",\"dweb:/ipfs/QmWGznYLYdvsjMSyauT2DoipgGLVGW9KASXEknTgR5eRMv\"]},\"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\":\"0xa074831139fc89ca0e5a36086b30eb50896bb6770cd5823461b1f2769017d2f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd0ce38e8e85ed1a5179c1016af6131eb29674f195c66971d5e6da2764222d0d\",\"dweb:/ipfs/QmbHLp9E8dNuz8Fi2rRcYjLVGfVdacLyjrktQzxf62FLXp\"]},\"node_modules/@prb/math/src/sd59x18/ValueType.sol\":{\"keccak256\":\"0xe03112d145dcd5863aff24e5f381debaae29d446acd5666f3d640e3d9af738d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abacb7cba4bd732c961cfe7d66c5eec924c7a9ffe0bf07fafc95b65a887071f6\",\"dweb:/ipfs/QmSBefftoSJDMdmp5CFAVvJjPHJXHhd11x1FzkcHQxLjoT\"]},\"node_modules/@prb/math/src/ud2x18/Casting.sol\":{\"keccak256\":\"0x9b1a35d432ef951a415fae8098b3c609a99b630a3d5464b3c8e1efa8893eea07\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://977ab8a458a6aeaf7cfd125c06e1e4c50fa1147f0b72638d1ae1fb4f6ad37ddd\",\"dweb:/ipfs/QmeVVDpmYm1Tc8kpscF1Z2rtYvkpb1NeGBwRoYgLBuwXeA\"]},\"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\":\"0xdf1e22f0b4c8032bcc8b7f63fe3984e1387f3dc7b2e9ab381822249f75376d33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://975f9beb25a1ebff9b29dd5555e1f4f14a4fbf178d15ebd3add5ed5f5985fdec\",\"dweb:/ipfs/QmbvTvdtSrZi7J4sJuv6zUsymT5UctJnx4DkGezXW25r59\"]},\"node_modules/@prb/math/src/ud2x18/ValueType.sol\":{\"keccak256\":\"0x2802edc9869db116a0b5c490cc5f8554742f747183fa30ac5e9c80bb967e61a1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9657724f5032559c953cba61db0fbca71f6b50f51edb53a08f840cb74a36c95\",\"dweb:/ipfs/QmX2KF8v7ng13NaavyogM3SGR4jCMLUuqKkxFhtxvc7D7m\"]},\"node_modules/@prb/math/src/ud60x18/Casting.sol\":{\"keccak256\":\"0x5bb532da36921cbdac64d1f16de5d366ef1f664502e3b7c07d0ad06917551f85\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f0819da49f6a86a1fc2ece8e8a4292f8d102dc1043a1d0a545c26d020d1f36fe\",\"dweb:/ipfs/QmdzLoo99EBJv2GGiZZAAY8Bfr4ivFykzeSbpF48aJxFZ9\"]},\"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/Conversions.sol\":{\"keccak256\":\"0xaf7fc2523413822de3b66ba339fe2884fb3b8c6f6cf38ec90a2c3e3aae71df6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://655c9fe2434ca039b67277d753a60d39f2938260c716a36d24b591acf8c4fb75\",\"dweb:/ipfs/QmbygBAjCoFe9oUp9QkJ45jqctThk7VSmiSVLHV4Z3WHVe\"]},\"node_modules/@prb/math/src/ud60x18/Errors.sol\":{\"keccak256\":\"0xa8c60d4066248df22c49c882873efbc017344107edabc48c52209abbc39cb1e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fb7e1103309b4f99e95bb638850c0321272d57bd3e6b0a6331d699ff103cbaf\",\"dweb:/ipfs/QmfLFHjVJv4ibEvMmh46qC5nCbeCYSfXgCTDWQqfW3jnyB\"]},\"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\":\"0x462144667aac3f96d5f8dba7aa68fe4c5a3f61e1d7bbbc81bee21168817f9c09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9bb7f11754e2202ed03351e52ef72f7ec85120b4a3ddec2f312b7bf5b08d4d7\",\"dweb:/ipfs/Qmd1tg9PEfdHD1GNmTiB8wUM7VrS4jfQFto3KKn1vfYGjw\"]},\"node_modules/@prb/math/src/ud60x18/ValueType.sol\":{\"keccak256\":\"0xdd873b5124180d9b71498b3a7fe93b1c08c368bec741f7d5f8e17f78a0b70f31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7df6700f747dd01b2520a900a8d6b5a4d239b8063c31384f40921afe22295c29\",\"dweb:/ipfs/QmSPSPQJKNSzGJu2ri5EfWjcLfA2xDHfUehyBp4FpUu2qZ\"]},\"src/interfaces/IAdminable.sol\":{\"keccak256\":\"0xa279c49e51228b571329164e36250e82b2c1378e8b549194ab7dd90fca9c3b2b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0af605b82e64679db7039fb378fc206c4a000f8cd24b3ff17b019e27b81be8f\",\"dweb:/ipfs/QmUSr73cbnG7K79mVE9Nwcou5nJZEK2ZGekt3KpkfpxL4Z\"]},\"src/interfaces/ISablierV2Lockup.sol\":{\"keccak256\":\"0x9d7c695e1454bc14b3dd323bd8598fd762f616936553852ed55bfa02a7107e93\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2401e189b3769aad662a3f7a965f43c71e606556ad548027649c1f809f4ebf1\",\"dweb:/ipfs/QmeLrGETtVockNTi4SW1jtMRg3xkhbwbVZGuTNRxCfyafp\"]},\"src/interfaces/ISablierV2LockupLinear.sol\":{\"keccak256\":\"0x40f72f9bd8c03329038307c5e77eec27457032b3637bd14edd02444a4c6b0332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ff7ad36aa8ddb431e245ee6102de7c374bb24a64f51dd77312035edae07050df\",\"dweb:/ipfs/Qmdyk31NQXivHv2Uvo96NGK3PDqgBuRixXQrvwuYG5AHpV\"]},\"src/interfaces/ISablierV2NFTDescriptor.sol\":{\"keccak256\":\"0x9f70b5549dd3f057ab460c142431fd0815e5a8501b0d3546644a7ded87dc4714\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15863af93766d1f1c426e0e880b21dfc6ebc3c6ce09a243704b3b95536fe4742\",\"dweb:/ipfs/QmSCNWYQ3MeX9JPqzKF8BtnghaoHasEwXW6sRGiGkDULka\"]},\"src/types/DataTypes.sol\":{\"keccak256\":\"0xcb3c3ec3060ab0dbbaa942f08a2fb752bc9b47780ca51f7ed1fdf929f0f13b35\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://feb7f1c8add92280a8dc9c1695a9d5a233a2d7f4d7fefff64e0b5a800311268e\",\"dweb:/ipfs/QmXnYrPTTgrVZx9iBCkkJ73kUwHScBj66MJa1MwKHHdq2a\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"admin","type":"address","indexed":true},{"internalType":"address","name":"recipient","type":"address","indexed":false}],"type":"event","name":"AllowToHook","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":"sender","type":"address","indexed":true},{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"contract IERC20","name":"asset","type":"address","indexed":true},{"internalType":"uint128","name":"senderAmount","type":"uint128","indexed":false},{"internalType":"uint128","name":"recipientAmount","type":"uint128","indexed":false}],"type":"event","name":"CancelLockupStream","anonymous":false},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256","indexed":false},{"internalType":"address","name":"funder","type":"address","indexed":false},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"struct Lockup.CreateAmounts","name":"amounts","type":"tuple","components":[{"internalType":"uint128","name":"deposit","type":"uint128"},{"internalType":"uint128","name":"brokerFee","type":"uint128"}],"indexed":false},{"internalType":"contract IERC20","name":"asset","type":"address","indexed":true},{"internalType":"bool","name":"cancelable","type":"bool","indexed":false},{"internalType":"bool","name":"transferable","type":"bool","indexed":false},{"internalType":"struct LockupLinear.Timestamps","name":"timestamps","type":"tuple","components":[{"internalType":"uint40","name":"start","type":"uint40"},{"internalType":"uint40","name":"cliff","type":"uint40"},{"internalType":"uint40","name":"end","type":"uint40"}],"indexed":false},{"internalType":"address","name":"broker","type":"address","indexed":false}],"type":"event","name":"CreateLockupLinearStream","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}],"type":"event","name":"RenounceLockupStream","anonymous":false},{"inputs":[{"internalType":"address","name":"admin","type":"address","indexed":true},{"internalType":"contract ISablierV2NFTDescriptor","name":"oldNFTDescriptor","type":"address","indexed":false},{"internalType":"contract ISablierV2NFTDescriptor","name":"newNFTDescriptor","type":"address","indexed":false}],"type":"event","name":"SetNFTDescriptor","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":"oldAdmin","type":"address","indexed":true},{"internalType":"address","name":"newAdmin","type":"address","indexed":true}],"type":"event","name":"TransferAdmin","anonymous":false},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"contract IERC20","name":"asset","type":"address","indexed":true},{"internalType":"uint128","name":"amount","type":"uint128","indexed":false}],"type":"event","name":"WithdrawFromLockupStream","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_BROKER_FEE","outputs":[{"internalType":"UD60x18","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"allowToHook"},{"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":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"cancel"},{"inputs":[{"internalType":"uint256[]","name":"streamIds","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"cancelMultiple"},{"inputs":[{"internalType":"struct LockupLinear.CreateWithDurations","name":"params","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"totalAmount","type":"uint128"},{"internalType":"contract IERC20","name":"asset","type":"address"},{"internalType":"bool","name":"cancelable","type":"bool"},{"internalType":"bool","name":"transferable","type":"bool"},{"internalType":"struct LockupLinear.Durations","name":"durations","type":"tuple","components":[{"internalType":"uint40","name":"cliff","type":"uint40"},{"internalType":"uint40","name":"total","type":"uint40"}]},{"internalType":"struct Broker","name":"broker","type":"tuple","components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"UD60x18","name":"fee","type":"uint256"}]}]}],"stateMutability":"nonpayable","type":"function","name":"createWithDurations","outputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}]},{"inputs":[{"internalType":"struct LockupLinear.CreateWithTimestamps","name":"params","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"totalAmount","type":"uint128"},{"internalType":"contract IERC20","name":"asset","type":"address"},{"internalType":"bool","name":"cancelable","type":"bool"},{"internalType":"bool","name":"transferable","type":"bool"},{"internalType":"struct LockupLinear.Timestamps","name":"timestamps","type":"tuple","components":[{"internalType":"uint40","name":"start","type":"uint40"},{"internalType":"uint40","name":"cliff","type":"uint40"},{"internalType":"uint40","name":"end","type":"uint40"}]},{"internalType":"struct Broker","name":"broker","type":"tuple","components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"UD60x18","name":"fee","type":"uint256"}]}]}],"stateMutability":"nonpayable","type":"function","name":"createWithTimestamps","outputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}]},{"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":"getAsset","outputs":[{"internalType":"contract IERC20","name":"asset","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getCliffTime","outputs":[{"internalType":"uint40","name":"cliffTime","type":"uint40"}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getDepositedAmount","outputs":[{"internalType":"uint128","name":"depositedAmount","type":"uint128"}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getEndTime","outputs":[{"internalType":"uint40","name":"endTime","type":"uint40"}]},{"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":"getRefundedAmount","outputs":[{"internalType":"uint128","name":"refundedAmount","type":"uint128"}]},{"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":"getStartTime","outputs":[{"internalType":"uint40","name":"startTime","type":"uint40"}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getStream","outputs":[{"internalType":"struct LockupLinear.StreamLL","name":"stream","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint40","name":"startTime","type":"uint40"},{"internalType":"bool","name":"isCancelable","type":"bool"},{"internalType":"bool","name":"wasCanceled","type":"bool"},{"internalType":"contract IERC20","name":"asset","type":"address"},{"internalType":"uint40","name":"endTime","type":"uint40"},{"internalType":"bool","name":"isDepleted","type":"bool"},{"internalType":"bool","name":"isStream","type":"bool"},{"internalType":"bool","name":"isTransferable","type":"bool"},{"internalType":"struct Lockup.Amounts","name":"amounts","type":"tuple","components":[{"internalType":"uint128","name":"deposited","type":"uint128"},{"internalType":"uint128","name":"withdrawn","type":"uint128"},{"internalType":"uint128","name":"refunded","type":"uint128"}]},{"internalType":"uint40","name":"cliffTime","type":"uint40"}]}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getTimestamps","outputs":[{"internalType":"struct LockupLinear.Timestamps","name":"timestamps","type":"tuple","components":[{"internalType":"uint40","name":"start","type":"uint40"},{"internalType":"uint40","name":"cliff","type":"uint40"},{"internalType":"uint40","name":"end","type":"uint40"}]}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getWithdrawnAmount","outputs":[{"internalType":"uint128","name":"withdrawnAmount","type":"uint128"}]},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedToHook","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"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":"isCancelable","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"isCold","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"isDepleted","outputs":[{"internalType":"bool","name":"result","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":"isWarm","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":"nextStreamId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"nftDescriptor","outputs":[{"internalType":"contract ISablierV2NFTDescriptor","name":"","type":"address"}]},{"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":"view","type":"function","name":"refundableAmountOf","outputs":[{"internalType":"uint128","name":"refundableAmount","type":"uint128"}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"renounce"},{"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 ISablierV2NFTDescriptor","name":"newNFTDescriptor","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setNFTDescriptor"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"statusOf","outputs":[{"internalType":"enum Lockup.Status","name":"status","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"streamedAmountOf","outputs":[{"internalType":"uint128","name":"streamedAmount","type":"uint128"}]},{"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":"address","name":"newAdmin","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferAdmin"},{"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":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"wasCanceled","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint128","name":"amount","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"withdrawMax","outputs":[{"internalType":"uint128","name":"withdrawnAmount","type":"uint128"}]},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"address","name":"newRecipient","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"withdrawMaxAndTransfer","outputs":[{"internalType":"uint128","name":"withdrawnAmount","type":"uint128"}]},{"inputs":[{"internalType":"uint256[]","name":"streamIds","type":"uint256[]"},{"internalType":"uint128[]","name":"amounts","type":"uint128[]"}],"stateMutability":"nonpayable","type":"function","name":"withdrawMultiple"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"view","type":"function","name":"withdrawableAmountOf","outputs":[{"internalType":"uint128","name":"withdrawableAmount","type":"uint128"}]}],"devdoc":{"kind":"dev","methods":{"MAX_BROKER_FEE()":{"details":"This value is hard coded as a constant."},"allowToHook(address)":{"details":"Emits an {AllowToHook} event. Notes: - Does not revert if the contract is already on the allowlist. - This is an irreversible operation. The contract cannot be removed from the allowlist. Requirements: - `msg.sender` must be the contract admin. - `recipient` must have a non-zero code size. - `recipient` must implement {ISablierLockupRecipient}.","params":{"recipient":"The address of the contract to allow for hooks."}},"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."},"burn(uint256)":{"details":"Emits a {Transfer} event. Requirements: - Must not be delegate called. - `streamId` must reference a depleted stream. - The NFT must exist. - `msg.sender` must be either the NFT owner or an approved third party.","params":{"streamId":"The ID of the stream NFT to burn."}},"cancel(uint256)":{"details":"Emits a {Transfer}, {CancelLockupStream}, and {MetadataUpdate} event. Notes: - If there any assets left for the recipient to withdraw, the stream is marked as canceled. Otherwise, the stream is marked as depleted. - This function attempts to invoke a hook on the recipient, if the resolved address is a contract. Requirements: - Must not be delegate called. - The stream must be warm and cancelable. - `msg.sender` must be the stream's sender.","params":{"streamId":"The ID of the stream to cancel."}},"cancelMultiple(uint256[])":{"details":"Emits multiple {Transfer}, {CancelLockupStream}, and {MetadataUpdate} events. Notes: - Refer to the notes in {cancel}. Requirements: - All requirements from {cancel} must be met for each stream.","params":{"streamIds":"The IDs of the streams to cancel."}},"createWithDurations((address,address,uint128,address,bool,bool,(uint40,uint40),(address,uint256)))":{"details":"Emits a {Transfer} and {CreateLockupLinearStream} event. Requirements: - All requirements in {createWithTimestamps} must be met for the calculated parameters.","params":{"params":"Struct encapsulating the function parameters, which are documented in {DataTypes}."},"returns":{"streamId":"The ID of the newly created stream."}},"createWithTimestamps((address,address,uint128,address,bool,bool,(uint40,uint40,uint40),(address,uint256)))":{"details":"Emits a {Transfer} and {CreateLockupLinearStream} event. Notes: - A cliff time of zero means there is no cliff. - As long as the times are ordered, it is not an error for the start or the cliff time to be in the past. Requirements: - Must not be delegate called. - `params.totalAmount` must be greater than zero. - If set, `params.broker.fee` must not be greater than `MAX_BROKER_FEE`. - `params.timestamps.start` must be greater than zero and less than `params.timestamps.end`. - If set, `params.timestamps.cliff` must be greater than `params.timestamps.start` and less than `params.timestamps.end`. - `params.timestamps.end` must be in the future. - `params.recipient` must not be the zero address. - `msg.sender` must have allowed this contract to spend at least `params.totalAmount` assets.","params":{"params":"Struct encapsulating the function parameters, which are documented in {DataTypes}."},"returns":{"streamId":"The ID of the newly created stream."}},"getApproved(uint256)":{"details":"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."},"getAsset(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"getCliffTime(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"getDepositedAmount(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"getEndTime(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"getRecipient(uint256)":{"details":"Reverts if the NFT has been burned.","params":{"streamId":"The stream ID for the query."}},"getRefundedAmount(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."}},"getStartTime(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"getStream(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."},"returns":{"stream":"See the documentation in {DataTypes}."}},"getTimestamps(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."},"returns":{"timestamps":"See the documentation in {DataTypes}."}},"getWithdrawnAmount(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"isAllowedToHook(address)":{"details":"See {ISablierLockupRecipient} for more information."},"isApprovedForAll(address,address)":{"details":"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"},"isCancelable(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"isCold(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"isDepleted(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"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."}},"isWarm(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"name()":{"details":"Returns the token collection name."},"ownerOf(uint256)":{"details":"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."},"refundableAmountOf(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"renounce(uint256)":{"details":"Emits a {RenounceLockupStream} and {MetadataUpdate} event. Notes: - This is an irreversible operation. Requirements: - Must not be delegate called. - `streamId` must reference a warm stream. - `msg.sender` must be the stream's sender. - The stream must be cancelable.","params":{"streamId":"The ID of the stream to renounce."}},"safeTransferFrom(address,address,uint256)":{"details":"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 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."},"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 contract admin.","params":{"newNFTDescriptor":"The address of the new NFT descriptor contract."}},"statusOf(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"streamedAmountOf(uint256)":{"details":"Reverts if `streamId` references a null stream. Notes: - Upon cancellation of the stream, the amount streamed is calculated as the difference between the deposited amount and the refunded amount. Ultimately, when the stream becomes depleted, the streamed amount is equivalent to the total amount withdrawn.","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[EIP 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."},"transferAdmin(address)":{"details":"Notes: - Does not revert if the admin is the same. - This function can potentially leave the contract without an admin, thereby removing any functionality that is only available to the admin. Requirements: - `msg.sender` must be the contract admin.","params":{"newAdmin":"The address of the new admin."}},"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 ERC721 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."},"wasCanceled(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}},"withdraw(uint256,address,uint128)":{"details":"Emits a {Transfer}, {WithdrawFromLockupStream}, and {MetadataUpdate} event. Notes: - This function attempts to call a hook on the recipient of the stream, unless `msg.sender` is the recipient. Requirements: - Must not be delegate called. - `streamId` must not reference a null or depleted stream. - `to` must not be the zero address. - `amount` must be greater than zero and must not exceed the withdrawable amount. - `to` must be the recipient if `msg.sender` is not the stream's recipient or an approved third party.","params":{"amount":"The amount to withdraw, denoted in units of the asset's decimals.","streamId":"The ID of the stream to withdraw from.","to":"The address receiving the withdrawn assets."}},"withdrawMax(uint256,address)":{"details":"Emits a {Transfer}, {WithdrawFromLockupStream}, 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 assets."},"returns":{"withdrawnAmount":"The amount withdrawn, denoted in units of the asset's decimals."}},"withdrawMaxAndTransfer(uint256,address)":{"details":"Emits a {WithdrawFromLockupStream} and a {Transfer} event. Notes: - If the withdrawable amount is zero, the withdrawal is skipped. - Refer to the notes in {withdraw}. Requirements: - `msg.sender` must be the stream's recipient. - Refer to the requirements in {withdraw}. - Refer to the requirements in {IERC721.transferFrom}.","params":{"newRecipient":"The address of the new owner of the stream NFT.","streamId":"The ID of the stream NFT to transfer."},"returns":{"withdrawnAmount":"The amount withdrawn, denoted in units of the asset's decimals."}},"withdrawMultiple(uint256[],uint128[])":{"details":"Emits multiple {Transfer}, {WithdrawFromLockupStream}, and {MetadataUpdate} events. Notes: - This function attempts to call a hook on the recipient of each stream, unless `msg.sender` is the recipient. Requirements: - Must not be delegate called. - There must be an equal number of `streamIds` and `amounts`. - Each stream ID in the array must not reference a null or depleted stream. - Each amount in the array must be greater than zero and must not exceed the withdrawable amount.","params":{"amounts":"The amounts to withdraw, denoted in units of the asset's decimals.","streamIds":"The IDs of the streams to withdraw from."}},"withdrawableAmountOf(uint256)":{"details":"Reverts if `streamId` references a null stream.","params":{"streamId":"The stream ID for the query."}}},"version":1},"userdoc":{"kind":"user","methods":{"MAX_BROKER_FEE()":{"notice":"Retrieves the maximum broker fee that can be charged by the broker, denoted as a fixed-point number where 1e18 is 100%."},"admin()":{"notice":"The address of the admin account or contract."},"allowToHook(address)":{"notice":"Allows a recipient contract to hook to Sablier when a stream is canceled or when assets are withdrawn. Useful for implementing contracts that hold streams on behalf of users, such as vaults or staking contracts."},"burn(uint256)":{"notice":"Burns the NFT associated with the stream."},"cancel(uint256)":{"notice":"Cancels the stream and refunds any remaining assets to the sender."},"cancelMultiple(uint256[])":{"notice":"Cancels multiple streams and refunds any remaining assets to the sender."},"createWithDurations((address,address,uint128,address,bool,bool,(uint40,uint40),(address,uint256)))":{"notice":"Creates a stream by setting the start time to `block.timestamp`, and the end time to the sum of `block.timestamp` and `params.durations.total`. The stream is funded by `msg.sender` and is wrapped in an ERC-721 NFT."},"createWithTimestamps((address,address,uint128,address,bool,bool,(uint40,uint40,uint40),(address,uint256)))":{"notice":"Creates a stream with the provided start time and end time. The stream is funded by `msg.sender` and is wrapped in an ERC-721 NFT."},"getAsset(uint256)":{"notice":"Retrieves the address of the ERC-20 asset to be distributed."},"getCliffTime(uint256)":{"notice":"Retrieves the stream's cliff time, which is a Unix timestamp.  A value of zero means there is no cliff."},"getDepositedAmount(uint256)":{"notice":"Retrieves the amount deposited in the stream, denoted in units of the asset's decimals."},"getEndTime(uint256)":{"notice":"Retrieves the stream's end time, which is a Unix timestamp."},"getRecipient(uint256)":{"notice":"Retrieves the stream's recipient."},"getRefundedAmount(uint256)":{"notice":"Retrieves the amount refunded to the sender after a cancellation, denoted in units of the asset's decimals. This amount is always zero unless the stream was canceled."},"getSender(uint256)":{"notice":"Retrieves the stream's sender."},"getStartTime(uint256)":{"notice":"Retrieves the stream's start time, which is a Unix timestamp."},"getStream(uint256)":{"notice":"Retrieves the full stream details."},"getTimestamps(uint256)":{"notice":"Retrieves the stream's start, cliff and end timestamps."},"getWithdrawnAmount(uint256)":{"notice":"Retrieves the amount withdrawn from the stream, denoted in units of the asset's decimals."},"isAllowedToHook(address)":{"notice":"Retrieves a flag indicating whether the provided address is a contract allowed to hook to Sablier when a stream is canceled or when assets are withdrawn."},"isCancelable(uint256)":{"notice":"Retrieves a flag indicating whether the stream can be canceled. When the stream is cold, this flag is always `false`."},"isCold(uint256)":{"notice":"Retrieves a flag indicating whether the stream is cold, i.e. settled, canceled, or depleted."},"isDepleted(uint256)":{"notice":"Retrieves a flag indicating whether the stream is depleted."},"isStream(uint256)":{"notice":"Retrieves a flag indicating whether the stream exists."},"isTransferable(uint256)":{"notice":"Retrieves a flag indicating whether the stream NFT can be transferred."},"isWarm(uint256)":{"notice":"Retrieves a flag indicating whether the stream is warm, i.e. either pending or streaming."},"nextStreamId()":{"notice":"Counter for stream IDs, used in the create functions."},"nftDescriptor()":{"notice":"Contract that generates the non-fungible token URI."},"refundableAmountOf(uint256)":{"notice":"Calculates the amount that the sender would be refunded if the stream were canceled, denoted in units of the asset's decimals."},"renounce(uint256)":{"notice":"Removes the right of the stream's sender to cancel the stream."},"setNFTDescriptor(address)":{"notice":"Sets a new NFT descriptor contract, which produces the URI describing the Sablier stream NFTs."},"statusOf(uint256)":{"notice":"Retrieves the stream's status."},"streamedAmountOf(uint256)":{"notice":"Calculates the amount streamed to the recipient, denoted in units of the asset's decimals."},"transferAdmin(address)":{"notice":"Transfers the contract admin to a new address."},"wasCanceled(uint256)":{"notice":"Retrieves a flag indicating whether the stream was canceled."},"withdraw(uint256,address,uint128)":{"notice":"Withdraws the provided amount of assets from the stream to the `to` address."},"withdrawMax(uint256,address)":{"notice":"Withdraws the maximum withdrawable amount from the stream to the provided address `to`."},"withdrawMaxAndTransfer(uint256,address)":{"notice":"Withdraws the maximum withdrawable amount from the stream to the current recipient, and transfers the NFT to `newRecipient`."},"withdrawMultiple(uint256[],uint128[])":{"notice":"Withdraws assets from streams to the recipient of each stream."},"withdrawableAmountOf(uint256)":{"notice":"Calculates the amount that the recipient can withdraw from the stream, denoted in units of the asset's decimals."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/","@prb/math/=node_modules/@prb/math/","forge-std/=node_modules/forge-std/","solady/=node_modules/solady/","solarray/=node_modules/solarray/"],"optimizer":{"enabled":true,"runs":1000},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/interfaces/ISablierV2LockupLinear.sol":"ISablierV2LockupLinear"},"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":"0xb31b86c03f4677dcffa4655285d62433509513be9bafa0e04984565052d34e44","urls":["bzz-raw://a89c6fb0cd5fef4244500b633f63def9f2bb2134debb961e590bd5a2910662fd","dweb:/ipfs/QmNqWyCxyopvb99RbRomPpfTZGXRi5MnzgpFXE2BFLLgMc"],"license":"MIT"},"node_modules/@openzeppelin/contracts/interfaces/IERC721.sol":{"keccak256":"0xc4d7ebf63eb2f6bf3fee1b6c0ee775efa9f31b4843a5511d07eea147e212932d","urls":["bzz-raw://01c66a2fad66bc710db7510419a7eee569b40b67cd9f01b70a3fc90d6f76c03b","dweb:/ipfs/QmT1CjJZq4eTNA4nu8E9ZrWfaZu6ReUsDbjcK8DbEFqwx5"],"license":"MIT"},"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4","urls":["bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7","dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n"],"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":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"node_modules/@prb/math/src/Common.sol":{"keccak256":"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b","urls":["bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9","dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH"],"license":"MIT"},"node_modules/@prb/math/src/UD2x18.sol":{"keccak256":"0xfb624e24cd8bb790fa08e7827819de85504a86e20e961fa4ad126c65b6d90641","urls":["bzz-raw://dd795b8df250e7eedc68e2dba1afbb60357ce8f22f21bed212b5a9046d2057d2","dweb:/ipfs/QmUHtrSr8Gb6bvSe2rCWPA5YrJq72UiJARYr1gZqFVRsYH"],"license":"MIT"},"node_modules/@prb/math/src/UD60x18.sol":{"keccak256":"0xb98c6f74275914d279e8af6c502c2b1f50d5f6e1ed418d3b0153f5a193206c48","urls":["bzz-raw://a750edde2955f160806a51083a12185fb04e20efca0e3a7ebd127dc1acc049a9","dweb:/ipfs/QmeAre3mThopoQPB9mSXZq6jck59QZ7JbDFR83urd2SLvp"],"license":"MIT"},"node_modules/@prb/math/src/sd1x18/Casting.sol":{"keccak256":"0x9e49e2b37c1bb845861740805edaaef3fe951a7b96eef16ce84fbf76e8278670","urls":["bzz-raw://d3f65f257f9f516f2b40ca30b1c999819777111bd59a92376df6c5823453165a","dweb:/ipfs/QmVQRKMS6ibv6x9qWXLJp2KZw9qs6Yz1sYZQWoSBQM8Pkz"],"license":"MIT"},"node_modules/@prb/math/src/sd1x18/Constants.sol":{"keccak256":"0x6496165b80552785a4b65a239b96e2a5fedf62fe54f002eeed72d75e566d7585","urls":["bzz-raw://3a1623b9a1e03f548787d9f876a26647090f40db765a32a99167cb89da145339","dweb:/ipfs/QmezifZR7md7GzQisgdUmYKWJx1zuiqosVRsmJyNkvJxK9"],"license":"MIT"},"node_modules/@prb/math/src/sd1x18/Errors.sol":{"keccak256":"0x836cb42ba619ca369fd4765bc47fefc3c3621369c5861882af14660aca5057ee","urls":["bzz-raw://58873bcebf7398f63c6d3f234073fb6739fe4fae87428010cd0bc1aa68f53499","dweb:/ipfs/QmZSZ9z4ZQUGRc1TRiL2F9AL7ysnGRXwRtocMa2zhxHFDp"],"license":"MIT"},"node_modules/@prb/math/src/sd1x18/ValueType.sol":{"keccak256":"0x2f86f1aa9fca42f40808b51a879b406ac51817647bdb9642f8a79dd8fdb754a7","urls":["bzz-raw://31559dfc012ebe40fcdb38c45e7edfa16406f11c6ea219e8676749f20dbbb5dd","dweb:/ipfs/QmXeYzF9hYQphVExJRp41Vkebrs51k7xgr3jXfKgdD87XC"],"license":"MIT"},"node_modules/@prb/math/src/sd59x18/Casting.sol":{"keccak256":"0x3b21b60ec2998c3ae32f647412da51d3683b3f183a807198cc8d157499484f99","urls":["bzz-raw://08a49ba7ebf592a89e1a81e5987351e7810e371f4c3d2356d9b5a9b58462c809","dweb:/ipfs/QmcvyHaUzd74eYjcZWQgUDFJfYrU8kFohiB1H5cs8HgUDp"],"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":"0xa6d00fe5efa215ac0df25c896e3da99a12fb61e799644b2ec32da947313d3db4","urls":["bzz-raw://cbfcf2d9681a2af1e076439791e2853b466066d867bfcbbf6b46b4a4476f712f","dweb:/ipfs/QmWGznYLYdvsjMSyauT2DoipgGLVGW9KASXEknTgR5eRMv"],"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":"0xa074831139fc89ca0e5a36086b30eb50896bb6770cd5823461b1f2769017d2f0","urls":["bzz-raw://bd0ce38e8e85ed1a5179c1016af6131eb29674f195c66971d5e6da2764222d0d","dweb:/ipfs/QmbHLp9E8dNuz8Fi2rRcYjLVGfVdacLyjrktQzxf62FLXp"],"license":"MIT"},"node_modules/@prb/math/src/sd59x18/ValueType.sol":{"keccak256":"0xe03112d145dcd5863aff24e5f381debaae29d446acd5666f3d640e3d9af738d7","urls":["bzz-raw://abacb7cba4bd732c961cfe7d66c5eec924c7a9ffe0bf07fafc95b65a887071f6","dweb:/ipfs/QmSBefftoSJDMdmp5CFAVvJjPHJXHhd11x1FzkcHQxLjoT"],"license":"MIT"},"node_modules/@prb/math/src/ud2x18/Casting.sol":{"keccak256":"0x9b1a35d432ef951a415fae8098b3c609a99b630a3d5464b3c8e1efa8893eea07","urls":["bzz-raw://977ab8a458a6aeaf7cfd125c06e1e4c50fa1147f0b72638d1ae1fb4f6ad37ddd","dweb:/ipfs/QmeVVDpmYm1Tc8kpscF1Z2rtYvkpb1NeGBwRoYgLBuwXeA"],"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":"0xdf1e22f0b4c8032bcc8b7f63fe3984e1387f3dc7b2e9ab381822249f75376d33","urls":["bzz-raw://975f9beb25a1ebff9b29dd5555e1f4f14a4fbf178d15ebd3add5ed5f5985fdec","dweb:/ipfs/QmbvTvdtSrZi7J4sJuv6zUsymT5UctJnx4DkGezXW25r59"],"license":"MIT"},"node_modules/@prb/math/src/ud2x18/ValueType.sol":{"keccak256":"0x2802edc9869db116a0b5c490cc5f8554742f747183fa30ac5e9c80bb967e61a1","urls":["bzz-raw://e9657724f5032559c953cba61db0fbca71f6b50f51edb53a08f840cb74a36c95","dweb:/ipfs/QmX2KF8v7ng13NaavyogM3SGR4jCMLUuqKkxFhtxvc7D7m"],"license":"MIT"},"node_modules/@prb/math/src/ud60x18/Casting.sol":{"keccak256":"0x5bb532da36921cbdac64d1f16de5d366ef1f664502e3b7c07d0ad06917551f85","urls":["bzz-raw://f0819da49f6a86a1fc2ece8e8a4292f8d102dc1043a1d0a545c26d020d1f36fe","dweb:/ipfs/QmdzLoo99EBJv2GGiZZAAY8Bfr4ivFykzeSbpF48aJxFZ9"],"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/Conversions.sol":{"keccak256":"0xaf7fc2523413822de3b66ba339fe2884fb3b8c6f6cf38ec90a2c3e3aae71df6b","urls":["bzz-raw://655c9fe2434ca039b67277d753a60d39f2938260c716a36d24b591acf8c4fb75","dweb:/ipfs/QmbygBAjCoFe9oUp9QkJ45jqctThk7VSmiSVLHV4Z3WHVe"],"license":"MIT"},"node_modules/@prb/math/src/ud60x18/Errors.sol":{"keccak256":"0xa8c60d4066248df22c49c882873efbc017344107edabc48c52209abbc39cb1e3","urls":["bzz-raw://8fb7e1103309b4f99e95bb638850c0321272d57bd3e6b0a6331d699ff103cbaf","dweb:/ipfs/QmfLFHjVJv4ibEvMmh46qC5nCbeCYSfXgCTDWQqfW3jnyB"],"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":"0x462144667aac3f96d5f8dba7aa68fe4c5a3f61e1d7bbbc81bee21168817f9c09","urls":["bzz-raw://d9bb7f11754e2202ed03351e52ef72f7ec85120b4a3ddec2f312b7bf5b08d4d7","dweb:/ipfs/Qmd1tg9PEfdHD1GNmTiB8wUM7VrS4jfQFto3KKn1vfYGjw"],"license":"MIT"},"node_modules/@prb/math/src/ud60x18/ValueType.sol":{"keccak256":"0xdd873b5124180d9b71498b3a7fe93b1c08c368bec741f7d5f8e17f78a0b70f31","urls":["bzz-raw://7df6700f747dd01b2520a900a8d6b5a4d239b8063c31384f40921afe22295c29","dweb:/ipfs/QmSPSPQJKNSzGJu2ri5EfWjcLfA2xDHfUehyBp4FpUu2qZ"],"license":"MIT"},"src/interfaces/IAdminable.sol":{"keccak256":"0xa279c49e51228b571329164e36250e82b2c1378e8b549194ab7dd90fca9c3b2b","urls":["bzz-raw://b0af605b82e64679db7039fb378fc206c4a000f8cd24b3ff17b019e27b81be8f","dweb:/ipfs/QmUSr73cbnG7K79mVE9Nwcou5nJZEK2ZGekt3KpkfpxL4Z"],"license":"GPL-3.0-or-later"},"src/interfaces/ISablierV2Lockup.sol":{"keccak256":"0x9d7c695e1454bc14b3dd323bd8598fd762f616936553852ed55bfa02a7107e93","urls":["bzz-raw://e2401e189b3769aad662a3f7a965f43c71e606556ad548027649c1f809f4ebf1","dweb:/ipfs/QmeLrGETtVockNTi4SW1jtMRg3xkhbwbVZGuTNRxCfyafp"],"license":"GPL-3.0-or-later"},"src/interfaces/ISablierV2LockupLinear.sol":{"keccak256":"0x40f72f9bd8c03329038307c5e77eec27457032b3637bd14edd02444a4c6b0332","urls":["bzz-raw://ff7ad36aa8ddb431e245ee6102de7c374bb24a64f51dd77312035edae07050df","dweb:/ipfs/Qmdyk31NQXivHv2Uvo96NGK3PDqgBuRixXQrvwuYG5AHpV"],"license":"GPL-3.0-or-later"},"src/interfaces/ISablierV2NFTDescriptor.sol":{"keccak256":"0x9f70b5549dd3f057ab460c142431fd0815e5a8501b0d3546644a7ded87dc4714","urls":["bzz-raw://15863af93766d1f1c426e0e880b21dfc6ebc3c6ce09a243704b3b95536fe4742","dweb:/ipfs/QmSCNWYQ3MeX9JPqzKF8BtnghaoHasEwXW6sRGiGkDULka"],"license":"GPL-3.0-or-later"},"src/types/DataTypes.sol":{"keccak256":"0xcb3c3ec3060ab0dbbaa942f08a2fb752bc9b47780ca51f7ed1fdf929f0f13b35","urls":["bzz-raw://feb7f1c8add92280a8dc9c1695a9d5a233a2d7f4d7fefff64e0b5a800311268e","dweb:/ipfs/QmXnYrPTTgrVZx9iBCkkJ73kUwHScBj66MJa1MwKHHdq2a"],"license":"GPL-3.0-or-later"}},"version":1},"id":95}