contract DraggableShares is ERC20Recoverable, ERC20Draggable {

    using SafeMath for uint256;

    string public terms;

    /**
     * Designed to be used with the Crypto Franc as currency token. See also parent constructor.
     */
    constructor(string memory _terms, address wrappedToken, uint256 quorum)
        ERC20Draggable(wrappedToken, quorum, quorum) {
        IRecoverable(wrappedToken).setRecoverable(false);
        terms = _terms; // to update the terms, migrate to a new contract. That way it is ensured that the terms can only be updated when the quorom agrees.
    }

    /* function _mint(address account, uint256 amount) virtual override(ERC20Draggable, ERC20) internal {
        super._mint(account, amount);
    } */

    function _burn(address account, uint256 amount) virtual override(ERC20Draggable, ERC20) internal {
        super._burn(account, amount);
    }

    function _transfer(address from, address to, uint256 value) override(ERC20Draggable, ERC20) internal {
        super._transfer(from, to, value);
    }

    function transfer(address to, uint256 value) override(ERC20Recoverable, ERC20) public returns (bool) {
        return super.transfer(to, value);
    }

    function getClaimDeleter() public view override returns (address) {
        return IRecoverable(address(wrapped)).getClaimDeleter();
    }

    function getCollateralRate(address collateralType) public view override returns (uint256) {
        uint256 rate = super.getCollateralRate(collateralType);
        if (rate > 0) {
            return rate;
        } else if (collateralType == address(wrapped)) {
            return unwrapConversionFactor;
        } else {
            // If the wrapped contract allows for a specific collateral, we should too.
            // If the wrapped contract is not IRecoverable, we will fail here, but would fail anyway.
            return IRecoverable(address(wrapped)).getCollateralRate(collateralType).mul(unwrapConversionFactor);
        }
    }

}
/**
 * @title Draggable CompanyName AG Shares
 * @author Benjamin Rickenbacher, b.rickenbacher@intergga.ch
 * @author Luzius Meisser, luzius@meissereconomics.com
 *
 * This is an ERC-20 token representing shares of CompanyName AG that are bound to
 * a shareholder agreement that can be found at the URL defined in the constant 'terms'.
 * The shareholder agreement is partially enforced through this smart contract. The agreement
 * is designed to facilitate a complete acquisition of the firm even if a minority of shareholders
 * disagree with the acquisition, to protect the interest of the minority shareholders by requiring
 * the acquirer to offer the same conditions to everyone when acquiring the company, and to
 * facilitate an update of the shareholder agreement even if a minority of the shareholders that
 * are bound to this agreement disagree. The name "draggable" stems from the convention of calling
 * the right to drag a minority along with a sale of the company "drag-along" rights. The name is
 * chosen to ensure that token holders are aware that they are bound to such an agreement.
 *
 * The percentage of token holders that must agree with an update of the terms is defined by the
 * constant UPDATE_QUORUM. The precentage of yes-votes that is needed to successfully complete an
 * acquisition is defined in the constant ACQUISITION_QUORUM. Note that the update quorum is based
 * on the total number of tokens in circulation. In contrast, the acquisition quorum is based on the
 * number of votes cast during the voting period, not taking into account those who did not bother
 * to vote.
 */
function _burn(address account, uint256 amount) virtual override(ERC20Draggable, ERC20) internal {
    super._burn(account, amount);
}

/* function _mint(address account, uint256 amount) virtual override(ERC20Draggable, ERC20) internal {
 super._mint(account, amount);
 } */