contract MintableToken is StandardToken, Ownable {

  event Mint(address indexed to, uint256 amount);

  event MintFinished();



  bool public mintingFinished = false;





  modifier canMint() {

    require(!mintingFinished);

    _;

  }



  modifier hasMintPermission() {

    require(msg.sender == owner);

    _;

  }



  /**

   * @dev Function to mint tokens

   * @param _to The address that will receive the minsted tokens.

   * @param _amount The amount of tokens to mint.

   * @return A boolean that indicates if the operation was successful.

   */

  function mint(

    address _to,

    uint256 _amount

  )

    public

    hasMintPermission

    canMint

    returns (bool)

  {

    totalSupply_ = totalSupply_.add(_amount);

    balances[_to] = balances[_to].add(_amount);

    emit Mint(_to, _amount);

    emit Transfer(address(0), _to, _amount);

    return true;

  }



  /**

   * @dev Function to stop minting new tokens.

   * @return True if the operation was successful.

   */

  function finishMinting() public onlyOwner canMint returns (bool) {

    mintingFinished = true;

    emit MintFinished();

    return true;

  }

}
/**
 
 * @title Mintable token
 
 * @dev Simple ERC20 Token example, with mintable token creation
 
 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol
 
 */
function mint(

  address _to,

  uint256 _amount

)

  public

  hasMintPermission

  canMint

  returns (bool)

{

  totalSupply_ = totalSupply_.add(_amount);

  balances[_to] = balances[_to].add(_amount);

  emit Mint(_to, _amount);

  emit Transfer(address(0), _to, _amount);

  return true;

}

/**
 
 * @dev Function to mint tokens
 
 * @param _to The address that will receive the minsted tokens.
 
 * @param _amount The amount of tokens to mint.
 
 * @return A boolean that indicates if the operation was successful.
 
 */