text:
package org.orekit.estimation.measurements;

import java.util.List;

import org.hipparchus.stat.descriptive.StreamingStatistics;
import org.hipparchus.util.FastMath;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.orekit.estimation.Context;
import org.orekit.estimation.EstimationTestUtils;
import org.orekit.estimation.measurements.modifiers.RangeRateTroposphericDelayModifier;
import org.orekit.models.earth.troposphere.EstimatedTroposphericModel;
import org.orekit.models.earth.troposphere.GlobalMappingFunctionModel;
import org.orekit.models.earth.troposphere.SaastamoinenModel;
import org.orekit.orbits.OrbitType;
import org.orekit.orbits.PositionAngle;
import org.orekit.propagation.Propagator;
import org.orekit.propagation.SpacecraftState;
import org.orekit.propagation.conversion.NumericalPropagatorBuilder;
import org.orekit.time.AbsoluteDate;
import org.orekit.utils.Constants;
import org.orekit.utils.Differentiation;
import org.orekit.utils.ParameterDriver;
import org.orekit.utils.ParameterFunction;
import org.orekit.utils.StateFunction;

public class RangeRateTest {

    /** Compare observed values and estimated values.
     *  Both are calculated with a different algorithm.
     *  One-way measurements.
     */
    @Test
    public void testValuesOneWay() {

        Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");

        final NumericalPropagatorBuilder propagatorBuilder =
                        context.createBuilder(OrbitType.EQUINOCTIAL, PositionAngle.TRUE, false,
                                              1.0e-6, 60.0, 0.001);

        // Create perfect right-ascension/declination measurements
        final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
                                                                           propagatorBuilder);
        final double satClkDrift = 3.2e-10;
        final List<ObservedMeasurement<?>> measurements =
                        EstimationTestUtils.createMeasurements(propagator,
                                                               new RangeRateMeasurementCreator(context, false, satClkDrift),
                                                               1.0, 3.0, 300.0);

        propagator.clearStepHandlers();

        // Prepare statistics for values difference
        final StreamingStatistics diffStat = new StreamingStatistics();

        for (final ObservedMeasurement<?> measurement : measurements) {

            // Propagate to measurement date
            final AbsoluteDate datemeas  = measurement.getDate();
            SpacecraftState    state     = propagator.propagate(datemeas);

            // Estimate the AZEL value
            final EstimatedMeasurement<?> estimated = measurement.estimate(0, 0, new SpacecraftState[] { state });

            // Store the difference between estimated and observed values in the stats
            diffStat.addValue(FastMath.abs(estimated.getEstimatedValue()[0] - measurement.getObservedValue()[0]));
        }

        // Mean and std errors check
        Assertions.assertEquals(0.0, diffStat.getMean(), 6.5e-8);
        Assertions.assertEquals(0.0, diffStat.getStandardDeviation(), 5.5e-8);

