library F3DKeysCalcShort {
    using SafeMath for *;
    /**
     * @dev 计算给定X eth时收到的密钥数
     * @param _curEth 合同中的当前eth数量
     * @param _newEth eth被用掉了
     * @return 购买的机票数量
     */
    function keysRec(uint256 _curEth, uint256 _newEth)
        internal
        pure
        returns (uint256)
    {
        return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
    }

    /**
     * @dev 计算出售X键时收到的eth数量
     * @param _curKeys 当前存在的密钥数量
     * @param _sellKeys 您希望出售的钥匙数量
     * @return 收到的eth数量
     */
    function ethRec(uint256 _curKeys, uint256 _sellKeys)
        internal
        pure
        returns (uint256)
    {
        return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
    }

    /**
     * @dev 计算给定一定数量的eth会存在多少个密钥
     * @param _eth 合同中的道德
     * @return 将存在的密钥数
     */
    function keys(uint256 _eth)
        internal
        pure
        returns(uint256)
    {
        return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
    }

    /**
     * @dev 在给定一些密钥的情况下计算合同中的eth数量
     * @param _keys “契约”中的键数
     * @return 存在的道德
     */
    function eth(uint256 _keys)
        internal
        pure
        returns(uint256)
    {
        return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
    }
}
//==============================================================================
//  |  _      _ _ | _  .
//  |<(/_\/  (_(_||(_  .
//=======/======================================================================
function eth(uint256 _keys)
    internal
    pure
    returns(uint256)
{
    return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
}

/**
 * @dev 在给定一些密钥的情况下计算合同中的eth数量
 * @param _keys “契约”中的键数
 * @return 存在的道德
 */