contract IagonToken is Ownable, Claimable, PausableToken, CappedToken {
    string public constant name = "Iagon Presale";
    string public constant symbol = "IAGT";
    uint8 public constant decimals = 18;

    event Fused();

    bool public fused = false;

   /**
     * @dev Constructor 
     */
    function IagonToken() public CappedToken(1) PausableToken() {
        cap = 200000001 * (10 ** uint256(decimals)); // hardcoding cap
    }

    /** 
    * @dev function to allow the owner to withdraw any ETH balance associated with this contract address
    * onlyOwner can call this, so it's safe to initiate a transfer 
    */
    function withdraw() onlyOwner public {
        msg.sender.transfer(this.balance);
    }

 	/**
 	 * @dev Modifier to make a function callable only when the contract is not fused.
 	 */
    modifier whenNotFused() {
        require(!fused);
        _;
    }

    function pause() whenNotFused public {
        return super.pause();
    }

 	 /** 
 	 * @dev Function to set the value of the fuse internal variable.  Note that there is 
 	 * no "unfuse" functionality, by design.
 	 */
    function fuse() whenNotFused onlyOwner public {
        fused = true;

        Fused();
    }
}
/**
 * @title Iagon Token
 *
 */
function IagonToken() public CappedToken(1) PausableToken() {
    cap = 200000001 * (10 ** uint256(decimals)); // hardcoding cap
}

/**
 * @dev Constructor 
 */