        // Test measurement type
        Assertions.assertEquals(RangeRate.MEASUREMENT_TYPE, measurements.get(0).getMeasurementType());
    }

    /** Compare observed values and estimated values.
     *  Both are calculated with a different algorithm.
     *  Two-ways measurements.
     */
    @Test
    public void testValuesTwoWays() {

        Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");

        final NumericalPropagatorBuilder propagatorBuilder =
                        context.createBuilder(OrbitType.EQUINOCTIAL, PositionAngle.TRUE, false,
                                              1.0e-6, 60.0, 0.001);

        // Create perfect right-ascension/declination measurements
        final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
                                                                           propagatorBuilder);
        final double satClkDrift = 3.2e-10;
        final List<ObservedMeasurement<?>> measurements =
                        EstimationTestUtils.createMeasurements(propagator,
                                                               new RangeRateMeasurementCreator(context, true, satClkDrift),
                                                               1.0, 3.0, 300.0);

        propagator.clearStepHandlers();

        // Prepare statistics for values difference
        final StreamingStatistics diffStat = new StreamingStatistics();

        for (final ObservedMeasurement<?> measurement : measurements) {

            // Propagate to measurement date
            final AbsoluteDate datemeas  = measurement.getDate();
            SpacecraftState    state     = propagator.propagate(datemeas);

            // Estimate the AZEL value
            final EstimatedMeasurement<?> estimated = measurement.estimate(0, 0, new SpacecraftState[] { state });

            // Store the difference between estimated and observed values in the stats
            diffStat.addValue(FastMath.abs(estimated.getEstimatedValue()[0] - measurement.getObservedValue()[0]));
        }

        // Mean and std errors check
        Assertions.assertEquals(0.0, diffStat.getMean(), 6.5e-8);
        Assertions.assertEquals(0.0, diffStat.getStandardDeviation(), 5.5e-8);
    }

    /** Test the values of the state derivatives using a numerical
     * finite differences calculation as a reference.
     * One way measurements.
     */
    @Test
    public void testStateDerivativesOneWay() {

        Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");

        final NumericalPropagatorBuilder propagatorBuilder =
                        context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
                                              1.0e-6, 60.0, 0.001);

        // create perfect range rate measurements
        final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
                                                                           propagatorBuilder);
        final double satClkDrift = 3.2e-10;
        final List<ObservedMeasurement<?>> measurements =
                        EstimationTestUtils.createMeasurements(propagator,
                                                               new RangeRateMeasurementCreator(context, false, satClkDrift),
                                                               1.0, 3.0, 300.0);
        for (final ObservedMeasurement<?> m : measurements) {
            Assertions.assertFalse(((RangeRate) m).isTwoWay());
        }
        propagator.clearStepHandlers();

        double maxRelativeError = 0;
        for (final ObservedMeasurement<?> measurement : measurements) {

            final double          meanDelay = 1; // measurement.getObservedValue()[0] / Constants.SPEED_OF_LIGHT;
            final AbsoluteDate    date      = measurement.getDate().shiftedBy(-0.75 * meanDelay);
            final SpacecraftState state = propagator.propagate(date);

            final EstimatedMeasurement<?> estimated = measurement.estimate(0, 0, new SpacecraftState[] { state });
            Assertions.assertEquals(2, estimated.getParticipants().length);
            final double[][] jacobian = estimated.getStateDerivatives(0);

            final double[][] finiteDifferencesJacobian =
                    Differentiation.differentiate(new StateFunction() {
                public double[] value(final SpacecraftState state) {
                    return measurement.estimate(0, 0, new SpacecraftState[] { state }).getEstimatedValue();
                }
            }, 1, propagator.getAttitudeProvider(),
               OrbitType.CARTESIAN, PositionAngle.TRUE, 15.0, 3).value(state);

            Assertions.assertEquals(finiteDifferencesJacobian.length, jacobian.length);
            Assertions.assertEquals(finiteDifferencesJacobian[0].length, jacobian[0].length);

            for (int i = 0; i < jacobian.length; ++i) {
                for (int j = 0; j < jacobian[i].length; ++j) {
                    // check the values returned by getStateDerivatives() are correct
                    maxRelativeError = FastMath.max(maxRelativeError,
                                                    FastMath.abs((finiteDifferencesJacobian[i][j] - jacobian[i][j]) /
                                                                 finiteDifferencesJacobian[i][j]));
                }
            }

        }
        Assertions.assertEquals(0, maxRelativeError, 1.5e-8);

    }

    /** Test the values of the state derivatives using a numerical
     * finite differences calculation as a reference.
     * Two-ways measurements.
     */
    @Test
    public void testStateDerivativesTwoWays() {

        Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");

        final NumericalPropagatorBuilder propagatorBuilder =
                        context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
                                              1.0e-6, 60.0, 0.001);

        // create perfect range rate measurements
        final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
                                                                           propagatorBuilder);
        final double satClkDrift = 3.2e-10;
        final List<ObservedMeasurement<?>> measurements =
                        EstimationTestUtils.createMeasurements(propagator,
                                                               new RangeRateMeasurementCreator(context, true, satClkDrift),
                                                               1.0, 3.0, 300.0);
        for (final ObservedMeasurement<?> m : measurements) {
            Assertions.assertTrue(((RangeRate) m).isTwoWay());
        }
        propagator.clearStepHandlers();

        double maxRelativeError = 0;
        for (final ObservedMeasurement<?> measurement : measurements) {

            //
            //final AbsoluteDate date = measurement.getDate();
            final double          meanDelay = 1; // measurement.getObservedValue()[0] / Constants.SPEED_OF_LIGHT;
            final AbsoluteDate    date      = measurement.getDate().shiftedBy(-0.75 * meanDelay);
            final SpacecraftState state     = propagator.propagate(date);

            final EstimatedMeasurement<?> estimated = measurement.estimate(0, 0, new SpacecraftState[] { state });
            Assertions.assertEquals(3, estimated.getParticipants().length);
            final double[][] jacobian = estimated.getStateDerivatives(0);

            final double[][] finiteDifferencesJacobian =
                    Differentiation.differentiate(new StateFunction() {
                public double[] value(final SpacecraftState state) {
                    return measurement.estimate(0, 0, new SpacecraftState[] { state }).getEstimatedValue();
                }
            }, 1, propagator.getAttitudeProvider(),
               OrbitType.CARTESIAN, PositionAngle.TRUE, 15.0, 3).value(state);

            Assertions.assertEquals(finiteDifferencesJacobian.length, jacobian.length);
            Assertions.assertEquals(finiteDifferencesJacobian[0].length, jacobian[0].length);

            for (int i = 0; i < jacobian.length; ++i) {
                for (int j = 0; j < jacobian[i].length; ++j) {
                    // check the values returned by getStateDerivatives() are correct
                    maxRelativeError = FastMath.max(maxRelativeError,
                                                    FastMath.abs((finiteDifferencesJacobian[i][j] - jacobian[i][j]) /
                                                                 finiteDifferencesJacobian[i][j]));
                }
            }

        }
        Assertions.assertEquals(0, maxRelativeError, 2.1e-7);

    }

    /** Test the values of the parameters' derivatives using a numerical
     * finite differences calculation as a reference.
     * One-way measurements.
     */
    @Test
    public void testParameterDerivativesOneWay() {

        Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");

        final NumericalPropagatorBuilder propagatorBuilder =
                        context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
                                              1.0e-6, 60.0, 0.001);

        // create perfect range rate measurements
        final double groundClockDrift =  4.8e-9;
        for (final GroundStation station : context.stations) {
            station.getClockDriftDriver().setValue(groundClockDrift);
        }
        final double satClkDrift = 3.2e-10;
        final RangeRateMeasurementCreator creator = new RangeRateMeasurementCreator(context, false, satClkDrift);
        creator.getSatellite().getClockDriftDriver().setSelected(true);
        for (final GroundStation station : context.stations) {
            station.getClockOffsetDriver().setSelected(true);
            station.getClockDriftDriver().setSelected(true);
            station.getEastOffsetDriver().setSelected(true);
            station.getNorthOffsetDriver().setSelected(true);
            station.getZenithOffsetDriver().setSelected(true);
        }
        final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
                                                                           propagatorBuilder);

        final List<ObservedMeasurement<?>> measurements =
                        EstimationTestUtils.createMeasurements(propagator,
                                                               creator,
                                                               1.0, 3.0, 300.0);
        propagator.clearStepHandlers();

        double maxRelativeError = 0;
        for (final ObservedMeasurement<?> measurement : measurements) {

            // parameter corresponding to station position offset
            final GroundStation stationParameter = ((RangeRate) measurement).getStation();

            // We intentionally propagate to a date which is close to the
            // real spacecraft state but is *not* the accurate date, by
            // compensating only part of the downlink delay. This is done
            // in order to validate the partial derivatives with respect
            // to velocity. If we had chosen the proper state date, the
            // range would have depended only on the current position but
            // not on the current velocity.
            final double          meanDelay = measurement.getObservedValue()[0] / Constants.SPEED_OF_LIGHT;
            final AbsoluteDate    date      = measurement.getDate().shiftedBy(-0.75 * meanDelay);
            final SpacecraftState state     = propagator.propagate(date);
            final ParameterDriver[] drivers = new ParameterDriver[] {
                stationParameter.getClockDriftDriver(),
                stationParameter.getEastOffsetDriver(),
                stationParameter.getNorthOffsetDriver(),
                stationParameter.getZenithOffsetDriver(),
                measurement.getSatellites().get(0).getClockDriftDriver()
            };
            for (int i = 0; i < drivers.length; ++i) {
                final double[] gradient  = measurement.estimate(0, 0, new SpacecraftState[] { state }).getParameterDerivatives(drivers[i]);
                Assertions.assertEquals(1, measurement.getDimension());
                Assertions.assertEquals(1, gradient.length);

                final ParameterFunction dMkdP =
                                Differentiation.differentiate(new ParameterFunction() {
                                    /** {@inheritDoc} */
                                    @Override
                                    public double value(final ParameterDriver parameterDriver) {
                                        return measurement.estimate(0, 0, new SpacecraftState[] { state }).getEstimatedValue()[0];
                                    }
                                }, 3, 20.0 * drivers[i].getScale());
                final double ref = dMkdP.value(drivers[i]);
                maxRelativeError = FastMath.max(maxRelativeError, FastMath.abs((ref - gradient[0]) / ref));
            }

        }
        Assertions.assertEquals(0, maxRelativeError, 1.2e-6);

    }

    /** Test the values of the parameters' derivatives using a numerical
     * finite differences calculation as a reference.
     * Two-ways measurements.
     */
    @Test
    public void testParameterDerivativesTwoWays() {

        Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");

        final NumericalPropagatorBuilder propagatorBuilder =
                        context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
                                              1.0e-6, 60.0, 0.001);

        // create perfect range rate measurements
        final double groundClockDrift =  4.8e-9;
        for (final GroundStation station : context.stations) {
            station.getClockDriftDriver().setValue(groundClockDrift);
        }
        final double satClkDrift = 3.2e-10;
        final RangeRateMeasurementCreator creator = new RangeRateMeasurementCreator(context, false, satClkDrift);
        for (final GroundStation station : context.stations) {
            station.getClockOffsetDriver().setSelected(true);
            station.getEastOffsetDriver().setSelected(true);
            station.getNorthOffsetDriver().setSelected(true);
            station.getZenithOffsetDriver().setSelected(true);
        }

        final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
                                                                           propagatorBuilder);

        final List<ObservedMeasurement<?>> measurements =
                        EstimationTestUtils.createMeasurements(propagator,
                                                               creator,
                                                               1.0, 3.0, 300.0);
        propagator.clearStepHandlers();

        double maxRelativeError = 0;
        for (final ObservedMeasurement<?> measurement : measurements) {

            // parameter corresponding to station position offset
            final GroundStation stationParameter = ((RangeRate) measurement).getStation();

            // We intentionally propagate to a date which is close to the
            // real spacecraft state but is *not* the accurate date, by
            // compensating only part of the downlink delay. This is done
            // in order to validate the partial derivatives with respect
            // to velocity. If we had chosen the proper state date, the
            // range would have depended only on the current position but
            // not on the current velocity.
            final double          meanDelay = measurement.getObservedValue()[0] / Constants.SPEED_OF_LIGHT;
            final AbsoluteDate    date      = measurement.getDate().shiftedBy(-0.75 * meanDelay);
            final SpacecraftState state     = propagator.propagate(date);
            final ParameterDriver[] drivers = new ParameterDriver[] {
                stationParameter.getEastOffsetDriver(),
                stationParameter.getNorthOffsetDriver(),
                stationParameter.getZenithOffsetDriver(),
            };
            for (int i = 0; i < drivers.length; ++i) {
                final double[] gradient  = measurement.estimate(0, 0, new SpacecraftState[] { state }).getParameterDerivatives(drivers[i]);
                Assertions.assertEquals(1, measurement.getDimension());
                Assertions.assertEquals(1, gradient.length);

                final ParameterFunction dMkdP =
                                Differentiation.differentiate(new ParameterFunction() {
                                    /** {@inheritDoc} */
                                    @Override
                                    public double value(final ParameterDriver parameterDriver) {
                                        return measurement.estimate(0, 0, new SpacecraftState[] { state }).getEstimatedValue()[0];
                                    }
                                }, 3, 20.0 * drivers[i].getScale());
                final double ref = dMkdP.value(drivers[i]);
                maxRelativeError = FastMath.max(maxRelativeError, FastMath.abs((ref - gradient[0]) / ref));
            }

        }
        Assertions.assertEquals(0, maxRelativeError, 1.2e-6);

    }

    /** Test the values of the state derivatives using a numerical
     * finite differences calculation as a reference.
     * One-way measurements with modifiers (tropospheric corrections).
     */
    @Test
    public void testStateDerivativesWithModifier() {

        Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");

        final NumericalPropagatorBuilder propagatorBuilder =
                        context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
                                              1.0e-6, 60.0, 0.001);

        // create perfect range rate measurements
        final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
                                                                           propagatorBuilder);
        final double groundClockDrift =  4.8e-9;
        for (final GroundStation station : context.stations) {
            station.getClockDriftDriver().setValue(groundClockDrift);
        }
        final double satClkDrift = 3.2e-10;
        final List<ObservedMeasurement<?>> measurements =
                        EstimationTestUtils.createMeasurements(propagator,
                                                               new RangeRateMeasurementCreator(context, false, satClkDrift),
                                                               1.0, 3.0, 300.0);
        propagator.clearStepHandlers();

        double maxRelativeError = 0;
        for (final ObservedMeasurement<?> measurement : measurements) {

            final RangeRateTroposphericDelayModifier modifier = new RangeRateTroposphericDelayModifier(SaastamoinenModel.getStandardModel(), true);
            ((RangeRate) measurement).addModifier(modifier);

            //
            //final AbsoluteDate date = measurement.getDate();
            final double          meanDelay = 1; // measurement.getObservedValue()[0] / Constants.SPEED_OF_LIGHT;
            final AbsoluteDate    date      = measurement.getDate().shiftedBy(-0.75 * meanDelay);
            final SpacecraftState state = propagator.propagate(date);

            final double[][] jacobian = measurement.estimate(0, 0, new SpacecraftState[] { state }).getStateDerivatives(0);

            final double[][] finiteDifferencesJacobian =
                    Differentiation.differentiate(new StateFunction() {
                public double[] value(final SpacecraftState state) {
                    return measurement.estimate(0, 0, new SpacecraftState[] { state }).getEstimatedValue();
                }
            }, 1, propagator.getAttitudeProvider(),
               OrbitType.CARTESIAN, PositionAngle.TRUE, 15.0, 3).value(state);

            Assertions.assertEquals(finiteDifferencesJacobian.length, jacobian.length);
            Assertions.assertEquals(finiteDifferencesJacobian[0].length, jacobian[0].length);

            for (int i = 0; i < jacobian.length; ++i) {
                for (int j = 0; j < jacobian[i].length; ++j) {
                    // check the values returned by getStateDerivatives() are correct
                    maxRelativeError = FastMath.max(maxRelativeError,
                                                    FastMath.abs((finiteDifferencesJacobian[i][j] - jacobian[i][j]) /
                                                                 finiteDifferencesJacobian[i][j]));
                }
            }

        }
        Assertions.assertEquals(0, maxRelativeError, 1.4e-7);

    }

    /** Test the values of the state derivatives using a numerical
     * finite differences calculation as a reference.
     * One-way measurements with estimated modifiers (tropospheric corrections).
     */
    @Test
    public void testStateDerivativesWithEstimatedModifier() {

        Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");

        final NumericalPropagatorBuilder propagatorBuilder =
                        context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
                                              1.0e-6, 60.0, 0.001);

        // create perfect range rate measurements
        final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
                                                                           propagatorBuilder);

        final double groundClockDrift =  4.8e-9;
        for (final GroundStation station : context.stations) {
            station.getClockDriftDriver().setValue(groundClockDrift);
        }
        final double satClkDrift = 3.2e-10;
        final List<ObservedMeasurement<?>> measurements =
                        EstimationTestUtils.createMeasurements(propagator,
                                                               new RangeRateMeasurementCreator(context, false, satClkDrift),
                                                               1.0, 3.0, 300.0);
        propagator.clearStepHandlers();

        double maxRelativeError = 0;
        for (final ObservedMeasurement<?> measurement : measurements) {

            // Add modifiers if test implies it
            final GlobalMappingFunctionModel mappingFunction = new GlobalMappingFunctionModel();
            final EstimatedTroposphericModel tropoModel     = new EstimatedTroposphericModel(mappingFunction, 5.0);

            final RangeRateTroposphericDelayModifier modifier = new RangeRateTroposphericDelayModifier(tropoModel, true);
            ((RangeRate) measurement).addModifier(modifier);

            //
            //final AbsoluteDate date = measurement.getDate();
            final double          meanDelay = 1; // measurement.getObservedValue()[0] / Constants.SPEED_OF_LIGHT;
            final AbsoluteDate    date      = measurement.getDate().shiftedBy(-0.75 * meanDelay);
            final SpacecraftState state = propagator.propagate(date);

            final double[][] jacobian = measurement.estimate(0, 0, new SpacecraftState[] { state }).getStateDerivatives(0);

            final double[][] finiteDifferencesJacobian =
                    Differentiation.differentiate(new StateFunction() {
                public double[] value(final SpacecraftState state) {
                    return measurement.estimate(0, 0, new SpacecraftState[] { state }).getEstimatedValue();
                }
            }, 1, propagator.getAttitudeProvider(),
               OrbitType.CARTESIAN, PositionAngle.TRUE, 15.0, 3).value(state);

            Assertions.assertEquals(finiteDifferencesJacobian.length, jacobian.length);
            Assertions.assertEquals(finiteDifferencesJacobian[0].length, jacobian[0].length);

            for (int i = 0; i < jacobian.length; ++i) {
                for (int j = 0; j < jacobian[i].length; ++j) {
                    // check the values returned by getStateDerivatives() are correct
                    maxRelativeError = FastMath.max(maxRelativeError,
                                                    FastMath.abs((finiteDifferencesJacobian[i][j] - jacobian[i][j]) /
                                                                 finiteDifferencesJacobian[i][j]));
                }
            }

        }
        Assertions.assertEquals(0, maxRelativeError, 3.1e-7);

    }

    /** Test the values of the parameters' derivatives using a numerical
     * finite differences calculation as a reference.
     * One-way measurements with modifiers (tropospheric corrections).
     */
    @Test
    public void testParameterDerivativesWithModifier() {

        Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");

        final NumericalPropagatorBuilder propagatorBuilder =
                        context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
                                              1.0e-6, 60.0, 0.001);

        // create perfect range rate measurements
        final double groundClockDrift =  4.8e-9;
        for (final GroundStation station : context.stations) {
            station.getClockDriftDriver().setValue(groundClockDrift);
        }
        final double satClkDrift = 3.2e-10;
        final RangeRateMeasurementCreator creator = new RangeRateMeasurementCreator(context, false, satClkDrift);
        creator.getSatellite().getClockDriftDriver().setSelected(true);
        for (final GroundStation station : context.stations) {
            station.getClockOffsetDriver().setSelected(true);
            station.getClockDriftDriver().setSelected(true);
            station.getEastOffsetDriver().setSelected(true);
            station.getNorthOffsetDriver().setSelected(true);
            station.getZenithOffsetDriver().setSelected(true);
        }
        final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
                                                                           propagatorBuilder);

        final List<ObservedMeasurement<?>> measurements =
                        EstimationTestUtils.createMeasurements(propagator,
                                                               creator,
                                                               1.0, 3.0, 300.0);
        propagator.clearStepHandlers();

        double maxRelativeError = 0;
        for (final ObservedMeasurement<?> measurement : measurements) {

            final RangeRateTroposphericDelayModifier modifier = new RangeRateTroposphericDelayModifier(SaastamoinenModel.getStandardModel(), true);
            ((RangeRate) measurement).addModifier(modifier);

            // parameter corresponding to station position offset
            final GroundStation stationParameter = ((RangeRate) measurement).getStation();

            // We intentionally propagate to a date which is close to the
            // real spacecraft state but is *not* the accurate date, by
            // compensating only part of the downlink delay. This is done
            // in order to validate the partial derivatives with respect
            // to velocity. If we had chosen the proper state date, the
            // range would have depended only on the current position but
            // not on the current velocity.
            final double          meanDelay = measurement.getObservedValue()[0] / Constants.SPEED_OF_LIGHT;
            final AbsoluteDate    date      = measurement.getDate().shiftedBy(-0.75 * meanDelay);
            final SpacecraftState state     = propagator.propagate(date);
            final ParameterDriver[] drivers = new ParameterDriver[] {
                stationParameter.getClockDriftDriver(),
                stationParameter.getEastOffsetDriver(),
                stationParameter.getNorthOffsetDriver(),
                stationParameter.getZenithOffsetDriver(),
                measurement.getSatellites().get(0).getClockDriftDriver()
            };
            for (int i = 0; i < drivers.length; ++i) {
                final double[] gradient  = measurement.estimate(0, 0, new SpacecraftState[] { state }).getParameterDerivatives(drivers[i]);
                Assertions.assertEquals(1, measurement.getDimension());
                Assertions.assertEquals(1, gradient.length);

                final ParameterFunction dMkdP =
                                Differentiation.differentiate(new ParameterFunction() {
                                    /** {@inheritDoc} */
                                    @Override
                                    public double value(final ParameterDriver parameterDriver) {
                                        return measurement.estimate(0, 0, new SpacecraftState[] { state }).getEstimatedValue()[0];
                                    }
                                }, 3, 20.0 * drivers[i].getScale());
                final double ref = dMkdP.value(drivers[i]);
                maxRelativeError = FastMath.max(maxRelativeError, FastMath.abs((ref - gradient[0]) / ref));
            }

        }
        Assertions.assertEquals(0, maxRelativeError, 1.2e-6);

    }

    /** Test the values of the parameters' derivatives using a numerical
     * finite differences calculation as a reference.
     * One-way measurements with estimated modifiers (tropospheric corrections).
     */
    @Test
    public void testParameterDerivativesWithEstimatedModifier() {

        Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");

        final NumericalPropagatorBuilder propagatorBuilder =
                        context.createBuilder(OrbitType.KEPLERIAN, PositionAngle.TRUE, true,
                                              1.0e-6, 60.0, 0.001);

        final Propagator propagator = EstimationTestUtils.createPropagator(context.initialOrbit,
                                                                           propagatorBuilder);

        final double groundClockDrift =  4.8e-9;
        for (final GroundStation station : context.stations) {
            station.getClockDriftDriver().setValue(groundClockDrift);
        }
        final double satClkDrift = 3.2e-10;
        final List<ObservedMeasurement<?>> measurements =
                        EstimationTestUtils.createMeasurements(propagator,
                                                               new RangeRateMeasurementCreator(context, false, satClkDrift),
                                                               1.0, 3.0, 300.0);
        propagator.clearStepHandlers();

        double maxRelativeError = 0;
        for (final ObservedMeasurement<?> measurement : measurements) {

            // Add modifiers if test implies it
            final GlobalMappingFunctionModel mappingFunction = new GlobalMappingFunctionModel();
            final EstimatedTroposphericModel tropoModel     = new EstimatedTroposphericModel(mappingFunction, 10.0);

            final List<ParameterDriver> parameters = tropoModel.getParametersDrivers();
            for (ParameterDriver driver : parameters) {
                driver.setSelected(true);
            }

            final RangeRateTroposphericDelayModifier modifier = new RangeRateTroposphericDelayModifier(tropoModel, true);
            ((RangeRate) measurement).addModifier(modifier);

            // We intentionally propagate to a date which is close to the
            // real spacecraft state but is *not* the accurate date, by
            // compensating only part of the downlink delay. This is done
            // in order to validate the partial derivatives with respect
            // to velocity. If we had chosen the proper state date, the
            // range would have depended only on the current position but
            // not on the current velocity.
            final double          meanDelay = measurement.getObservedValue()[0] / Constants.SPEED_OF_LIGHT;
            final AbsoluteDate    date      = measurement.getDate().shiftedBy(-0.75 * meanDelay);
            final SpacecraftState state     = propagator.propagate(date);

            final ParameterDriver[] drivers = new ParameterDriver[] {
                parameters.get(0)
            };
            for (int i = 0; i < 1; ++i) {
                final double[] gradient  = measurement.estimate(0, 0, new SpacecraftState[] { state }).getParameterDerivatives(drivers[i]);
                Assertions.assertEquals(1, measurement.getDimension());
                Assertions.assertEquals(1, gradient.length);

                final ParameterFunction dMkdP =
                                Differentiation.differentiate(new ParameterFunction() {
                                    /** {@inheritDoc} */
                                    @Override
                                    public double value(final ParameterDriver parameterDriver) {
                                        return measurement.estimate(0, 0, new SpacecraftState[] { state }).getEstimatedValue()[0];
                                    }
                                }, 3, 0.1 * drivers[i].getScale());
                final double ref = dMkdP.value(drivers[i]);
                maxRelativeError = FastMath.max(maxRelativeError, FastMath.abs((ref - gradient[0]) / ref));
            }

        }
        Assertions.assertEquals(0, maxRelativeError, 2.2e-7);

    }

}

