function _releaseBuckets(
        address _tokenHolder
    ) 
        private 
        returns (uint256) 
    {
        require(lockingMap[_tokenHolder].startDate != 0, "Is not a locked address");
        uint256 startDate = lockingMap[_tokenHolder].startDate;
        uint256 tokens = 0;
        
        if (startDate + sixMonth <= block.timestamp) {
            tokens = lockingMap[_tokenHolder].bucket1;
            lockingMap[_tokenHolder].bucket1 = 0;
        }

        if (startDate + twelveMonth <= block.timestamp) {
            tokens = tokens + lockingMap[_tokenHolder].bucket2;
            lockingMap[_tokenHolder].bucket2 = 0;
        }

        if (startDate + eighteenMonth <= block.timestamp) {
            tokens = tokens + lockingMap[_tokenHolder].bucket3;
            lockingMap[_tokenHolder].bucket3 = 0;
        }
        
        require(erc20Contract.transfer(_tokenHolder, tokens), "Transfer failed");
        emit ReleaseVestingEvent(_tokenHolder, tokens);

        return tokens;
    }