        # and the doppler filteredSpeed is broken in the drMeasurementReports
        report_time = gps_time_from_qcom_report(gnss_msg)
        if report_time - self.last_report_time > 0:
          self.qcom_reports_received = max(1, len(self.qcom_reports))
          self.qcom_reports = [gnss_msg]
        else:
          self.qcom_reports.append(gnss_msg)
        self.last_report_time = report_time
  
        if len(self.qcom_reports) == self.qcom_reports_received:
 
</s> remove         self.qcom_reports.append(gnss_msg)
 </s> add         self.qcom_reports.append(report) </s> remove   if ((gps_est_error > GPS_POS_ERROR_RESET_THRESHOLD && ecef_pos_std_norm < GPS_POS_STD_RESET_THRESHOLD) || this->last_gps_msg == 0) {
 </s> add   if ((gps_est_error > GPS_POS_ERROR_RESET_THRESHOLD && ecef_pos_std < GPS_POS_STD_RESET_THRESHOLD) || this->last_gps_msg == 0) { </s> remove     if name == "gnssMeasurements":
      msg.gnssMeasurements.measTime = t
      msg.gnssMeasurements.positionECEF.value = [self.x , self.y, self.z]
      msg.gnssMeasurements.positionECEF.std = [0,0,0]
      msg.gnssMeasurements.positionECEF.valid = True
      msg.gnssMeasurements.velocityECEF.value = []
      msg.gnssMeasurements.velocityECEF.std = [0,0,0]
      msg.gnssMeasurements.velocityECEF.valid = True
 </s> add     if name == "gpsLocationExternal":
      msg.gpsLocationExternal.flags = 1
      msg.gpsLocationExternal.verticalAccuracy = 1.0
      msg.gpsLocationExternal.speedAccuracy = 1.0
      msg.gpsLocationExternal.bearingAccuracyDeg = 1.0
      msg.gpsLocationExternal.vNED = [0.0, 0.0, 0.0]
      msg.gpsLocationExternal.latitude = float(self.lat)
      msg.gpsLocationExternal.longitude = float(self.lon)
      msg.gpsLocationExternal.unixTimestampMillis = t * 1e6
      msg.gpsLocationExternal.altitude = float(self.alt)
    #if name == "gnssMeasurements":
    #  msg.gnssMeasurements.measTime = t
    #  msg.gnssMeasurements.positionECEF.value = [self.x , self.y, self.z]
    #  msg.gnssMeasurements.positionECEF.std = [0,0,0]
    #  msg.gnssMeasurements.positionECEF.valid = True
    #  msg.gnssMeasurements.velocityECEF.value = []
    #  msg.gnssMeasurements.velocityECEF.std = [0,0,0]
    #  msg.gnssMeasurements.velocityECEF.valid = True </s> remove   auto ecef_vel_std = log.getVelocityECEF().getStd();
  VectorXd ecef_vel_var = Vector3d(ecef_vel_std[0], ecef_vel_std[1], ecef_vel_std[2]).array().square().matrix();
  double ecef_vel_std_norm = std::sqrt(ecef_vel_var.sum());
  MatrixXdr ecef_vel_R = ecef_vel_var.asDiagonal();
 </s> add   // indexed at 0 cause all std values are the same MAE
  auto ecef_vel_std = log.getVelocityECEF().getStd()[0];
  MatrixXdr ecef_vel_R = Vector3d::Constant(pow(this->gps_std_factor*ecef_vel_std, 2)).asDiagonal();
        self.qcom_reports = [report]
        # and the doppler filteredSpeed is broken in the drMeasurementReports
        report_time = gps_time_from_qcom_report(gnss_msg)
        if report_time - self.last_report_time > 0:
          self.qcom_reports_received = max(1, len(self.qcom_reports))
        self.qcom_reports = [report]
        else:
          self.qcom_reports.append(gnss_msg)
        self.last_report_time = report_time
  
        if len(self.qcom_reports) == self.qcom_reports_received:
keep keep keep keep replace keep keep keep keep keep
 Revert laikad llk (#29535)

* Revert "bump laika (#29522)"

This reverts commit 3523bef732316b534de66dcb9e7d29e53e37e99f.

* Revert "Locationd: switch to laikad (#29278)"

This reverts commit fd3b8a3d7511ad3d7c5aa0b82a1e2c28505e5a7f. 
selfdrive/locationd/laikad.py