redpajama_set_name: RedPajamaGithub


Then just click on the "Save as favourite" button on the right hand side of the screen.
There's loads of nice comments about Freegle there as well!
Even if you don't have an eBay account, it takes a minute or so to open one, and it costs nothing, and does not mean that you have to do anything more on eBay once you have nominated your favourite charity!
There is a leader board where you can see how Freegle is doing.
Please vote because even if we don't win, every vote will help raise Freegle's public profile.
Five people who nominate a favourite charity will also be picked at random to win £250 each.


Ah Richmond, what a sight for sore eyes. This beautiful green borough is the only borough to be on both sides of the Thames. Here' at Original Dating we feel that Richmond deserves beautiful speed dating events as well as parks and conservation areas. It's the only thing Richmond doesn't have. But fret not, Original Dating is bringing top quality speed dating nights to you this year.
Original Dating is the leading speed dating and singles events organiser in London and we have been since 2003. It's a wonder why we haven't came to Richmond sooner with our super popular and well organised events. But we're making up for lost time and we plan on bringing you the best.
Speed Dating is the easiest way to meet new people and it's all offline. Meet 20 singles in one night while having a few drinks and a good old flirt over 4 minute dates. It's just the right length of time to decide if it's someone you'd like to see again and not too long for a little chat.
What do I do if I like someone?
Well let us worry about that. All you need to do is log in the next day and enter your matches on our bespoke matching system before finding out who you matched with. Then you can message your matches and be going for proper dates in no time. It really is that easy and a lot of fun!
If you wanna be the first to hear about Original Dating's events in Richmond then simply sign up and get 50% off your first booking!


