contract MintableToken is StandardToken {
    /// @dev The only address allowed to mint coins
    address public minter;

    /// @dev Indicates whether the token is still mintable.
    bool public mintingDisabled = false;

    /**
     * @dev Event fired when minting is no longer allowed.
     */
    event MintingDisabled();
    
    /**
     * @dev Event fired when minting is no longer allowed.
     */
    event MintingEnabled();

    /**
     * @dev Allows a function to be executed only if minting is still allowed.
     */
    modifier canMint() {
        require(!mintingDisabled);
        _;
    }

    /**
     * @dev Allows a function to be called only by the minter
     */
    modifier onlyMinter() {
        require(msg.sender == minter);
        _;
    }

    /**
     * @dev The constructor assigns the minter which is allowed to mind and disable minting
     */
    constructor(address _minter) internal {
        minter = _minter;
    }

    /**
    * @dev Creates new `_value` number of tokens and sends them to the `_to` address.
    *
    * @param _to The address which will receive the freshly minted tokens.
    * @param _value The number of tokens that will be created.
    */
    function mint(address _to, uint256 _value) public onlyMinter canMint {
        totalSupply = totalSupply.plus(_value);
        balances[_to] = balances[_to].plus(_value);

        emit Transfer(0x0, _to, _value);
    }

    /**
    * @dev Disable the minting of new tokens. Cannot be reversed.
    *
    * @return Whether or not the process was successful.
    */
    function disableMinting() public onlyMinter canMint {
        mintingDisabled = true;
       
        emit MintingDisabled();
    }
    
        /**
    * @dev Enable the minting of new tokens. Can be reversed.
    *
    * @return Whether or not the process was successful.
    */
    function enableMinting() public onlyMinter canMint {
        mintingDisabled = false;
       
        emit MintingEnabled();
    }
}
/**
 * @title Mintable Token
 *
 * @dev Allows the creation of new tokens.
 */
function disableMinting() public onlyMinter canMint {
    mintingDisabled = true;
       
    emit MintingDisabled();
}

/**
 * @dev Disable the minting of new tokens. Cannot be reversed.
 *
 * @return Whether or not the process was successful.
 */