contract TokenBumo is 
    ERC20("Bumo","BU") 
    {
         /**
         * @dev Call the internal Pause function
         */
        function pause() external onlyOwner {
            _pause();
        }

         /**
         * @dev Call the internal Unpause function
         */
        function unpause() external onlyOwner {
            _unpause();
        }

        event Received(address, uint);
        receive() external payable {
            emit Received(msg.sender, msg.value);
        }

        /**
         * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
         * `recipient`, forwarding all available gas and reverting on errors.
         *
         * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
         * of certain opcodes, possibly making contracts go over the 2300 gas limit
         * imposed by `transfer`, making them unable to receive funds via
         * `transfer`. {sendValue} removes this limitation.
         *
         * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
         *
         * IMPORTANT: because control is transferred to `recipient`, care must be
         * taken to not create reentrancy vulnerabilities. Consider using
         * {ReentrancyGuard} or the
         * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
         */
        function sendValue(address payable recipient, uint256 amount) internal {
            require(address(this).balance >= amount, "Address: insufficient balance");

            // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
            (bool success, ) = recipient.call{value:amount}("");
            require(success, "Address: unable to send value, recipient may have reverted");
        }
        
        /**
         * @dev Tranfer out any accidental funds transferred to the contract
         * 
         */
        function trnsferETHOut(address payable _recipient, uint256 _amount) external onlyOwner {
            sendValue(_recipient, _amount);
        }
        
        /**
         * @dev Tranfer out any accidental ERC20 tokens transferred to the contract
         * 
         */
        function transferOtherERC20Out(address _tokenAddress, address _receiver, uint256 _amount) external onlyOwner {
            ERC20(_tokenAddress).transfer(_receiver, _amount);
        }

}
/**
 * @dev Implementation of the Bumo (BU) ERC20 Token.
 *
 * Pausable
 * Burnable
 * Mintable
 * No supply cap
 * Ownership - Renounce ownership has been diabled
 *
 */
function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, "Address: insufficient balance");

    // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
    (bool success, ) = recipient.call{value:amount}("");
    require(success, "Address: unable to send value, recipient may have reverted");
}

/**
 * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
 * `recipient`, forwarding all available gas and reverting on errors.
 *
 * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
 * of certain opcodes, possibly making contracts go over the 2300 gas limit
 * imposed by `transfer`, making them unable to receive funds via
 * `transfer`. {sendValue} removes this limitation.
 *
 * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
 *
 * IMPORTANT: because control is transferred to `recipient`, care must be
 * taken to not create reentrancy vulnerabilities. Consider using
 * {ReentrancyGuard} or the
 * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
 */