Here are some pictures of the outdoor dinner party decorating ideas. Homes Sociales is the best place when you want about galleries to give you imagination, may you agree these are beautiful galleries. We like them, maybe you were too. We got information from each image that we get, including set size and resolution.
We added information from each image that we get, including set of size and resolution. You must click the picture to see the large or full size photo. If you think this collection is useful to you, or maybe your friends please click like/share button, so more people can get this information. Right here, you can see one of our outdoor dinner party decorating ideas gallery, there are many picture that you can browse, we think you must click them too.
Instead of putting quite a few settee in your dwelling room, ssdcp place a single and relatively greater couch. Either a single and relatively larger or a set of small mirrors placed strategically against the principle wall will add an esthetic and trendy yet generous look. Keep the pointless stuff in storage area and for the decorative items, make a set of them and display on common or seasonal intervals. Make use of various shades of the identical colour for the walls, furnishings and other equipment. So, go for any of the furnishings arrangement that fits you greatest on your small dwelling house. Such type of shelving models works finest for arranging books in your research, displaying crockery in kitchen or dining area and even in your dressing room for discrete objects.
Decorating a house and choice of proper residence furnishings and furnishings is a giant challenge for so many people and it turns into even more difficult for the small homes. Here are a few tips about how you can keep away from among the traps and pitfalls that many fall foul of, even when they do take the recommendation of the glossy magazines and Tv exhibits. But now you do not need to get panic concerning your small residing locations because listed below are a number of trendy and quite a handy residence furnishings and furnishings tips that will help you renovate your property. Too many people have an excessive amount of furniture so when moving round you have got to verify you do not knock something over. These supplies could be counted on their sturdiness however contemporary designers have transformed them to create fashionable and chic furnishings. Glass and metallic are considered versatile supplies that can combine functionality and type.
Utilize customary useful materials like metal and glass to turn into inventive and stylish designs in your house. Like a desk or a coffee table with storage space or a flip top ottoman. When designing a room you possibly can mix furnishings, accent pieces and equipment as a reflection of your personal taste, but it is best to keep away from using them just because you suppose you like them. Paint your partitions lilac in the event you love lilac, or at the least one wall - the remainder might be white or beige, but not all of them! Only a shiny purple love sofa on one facet can surely make your room all fiery and hot. One or two excellent objects inside your home must catch the curiosity and a focus of your guests' eyes.
Landscape throughout the home windows will grab the eye and sunlight during day timings will keep the room illumined. It's wonderful what a foot of shiny drapes both aspect of a 6-foot expanse of brown can do for a room! You too can add darkish-colored rugs or accessories to accentuate and liven up your room. These colours could seem pale however they'll act as good background to your vivid and bold paintings. Accent walls may also be a part of that overall modern look to highlight a sure space within the house. Getting that fashionable or contemporary look in your own home isn't so simple as what it goals to challenge. Bold and vibrant colours are usually found extra appealing however to make your property look bigger and spacious, it is better to resolve on some mild colours. There are several elements concerned in making your home look much smaller than it really is.
Usually, the creamy, beige, lavender and mild gray colours are the optimum alternative. It isn't just the technique to unfold the sunshine but it could draw the eyes round giving illusion of a bigger area around. Consider the light coming into your room, and how that affects its total look. Decreasing the clutter, it is going to give a roomy appearance. The higher you repair your curtain rails or rods, the higher your ceiling will seem. Arranging your possessions from flooring to ceiling is an in use and up-to-the-minute house-saving thought. Use of multi-operate equipment/furniture brings in more room. Space is a crucial factor in contemporary interiors. Monochromatic theme creates a visible coherence for an open house. It's as a result of regardless of how lavish your private home space is, in the end, chances are you'll discover the partitions simply closing on you, by some means.
If you liked this information and you would such as to receive additional details regarding country style master bedroom kindly see our web page.
Below are 23 best pictures collection of outdoor dinner party decorating ideas photo in high resolution. Click the image for larger image size and more details.


text:
Remove This Item Manufacturer: Batsford Chess
Remove This Item Manufacturer: Simon and Schuster
Remove This Item Manufacturer: Russian Chess House
Remove This Item Manufacturer: Chess Enterprises
Unbeatable Deal (6)
Ishi Press (38)
Caissa Editions (27)
Chess Enterprises (4)
FIDECHESS Publications (4)
RHM Press (3)
Elk and Ruby Publishing House (3)
Thinkers Publishing (3)
Tui Enterprises (2)
British Chess Magazine (BCM) (2)
Simon and Schuster (2)
International Chess Enterprises (1)
Chess Player (1)
New York Open (1)
Chess Sutton Coldfield (1)
Dover Chess (1)
Chess Australia (1)
Prague Chess Agency (1)
Exzelsior Verlag (1)
Henry Holt (1)
Australian Chess Enterprises (1)
McFarland Publishing (1)
Pitman Publishing (1)
Chess Information (1)
Summit Publishing (1)
Moravian Chess (1)
H3 Publishing (1)
Russian Chess House (1)
Chess Digest (1)
Cadogan Chess (1)
S1 Editrice (1)
Joachim Beyer Verlag (1)
NL - Notationless (2)
Brin-Jonathan Butler (2)
Dominic Lawson (1)
Emil Schallopp (1)
James Marfia (1)
Jim Marfia (2)
Larry Christiansen (1)
The Grandmaster - Magnus Carlsen and the Match That Made Chess Great Again - PAPERBACK
Catalog Code: B0022SS
Author Brin-Jonathan Butler was granted unique access to the two-and-half-week tournament and watched every move. In The Grandmaster, he aims to do for Magnus Carlsen what Norman Mailer did for Muhammed Ali in The Fight, John McPhee did for Arthur Ashe in Levels of the Game, and David Foster Wallace did for Roger Federer in his famous New York Times Magazine profile. Butler captures one of the world's greatest sportsmen at the height of their powers, and attempts to decipher the secret to that greatness.
The Grandmaster - Magnus Carlsen and the Match That Made Chess Great Again - HARDCOVER
The first week of November 2016, hundreds descended on the city's South Street Seaport to watch the World Chess Championship between Norway's Magnus Carlsen and Russia's Sergey Karjakin—what by the time it was over would be front-page news and thought by many the greatest finish in chess history. Author Brin-Jonathan Butler was granted unique access to the two-and-half-week tournament and watched every move. In this book, he captures one of the world's greatest sportsmen at the height of their powers, and attempts to decipher the secret to that greatness.
Hastings 1895 Chess Tournament
Catalog Code: B0029RCH
This book includes Schallopp's commentary. Of course, many of E.Schallopp's evaluations, especially as pertains to the opening, have been disproved by modern theory. Nevertheless, the Russian Chess House left most of his commentary untouched, viewing it as a tribute to the epoch and believing it has great value in terms of chess history.
CLEARANCE - Nigel Short - World Chess Challenger
Catalog Code: CB0076RB
This book charts Nigel Short's astonishing ascent to the chess peaks, through an exciting selection of the most important games in his career. Each game is brought vividly to life by absorbing annotations that provide a valuable insight into the character and playing style of one of the greatest players in the world today. It includes brilliant wins against Kasparov, Karpov, Timman, and other greats of contemporary chess.
Unbeatable Deal
CLEARANCE - 1983 U.S. Open
A brilliant gathering of chess stars, including GM Viktor Korchnoi, who became available when the Soviet Union forfeited the match by Kasparov, scheduled to be played during the Open. A choice selection of 159 games provides the flavor of the intense competition, with the colorful story, round-by-round, complimented with photographs and the complete final results table.
CLEARANCE - The U.S. Championship, 1983
Fourteen of the highest rated players in the United States gathered in July 1983 to compose in a Round Robin tournament to determine the United States Chess Champion. This is a round-by-round account of the event, with the scores of all of the games an annotations to the decisive games by the 1983 Co-Champion.
CLEARANCE - The U.S. Open - St. Paul, 1982
A colorful account of all the activities, with more than one hundred selected games to illustrate the tide of events leading to the championship. IM John L. Watson has contributed deep notes to fifteen critical games. Photographs help capture the scene of the reader. This year's Open returned to Minnesota, birth place of the U.S. Open in 1900. A complete list of participants, winners, openings and players index complete this record. Algebraic Notation. 83 pages.
CLEARANCE - English Chess Explosion - From Miles to Short
In February 1976 England obtained her long-awaited first Grandmaster Tony Miles. Since then the combination of careful training, weekend tournaments and sponsorship has brought England to the brink of challenging the Soviet Union for the chess supremacy of the world. The record of success over the last five years has been both consistent and remarkable.
CLEARANCE - The Annotated Open - 1981 U.S. Open Palo Alto
This book entails information on the 1981 U.S. Open Championship in Palo Alto, CA with annotated games.

redpajama_set_name: RedPajamaCommonCrawl


