function availableBalanceOf(
        address _tokenHolder
    ) 
        public 
        view 
        returns (uint256) 
    {
        uint256 startDate = lockingMap[_tokenHolder].startDate;
        
        if (block.timestamp <= startDate) {
            return 0;
        }

        uint256 tmpAvailableTokens = 0;
        if (block.timestamp >= startDate + thirtyMonths) {
            tmpAvailableTokens = lockingMap[_tokenHolder].initialized;
        } else {
            uint256 timeDiff = block.timestamp - startDate;
            uint256 totalBalance = lockingMap[_tokenHolder].initialized;

            tmpAvailableTokens = totalBalance.mul(timeDiff).div(thirtyMonths);
        }

        uint256 availableTokens = tmpAvailableTokens.sub(lockingMap[_tokenHolder].released);
        require(availableTokens <= lockingMap[_tokenHolder].initialized, "Max value exceeded");

        return availableTokens;
    }