function unfreeze(address _who) public returns (uint256) {
        require(_who != address(0));

        Schedule storage schedule = freezed[_who];

        
        uint256 timestamp = block.timestamp;

        require(schedule.lastReleased.add(60) < timestamp);
        require(schedule.amount > 0 && timestamp > schedule.cliff);

        uint256 unreleased = 0;
        if (timestamp >= schedule.start.add(schedule.duration)) {
            unreleased = schedule.amount;
        } else {
            unreleased = (schedule.amount.add(schedule.released)).mul(timestamp.sub(schedule.start)).div(schedule.duration).sub(schedule.released);
        }
        require(unreleased > 0);

        schedule.released = schedule.released.add(unreleased);
        schedule.lastReleased = timestamp;
        schedule.amount = schedule.amount.sub(unreleased);

        balances[_who] = balances[_who].add(unreleased);

        emit Unfreeze(_who, unreleased);

        return unreleased;
    }