Penn football sophomore defensive lineman David Ryslik played both offense and defense last season after transferring from UConn following his freshman season in 2015.
There are many benefits that a prominent college football program can offer to recruits that Penn simply can't. Crowd numbers pushing six digits week in and week out. Facing the top competition in the nation every time one steps on the field. The chance to be a household name before even being of legal drinking age.
But Penn football has an edge that few college football teams can match. One doesn't commit to Penn for just football — he does it for the betterment of the rest of his life. And that's a trend that more and more high-level recruits seem to be understanding.
Entering the 2018 season, the Quakers have four players who were formerly on FBS rosters: quarterback Nick Robinson (Georgia), wide receiver Chaz Augustini (Tulane), and defensive linemen Cortez Alston (Georgia Tech) and David Ryslik (UConn). And though they all took different paths to Penn, they share one universal similarity. Even if it was tough to say goodbye to Football Bowl Subdivision (FBS) football, and even if they had to either redshirt or take a year off altogether, they feel their lives are better off for it.
While Penn football's accomplishments in Ray Priore's three-year tenure, including two conference titles and a 16-5 Ivy League record, have been noteworthy, the Quakers' coaching staff is well aware of ways it can't compete with FBS programs while on the recruiting trail.
But when the Red and Blue's on-the-field production is paired with top-10 nationwide academics, an elite alumni networking system, and the highest number of billionaire graduates of any university in the world, it's a combination that can't be beaten. And the roster's impressive array of FBS transfers proves that more student-athletes are becoming aware of it.
Ryslik's reference about continuing to play sports doesn't just refer to doing so in one's college days. At a quickly increasing rate, the Ivy League is making an impact at the NFL level, with the eight schools combining to produce a conference-record 28 alumni in NFL training camps as of August 2018.
Penn ranked second out of the Ivies with four products on the list, all of whom graduated in the past six years. The growing amount of hard evidence that Penn football alumni can make it to the next level only adds further incentive for highly talented athletes to head the Quakers' way.
Even if Penn's crop of transfers all believe they made the right decisions, it doesn't mean anything came easy for them. Besides the quality of competition — "there are some cats out here who can really play," Ryslik succinctly said — a far tougher academic workload, a new playbook to learn, and bonding with a new group of teammates all form even greater challenges.
But in Priore's program, one important rule makes that transition easier. It doesn't matter what one did before showing up; if one shows up ready to work, he'll be embraced as part of the Penn football family.
When all is said and done, it's unclear if any of these four players will go pro, or which ones will even see starters' minutes this season.
But regardless of what happens once opening kickoff comes, the quartet has already won in one way — each has made a decision that he hopes will pay off long after his time strapping on the pads is over.
"It takes a different kind of guy to turn down a full four-year scholarship to step out of his comfort zone and challenge himself and try to reach new heights," Ryslik said.


text:
Now-Fixed WiFi Vulnerability Left Apple Devices Open to Attack
Wednesday February 26, 2020 12:23 pm PST by Juli Clover
A vulnerability in WiFi chips made by Cypress Semiconductor and Broadcom left billions of devices susceptible to an attack that allowed nearby attackers to decrypt sensitive data sent over the air.
The security flaw was detailed at the RSA security conference today (via Ars Technica), and for Apple users, the issue was addressed in the iOS 13.2 and macOS 10.15.1 updates that were released back in late October.
Dubbed Kr00k, the WiFi chip flaw caused vulnerable devices to use an all-zero encryption key to encrypt part of a user's communications. When applied successfully, the attack let hackers decrypt some wireless network packets sent by a vulnerable device. As described by Ars Technica:
Kr00k exploits a weakness that occurs when wireless devices disassociate from a wireless access point. If either the end-user device or the access point is vulnerable, it will put any unsent data frames into a transmit buffer and then send them over the air. Rather than encrypt this data with the session key negotiated earlier and used during the normal connection, vulnerable devices use a key consisting of all zeros, a move that makes decryption trivial.
Chips from Broadcom and Cypress are used in many modern WiFi devices like smartphones, laptops, Internet of Things products, WiFi access points, and routers.
Our tests confirmed that prior to patching, some client devices by Amazon (Echo, Kindle), Apple (iPhone, iPad, MacBook), Google (Nexus), Samsung (Galaxy), Raspberry (Pi 3), Xiaomi (RedMi), as well as some access points by Asus and Huawei, were vulnerable to KrØØk. This totaled to over a billion Wi-Fi-capable devices and access points, at a conservative estimate. Further, many other vendors whose products we did not test also use the affected chipsets in their devices.
According to ESET Research, which published details on the vulnerability, it was disclosed to Broadcom and Cypress along with potentially affected parties. At this time, patches for devices from most major manufacturers have been released.
ESET Research recommends making sure all of the latest updates have been applied to WiFi capable devices to patch the vulnerability.
Cosmosent
Anybody know if it's fixed in Mojave 10.14.6 ?
but we were assured that iOS devices were secure...
cmaier
They are as secure as anything else. But Apple designs some of their chips, they don't make them. Contractors do. So the vulnerabilities can still be introduced into the supply chain through the same vector; chip providers... just like the vulnerabilities can be introduced by Apple themselves... or the chip makers suppliers... or...
Most of this stuff is scarier in theory than in practice.
It would be very unlikely for a vulnerability that does not exist in the design to exist in the manufactured silicon. When we design chips, and have them made, we test them extremely thoroughly to make sure they behave identically to the RTL and simulated netlist.
And since the manufacturer does not have a simulate-able netlist, it would be very difficult to introduce intentional flaws while still maintaining full functionality so as to fool this testing.
it's not there, no problem with Mojave and WiFi..
why the angry faces? Apple hasn't confirmed it, so there's no problem..
allpar
this is why you keep your devices updated because of security risks - most people forget that
Yeah, well, if they make new versions compatible with old software, I can do that, but I'm not spending ten grand to move to Catalina.
iapplelove
No we were assured that "what happens on the iPhone stays in the iPhone" and "it just works".
I never understood the " what happens on my iPhone stays on my iPhone" campaign.
Doesnt make much sense to me when I rely on iCloud so much.


CSK held their 2nd Annual Night of Inquiry, on Wednesday, March 27. Families were able to enjoy a snack and have fun conversations, they can visited seven different experiences that focused on inquiry. Those who attended had a chance to win some awesome prizes!


