interface ITokenDisburse {
event DisbursementAdded(uint256 id, address recipient, uint256 amount, uint64 startTime, uint64 duration);
event DisbursementClaim(uint256 id, address recipient, uint256 amount);
event DisbursementUpdated(uint256 id, uint256 reduction, uint64 startTime, uint64 duration);
function addDisbursement(address _recipient, uint256 _amount, uint64 _startTime, uint64 _duration, string _note);
function addDisbursements(address[] _recipients, uint256[] _amounts, uint64 _startTime, uint64 _duration, string _note);
function claim(uint256 _amount);
function disbursements(uint256) view returns (uint256 id, address recipient, string note, uint256 total, uint256 claimed, uint256 balance, uint64 createdTime, uint64 startTime, uint64 duration);
function getDisbursementIds(address _recipient) view returns (uint256[]);
function globalStartTime() view returns (uint256);
function reservedToken() view returns (uint256);
function totalClaimed(address _recipient) view returns (uint256);
function totalUnvested(address _recipient) view returns (uint256);
function totalVested(address _recipient) view returns (uint256);
function updateDisbursement(uint256 _disbursementId, uint256 _reduction, uint64 _startTime, uint64 _duration);
}