contract PPNToken is CrowdsaleToken {
  uint public maximumSupply;

  function PPNToken(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable, uint _maximumSupply) public
    CrowdsaleToken(_name, _symbol, _initialSupply, _decimals, _mintable) {
    maximumSupply = _maximumSupply;
  }

  /**
   * Throws if tokens will exceed maximum supply
   */
  modifier notExceedMaximumSupply(uint amount) {
    require(totalSupply.plus(amount) <= maximumSupply);
    _;
  }

  /**
   * Create new tokens and allocate them to an address..
   *
   * Only callably by a crowdsale contract (mint agent).
   */
  function mint(address receiver, uint amount) notExceedMaximumSupply(amount) public {
    super.mint(receiver, amount);
  }
}
function mint(address receiver, uint amount) notExceedMaximumSupply(amount) public {
  super.mint(receiver, amount);
}

/**
 * Create new tokens and allocate them to an address..
 *
 * Only callably by a crowdsale contract (mint agent).
 */