text:
Tag: #BelarusProtests
The 2020 Belarusian protests, nicknamed the Slipper Revolution[48][49] and the Anti-Cockroach Revolution,[50] are a series of political demonstrations against the Belarusian government and President Alexander Lukashenko.[50][51] The demonstrations, part of the Belarusian democracy movement, began in the lead-up to and during the 2020 presidential election, in which Lukashenko sought a sixth term in office
Corona Chaos on Roads Tomorrow as Parents Drive Kids to School...Aside From Banning Foreign Visitors, No Lockdown Expected Before Oct. 25 Elections...This Fall: Shakeup of Economic Ministries?..China and Ukraine Cuddle; Pompeo Pouts...
by James Brooke
UBN Morning News is reported and written by James Brooke, a former New York Times foreign correspondent and Bloomberg Moscow Bureau Chief
Large traffic jams are expected in Kyiv and Ukraine's big cities tomorrow as schools reopen for Ukraine's 3.8 million primary and secondary school children. In the first six months of the coronavirus pandemic, 7,743 Ukrainian children were infected. Mass transit ridership is down and more parents than normal are expected to drive their children to school. Kabanchik, an online platform for ordering services, reports that its requests for driving teachers almost doubled this in June and July, to 786. Olga Soroka, head of marketing told Interfax-Ukraine, earlier this month: "They are learning to drive in advance."
On Saturday, Ukraine registered a record 2,481 new Corona infections, a number that dipped to 2,096 on Sunday. Since March 17, more than 2,500 Ukrainians have died corona complications. Kyiv, the nation's capital, continues to report the largest number of infections. On Saturday, Mayor Klitschko reported that infections in Kyiv over the previous 24 hours, totaled 265, including 19 children.
Although infection rates are double the level of April, when the country was under tight lockdown, life in most of Ukraine is largely normal. Last night, Kyiv's first opera concert in six months, drew about 2,500 people to Sofia Square. About 1,500 sat on chairs spaced for distancing. The rest listened standing, some wearing masks, some not.
The Government will not consider imposing a second hard lockdown to combat coronavirus, Prime Minister Denys Shmygal told the European Business Association in a video conference on Friday. Instead, health officials will seek to localize outbreaks and stamp them out with local quarantines.
Adamant Capital writes: "Although Ukraine is currently displaying the highest amount of new cases on record, it seems unlikely that restrictions similar to those that have been introduced at the start of the pandemic are going to be reinstalled any time soon. Reasons for these are a few as lethality has significantly declined globally. Spain in so far reporting deaths per million at just 0.7, a far cry from 18.5 back at the beginning of April. The 2Q20 real GDP figure (-11.4% YoY) has demonstrated quite clearly the cost of an even relatively light lockdown and suggests that repeating the same scenario may be politically unaffordable unless the health crisis becomes dire."
Foreign business travelers flying to Ukraine should carry a letter clearly attesting to the business purposes of their visits, listing local contacts. Until the one-month ban is lifted September 28, entry is up to the discretion of border control officers at Ukraine's airports and land entry points. Without warning, Ukraine's government advanced the ban by one day to Friday morning, causing chaos at Kyiv Boryspil.
Separately, hundreds of Hasidic Jewish pilgrims ignored requests by Israel and Ukraine and flew to Ukraine for their annual Jewish New Year celebration, in mid-September. Israel has the world's 7th highest rate for corona virus infection – 231/100,000 people. This is four times higher than Ukraine's rate of 55/100,000 people.
Coronavirus money is being spent on building roads to avoid borrowing money for this year's $3 billion road building program, David Arakhamia, head of the ruling Servant of the People faction in the Rada, tells Ukraina 24 TV. Noting that the government plans to repair or rebuild 4,200 km of roads this year, he implied roadbuilding is more popular than virus fighting. Elections for mayors and city councils will be held Oct. 25.
With economic ministries targeted, two to three Cabinet ministers may lose their jobs this fall, Arakhamia tells Ukraina 24. "By the fall there may definitely be some rotations in individual ministries — two or three ministries," he predicts. "Our people are most of all dissatisfied with the economic bloc. We need people who, besides having a vision and programs, could quickly implement them." Six months ago, President Zelenskiy fired two thirds of his cabinet.
China and Ukraine have agreed to increase bilateral trade and to identify joint projects in farming, infrastructure, energy, and energy conservation, reports the press service of Ukraine's Ministry of Economic Development, Trade and Agriculture. Noting that China is now Ukraine's top trading partner, China's Deputy International Trade Representative Yu Jianhua and Ukraine's Trade Representative Taras Kachka talked Thursday by video conference.
In coming weeks, the Kharkiv Metro is to sign a contract with China's CRRC Tangshan for 40 new rail cars, a 13% percent increase in the fleet of Ukraine's second largest subway system. With the new cars, the Metro will have eight one-piece 'tube trains,' without partitions between the five cars, reports the Center for Transportation Strategies.
US Secretary of State Michael Pompeo warned President Zelenskiy about "malign" Chinese investment in Ukraine, including Beijing's efforts to acquire the Motor Sich aircraft engine maker. The warning came in a telephone call Wednesday with President Zelenskiy, State spokeswoman Morgan Ortagus said in a statement. For a year, the US has sought to block a Chinese takeover of the jet engine maker. After US investors failed to materialize, Kharkiv business man Alexander Yaroslavky filed an application in early August to buy the engine building company in partnership with Beijing Skyrizon.
Ukraine has frozen diplomatic contacts with Belarus and joined the EU in condemning the recent presidential election as not free or fair, Foreign Minister Dmytro Kuleba told reporters Friday, Reuters reports. "We put all contacts on pause until the situation in Belarus stabilizes," Kuleba said. He noted that Ukraine had earlier recalled its ambassador to Belarus for negotiations. Belarus is Ukraine's fourth largest trading partner.
ON THE MOVE:
The EBA has moved from its longtime office in Kyiv's Podil neighborhood to the new Creative State of Arsenal coworking center on Moskovska 8, building 7, a five-minute walk from the Arsenalna Metro station on the Red Line. After 15 years in a building that grew to have workplaces for 70 employees, the EBA says it has moved to a smaller workspace that features hot desking and "modern infrastructure for meetings and negotiations." Executive Director Anna Derevyanka notes: "Mobility and flexibility have become a new trend of today…We are changing to become even more flexible, fast, and modern in order to create maximum opportunities for all EBA member companies."
After opening the 4,100 square meter Creative State of Arsenal in May, Ilya Kenigstein, founder of the coworking space network, says work is starting this fall on a second 3,100 square meter phase. The two recycled brick buildings will be connected by a bridge and will share parking, an event hall, and open area with art installations. Added to existing spaces in Gulliver and Senator business centers, Creative States will have 15,000 square meters in Kyiv.
Today, the Kyiv Post moves into a spacious new, 455-square meter space provided by publisher Adnan Kivan, owner of KADORR Group, the Odesa-based real estate development company. The Post trades its cramped space of the last eight years, on Pushkinska, for a glass-walled, open space in a largely residential building, at 68 Zhylianska, between Pankivska and Tarasivka. Post editor Brian Bonner writes: "While much of the Kyiv Post workforce is still working remotely, the era of the office is far from dead." The new newsroom will have 48 work spaces and a video studio. The only downside will be the 20-minute walk to the nearest metro station.
From the Editor: Last week, the UBN signed a sponsorship contract with a multinational law firm. In light of future expansion this fall, we may take on a research assistant. If you are interested in Ukraine and business, please email me your resume: editor@ubn.news With Best Regards, Jim Brooke
Read earlier news
Belarus Economic Drop Could Hit Ukraine...US Cybersecurity Expert En Route Ukraine Arrested as Spy for Russia...After 100 Days, Saakashvili Quits Reform Council to Go Home to Georgia...Ze Promises Peace by Christmas...Facing Tonight's Ban on Foreign Travelers, UIA Cuts Flights...
The standoff between Belarus' long-running ruler and mass opposition may soon cripple the finances of Ukraine's northern neighbor and fourth largest trading partner. In the last week, the Belarusian ruble weakened by 8.5%, falling to 2.67 to the dollar. Belarus' foreign currency reserves are down to $4.3 billion –"sufficient to cover just 1.4 months of imports, while three months is considered the minimum," economist Anders Aslund writes in a new Atlantic Council piece: "Belarus Crisis: Can Lukashenka Survive a Collapsing Currency?"
Strikes are affecting three of four key state companies — fertilizer makers Belaruskali and Grodno Azot and oil refineries Naftan and Mozyr. They account for two thirds of Belarus' exports to the West. "A prolonged strike at any of these four state-owned companies would collapse Belarusian export revenues and the Belarusian ruble, bringing Lukashenko to his knees," writes Aslund, a Swedish-American economist with three decades experience in the ex-USSR. "If the currency collapses, the real strife will start."
Ukraine is Belarus' second largest trading partner, after Russia, Dmitry Chervyakov, a consultant with Berlin Economics, tells the Kyiv Post. Last year, Belarus exported $4.1 billion in goods to Ukraine and imported $1.7 billion. Ukraine bought four million tons of diesel and bitumen from Belarus for $2.4 billion and fertilizers for $300 million, largely from Belaruskali, the potash producer. Many of Belarus' imports from Ukraine are transshipped to Russia to skirt bilateral Russia-Ukraine trade bans.
Lithuania is preparing to route Ukraine-bound trucks through eastern Poland if traffic disruptions start in Belarus, Yaroslav Narkevich, Lithuania's Minister of Transport and Communications, tells Russian Railways Partner site. "We intend to discuss with Poland the option of returning our carriers through Poland, bypassing Belarus," he said. "So far there is no need to redirect the flow of trucks, but we are ready for this." On Aug. 5, four days before the disputed Belarus presidential election, Ukraine's Cabinet of Ministers had approved for Rada debate a liberalization law that would abolish the need for international trucking permits for Belarus-Ukraine trade.
Ukraine has "tightened control" at Ukraine-Belarus border crossings in wake of Lukashenko's charges that Ukraine is trying to destabilize his regime. "We have tightened control at the border with Belarus, since the situation in this country is quite turbulent," Border Guard spokesman Andriy Demchenko told RBK-Ukraine.
Starting Tuesday, Ukrainians can only enter Belarus with a foreign passport, reminds Ukraine's Border Guard Service. A similar rule went into effect six months ago for travel to Russia. The government is trying to phase out the domestic passport paper booklets, which are easy to counterfeit.
In an open letter signed by more than 2,500 Belarusian IT CEOs, investors and developers, democratic normalcy is essential for the future of the industry in Belarus. Otherwise, they warn: "In the near future, we will begin to observe a massive outflow of specialists abroad, the opening of offices in neighboring countries, a slowdown in the growth of the IT sector, a decrease in investment in Belarusian IT companies, and a decrease in tax revenues."
Japanese-owned tech company Rakuten Viber has closed its office last week in Minsk. San Francisco-based Rakuten CEO Djamel Agaoua cited violence against employees in Minsk. Kharkiv and other Ukrainian IT centers are recruiting Belarusian developers to move to Ukraine.
The day before he was to fly to Ukraine, a former US Army Green Beret captain was arrested and accused Friday of spying for Russia for the last 15 years. Peter Rafael Dzibinski Debbins, aged 45, had repeated meeting with Russia's G.RU., or military intelligence, according to the Alexandria, Virginia grand jury indictment posted by The New York Times. By 2010, the Washington Post reports, Debbins had left the Army and was working for a Ukrainian steel manufacturer in Minnesota. Then his Russian intelligence agents encouraged him to get back into government work.
Last spring, Debbins taught a webinar for Ukrainian-American Concordia University. He was billed as an instructor for Cyber Intelligence Initiative of Washington's Institute for World Politics. The course was titled: "How to Approach Enterprise Cybersecurity!" In a congratulatory YouTube video, he urges graduates to have "a hacker's mindset."
Russia's Gamaredon hacking group has prepared "a large coordinated attack on government agencies and critical infrastructure" by sending out email attachments infected with malware, Ukraine's National Security and Defense Council warned last week. The goal may be to disrupt the Oct. 25 local elections. Phony emails were made to look like messages from Ukraine's State Security Service. Council Secretary Oleksiy Danylov warns: "Cyberthreats from the Russian Federation are extremely dangerous for both Ukraine and European countries."
So far this year, one million cases of cyber threats — website attacks, DDoS attacks, phishing and malicious software – have been recorded by the National Coordination Center for Cybersecurity, a unit of the Defense Council. To respond to threats and prevent attacks, the Center is stepping up cooperation with private sector companies. Last month, it signed cooperation agreements with three dozen private foreign and Ukrainian companies.
The Zelenskiy government is tripling the number of state companies protected from privatization – to 659. The Cabinet of Ministers approved the new list Wednesday. It will now go to the Rada. Last year, the Rada abolished a similar list of over 1,000 companied exempt from privatization.
Former Georgian President Mikheil Saakashvili, a major free market force in the Zelenskiy government, announced yesterday that he is returning home to Georgia, reports Georgia Online. "I know that we can live much cooler, much better, and every Georgian can be rich, and we can do it together!" he says in a video. "I'm coming back!"
Appointed three months ago to serve as chairman of Ukraine's National Reform Council, Saakashvili felt the push of anti-reformers in the Zelenskiy government and the lure of Oct. 31 parliamentary elections in Georgia. Responding to negative reactions, Saakashvili posted on Facebook: "Some of my Ukrainian friends mourn my 'farewell' to Ukraine. I want to tell them: heads up! We will fight both in Georgia and in Ukraine! We will win there and there!"
In Tbilisi, Thea Tsulukiani, Georgia's Justice Minister since 2012, promised to prepare a jail cell for the former president. In 2018, Saakashvili was convicted in absentia in two trials on charges stemming from his decade in office, from 2004 to 2013. The sentences handed down by Tbilisi City Court total nine years. Saakashvili and his supporters say the trials were politically motivated.
President Zelenskiy believes the current one-month-old ceasefire in the Donbas can be extended into a lasting peace by the end of this year. "I want to believe that it will be this year," he tells Eurovnews' Sasha Vakulina in a lengthy video interview. "I really want to believe it, and I DO believe, I do."
Zelenskiy also asks European leaders to spell out the steps for Ukraine to join the EU. "I asked many European leaders this question – what do you want Ukrainians to do, step by step, to become an EU member?" he said in the interview posted Tuesday. Calling on Ukraine to speed up adoption of EU norms, he said: "We just have to become the country that Europe really would want."
Travel companies plan to protest today the ban on incoming foreign travelers. The 1-month ban goes into effect tonight at midnight. Chornobyl tour operators, organizers of medical tourism, the Business Travel Association and owners foreigner friendly night clubs, such as Skybar, Closer and River Port, plan to gather outside the Cabinet of Ministers. Using the hashtag #OpenUkraineNow to coordinate the protest, the Association of Incoming Tour Operators says that after temperature controls started two months ago at airports, there are no known cases of infected tourists entering Ukraine. The ban is on nationals from all countries, not just the 65 countries deemed 'red' by Ukraine's Health Ministry.
Kyiv Boryspil, Ukraine's busiest airport, is installing this week a $37,000 temperature screening system that allows border guards to identify passengers with fever systems as they walk past a stationary camera. "It enables instant, non-contact temperature measurement of passengers from a distance," the State Border Service said of the EU-donated equipment.
Noting that foreigners currently account for 60% of UIA's passengers, UIA said yesterday it is cancelling flights in September between Kyiv and Athens, Barcelona, Berlina, Chisinau, Delhi, Geneva and Madrid. It will reduce frequencies between Kyiv and Brussels, Dusseldorf, Dubai, Istanbul, Paris and Tel Aviv. UIA CEO Yevhen Dykhne says the government ban "will have a negative impact on the aviation industry of Ukraine, which in the absence of any other state support in the crisis caused by the global pandemic, is economically weakened and is in critical condition."
From the Editor: Assuming the US grand jury indictment is true, the Kremlin once again is playing a diabolical game. With one hand, Russia launches cyberattacks against Ukraine. With the other, it sends a compromised American to infiltrate Ukraine's cyber security world. It all reminds me of the gee whiz stories in the US financial press a decade ago about Eugene Kaspersky. This graduate of a KGB-sponsored technical college, amazingly, had reinvented himself as the CEO of rare Russian multinational. But in 2015, Bloomberg reported "high-level [Kaspersky] managers have left or been fired, their jobs often filled by people with closer ties to Russia's military or intelligence services." US government agencies quietly banned the use of Kaspersky cyber security and anti-virus software. With Best Regards, Jim Brooke
Wednesday, August 19 – Ferrexpo Poltava Mining marked half a billion tons of iron ore concentrate
Poltava Mines Enough Iron Ore to Build 100 Egyptian Pyramids...Cargill Loans €250 Million to Ukraine...Ad Agencies Expand...Kyiv's Cautious Corona Curbs
Ferrexpo Poltava Mining marked this month half a billion tons of iron ore concentrate produced since the mine opened 50 years ago. "The first ton of concentrate was produced in 1970, and after 50 years of operation, PGOK produced the 500-millionth one," said Viktor Lotous, Board Chairman of Poltava GOK. Over the last 20 years, $3 billion has been invested in Poltava Mining, he said. With demand high in China, the mine and processing plant shipped a record 1.1 million tons of iron ore pellets in March. For comparison, 500 million tons is 93 times the weight of Egypt's largest pyramid, the Great Pyramid of Giza, according to The Heaviest Objects in the World.
Ukraine is to raise up to €250m in two loans from Cargill Financial Services, the Cabinet of Ministers reported Monday. The loans are to be: three years at 5.95% and five years at 6.85%. One year ago, the Finance Ministry conducted a similar operation, borrowing from Cargill at slightly lower rates: €100 million for two years at 5.15% and €150 for five years at 6.25%.
Concorde Capital's Alexander Paraschiy writes of the new loans: "The conditions under Cargill's private loan look close to market rates, taking into account that Ukraine's public six-year debt (EUR-denominated Eurobond maturing in June 2026) trades currently at 6.61% YTM. The loan will allow Ukraine to partially compensate the large foreign currency debt outlays of August-September, which amount to about $3 billion."
The Finance Ministry raised the equivalent of $91 million in its weekly government bond auction yesterday – one quarter the $366 million raised one week earlier. Highlights were: 6-month hryvnia bonds placed at 7.82%; 2-year hryvnia bonds placed at 10.14%; and 8-month dollar bonds placed at 3.39%.
Due to the corona-recession, state budget revenues are $1.4 billion below plan for the first half of this year, Valery Patskan, chairman of the Accounting Chamber, writes on Facebook. About 37% of the drop is due to a fall in customs duties due a 20% drop in imports during the first half.
Watching "the sharp aggravation of the situation in the Republic of Belarus," President Zelenskiy said after a security council meeting Monday night: "The events in this country could significantly affect Ukraine." But hours earlier, as labor slowdowns spread through Belarus' two oil refineries, the Cabinet of Ministers reintroduced special duties on imports from Russia of: liquefied gas (3%), diesel (4%), and most types of coal (65%). The duties expire Dec. 31.
Pre-election populism at the Rada. President Zelenskiy vetoed a bill that would extend through the end of next year the moratorium on foreclosures for foreign currency mortgage loans. Why? The way the Rada sponsors worded the bill last month, it would have banned foreclosures under any loan agreement. As written, the bill would have brought "chaos into Ukraine's entire financial system," writes Concorde's Paraschiy.
Banda, a leading Ukrainian ad agency, is opening an office in California, its first office outside of Kyiv. Yaroslav Serdyuk, the agency's co-founder and strategy director, writes on Facebook from California: "We already have four ongoing projects in the U.S.: designing a brand identity for a promotional campaign of a Hollywood film, brand creation for two investment funds, and we are also preparing to launch a new campaign for a cannabis brand."
France's MSL public relations company is opening an office in Kyiv, strengthening parent company Publicis Groupe's presence in Ukraine. The new office will be led by Olena Sukhanova, a 9-year veteran of Ukrainian marketing agency Tabasco. Last year, MSLGROUP was the only European company in the top10 of the Holmes Report 250 Global Ranking of PR Firms.
The founders of Nova Poshta are investing in Fedoriv Agency's Kooperativ co-working space at 23 Sichovykh Striltsiv, Kyiv. The investors, Viacheslav Klimov and Volodymyr Popereshniuk, plan to convert the ad agency's existing space in Arena City into a working hub with places for 100 people.
With Ukraine reporting record levels of new Covid-19 infections – about 1,600 a day for the last week – Kyiv is mildly tightening restrictions this week. Everyone is to carry an ID on the street. Masks are to be worn in 'indoor public spaces' and on all public transport. Trams, trolleybuses, buses and minibuses carry only seated passengers. But the metro allows standees. Kyiv tightened restrictions after Covid-19 cases occupied 52% of reserved hospital beds. In the five months of the virus, 2,116 Ukrainians have died of the disease, including 155 in Kyiv.
Schools will open as scheduled Sept. 1, Health Minister Maksym Stepanov promises. Online learning will be mandatory only in the nation's 'Red Zones.' Currently these are three towns and five districts – less than 1% of Ukraine's 37 million people. In one 'Red Zone' city, Lviv region's Sambir, the town council refused to tighten restrictions after local business owners protested outside the council building.
With local elections coming in two months, politicians have no appetite for a return to the severe lockdown of last spring. Concorde Capital's Zenon Zawada writes: "The Zelenskiy administration has largely remained silent on the surge in infections. Moreover, no significant quarantine and lockdown restrictions have been introduced. Only in Kyiv and two regions are hospital bed occupancy rates exceeding 50%, indicating that the situation is relatively stable despite the surge."
Orthodox Jewish pilgrims are asked to refrain from visiting Uman next month to celebrate Rosh Hashanah, "due to the threatening epidemiological situation," according to a joint statement by Israel and Ukraine. In a normal year, 30,000-50,000 Orthodox make the pilgrimage. This year, it would be Sept. 18-20. Interior Minister Arsen Avakov said that last month the government reached a similar agreement with Ukraine's Orthodox churches to refrain from the traditional July 28 mass processions celebrating the Christianization of Kyivan Rus.
Returning to the air after coronavirus travel curbs, UIA had to "start practically from scratch," to rebuild business, airline president Yevgeny Dykhne writes on Facebook. From mid-June to mid-August, Ukraine's flag carrier carried 113,345 passengers on 1,238 flights. Last year, the airline carried 4 million passengers.
Marta Kolomayets, American director of the Fulbright Program in Ukraine for seven years, died Sunday at the age of 61 after a long illness. As the local head of Fulbright, she helped more than 300 Ukrainians pursue Masters and Doctorate degrees at US universities. The daughter of Ukrainian emigres, Kolomayets first visited the Ukrainian SSR in 1985, but was kicked out for filming interviews with Soviet dissidents. She returned in 1990s, opening the Kyiv bureau of the Ukrainian Weekly, the first foreign media bureau in modern Ukraine.
From the Editor – During the first half of this month, 74,000 Ukrainians vacationed in Antalya, the resort city on Turkey's 'Turquoise Coast.' Ukrainians almost outnumbered Brits and Germans combined. This morning, I do my bit for Turkish tourism, flying with my family to Bodrum, on the Aegean. Thanks to help from the UBN research assistant in Kyiv, this email will not skip a beat during my one-week vacation. With Best Regards, Jim Brooke
Tuesday, August 18 – the biggest impact of strikes spreading across Belarus
Belarus Strikes May Starve Ukraine's Roadbuilders of Asphalt...Belarus Eurobonds: Worst Performers of Emerging Markets...Ukraine's Garage Sale: Government to Auction Leases for 4,262 Empty Buildings...A Rebound Coming? Ukraine Buys Back GDP Warrants...
For Ukraine, the biggest impact of strikes spreading across Belarus may be a shortage of asphalt for President Zelenskiy's $3 billion drive to pave 4,000 km of highways this year. Ukraine imports half of its asphalt in heated, liquid form from Belarus. "Objectively, there is nothing to replace Belarusian volumes — and this is half of the market," Serhiy Kuyun, director of the A-95 Consulting Group, writes on his Facebook page. "Russian supplies are closed, and Ukrainian traders are just mastering imports by sea."
Ukraine also gets about one third of its diesel and gasoline from Belarus. But the strikes and slowdowns will only result in a 'hiccup' for Ukrainian prices, Kuyun predicts. "First, we have been living with a huge surplus of diesel fuel and gasoline for half a year. Traders sell it to zero at best, the market is so overwhelmed. Second, the Ukrainian market is open for supplies from all sides."
Most of Ukraine's imports of Belarus petroleum products come from the Belarus' largest refinery, in Mazyr, on the Pripyat River, 250 km north of Kyiv. According to Argus Media, it appears that Mazyr workers will be on a 3-hour lunchtime strike this week. At Naftan refinery, near Belarus' northern border with Lithuania, workers are on strike. The refinery which is owned by Belneftekhim, was already shut down for scheduled maintenance.
On the IT front, Ukrainian IT companies are "already accepting individual divisions of IT companies in Belarus as guests," Olha Kunichak, manager of the European Business Association's IT Committee tells Interfax-Ukraine. "Ukrainian IT companies are ready to cooperate and help our northern neighbors." To restrict protesters, the Belarus government has been shutting off the Internet. Ukraine started this summer a fast track program to grant work permits to foreign IT specialists. According to Ukraine's Ministry of Digital Transformation, Ukrainian universities only graduate 15-17,000 IT specialists annually, while the fast-growing sector needs 40,000 a year.
Belarus Eurobonds handed investors a loss of 5.1% this month, the worst performance in emerging markets, according to a Bloomberg Barclays index. Since the 2031 bonds were issued on June 25, the yield is up by one percentage point.
Ukraine is recalling its ambassador from Belarus to protest Lukashenko's "repeated and groundless" statements against Ukraine, Ukraine Foreign Minister Dmytro Kuleba said yesterday. President Lukashenko's return to of Russia mercenaries who had fought on the separatist side in the Donbas war, "derailed the trust between our nations and inflicted a heavy blow upon our bilateral relations," Kuleba said.
Leases for 4,262 empty buildings totaling 2.5 million square meters – or 10 times New York's Empire State Building – will go up for electronic auction this fall under streamlined rules approved last week by the Cabinet of Ministers, announces Leonid Antonenko of the privatization department of the State Property Fund. The full of list of leases to auctioned by ProZorro.Sales includes: 1,070 offices, 837 warehouses, 566 factories, 61 spaces at airports, and six sites for renewable energy plants at Chornobyl. While much of the vacant space is in the big five cities, there are thousands of square meters up for lease in Cherkasy, Kropyvnytskyi, Mykolaiv, Rivne and Zaporizhia.
Ukraine ranks first in a ranking of 39 Eastern European and developing countries for public procurement transparency. Following 64 indicators for the Transparency Rating, the authors placed Ukraine at the top with a score of 97% and Tajikistan at the bottom with a score of 38%. Poland got 74%, Hungary 67% and the Czech Republic 65%. Russia and Belarus were not studied by the group, the Soros-funded Institute for the Development of Freedom of Information. For the last four years, all government purchases of goods worth more than $7,300 have to go through the ProZorro on line tendering system.
Ukraine's Finance Ministry has repurchased about 10% of outstanding GDP-linked securities, the Finance Ministry announced Friday on the Irish Stock Exchange. Known as GDP warrants, the securities have payouts triggered by two consecutive years of GDP growth. By spending up to $300 million to quietly buy back these securities, the government may be expecting a post-Coronavirus growth bounce next year. After Ukraine's economy GDP fell 11.4% in Q2, the central bank predicts that economy will shrink by 6% this year, and rebound by 4% next year.
Concorde Capital's Alexander Paraschiy calculates that the purchase was at 90% of par and writes: "This is also a good signal for the holders of GDP warrants, as it indicates MinFin is anticipating large payments under the warrants in the mid-term."
Timothy Ash writes: "Now most official forecasts have a 4% plus growth for 2021.With the changes at the [central bank], the Zelenskiy administration is going for a pro-growth agenda, which might mean lower rates, cheaper currency, perhaps looser fiscal – note minimum wage hikes.
In a sign the Corona-recession has eased, Ukraine's electricity consumption in July was only 0.7% below last year's level, according to Ukrenergo, the nation's state power transmission company. Industrial consumption was down 3.2% yoy, but household consumption was up 4.7% and consumption by chemical industries was up 15%.
The central bank expects to receive the second tranche from the IMF by the end of this year, Kyrylo Shevchenko, the new governor of the National Bank of Ukraine, says in an interview with RBK-Ukraina. The IMF approved the 18-month, $5 billion program on June 9, and the first tranche — $2.1 billion — was disbursed three days later. Release of the remaining $2.9 billion depends on four reviews. However, Shevchenko's predecessor, Yakiv Smoliy quit on July 1, citing pressure from President Zelenskiy. Since then, talk of a September review has faded.
Last week, the central bank bought $223 million, strengthening the hryvnia mildly to UAH 27.3/$1. So far this year, the National Bank of Ukraine has bought $1 billion more than it sold, latest data show. Demand for dollars this summer has been weak as vacationers are largely bottled up inside the country, unable to take advantage of visa-free access to the EU.
Last year, Ukrainians made 26 million trips out of the country, while foreigners made 15 million trips here, according to the State Statistics Service. Tourism accounts for only 1.5% of Ukraine's GDP, well below Belarus – 6.4% — and Georgia – 26.3%. To generate more inbound tourism, Ukraine has dropped visa requirements for Chinese tourists and allowed Indians, South Africans and Filipinos to apply for visas on line. "Simple arithmetic shows the advantages of visa liberalization: the average check of one Chinese tourist in Ukraine is about $950," says SkyUp, Ukraine's discount airline. After coronavirus and visa barriers drop, SkyUp mulls launching flights to: China, India, Bahrain Saudi Arabia, Kuwait, Oman, UAE, Qatar, Egypt, Lebanon, and Tunisia.
Reminder: UIA is offering two direct Kyiv-New York-Kyiv flights – next Monday Aug. 24, and the following Monday, Aug. 31. No additional New York flights are scheduled. Tickets only are available through the UIA site: https://www.flyuia.com/ua/en/home.
From the Editor : In October 1991, I interviewed Stanislav Shushkevich, Belarus' first president, who was then one month into the job. A smart man, Shushkevich has a doctorate in physics and was, oddly, chosen by authorities in Minsk to teach Russian to the American defector, Lee Harvey Oswald. Reporting for The New York Times, I asked Shushkevich a question of interest to my readers: "How many nuclear bombs do you have?" He responded: "I have no idea. Ask the Red Army." Then, as in now, the biggest questions in Minsk are often answered 700 km to the east, in Moscow. This week, we may see whether Moscow props up Lukashenko for a few more years, or eases him into a sunny retirement at his hillside chalet above Sochi. With Best Regards Jim Brooke
Defying IMF, Price Controls Return to Gas…16 Foreign Companies Show Interest in Buying State Titanium Complex…Big Mac Index: Hryvnia 61% Undervalued…Dnipro River Shipping Down Slightly…Kyiv in the Big Leagues – for Traffic Jams
57 Views James Brooke
China Outstrips Russia as Ukraine's Top Trading Partner…Betting on Chinese Trains Crossing Ukraine, a Big Container Hub Goes up Near Hungary-Ukraine Border…Chinese Covid Vaccines Rise to 5 million…Metro and Air Traffic Down Drastically in 2020…
Steel Grew in 2020…GDP Growth Pushed Off To Spring…Chinese Vaccines for 2.5% of Ukraine's Population by June 1…Ukraine Will Spend $20 billion to Service Debt This Year…Ukroboronprom Puts Up For Lease 5 Parus…US Treasury Sanctions 7 Ukrainians…Nearly Half a Million 'New' Cars Flood Urkaine
Gazprom Works to Finish Nord Stream by Summer…Ukraine Zero Foreign Investment in 2020…DTEK Opens London 'Investment Hub'…Turkey-Ukraine: 30 Military Production Projects… Ryanair Cuts 70% of Flights out of Kyiv Until April
-10° Friday,
-14° Saturday,
-11° Sunday,
-13° Monday,
-10° Tuesday,
Monthly Economic Digest By Ukraine Business News
Monthly Digest by UBN with support of Energy Holding DTEK
Select report...December 2020
GBP 38.23 -0.08% | -0.03
Eur 33.99 -0.00% | -0.00
USD 28.06 +0.00% | +0.01
S&P 500 $378.46
DOW 30 $30,991.52
Nasdaq $13,112.64
Russell 2000 $2,155.35
FTSE 100 $6,801.96
Crude Oil $53.80
Cryptocurrencies Price
Bitcoin $39,233.00
Ethereum $1,219.55
Tether $1.00
XRP $0.30
Bitcoin Cash $527.41
Commodity Prices Price
Petróleo $51.92
Maíz $0.0122
Trigo $0.0191
Ukraine Media Group LLC 2021
Supported by Stamax


text:
Home > Technology News > 5G networks are going to Bulgaria in 2020
5G networks are going to Bulgaria in 2020
Am Sure you can learn successful Blogging secrets through me, am also sure you can learn how to make money online with the help of my updates why not leave your email behind let me show you how.
A1 Austria has been granted license for 5G frequency, Bulgaria is expected to take action "We expect to launch 5G in Bulgaria in 2020," said Todor Tashev, Senior Network and Service Manager at A1 Bulgaria. of the First 5G Network appears in Bulgaria the following year, telecommunications operator A1 announced.
Prerequisites for this are Bulgarian institutions to organize a frequency assignment. Today it has become clear that Telekom Austria A1 has been granted license to use frequencies for building a 5G network. The company gained between 100 and 140 MHz of the 3.5 GHz spectrum to 64.3 million euros.
The frequencies will be used to build a new 5G network company, A1 reported Bulgaria. A total of 39 blocks of 10 MHz in the band of 3.5 GHz are allocated at auction. The band's licensing period runs from January 1, 2020 to December 31, 2039.
Austria is one of the first countries in Europe that sold the frequency for the introduction of 5G. Last year in Bulgaria, A1 demonstrated 5G capabilities and modernized its network so it was ready for faster entry, reminded Telekom.
"We expect to launch 5G in Bulgaria in 2020, and we are ready to implement technology as soon as devices that support 5G and have the necessary frequencies appear," said Todor Tashev, senior network and service manager at A1 Bulgaria, according to him. "5G will be a network of networks that will consolidate all existing standards and enable the development of mobility related to future technologies, digital medicine and intelligent factories."
Tashev hopes that Bulgarian institutions will take the necessary steps to allocate frequencies and our country will be among the first to have a working 5G network in Europe.
At the end of last year, A1 Bulgaria has introduced 4.5G technology on its network that enables connection speeds of up to 30% (up to 150 Mbps) through so-called " These network upgrades allow fast upgrade to 5G when there are conditions.
You Can Earn Free Bitcoins Daily
Previous Post Toshiba Europe will now be called Dynabook
Next Post Twenty countries this year run 5G networks
Bulgaria networks
UNLOCKED Huawei 4G Modem With WIFI FEATURES
UNLOCKED HUAWEI 4G MODEM With Sim Slot 4g unloked pocket WIFI Modem
You Too Can Start Earning Free Bitcoins Daily
Digital Assets Data raised $ 6 million from Galaxy Digital and Morgan Creek