// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: realtime_data.proto
package com.fs.watch.protobuf;
public final class RealtimeData {
  private RealtimeData() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code RtMode}
   */
  public enum RtMode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>RT_MODE_BACK_NORMAL = 0;</code>
     */
    RT_MODE_BACK_NORMAL(0),
    /**
     * <code>RT_MODE_ENTER_CAMERA = 1;</code>
     */
    RT_MODE_ENTER_CAMERA(1),
    /**
     * <code>RT_START_FIND_WATCH = 2;</code>
     */
    RT_START_FIND_WATCH(2),
    /**
     * <code>RT_START_DFU_MODE = 3;</code>
     */
    RT_START_DFU_MODE(3),
    /**
     * <code>RT_MODE_HR_MEASURE = 4;</code>
     */
    RT_MODE_HR_MEASURE(4),
    /**
     * <code>RT_MODE_FATIGUE_MEASURE = 5;</code>
     */
    RT_MODE_FATIGUE_MEASURE(5),
    /**
     * <code>RT_MODE_PRESSURE_MEASURE = 6;</code>
     */
    RT_MODE_PRESSURE_MEASURE(6),
    /**
     * <code>RT_VIEW_MEASURE_STATE = 7;</code>
     */
    RT_VIEW_MEASURE_STATE(7),
    ;

    /**
     * <code>RT_MODE_BACK_NORMAL = 0;</code>
     */
    public static final int RT_MODE_BACK_NORMAL_VALUE = 0;
    /**
     * <code>RT_MODE_ENTER_CAMERA = 1;</code>
     */
    public static final int RT_MODE_ENTER_CAMERA_VALUE = 1;
    /**
     * <code>RT_START_FIND_WATCH = 2;</code>
     */
    public static final int RT_START_FIND_WATCH_VALUE = 2;
    /**
     * <code>RT_START_DFU_MODE = 3;</code>
     */
    public static final int RT_START_DFU_MODE_VALUE = 3;
    /**
     * <code>RT_MODE_HR_MEASURE = 4;</code>
     */
    public static final int RT_MODE_HR_MEASURE_VALUE = 4;
    /**
     * <code>RT_MODE_FATIGUE_MEASURE = 5;</code>
     */
    public static final int RT_MODE_FATIGUE_MEASURE_VALUE = 5;
    /**
     * <code>RT_MODE_PRESSURE_MEASURE = 6;</code>
     */
    public static final int RT_MODE_PRESSURE_MEASURE_VALUE = 6;
    /**
     * <code>RT_VIEW_MEASURE_STATE = 7;</code>
     */
    public static final int RT_VIEW_MEASURE_STATE_VALUE = 7;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @Deprecated
    public static RtMode valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static RtMode forNumber(int value) {
      switch (value) {
        case 0: return RT_MODE_BACK_NORMAL;
        case 1: return RT_MODE_ENTER_CAMERA;
        case 2: return RT_START_FIND_WATCH;
        case 3: return RT_START_DFU_MODE;
        case 4: return RT_MODE_HR_MEASURE;
        case 5: return RT_MODE_FATIGUE_MEASURE;
        case 6: return RT_MODE_PRESSURE_MEASURE;
        case 7: return RT_VIEW_MEASURE_STATE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<RtMode>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        RtMode> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<RtMode>() {
            public RtMode findValueByNumber(int number) {
              return RtMode.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return RealtimeData.getDescriptor().getEnumTypes().get(0);
    }

    private static final RtMode[] VALUES = values();

    public static RtMode valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private RtMode(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:RtMode)
  }

  /**
   * Protobuf enum {@code RtKeyEvent}
   */
  public enum RtKeyEvent
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>RT_KEY_CAMERA = 0;</code>
     */
    RT_KEY_CAMERA(0),
    /**
     * <code>RT_KEY_AUDIO_PLAY = 1;</code>
     */
    RT_KEY_AUDIO_PLAY(1),
    /**
     * <code>RT_KEY_AUDIO_PRE = 2;</code>
     */
    RT_KEY_AUDIO_PRE(2),
    /**
     * <code>RT_KEY_AUDIO_NEXT = 3;</code>
     */
    RT_KEY_AUDIO_NEXT(3),
    /**
     * <code>RT_KEY_AUDIO_VOLUME_UP = 4;</code>
     */
    RT_KEY_AUDIO_VOLUME_UP(4),
    /**
     * <code>RT_KEY_AUDIO_VOLUME_DOWN = 5;</code>
     */
    RT_KEY_AUDIO_VOLUME_DOWN(5),
    /**
     * <code>RT_START_FIND_PHONE = 6;</code>
     */
    RT_START_FIND_PHONE(6),
    /**
     * <code>RT_STOP_FIND_DEVICE = 7;</code>
     */
    RT_STOP_FIND_DEVICE(7),
    /**
     * <code>RT_LN_HEALTH_MEASURE = 8;</code>
     */
    RT_LN_HEALTH_MEASURE(8),
    /**
     * <code>RT_NONE_MEASURE = 9;</code>
     */
    RT_NONE_MEASURE(9),
    ;

    /**
     * <code>RT_KEY_CAMERA = 0;</code>
     */
    public static final int RT_KEY_CAMERA_VALUE = 0;
    /**
     * <code>RT_KEY_AUDIO_PLAY = 1;</code>
     */
    public static final int RT_KEY_AUDIO_PLAY_VALUE = 1;
    /**
     * <code>RT_KEY_AUDIO_PRE = 2;</code>
     */
    public static final int RT_KEY_AUDIO_PRE_VALUE = 2;
    /**
     * <code>RT_KEY_AUDIO_NEXT = 3;</code>
     */
    public static final int RT_KEY_AUDIO_NEXT_VALUE = 3;
    /**
     * <code>RT_KEY_AUDIO_VOLUME_UP = 4;</code>
     */
    public static final int RT_KEY_AUDIO_VOLUME_UP_VALUE = 4;
    /**
     * <code>RT_KEY_AUDIO_VOLUME_DOWN = 5;</code>
     */
    public static final int RT_KEY_AUDIO_VOLUME_DOWN_VALUE = 5;
    /**
     * <code>RT_START_FIND_PHONE = 6;</code>
     */
    public static final int RT_START_FIND_PHONE_VALUE = 6;
    /**
     * <code>RT_STOP_FIND_DEVICE = 7;</code>
     */
    public static final int RT_STOP_FIND_DEVICE_VALUE = 7;
    /**
     * <code>RT_LN_HEALTH_MEASURE = 8;</code>
     */
    public static final int RT_LN_HEALTH_MEASURE_VALUE = 8;
    /**
     * <code>RT_NONE_MEASURE = 9;</code>
     */
    public static final int RT_NONE_MEASURE_VALUE = 9;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @Deprecated
    public static RtKeyEvent valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static RtKeyEvent forNumber(int value) {
      switch (value) {
        case 0: return RT_KEY_CAMERA;
        case 1: return RT_KEY_AUDIO_PLAY;
        case 2: return RT_KEY_AUDIO_PRE;
        case 3: return RT_KEY_AUDIO_NEXT;
        case 4: return RT_KEY_AUDIO_VOLUME_UP;
        case 5: return RT_KEY_AUDIO_VOLUME_DOWN;
        case 6: return RT_START_FIND_PHONE;
        case 7: return RT_STOP_FIND_DEVICE;
        case 8: return RT_LN_HEALTH_MEASURE;
        case 9: return RT_NONE_MEASURE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<RtKeyEvent>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        RtKeyEvent> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<RtKeyEvent>() {
            public RtKeyEvent findValueByNumber(int number) {
              return RtKeyEvent.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return RealtimeData.getDescriptor().getEnumTypes().get(1);
    }

    private static final RtKeyEvent[] VALUES = values();

    public static RtKeyEvent valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private RtKeyEvent(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:RtKeyEvent)
  }

  /**
   * Protobuf enum {@code RtSync}
   */
  public enum RtSync
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>STOP_ALL = 0;</code>
     */
    STOP_ALL(0),
    /**
     * <code>ONLY_ONCE = 1;</code>
     */
    ONLY_ONCE(1),
    /**
     * <code>ON_VALUE_CHANGE = 2;</code>
     */
    ON_VALUE_CHANGE(2),
    /**
     * <code>ON_SECOND_CHANGE = 3;</code>
     */
    ON_SECOND_CHANGE(3),
    /**
     * <code>ON_MINUTE_CHANGE = 4;</code>
     */
    ON_MINUTE_CHANGE(4),
    /**
     * <code>ON_HOUR_CHANGE = 5;</code>
     */
    ON_HOUR_CHANGE(5),
    /**
     * <code>ON_DAY_CHANGE = 6;</code>
     */
    ON_DAY_CHANGE(6),
    /**
     * <code>ON_TEN_MINUTE_CHANGE = 7;</code>
     */
    ON_TEN_MINUTE_CHANGE(7),
    ;

    /**
     * <code>STOP_ALL = 0;</code>
     */
    public static final int STOP_ALL_VALUE = 0;
    /**
     * <code>ONLY_ONCE = 1;</code>
     */
    public static final int ONLY_ONCE_VALUE = 1;
    /**
     * <code>ON_VALUE_CHANGE = 2;</code>
     */
    public static final int ON_VALUE_CHANGE_VALUE = 2;
    /**
     * <code>ON_SECOND_CHANGE = 3;</code>
     */
    public static final int ON_SECOND_CHANGE_VALUE = 3;
    /**
     * <code>ON_MINUTE_CHANGE = 4;</code>
     */
    public static final int ON_MINUTE_CHANGE_VALUE = 4;
    /**
     * <code>ON_HOUR_CHANGE = 5;</code>
     */
    public static final int ON_HOUR_CHANGE_VALUE = 5;
    /**
     * <code>ON_DAY_CHANGE = 6;</code>
     */
    public static final int ON_DAY_CHANGE_VALUE = 6;
    /**
     * <code>ON_TEN_MINUTE_CHANGE = 7;</code>
     */
    public static final int ON_TEN_MINUTE_CHANGE_VALUE = 7;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @Deprecated
    public static RtSync valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static RtSync forNumber(int value) {
      switch (value) {
        case 0: return STOP_ALL;
        case 1: return ONLY_ONCE;
        case 2: return ON_VALUE_CHANGE;
        case 3: return ON_SECOND_CHANGE;
        case 4: return ON_MINUTE_CHANGE;
        case 5: return ON_HOUR_CHANGE;
        case 6: return ON_DAY_CHANGE;
        case 7: return ON_TEN_MINUTE_CHANGE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<RtSync>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        RtSync> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<RtSync>() {
            public RtSync findValueByNumber(int number) {
              return RtSync.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return RealtimeData.getDescriptor().getEnumTypes().get(2);
    }

    private static final RtSync[] VALUES = values();

    public static RtSync valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private RtSync(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:RtSync)
  }

  /**
   * Protobuf enum {@code SensorType}
   */
  public enum SensorType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>NONE = 0;</code>
     */
    NONE(0),
    /**
     * <code>ECG = 1;</code>
     */
    ECG(1),
    /**
     * <code>PPG = 2;</code>
     */
    PPG(2),
    /**
     * <code>MAG = 4;</code>
     */
    MAG(4),
    /**
     * <code>GYRO = 8;</code>
     */
    GYRO(8),
    /**
     * <code>ACC = 16;</code>
     */
    ACC(16),
    /**
     * <code>BP = 32;</code>
     */
    BP(32),
    /**
     * <code>BPRESULT = 64;</code>
     */
    BPRESULT(64),
    /**
     * <code>TEMPERATURE = 128;</code>
     */
    TEMPERATURE(128),
    /**
     * <code>TWO_ECG = 256;</code>
     */
    TWO_ECG(256),
    /**
     * <code>BIOZ = 512;</code>
     */
    BIOZ(512),
    /**
     * <code>ECG_DETECT = 1024;</code>
     */
    ECG_DETECT(1024),
    /**
     * <code>FACTORY_ECG = 2048;</code>
     */
    FACTORY_ECG(2048),
    /**
     * <code>FACTORY_BIOZ = 4096;</code>
     */
    FACTORY_BIOZ(4096),
    /**
     * <code>HR_LEAK = 8192;</code>
     */
    HR_LEAK(8192),
    /**
     * <code>BP_LEAK = 16384;</code>
     */
    BP_LEAK(16384),
    /**
     * <code>SPO2 = 32768;</code>
     */
    SPO2(32768),
    /**
     * <code>OAQ = 65536;</code>
     */
    OAQ(65536),
    /**
     * <code>IAQ = 131072;</code>
     */
    IAQ(131072),
    /**
     * <code>HUMITURE = 262144;</code>
     */
    HUMITURE(262144),
    /**
     * <code>ULTRASONIC = 524288;</code>
     */
    ULTRASONIC(524288),
    ;

    /**
     * <code>NONE = 0;</code>
     */
    public static final int NONE_VALUE = 0;
    /**
     * <code>ECG = 1;</code>
     */
    public static final int ECG_VALUE = 1;
    /**
     * <code>PPG = 2;</code>
     */
    public static final int PPG_VALUE = 2;
    /**
     * <code>MAG = 4;</code>
     */
    public static final int MAG_VALUE = 4;
    /**
     * <code>GYRO = 8;</code>
     */
    public static final int GYRO_VALUE = 8;
    /**
     * <code>ACC = 16;</code>
     */
    public static final int ACC_VALUE = 16;
    /**
     * <code>BP = 32;</code>
     */
    public static final int BP_VALUE = 32;
    /**
     * <code>BPRESULT = 64;</code>
     */
    public static final int BPRESULT_VALUE = 64;
    /**
     * <code>TEMPERATURE = 128;</code>
     */
    public static final int TEMPERATURE_VALUE = 128;
    /**
     * <code>TWO_ECG = 256;</code>
     */
    public static final int TWO_ECG_VALUE = 256;
    /**
     * <code>BIOZ = 512;</code>
     */
    public static final int BIOZ_VALUE = 512;
    /**
     * <code>ECG_DETECT = 1024;</code>
     */
    public static final int ECG_DETECT_VALUE = 1024;
    /**
     * <code>FACTORY_ECG = 2048;</code>
     */
    public static final int FACTORY_ECG_VALUE = 2048;
    /**
     * <code>FACTORY_BIOZ = 4096;</code>
     */
    public static final int FACTORY_BIOZ_VALUE = 4096;
    /**
     * <code>HR_LEAK = 8192;</code>
     */
    public static final int HR_LEAK_VALUE = 8192;
    /**
     * <code>BP_LEAK = 16384;</code>
     */
    public static final int BP_LEAK_VALUE = 16384;
    /**
     * <code>SPO2 = 32768;</code>
     */
    public static final int SPO2_VALUE = 32768;
    /**
     * <code>OAQ = 65536;</code>
     */
    public static final int OAQ_VALUE = 65536;
    /**
     * <code>IAQ = 131072;</code>
     */
    public static final int IAQ_VALUE = 131072;
    /**
     * <code>HUMITURE = 262144;</code>
     */
    public static final int HUMITURE_VALUE = 262144;
    /**
     * <code>ULTRASONIC = 524288;</code>
     */
    public static final int ULTRASONIC_VALUE = 524288;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @Deprecated
    public static SensorType valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static SensorType forNumber(int value) {
      switch (value) {
        case 0: return NONE;
        case 1: return ECG;
        case 2: return PPG;
        case 4: return MAG;
        case 8: return GYRO;
        case 16: return ACC;
        case 32: return BP;
        case 64: return BPRESULT;
        case 128: return TEMPERATURE;
        case 256: return TWO_ECG;
        case 512: return BIOZ;
        case 1024: return ECG_DETECT;
        case 2048: return FACTORY_ECG;
        case 4096: return FACTORY_BIOZ;
        case 8192: return HR_LEAK;
        case 16384: return BP_LEAK;
        case 32768: return SPO2;
        case 65536: return OAQ;
        case 131072: return IAQ;
        case 262144: return HUMITURE;
        case 524288: return ULTRASONIC;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<SensorType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        SensorType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<SensorType>() {
            public SensorType findValueByNumber(int number) {
              return SensorType.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return RealtimeData.getDescriptor().getEnumTypes().get(3);
    }

    private static final SensorType[] VALUES = values();

    public static SensorType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private SensorType(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:SensorType)
  }

  /**
   * Protobuf enum {@code SensorOperation}
   */
  public enum SensorOperation
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     * start sync
     * </pre>
     *
     * <code>SENSOR_START_SYNC = 0;</code>
     */
    SENSOR_START_SYNC(0),
    /**
     * <pre>
     * pause sync
     * </pre>
     *
     * <code>SENSOR_PAUSE_SYNC = 1;</code>
     */
    SENSOR_PAUSE_SYNC(1),
    /**
     * <pre>
     * stop sync
     * </pre>
     *
     * <code>SENSOR_STOP_SYNC = 2;</code>
     */
    SENSOR_STOP_SYNC(2),
    ;

    /**
     * <pre>
     * start sync
     * </pre>
     *
     * <code>SENSOR_START_SYNC = 0;</code>
     */
    public static final int SENSOR_START_SYNC_VALUE = 0;
    /**
     * <pre>
     * pause sync
     * </pre>
     *
     * <code>SENSOR_PAUSE_SYNC = 1;</code>
     */
    public static final int SENSOR_PAUSE_SYNC_VALUE = 1;
    /**
     * <pre>
     * stop sync
     * </pre>
     *
     * <code>SENSOR_STOP_SYNC = 2;</code>
     */
    public static final int SENSOR_STOP_SYNC_VALUE = 2;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @Deprecated
    public static SensorOperation valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static SensorOperation forNumber(int value) {
      switch (value) {
        case 0: return SENSOR_START_SYNC;
        case 1: return SENSOR_PAUSE_SYNC;
        case 2: return SENSOR_STOP_SYNC;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<SensorOperation>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        SensorOperation> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<SensorOperation>() {
            public SensorOperation findValueByNumber(int number) {
              return SensorOperation.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return RealtimeData.getDescriptor().getEnumTypes().get(4);
    }

    private static final SensorOperation[] VALUES = values();

    public static SensorOperation valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private SensorOperation(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:SensorOperation)
  }

  /**
   * Protobuf enum {@code SportOperation}
   */
  public enum SportOperation
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     * start sync
     * </pre>
     *
     * <code>SPORT_START = 0;</code>
     */
    SPORT_START(0),
    /**
     * <pre>
     * pause sync
     * </pre>
     *
     * <code>SPORT_PAUSE = 1;</code>
     */
    SPORT_PAUSE(1),
    /**
     * <pre>
     * stop sync
     * </pre>
     *
     * <code>SPORT_STOP = 2;</code>
     */
    SPORT_STOP(2),
    ;

    /**
     * <pre>
     * start sync
     * </pre>
     *
     * <code>SPORT_START = 0;</code>
     */
    public static final int SPORT_START_VALUE = 0;
    /**
     * <pre>
     * pause sync
     * </pre>
     *
     * <code>SPORT_PAUSE = 1;</code>
     */
    public static final int SPORT_PAUSE_VALUE = 1;
    /**
     * <pre>
     * stop sync
     * </pre>
     *
     * <code>SPORT_STOP = 2;</code>
     */
    public static final int SPORT_STOP_VALUE = 2;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @Deprecated
    public static SportOperation valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static SportOperation forNumber(int value) {
      switch (value) {
        case 0: return SPORT_START;
        case 1: return SPORT_PAUSE;
        case 2: return SPORT_STOP;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<SportOperation>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        SportOperation> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<SportOperation>() {
            public SportOperation findValueByNumber(int number) {
              return SportOperation.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return RealtimeData.getDescriptor().getEnumTypes().get(5);
    }

    private static final SportOperation[] VALUES = values();

    public static SportOperation valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private SportOperation(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:SportOperation)
  }

  public interface RtTimeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtTime)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required fixed32 seconds = 1;</code>
     * @return Whether the seconds field is set.
     */
    boolean hasSeconds();
    /**
     * <code>required fixed32 seconds = 1;</code>
     * @return The seconds.
     */
    int getSeconds();
  }
  /**
   * Protobuf type {@code RtTime}
   */
  public  static final class RtTime extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtTime)
      RtTimeOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtTime.newBuilder() to construct.
    private RtTime(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtTime() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtTime();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtTime(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              seconds_ = input.readFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtTime_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtTime_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtTime.class, Builder.class);
    }

    private int bitField0_;
    public static final int SECONDS_FIELD_NUMBER = 1;
    private int seconds_;
    /**
     * <code>required fixed32 seconds = 1;</code>
     * @return Whether the seconds field is set.
     */
    public boolean hasSeconds() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required fixed32 seconds = 1;</code>
     * @return The seconds.
     */
    public int getSeconds() {
      return seconds_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasSeconds()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, seconds_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, seconds_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtTime)) {
        return super.equals(obj);
      }
      RtTime other = (RtTime) obj;

      if (hasSeconds() != other.hasSeconds()) return false;
      if (hasSeconds()) {
        if (getSeconds()
            != other.getSeconds()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasSeconds()) {
        hash = (37 * hash) + SECONDS_FIELD_NUMBER;
        hash = (53 * hash) + getSeconds();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtTime parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtTime parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtTime parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtTime parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtTime parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtTime parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtTime parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtTime parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtTime parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtTime parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtTime parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtTime parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtTime prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtTime}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtTime)
        RtTimeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtTime_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtTime_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtTime.class, Builder.class);
      }

      // Construct using RealtimeData.RtTime.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        seconds_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtTime_descriptor;
      }

      @Override
      public RtTime getDefaultInstanceForType() {
        return RtTime.getDefaultInstance();
      }

      @Override
      public RtTime build() {
        RtTime result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtTime buildPartial() {
        RtTime result = new RtTime(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.seconds_ = seconds_;
          to_bitField0_ |= 0x00000001;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtTime) {
          return mergeFrom((RtTime)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtTime other) {
        if (other == RtTime.getDefaultInstance()) return this;
        if (other.hasSeconds()) {
          setSeconds(other.getSeconds());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasSeconds()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtTime parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtTime) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int seconds_ ;
      /**
       * <code>required fixed32 seconds = 1;</code>
       * @return Whether the seconds field is set.
       */
      public boolean hasSeconds() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required fixed32 seconds = 1;</code>
       * @return The seconds.
       */
      public int getSeconds() {
        return seconds_;
      }
      /**
       * <code>required fixed32 seconds = 1;</code>
       * @param value The seconds to set.
       * @return This builder for chaining.
       */
      public Builder setSeconds(int value) {
        bitField0_ |= 0x00000001;
        seconds_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 seconds = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSeconds() {
        bitField0_ = (bitField0_ & ~0x00000001);
        seconds_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtTime)
    }

    // @@protoc_insertion_point(class_scope:RtTime)
    private static final RtTime DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtTime();
    }

    public static RtTime getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtTime>
        PARSER = new com.google.protobuf.AbstractParser<RtTime>() {
      @Override
      public RtTime parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtTime(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtTime> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtTime> getParserForType() {
      return PARSER;
    }

    @Override
    public RtTime getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DateTimeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:DateTime)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .RtTime date_time = 1;</code>
     * @return Whether the dateTime field is set.
     */
    boolean hasDateTime();
    /**
     * <code>required .RtTime date_time = 1;</code>
     * @return The dateTime.
     */
    RtTime getDateTime();
    /**
     * <code>required .RtTime date_time = 1;</code>
     */
    RtTimeOrBuilder getDateTimeOrBuilder();

    /**
     * <code>required sfixed32 time_zone = 2;</code>
     * @return Whether the timeZone field is set.
     */
    boolean hasTimeZone();
    /**
     * <code>required sfixed32 time_zone = 2;</code>
     * @return The timeZone.
     */
    int getTimeZone();
  }
  /**
   * Protobuf type {@code DateTime}
   */
  public  static final class DateTime extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:DateTime)
      DateTimeOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DateTime.newBuilder() to construct.
    private DateTime(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DateTime() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new DateTime();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DateTime(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              RtTime.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = dateTime_.toBuilder();
              }
              dateTime_ = input.readMessage(RtTime.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(dateTime_);
                dateTime_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              timeZone_ = input.readSFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_DateTime_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_DateTime_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              DateTime.class, Builder.class);
    }

    private int bitField0_;
    public static final int DATE_TIME_FIELD_NUMBER = 1;
    private RtTime dateTime_;
    /**
     * <code>required .RtTime date_time = 1;</code>
     * @return Whether the dateTime field is set.
     */
    public boolean hasDateTime() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .RtTime date_time = 1;</code>
     * @return The dateTime.
     */
    public RtTime getDateTime() {
      return dateTime_ == null ? RtTime.getDefaultInstance() : dateTime_;
    }
    /**
     * <code>required .RtTime date_time = 1;</code>
     */
    public RtTimeOrBuilder getDateTimeOrBuilder() {
      return dateTime_ == null ? RtTime.getDefaultInstance() : dateTime_;
    }

    public static final int TIME_ZONE_FIELD_NUMBER = 2;
    private int timeZone_;
    /**
     * <code>required sfixed32 time_zone = 2;</code>
     * @return Whether the timeZone field is set.
     */
    public boolean hasTimeZone() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required sfixed32 time_zone = 2;</code>
     * @return The timeZone.
     */
    public int getTimeZone() {
      return timeZone_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasDateTime()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTimeZone()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getDateTime().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(1, getDateTime());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeSFixed32(2, timeZone_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getDateTime());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSFixed32Size(2, timeZone_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof DateTime)) {
        return super.equals(obj);
      }
      DateTime other = (DateTime) obj;

      if (hasDateTime() != other.hasDateTime()) return false;
      if (hasDateTime()) {
        if (!getDateTime()
            .equals(other.getDateTime())) return false;
      }
      if (hasTimeZone() != other.hasTimeZone()) return false;
      if (hasTimeZone()) {
        if (getTimeZone()
            != other.getTimeZone()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasDateTime()) {
        hash = (37 * hash) + DATE_TIME_FIELD_NUMBER;
        hash = (53 * hash) + getDateTime().hashCode();
      }
      if (hasTimeZone()) {
        hash = (37 * hash) + TIME_ZONE_FIELD_NUMBER;
        hash = (53 * hash) + getTimeZone();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static DateTime parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DateTime parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DateTime parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DateTime parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DateTime parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DateTime parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DateTime parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DateTime parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static DateTime parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static DateTime parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static DateTime parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DateTime parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(DateTime prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DateTime}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:DateTime)
        DateTimeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_DateTime_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_DateTime_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                DateTime.class, Builder.class);
      }

      // Construct using RealtimeData.DateTime.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getDateTimeFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        if (dateTimeBuilder_ == null) {
          dateTime_ = null;
        } else {
          dateTimeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        timeZone_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_DateTime_descriptor;
      }

      @Override
      public DateTime getDefaultInstanceForType() {
        return DateTime.getDefaultInstance();
      }

      @Override
      public DateTime build() {
        DateTime result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public DateTime buildPartial() {
        DateTime result = new DateTime(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (dateTimeBuilder_ == null) {
            result.dateTime_ = dateTime_;
          } else {
            result.dateTime_ = dateTimeBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.timeZone_ = timeZone_;
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof DateTime) {
          return mergeFrom((DateTime)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(DateTime other) {
        if (other == DateTime.getDefaultInstance()) return this;
        if (other.hasDateTime()) {
          mergeDateTime(other.getDateTime());
        }
        if (other.hasTimeZone()) {
          setTimeZone(other.getTimeZone());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasDateTime()) {
          return false;
        }
        if (!hasTimeZone()) {
          return false;
        }
        if (!getDateTime().isInitialized()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        DateTime parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (DateTime) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private RtTime dateTime_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RtTime, RtTime.Builder, RtTimeOrBuilder> dateTimeBuilder_;
      /**
       * <code>required .RtTime date_time = 1;</code>
       * @return Whether the dateTime field is set.
       */
      public boolean hasDateTime() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required .RtTime date_time = 1;</code>
       * @return The dateTime.
       */
      public RtTime getDateTime() {
        if (dateTimeBuilder_ == null) {
          return dateTime_ == null ? RtTime.getDefaultInstance() : dateTime_;
        } else {
          return dateTimeBuilder_.getMessage();
        }
      }
      /**
       * <code>required .RtTime date_time = 1;</code>
       */
      public Builder setDateTime(RtTime value) {
        if (dateTimeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          dateTime_ = value;
          onChanged();
        } else {
          dateTimeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .RtTime date_time = 1;</code>
       */
      public Builder setDateTime(
          RtTime.Builder builderForValue) {
        if (dateTimeBuilder_ == null) {
          dateTime_ = builderForValue.build();
          onChanged();
        } else {
          dateTimeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .RtTime date_time = 1;</code>
       */
      public Builder mergeDateTime(RtTime value) {
        if (dateTimeBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              dateTime_ != null &&
              dateTime_ != RtTime.getDefaultInstance()) {
            dateTime_ =
              RtTime.newBuilder(dateTime_).mergeFrom(value).buildPartial();
          } else {
            dateTime_ = value;
          }
          onChanged();
        } else {
          dateTimeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .RtTime date_time = 1;</code>
       */
      public Builder clearDateTime() {
        if (dateTimeBuilder_ == null) {
          dateTime_ = null;
          onChanged();
        } else {
          dateTimeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>required .RtTime date_time = 1;</code>
       */
      public RtTime.Builder getDateTimeBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDateTimeFieldBuilder().getBuilder();
      }
      /**
       * <code>required .RtTime date_time = 1;</code>
       */
      public RtTimeOrBuilder getDateTimeOrBuilder() {
        if (dateTimeBuilder_ != null) {
          return dateTimeBuilder_.getMessageOrBuilder();
        } else {
          return dateTime_ == null ?
              RtTime.getDefaultInstance() : dateTime_;
        }
      }
      /**
       * <code>required .RtTime date_time = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtTime, RtTime.Builder, RtTimeOrBuilder>
          getDateTimeFieldBuilder() {
        if (dateTimeBuilder_ == null) {
          dateTimeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtTime, RtTime.Builder, RtTimeOrBuilder>(
                  getDateTime(),
                  getParentForChildren(),
                  isClean());
          dateTime_ = null;
        }
        return dateTimeBuilder_;
      }

      private int timeZone_ ;
      /**
       * <code>required sfixed32 time_zone = 2;</code>
       * @return Whether the timeZone field is set.
       */
      public boolean hasTimeZone() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required sfixed32 time_zone = 2;</code>
       * @return The timeZone.
       */
      public int getTimeZone() {
        return timeZone_;
      }
      /**
       * <code>required sfixed32 time_zone = 2;</code>
       * @param value The timeZone to set.
       * @return This builder for chaining.
       */
      public Builder setTimeZone(int value) {
        bitField0_ |= 0x00000002;
        timeZone_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required sfixed32 time_zone = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimeZone() {
        bitField0_ = (bitField0_ & ~0x00000002);
        timeZone_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:DateTime)
    }

    // @@protoc_insertion_point(class_scope:DateTime)
    private static final DateTime DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new DateTime();
    }

    public static DateTime getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<DateTime>
        PARSER = new com.google.protobuf.AbstractParser<DateTime>() {
      @Override
      public DateTime parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DateTime(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<DateTime> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<DateTime> getParserForType() {
      return PARSER;
    }

    @Override
    public DateTime getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtBatteryOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtBattery)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     *0~9
     * </pre>
     *
     * <code>required fixed32 level = 1;</code>
     * @return Whether the level field is set.
     */
    boolean hasLevel();
    /**
     * <pre>
     *0~9
     * </pre>
     *
     * <code>required fixed32 level = 1;</code>
     * @return The level.
     */
    int getLevel();

    /**
     * <code>required bool charging = 2;</code>
     * @return Whether the charging field is set.
     */
    boolean hasCharging();
    /**
     * <code>required bool charging = 2;</code>
     * @return The charging.
     */
    boolean getCharging();
  }
  /**
   * Protobuf type {@code RtBattery}
   */
  public  static final class RtBattery extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtBattery)
      RtBatteryOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtBattery.newBuilder() to construct.
    private RtBattery(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtBattery() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtBattery();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtBattery(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              level_ = input.readFixed32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              charging_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtBattery_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtBattery_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtBattery.class, Builder.class);
    }

    private int bitField0_;
    public static final int LEVEL_FIELD_NUMBER = 1;
    private int level_;
    /**
     * <pre>
     *0~9
     * </pre>
     *
     * <code>required fixed32 level = 1;</code>
     * @return Whether the level field is set.
     */
    public boolean hasLevel() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     *0~9
     * </pre>
     *
     * <code>required fixed32 level = 1;</code>
     * @return The level.
     */
    public int getLevel() {
      return level_;
    }

    public static final int CHARGING_FIELD_NUMBER = 2;
    private boolean charging_;
    /**
     * <code>required bool charging = 2;</code>
     * @return Whether the charging field is set.
     */
    public boolean hasCharging() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required bool charging = 2;</code>
     * @return The charging.
     */
    public boolean getCharging() {
      return charging_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasLevel()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasCharging()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, level_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeBool(2, charging_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, level_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, charging_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtBattery)) {
        return super.equals(obj);
      }
      RtBattery other = (RtBattery) obj;

      if (hasLevel() != other.hasLevel()) return false;
      if (hasLevel()) {
        if (getLevel()
            != other.getLevel()) return false;
      }
      if (hasCharging() != other.hasCharging()) return false;
      if (hasCharging()) {
        if (getCharging()
            != other.getCharging()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasLevel()) {
        hash = (37 * hash) + LEVEL_FIELD_NUMBER;
        hash = (53 * hash) + getLevel();
      }
      if (hasCharging()) {
        hash = (37 * hash) + CHARGING_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getCharging());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtBattery parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtBattery parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtBattery parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtBattery parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtBattery parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtBattery parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtBattery parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtBattery parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtBattery parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtBattery parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtBattery parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtBattery parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtBattery prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtBattery}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtBattery)
        RtBatteryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtBattery_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtBattery_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtBattery.class, Builder.class);
      }

      // Construct using RealtimeData.RtBattery.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        level_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        charging_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtBattery_descriptor;
      }

      @Override
      public RtBattery getDefaultInstanceForType() {
        return RtBattery.getDefaultInstance();
      }

      @Override
      public RtBattery build() {
        RtBattery result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtBattery buildPartial() {
        RtBattery result = new RtBattery(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.level_ = level_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.charging_ = charging_;
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtBattery) {
          return mergeFrom((RtBattery)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtBattery other) {
        if (other == RtBattery.getDefaultInstance()) return this;
        if (other.hasLevel()) {
          setLevel(other.getLevel());
        }
        if (other.hasCharging()) {
          setCharging(other.getCharging());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasLevel()) {
          return false;
        }
        if (!hasCharging()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtBattery parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtBattery) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int level_ ;
      /**
       * <pre>
       *0~9
       * </pre>
       *
       * <code>required fixed32 level = 1;</code>
       * @return Whether the level field is set.
       */
      public boolean hasLevel() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       *0~9
       * </pre>
       *
       * <code>required fixed32 level = 1;</code>
       * @return The level.
       */
      public int getLevel() {
        return level_;
      }
      /**
       * <pre>
       *0~9
       * </pre>
       *
       * <code>required fixed32 level = 1;</code>
       * @param value The level to set.
       * @return This builder for chaining.
       */
      public Builder setLevel(int value) {
        bitField0_ |= 0x00000001;
        level_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *0~9
       * </pre>
       *
       * <code>required fixed32 level = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearLevel() {
        bitField0_ = (bitField0_ & ~0x00000001);
        level_ = 0;
        onChanged();
        return this;
      }

      private boolean charging_ ;
      /**
       * <code>required bool charging = 2;</code>
       * @return Whether the charging field is set.
       */
      public boolean hasCharging() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required bool charging = 2;</code>
       * @return The charging.
       */
      public boolean getCharging() {
        return charging_;
      }
      /**
       * <code>required bool charging = 2;</code>
       * @param value The charging to set.
       * @return This builder for chaining.
       */
      public Builder setCharging(boolean value) {
        bitField0_ |= 0x00000002;
        charging_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool charging = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearCharging() {
        bitField0_ = (bitField0_ & ~0x00000002);
        charging_ = false;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtBattery)
    }

    // @@protoc_insertion_point(class_scope:RtBattery)
    private static final RtBattery DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtBattery();
    }

    public static RtBattery getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtBattery>
        PARSER = new com.google.protobuf.AbstractParser<RtBattery>() {
      @Override
      public RtBattery parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtBattery(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtBattery> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtBattery> getParserForType() {
      return PARSER;
    }

    @Override
    public RtBattery getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtHealthOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtHealth)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required fixed32 steps = 1;</code>
     * @return Whether the steps field is set.
     */
    boolean hasSteps();
    /**
     * <code>required fixed32 steps = 1;</code>
     * @return The steps.
     */
    int getSteps();

    /**
     * <code>required fixed32 distance = 2;</code>
     * @return Whether the distance field is set.
     */
    boolean hasDistance();
    /**
     * <code>required fixed32 distance = 2;</code>
     * @return The distance.
     */
    int getDistance();

    /**
     * <code>required fixed32 calorie = 3;</code>
     * @return Whether the calorie field is set.
     */
    boolean hasCalorie();
    /**
     * <code>required fixed32 calorie = 3;</code>
     * @return The calorie.
     */
    int getCalorie();
  }
  /**
   * Protobuf type {@code RtHealth}
   */
  public  static final class RtHealth extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtHealth)
      RtHealthOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtHealth.newBuilder() to construct.
    private RtHealth(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtHealth() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtHealth();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtHealth(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              steps_ = input.readFixed32();
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              distance_ = input.readFixed32();
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              calorie_ = input.readFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtHealth_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtHealth_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtHealth.class, Builder.class);
    }

    private int bitField0_;
    public static final int STEPS_FIELD_NUMBER = 1;
    private int steps_;
    /**
     * <code>required fixed32 steps = 1;</code>
     * @return Whether the steps field is set.
     */
    public boolean hasSteps() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required fixed32 steps = 1;</code>
     * @return The steps.
     */
    public int getSteps() {
      return steps_;
    }

    public static final int DISTANCE_FIELD_NUMBER = 2;
    private int distance_;
    /**
     * <code>required fixed32 distance = 2;</code>
     * @return Whether the distance field is set.
     */
    public boolean hasDistance() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required fixed32 distance = 2;</code>
     * @return The distance.
     */
    public int getDistance() {
      return distance_;
    }

    public static final int CALORIE_FIELD_NUMBER = 3;
    private int calorie_;
    /**
     * <code>required fixed32 calorie = 3;</code>
     * @return Whether the calorie field is set.
     */
    public boolean hasCalorie() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>required fixed32 calorie = 3;</code>
     * @return The calorie.
     */
    public int getCalorie() {
      return calorie_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasSteps()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDistance()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasCalorie()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, steps_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeFixed32(2, distance_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFixed32(3, calorie_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, steps_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(2, distance_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(3, calorie_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtHealth)) {
        return super.equals(obj);
      }
      RtHealth other = (RtHealth) obj;

      if (hasSteps() != other.hasSteps()) return false;
      if (hasSteps()) {
        if (getSteps()
            != other.getSteps()) return false;
      }
      if (hasDistance() != other.hasDistance()) return false;
      if (hasDistance()) {
        if (getDistance()
            != other.getDistance()) return false;
      }
      if (hasCalorie() != other.hasCalorie()) return false;
      if (hasCalorie()) {
        if (getCalorie()
            != other.getCalorie()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasSteps()) {
        hash = (37 * hash) + STEPS_FIELD_NUMBER;
        hash = (53 * hash) + getSteps();
      }
      if (hasDistance()) {
        hash = (37 * hash) + DISTANCE_FIELD_NUMBER;
        hash = (53 * hash) + getDistance();
      }
      if (hasCalorie()) {
        hash = (37 * hash) + CALORIE_FIELD_NUMBER;
        hash = (53 * hash) + getCalorie();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtHealth parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtHealth parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtHealth parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtHealth parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtHealth parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtHealth parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtHealth parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtHealth parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtHealth parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtHealth parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtHealth parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtHealth parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtHealth prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtHealth}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtHealth)
        RtHealthOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtHealth_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtHealth_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtHealth.class, Builder.class);
      }

      // Construct using RealtimeData.RtHealth.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        steps_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        distance_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        calorie_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtHealth_descriptor;
      }

      @Override
      public RtHealth getDefaultInstanceForType() {
        return RtHealth.getDefaultInstance();
      }

      @Override
      public RtHealth build() {
        RtHealth result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtHealth buildPartial() {
        RtHealth result = new RtHealth(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.steps_ = steps_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.distance_ = distance_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.calorie_ = calorie_;
          to_bitField0_ |= 0x00000004;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtHealth) {
          return mergeFrom((RtHealth)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtHealth other) {
        if (other == RtHealth.getDefaultInstance()) return this;
        if (other.hasSteps()) {
          setSteps(other.getSteps());
        }
        if (other.hasDistance()) {
          setDistance(other.getDistance());
        }
        if (other.hasCalorie()) {
          setCalorie(other.getCalorie());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasSteps()) {
          return false;
        }
        if (!hasDistance()) {
          return false;
        }
        if (!hasCalorie()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtHealth parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtHealth) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int steps_ ;
      /**
       * <code>required fixed32 steps = 1;</code>
       * @return Whether the steps field is set.
       */
      public boolean hasSteps() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required fixed32 steps = 1;</code>
       * @return The steps.
       */
      public int getSteps() {
        return steps_;
      }
      /**
       * <code>required fixed32 steps = 1;</code>
       * @param value The steps to set.
       * @return This builder for chaining.
       */
      public Builder setSteps(int value) {
        bitField0_ |= 0x00000001;
        steps_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 steps = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSteps() {
        bitField0_ = (bitField0_ & ~0x00000001);
        steps_ = 0;
        onChanged();
        return this;
      }

      private int distance_ ;
      /**
       * <code>required fixed32 distance = 2;</code>
       * @return Whether the distance field is set.
       */
      public boolean hasDistance() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required fixed32 distance = 2;</code>
       * @return The distance.
       */
      public int getDistance() {
        return distance_;
      }
      /**
       * <code>required fixed32 distance = 2;</code>
       * @param value The distance to set.
       * @return This builder for chaining.
       */
      public Builder setDistance(int value) {
        bitField0_ |= 0x00000002;
        distance_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 distance = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearDistance() {
        bitField0_ = (bitField0_ & ~0x00000002);
        distance_ = 0;
        onChanged();
        return this;
      }

      private int calorie_ ;
      /**
       * <code>required fixed32 calorie = 3;</code>
       * @return Whether the calorie field is set.
       */
      public boolean hasCalorie() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>required fixed32 calorie = 3;</code>
       * @return The calorie.
       */
      public int getCalorie() {
        return calorie_;
      }
      /**
       * <code>required fixed32 calorie = 3;</code>
       * @param value The calorie to set.
       * @return This builder for chaining.
       */
      public Builder setCalorie(int value) {
        bitField0_ |= 0x00000004;
        calorie_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 calorie = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearCalorie() {
        bitField0_ = (bitField0_ & ~0x00000004);
        calorie_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtHealth)
    }

    // @@protoc_insertion_point(class_scope:RtHealth)
    private static final RtHealth DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtHealth();
    }

    public static RtHealth getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtHealth>
        PARSER = new com.google.protobuf.AbstractParser<RtHealth>() {
      @Override
      public RtHealth parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtHealth(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtHealth> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtHealth> getParserForType() {
      return PARSER;
    }

    @Override
    public RtHealth getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface BPresultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:BPresult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required fixed32 sbp = 1;</code>
     * @return Whether the sbp field is set.
     */
    boolean hasSbp();
    /**
     * <code>required fixed32 sbp = 1;</code>
     * @return The sbp.
     */
    int getSbp();

    /**
     * <code>required fixed32 dbp = 2;</code>
     * @return Whether the dbp field is set.
     */
    boolean hasDbp();
    /**
     * <code>required fixed32 dbp = 2;</code>
     * @return The dbp.
     */
    int getDbp();
  }
  /**
   * Protobuf type {@code BPresult}
   */
  public  static final class BPresult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:BPresult)
      BPresultOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use BPresult.newBuilder() to construct.
    private BPresult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private BPresult() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new BPresult();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private BPresult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              sbp_ = input.readFixed32();
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              dbp_ = input.readFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_BPresult_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_BPresult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              BPresult.class, Builder.class);
    }

    private int bitField0_;
    public static final int SBP_FIELD_NUMBER = 1;
    private int sbp_;
    /**
     * <code>required fixed32 sbp = 1;</code>
     * @return Whether the sbp field is set.
     */
    public boolean hasSbp() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required fixed32 sbp = 1;</code>
     * @return The sbp.
     */
    public int getSbp() {
      return sbp_;
    }

    public static final int DBP_FIELD_NUMBER = 2;
    private int dbp_;
    /**
     * <code>required fixed32 dbp = 2;</code>
     * @return Whether the dbp field is set.
     */
    public boolean hasDbp() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required fixed32 dbp = 2;</code>
     * @return The dbp.
     */
    public int getDbp() {
      return dbp_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasSbp()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDbp()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, sbp_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeFixed32(2, dbp_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, sbp_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(2, dbp_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof BPresult)) {
        return super.equals(obj);
      }
      BPresult other = (BPresult) obj;

      if (hasSbp() != other.hasSbp()) return false;
      if (hasSbp()) {
        if (getSbp()
            != other.getSbp()) return false;
      }
      if (hasDbp() != other.hasDbp()) return false;
      if (hasDbp()) {
        if (getDbp()
            != other.getDbp()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasSbp()) {
        hash = (37 * hash) + SBP_FIELD_NUMBER;
        hash = (53 * hash) + getSbp();
      }
      if (hasDbp()) {
        hash = (37 * hash) + DBP_FIELD_NUMBER;
        hash = (53 * hash) + getDbp();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static BPresult parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static BPresult parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static BPresult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static BPresult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static BPresult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static BPresult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static BPresult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static BPresult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static BPresult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static BPresult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static BPresult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static BPresult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(BPresult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BPresult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:BPresult)
        BPresultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_BPresult_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_BPresult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                BPresult.class, Builder.class);
      }

      // Construct using RealtimeData.BPresult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        sbp_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        dbp_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_BPresult_descriptor;
      }

      @Override
      public BPresult getDefaultInstanceForType() {
        return BPresult.getDefaultInstance();
      }

      @Override
      public BPresult build() {
        BPresult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public BPresult buildPartial() {
        BPresult result = new BPresult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.sbp_ = sbp_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.dbp_ = dbp_;
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof BPresult) {
          return mergeFrom((BPresult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(BPresult other) {
        if (other == BPresult.getDefaultInstance()) return this;
        if (other.hasSbp()) {
          setSbp(other.getSbp());
        }
        if (other.hasDbp()) {
          setDbp(other.getDbp());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasSbp()) {
          return false;
        }
        if (!hasDbp()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        BPresult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (BPresult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int sbp_ ;
      /**
       * <code>required fixed32 sbp = 1;</code>
       * @return Whether the sbp field is set.
       */
      public boolean hasSbp() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required fixed32 sbp = 1;</code>
       * @return The sbp.
       */
      public int getSbp() {
        return sbp_;
      }
      /**
       * <code>required fixed32 sbp = 1;</code>
       * @param value The sbp to set.
       * @return This builder for chaining.
       */
      public Builder setSbp(int value) {
        bitField0_ |= 0x00000001;
        sbp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 sbp = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSbp() {
        bitField0_ = (bitField0_ & ~0x00000001);
        sbp_ = 0;
        onChanged();
        return this;
      }

      private int dbp_ ;
      /**
       * <code>required fixed32 dbp = 2;</code>
       * @return Whether the dbp field is set.
       */
      public boolean hasDbp() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required fixed32 dbp = 2;</code>
       * @return The dbp.
       */
      public int getDbp() {
        return dbp_;
      }
      /**
       * <code>required fixed32 dbp = 2;</code>
       * @param value The dbp to set.
       * @return This builder for chaining.
       */
      public Builder setDbp(int value) {
        bitField0_ |= 0x00000002;
        dbp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 dbp = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearDbp() {
        bitField0_ = (bitField0_ & ~0x00000002);
        dbp_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:BPresult)
    }

    // @@protoc_insertion_point(class_scope:BPresult)
    private static final BPresult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new BPresult();
    }

    public static BPresult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<BPresult>
        PARSER = new com.google.protobuf.AbstractParser<BPresult>() {
      @Override
      public BPresult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new BPresult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<BPresult> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<BPresult> getParserForType() {
      return PARSER;
    }

    @Override
    public BPresult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtHealthResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtHealthResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional fixed32 fatigue = 1;</code>
     * @return Whether the fatigue field is set.
     */
    boolean hasFatigue();
    /**
     * <code>optional fixed32 fatigue = 1;</code>
     * @return The fatigue.
     */
    int getFatigue();

    /**
     * <code>optional fixed32 stress = 2;</code>
     * @return Whether the stress field is set.
     */
    boolean hasStress();
    /**
     * <code>optional fixed32 stress = 2;</code>
     * @return The stress.
     */
    int getStress();

    /**
     * <code>optional fixed32 spo2 = 3;</code>
     * @return Whether the spo2 field is set.
     */
    boolean hasSpo2();
    /**
     * <code>optional fixed32 spo2 = 3;</code>
     * @return The spo2.
     */
    int getSpo2();

    /**
     * <code>optional fixed32 hr = 4;</code>
     * @return Whether the hr field is set.
     */
    boolean hasHr();
    /**
     * <code>optional fixed32 hr = 4;</code>
     * @return The hr.
     */
    int getHr();

    /**
     * <code>optional .BPresult bp = 5;</code>
     * @return Whether the bp field is set.
     */
    boolean hasBp();
    /**
     * <code>optional .BPresult bp = 5;</code>
     * @return The bp.
     */
    BPresult getBp();
    /**
     * <code>optional .BPresult bp = 5;</code>
     */
    BPresultOrBuilder getBpOrBuilder();

    /**
     * <code>optional fixed32 breathrate = 6;</code>
     * @return Whether the breathrate field is set.
     */
    boolean hasBreathrate();
    /**
     * <code>optional fixed32 breathrate = 6;</code>
     * @return The breathrate.
     */
    int getBreathrate();

    /**
     * <code>optional fixed32 temperatur = 7;</code>
     * @return Whether the temperatur field is set.
     */
    boolean hasTemperatur();
    /**
     * <code>optional fixed32 temperatur = 7;</code>
     * @return The temperatur.
     */
    int getTemperatur();
  }
  /**
   * Protobuf type {@code RtHealthResult}
   */
  public  static final class RtHealthResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtHealthResult)
      RtHealthResultOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtHealthResult.newBuilder() to construct.
    private RtHealthResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtHealthResult() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtHealthResult();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtHealthResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              fatigue_ = input.readFixed32();
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              stress_ = input.readFixed32();
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              spo2_ = input.readFixed32();
              break;
            }
            case 37: {
              bitField0_ |= 0x00000008;
              hr_ = input.readFixed32();
              break;
            }
            case 42: {
              BPresult.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) != 0)) {
                subBuilder = bp_.toBuilder();
              }
              bp_ = input.readMessage(BPresult.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(bp_);
                bp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 53: {
              bitField0_ |= 0x00000020;
              breathrate_ = input.readFixed32();
              break;
            }
            case 61: {
              bitField0_ |= 0x00000040;
              temperatur_ = input.readFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtHealthResult_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtHealthResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtHealthResult.class, Builder.class);
    }

    private int bitField0_;
    public static final int FATIGUE_FIELD_NUMBER = 1;
    private int fatigue_;
    /**
     * <code>optional fixed32 fatigue = 1;</code>
     * @return Whether the fatigue field is set.
     */
    public boolean hasFatigue() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional fixed32 fatigue = 1;</code>
     * @return The fatigue.
     */
    public int getFatigue() {
      return fatigue_;
    }

    public static final int STRESS_FIELD_NUMBER = 2;
    private int stress_;
    /**
     * <code>optional fixed32 stress = 2;</code>
     * @return Whether the stress field is set.
     */
    public boolean hasStress() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional fixed32 stress = 2;</code>
     * @return The stress.
     */
    public int getStress() {
      return stress_;
    }

    public static final int SPO2_FIELD_NUMBER = 3;
    private int spo2_;
    /**
     * <code>optional fixed32 spo2 = 3;</code>
     * @return Whether the spo2 field is set.
     */
    public boolean hasSpo2() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional fixed32 spo2 = 3;</code>
     * @return The spo2.
     */
    public int getSpo2() {
      return spo2_;
    }

    public static final int HR_FIELD_NUMBER = 4;
    private int hr_;
    /**
     * <code>optional fixed32 hr = 4;</code>
     * @return Whether the hr field is set.
     */
    public boolean hasHr() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional fixed32 hr = 4;</code>
     * @return The hr.
     */
    public int getHr() {
      return hr_;
    }

    public static final int BP_FIELD_NUMBER = 5;
    private BPresult bp_;
    /**
     * <code>optional .BPresult bp = 5;</code>
     * @return Whether the bp field is set.
     */
    public boolean hasBp() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional .BPresult bp = 5;</code>
     * @return The bp.
     */
    public BPresult getBp() {
      return bp_ == null ? BPresult.getDefaultInstance() : bp_;
    }
    /**
     * <code>optional .BPresult bp = 5;</code>
     */
    public BPresultOrBuilder getBpOrBuilder() {
      return bp_ == null ? BPresult.getDefaultInstance() : bp_;
    }

    public static final int BREATHRATE_FIELD_NUMBER = 6;
    private int breathrate_;
    /**
     * <code>optional fixed32 breathrate = 6;</code>
     * @return Whether the breathrate field is set.
     */
    public boolean hasBreathrate() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional fixed32 breathrate = 6;</code>
     * @return The breathrate.
     */
    public int getBreathrate() {
      return breathrate_;
    }

    public static final int TEMPERATUR_FIELD_NUMBER = 7;
    private int temperatur_;
    /**
     * <code>optional fixed32 temperatur = 7;</code>
     * @return Whether the temperatur field is set.
     */
    public boolean hasTemperatur() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional fixed32 temperatur = 7;</code>
     * @return The temperatur.
     */
    public int getTemperatur() {
      return temperatur_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (hasBp()) {
        if (!getBp().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, fatigue_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeFixed32(2, stress_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFixed32(3, spo2_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeFixed32(4, hr_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeMessage(5, getBp());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeFixed32(6, breathrate_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeFixed32(7, temperatur_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, fatigue_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(2, stress_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(3, spo2_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(4, hr_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getBp());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(6, breathrate_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(7, temperatur_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtHealthResult)) {
        return super.equals(obj);
      }
      RtHealthResult other = (RtHealthResult) obj;

      if (hasFatigue() != other.hasFatigue()) return false;
      if (hasFatigue()) {
        if (getFatigue()
            != other.getFatigue()) return false;
      }
      if (hasStress() != other.hasStress()) return false;
      if (hasStress()) {
        if (getStress()
            != other.getStress()) return false;
      }
      if (hasSpo2() != other.hasSpo2()) return false;
      if (hasSpo2()) {
        if (getSpo2()
            != other.getSpo2()) return false;
      }
      if (hasHr() != other.hasHr()) return false;
      if (hasHr()) {
        if (getHr()
            != other.getHr()) return false;
      }
      if (hasBp() != other.hasBp()) return false;
      if (hasBp()) {
        if (!getBp()
            .equals(other.getBp())) return false;
      }
      if (hasBreathrate() != other.hasBreathrate()) return false;
      if (hasBreathrate()) {
        if (getBreathrate()
            != other.getBreathrate()) return false;
      }
      if (hasTemperatur() != other.hasTemperatur()) return false;
      if (hasTemperatur()) {
        if (getTemperatur()
            != other.getTemperatur()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasFatigue()) {
        hash = (37 * hash) + FATIGUE_FIELD_NUMBER;
        hash = (53 * hash) + getFatigue();
      }
      if (hasStress()) {
        hash = (37 * hash) + STRESS_FIELD_NUMBER;
        hash = (53 * hash) + getStress();
      }
      if (hasSpo2()) {
        hash = (37 * hash) + SPO2_FIELD_NUMBER;
        hash = (53 * hash) + getSpo2();
      }
      if (hasHr()) {
        hash = (37 * hash) + HR_FIELD_NUMBER;
        hash = (53 * hash) + getHr();
      }
      if (hasBp()) {
        hash = (37 * hash) + BP_FIELD_NUMBER;
        hash = (53 * hash) + getBp().hashCode();
      }
      if (hasBreathrate()) {
        hash = (37 * hash) + BREATHRATE_FIELD_NUMBER;
        hash = (53 * hash) + getBreathrate();
      }
      if (hasTemperatur()) {
        hash = (37 * hash) + TEMPERATUR_FIELD_NUMBER;
        hash = (53 * hash) + getTemperatur();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtHealthResult parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtHealthResult parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtHealthResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtHealthResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtHealthResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtHealthResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtHealthResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtHealthResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtHealthResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtHealthResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtHealthResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtHealthResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtHealthResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtHealthResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtHealthResult)
        RtHealthResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtHealthResult_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtHealthResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtHealthResult.class, Builder.class);
      }

      // Construct using RealtimeData.RtHealthResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getBpFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        fatigue_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        stress_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        spo2_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        hr_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (bpBuilder_ == null) {
          bp_ = null;
        } else {
          bpBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        breathrate_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        temperatur_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtHealthResult_descriptor;
      }

      @Override
      public RtHealthResult getDefaultInstanceForType() {
        return RtHealthResult.getDefaultInstance();
      }

      @Override
      public RtHealthResult build() {
        RtHealthResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtHealthResult buildPartial() {
        RtHealthResult result = new RtHealthResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.fatigue_ = fatigue_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.stress_ = stress_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.spo2_ = spo2_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.hr_ = hr_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          if (bpBuilder_ == null) {
            result.bp_ = bp_;
          } else {
            result.bp_ = bpBuilder_.build();
          }
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.breathrate_ = breathrate_;
          to_bitField0_ |= 0x00000020;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.temperatur_ = temperatur_;
          to_bitField0_ |= 0x00000040;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtHealthResult) {
          return mergeFrom((RtHealthResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtHealthResult other) {
        if (other == RtHealthResult.getDefaultInstance()) return this;
        if (other.hasFatigue()) {
          setFatigue(other.getFatigue());
        }
        if (other.hasStress()) {
          setStress(other.getStress());
        }
        if (other.hasSpo2()) {
          setSpo2(other.getSpo2());
        }
        if (other.hasHr()) {
          setHr(other.getHr());
        }
        if (other.hasBp()) {
          mergeBp(other.getBp());
        }
        if (other.hasBreathrate()) {
          setBreathrate(other.getBreathrate());
        }
        if (other.hasTemperatur()) {
          setTemperatur(other.getTemperatur());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (hasBp()) {
          if (!getBp().isInitialized()) {
            return false;
          }
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtHealthResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtHealthResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int fatigue_ ;
      /**
       * <code>optional fixed32 fatigue = 1;</code>
       * @return Whether the fatigue field is set.
       */
      public boolean hasFatigue() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional fixed32 fatigue = 1;</code>
       * @return The fatigue.
       */
      public int getFatigue() {
        return fatigue_;
      }
      /**
       * <code>optional fixed32 fatigue = 1;</code>
       * @param value The fatigue to set.
       * @return This builder for chaining.
       */
      public Builder setFatigue(int value) {
        bitField0_ |= 0x00000001;
        fatigue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 fatigue = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFatigue() {
        bitField0_ = (bitField0_ & ~0x00000001);
        fatigue_ = 0;
        onChanged();
        return this;
      }

      private int stress_ ;
      /**
       * <code>optional fixed32 stress = 2;</code>
       * @return Whether the stress field is set.
       */
      public boolean hasStress() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional fixed32 stress = 2;</code>
       * @return The stress.
       */
      public int getStress() {
        return stress_;
      }
      /**
       * <code>optional fixed32 stress = 2;</code>
       * @param value The stress to set.
       * @return This builder for chaining.
       */
      public Builder setStress(int value) {
        bitField0_ |= 0x00000002;
        stress_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 stress = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearStress() {
        bitField0_ = (bitField0_ & ~0x00000002);
        stress_ = 0;
        onChanged();
        return this;
      }

      private int spo2_ ;
      /**
       * <code>optional fixed32 spo2 = 3;</code>
       * @return Whether the spo2 field is set.
       */
      public boolean hasSpo2() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional fixed32 spo2 = 3;</code>
       * @return The spo2.
       */
      public int getSpo2() {
        return spo2_;
      }
      /**
       * <code>optional fixed32 spo2 = 3;</code>
       * @param value The spo2 to set.
       * @return This builder for chaining.
       */
      public Builder setSpo2(int value) {
        bitField0_ |= 0x00000004;
        spo2_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 spo2 = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearSpo2() {
        bitField0_ = (bitField0_ & ~0x00000004);
        spo2_ = 0;
        onChanged();
        return this;
      }

      private int hr_ ;
      /**
       * <code>optional fixed32 hr = 4;</code>
       * @return Whether the hr field is set.
       */
      public boolean hasHr() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional fixed32 hr = 4;</code>
       * @return The hr.
       */
      public int getHr() {
        return hr_;
      }
      /**
       * <code>optional fixed32 hr = 4;</code>
       * @param value The hr to set.
       * @return This builder for chaining.
       */
      public Builder setHr(int value) {
        bitField0_ |= 0x00000008;
        hr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 hr = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearHr() {
        bitField0_ = (bitField0_ & ~0x00000008);
        hr_ = 0;
        onChanged();
        return this;
      }

      private BPresult bp_;
      private com.google.protobuf.SingleFieldBuilderV3<
          BPresult, BPresult.Builder, BPresultOrBuilder> bpBuilder_;
      /**
       * <code>optional .BPresult bp = 5;</code>
       * @return Whether the bp field is set.
       */
      public boolean hasBp() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional .BPresult bp = 5;</code>
       * @return The bp.
       */
      public BPresult getBp() {
        if (bpBuilder_ == null) {
          return bp_ == null ? BPresult.getDefaultInstance() : bp_;
        } else {
          return bpBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .BPresult bp = 5;</code>
       */
      public Builder setBp(BPresult value) {
        if (bpBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          bp_ = value;
          onChanged();
        } else {
          bpBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .BPresult bp = 5;</code>
       */
      public Builder setBp(
          BPresult.Builder builderForValue) {
        if (bpBuilder_ == null) {
          bp_ = builderForValue.build();
          onChanged();
        } else {
          bpBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .BPresult bp = 5;</code>
       */
      public Builder mergeBp(BPresult value) {
        if (bpBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0) &&
              bp_ != null &&
              bp_ != BPresult.getDefaultInstance()) {
            bp_ =
              BPresult.newBuilder(bp_).mergeFrom(value).buildPartial();
          } else {
            bp_ = value;
          }
          onChanged();
        } else {
          bpBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .BPresult bp = 5;</code>
       */
      public Builder clearBp() {
        if (bpBuilder_ == null) {
          bp_ = null;
          onChanged();
        } else {
          bpBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .BPresult bp = 5;</code>
       */
      public BPresult.Builder getBpBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getBpFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .BPresult bp = 5;</code>
       */
      public BPresultOrBuilder getBpOrBuilder() {
        if (bpBuilder_ != null) {
          return bpBuilder_.getMessageOrBuilder();
        } else {
          return bp_ == null ?
              BPresult.getDefaultInstance() : bp_;
        }
      }
      /**
       * <code>optional .BPresult bp = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          BPresult, BPresult.Builder, BPresultOrBuilder>
          getBpFieldBuilder() {
        if (bpBuilder_ == null) {
          bpBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              BPresult, BPresult.Builder, BPresultOrBuilder>(
                  getBp(),
                  getParentForChildren(),
                  isClean());
          bp_ = null;
        }
        return bpBuilder_;
      }

      private int breathrate_ ;
      /**
       * <code>optional fixed32 breathrate = 6;</code>
       * @return Whether the breathrate field is set.
       */
      public boolean hasBreathrate() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional fixed32 breathrate = 6;</code>
       * @return The breathrate.
       */
      public int getBreathrate() {
        return breathrate_;
      }
      /**
       * <code>optional fixed32 breathrate = 6;</code>
       * @param value The breathrate to set.
       * @return This builder for chaining.
       */
      public Builder setBreathrate(int value) {
        bitField0_ |= 0x00000020;
        breathrate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 breathrate = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearBreathrate() {
        bitField0_ = (bitField0_ & ~0x00000020);
        breathrate_ = 0;
        onChanged();
        return this;
      }

      private int temperatur_ ;
      /**
       * <code>optional fixed32 temperatur = 7;</code>
       * @return Whether the temperatur field is set.
       */
      public boolean hasTemperatur() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional fixed32 temperatur = 7;</code>
       * @return The temperatur.
       */
      public int getTemperatur() {
        return temperatur_;
      }
      /**
       * <code>optional fixed32 temperatur = 7;</code>
       * @param value The temperatur to set.
       * @return This builder for chaining.
       */
      public Builder setTemperatur(int value) {
        bitField0_ |= 0x00000040;
        temperatur_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 temperatur = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearTemperatur() {
        bitField0_ = (bitField0_ & ~0x00000040);
        temperatur_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtHealthResult)
    }

    // @@protoc_insertion_point(class_scope:RtHealthResult)
    private static final RtHealthResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtHealthResult();
    }

    public static RtHealthResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtHealthResult>
        PARSER = new com.google.protobuf.AbstractParser<RtHealthResult>() {
      @Override
      public RtHealthResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtHealthResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtHealthResult> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtHealthResult> getParserForType() {
      return PARSER;
    }

    @Override
    public RtHealthResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtGNSSOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtGNSS)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required float longitude = 1;</code>
     * @return Whether the longitude field is set.
     */
    boolean hasLongitude();
    /**
     * <code>required float longitude = 1;</code>
     * @return The longitude.
     */
    float getLongitude();

    /**
     * <code>required float latitude = 2;</code>
     * @return Whether the latitude field is set.
     */
    boolean hasLatitude();
    /**
     * <code>required float latitude = 2;</code>
     * @return The latitude.
     */
    float getLatitude();

    /**
     * <pre>
     * m/s
     * </pre>
     *
     * <code>required float speed = 3;</code>
     * @return Whether the speed field is set.
     */
    boolean hasSpeed();
    /**
     * <pre>
     * m/s
     * </pre>
     *
     * <code>required float speed = 3;</code>
     * @return The speed.
     */
    float getSpeed();

    /**
     * <pre>
     * m
     * </pre>
     *
     * <code>required float altitude = 4;</code>
     * @return Whether the altitude field is set.
     */
    boolean hasAltitude();
    /**
     * <pre>
     * m
     * </pre>
     *
     * <code>required float altitude = 4;</code>
     * @return The altitude.
     */
    float getAltitude();
  }
  /**
   * Protobuf type {@code RtGNSS}
   */
  public  static final class RtGNSS extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtGNSS)
      RtGNSSOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtGNSS.newBuilder() to construct.
    private RtGNSS(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtGNSS() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtGNSS();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtGNSS(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              longitude_ = input.readFloat();
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              latitude_ = input.readFloat();
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              speed_ = input.readFloat();
              break;
            }
            case 37: {
              bitField0_ |= 0x00000008;
              altitude_ = input.readFloat();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtGNSS_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtGNSS_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtGNSS.class, Builder.class);
    }

    private int bitField0_;
    public static final int LONGITUDE_FIELD_NUMBER = 1;
    private float longitude_;
    /**
     * <code>required float longitude = 1;</code>
     * @return Whether the longitude field is set.
     */
    public boolean hasLongitude() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required float longitude = 1;</code>
     * @return The longitude.
     */
    public float getLongitude() {
      return longitude_;
    }

    public static final int LATITUDE_FIELD_NUMBER = 2;
    private float latitude_;
    /**
     * <code>required float latitude = 2;</code>
     * @return Whether the latitude field is set.
     */
    public boolean hasLatitude() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required float latitude = 2;</code>
     * @return The latitude.
     */
    public float getLatitude() {
      return latitude_;
    }

    public static final int SPEED_FIELD_NUMBER = 3;
    private float speed_;
    /**
     * <pre>
     * m/s
     * </pre>
     *
     * <code>required float speed = 3;</code>
     * @return Whether the speed field is set.
     */
    public boolean hasSpeed() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * m/s
     * </pre>
     *
     * <code>required float speed = 3;</code>
     * @return The speed.
     */
    public float getSpeed() {
      return speed_;
    }

    public static final int ALTITUDE_FIELD_NUMBER = 4;
    private float altitude_;
    /**
     * <pre>
     * m
     * </pre>
     *
     * <code>required float altitude = 4;</code>
     * @return Whether the altitude field is set.
     */
    public boolean hasAltitude() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * m
     * </pre>
     *
     * <code>required float altitude = 4;</code>
     * @return The altitude.
     */
    public float getAltitude() {
      return altitude_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasLongitude()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasLatitude()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSpeed()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasAltitude()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFloat(1, longitude_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeFloat(2, latitude_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFloat(3, speed_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeFloat(4, altitude_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(1, longitude_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(2, latitude_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(3, speed_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(4, altitude_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtGNSS)) {
        return super.equals(obj);
      }
      RtGNSS other = (RtGNSS) obj;

      if (hasLongitude() != other.hasLongitude()) return false;
      if (hasLongitude()) {
        if (Float.floatToIntBits(getLongitude())
            != Float.floatToIntBits(
                other.getLongitude())) return false;
      }
      if (hasLatitude() != other.hasLatitude()) return false;
      if (hasLatitude()) {
        if (Float.floatToIntBits(getLatitude())
            != Float.floatToIntBits(
                other.getLatitude())) return false;
      }
      if (hasSpeed() != other.hasSpeed()) return false;
      if (hasSpeed()) {
        if (Float.floatToIntBits(getSpeed())
            != Float.floatToIntBits(
                other.getSpeed())) return false;
      }
      if (hasAltitude() != other.hasAltitude()) return false;
      if (hasAltitude()) {
        if (Float.floatToIntBits(getAltitude())
            != Float.floatToIntBits(
                other.getAltitude())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasLongitude()) {
        hash = (37 * hash) + LONGITUDE_FIELD_NUMBER;
        hash = (53 * hash) + Float.floatToIntBits(
            getLongitude());
      }
      if (hasLatitude()) {
        hash = (37 * hash) + LATITUDE_FIELD_NUMBER;
        hash = (53 * hash) + Float.floatToIntBits(
            getLatitude());
      }
      if (hasSpeed()) {
        hash = (37 * hash) + SPEED_FIELD_NUMBER;
        hash = (53 * hash) + Float.floatToIntBits(
            getSpeed());
      }
      if (hasAltitude()) {
        hash = (37 * hash) + ALTITUDE_FIELD_NUMBER;
        hash = (53 * hash) + Float.floatToIntBits(
            getAltitude());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtGNSS parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtGNSS parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtGNSS parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtGNSS parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtGNSS parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtGNSS parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtGNSS parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtGNSS parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtGNSS parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtGNSS parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtGNSS parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtGNSS parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtGNSS prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtGNSS}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtGNSS)
        RtGNSSOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtGNSS_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtGNSS_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtGNSS.class, Builder.class);
      }

      // Construct using RealtimeData.RtGNSS.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        longitude_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000001);
        latitude_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000002);
        speed_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000004);
        altitude_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtGNSS_descriptor;
      }

      @Override
      public RtGNSS getDefaultInstanceForType() {
        return RtGNSS.getDefaultInstance();
      }

      @Override
      public RtGNSS build() {
        RtGNSS result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtGNSS buildPartial() {
        RtGNSS result = new RtGNSS(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.longitude_ = longitude_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.latitude_ = latitude_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.speed_ = speed_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.altitude_ = altitude_;
          to_bitField0_ |= 0x00000008;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtGNSS) {
          return mergeFrom((RtGNSS)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtGNSS other) {
        if (other == RtGNSS.getDefaultInstance()) return this;
        if (other.hasLongitude()) {
          setLongitude(other.getLongitude());
        }
        if (other.hasLatitude()) {
          setLatitude(other.getLatitude());
        }
        if (other.hasSpeed()) {
          setSpeed(other.getSpeed());
        }
        if (other.hasAltitude()) {
          setAltitude(other.getAltitude());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasLongitude()) {
          return false;
        }
        if (!hasLatitude()) {
          return false;
        }
        if (!hasSpeed()) {
          return false;
        }
        if (!hasAltitude()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtGNSS parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtGNSS) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private float longitude_ ;
      /**
       * <code>required float longitude = 1;</code>
       * @return Whether the longitude field is set.
       */
      public boolean hasLongitude() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required float longitude = 1;</code>
       * @return The longitude.
       */
      public float getLongitude() {
        return longitude_;
      }
      /**
       * <code>required float longitude = 1;</code>
       * @param value The longitude to set.
       * @return This builder for chaining.
       */
      public Builder setLongitude(float value) {
        bitField0_ |= 0x00000001;
        longitude_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required float longitude = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearLongitude() {
        bitField0_ = (bitField0_ & ~0x00000001);
        longitude_ = 0F;
        onChanged();
        return this;
      }

      private float latitude_ ;
      /**
       * <code>required float latitude = 2;</code>
       * @return Whether the latitude field is set.
       */
      public boolean hasLatitude() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required float latitude = 2;</code>
       * @return The latitude.
       */
      public float getLatitude() {
        return latitude_;
      }
      /**
       * <code>required float latitude = 2;</code>
       * @param value The latitude to set.
       * @return This builder for chaining.
       */
      public Builder setLatitude(float value) {
        bitField0_ |= 0x00000002;
        latitude_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required float latitude = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearLatitude() {
        bitField0_ = (bitField0_ & ~0x00000002);
        latitude_ = 0F;
        onChanged();
        return this;
      }

      private float speed_ ;
      /**
       * <pre>
       * m/s
       * </pre>
       *
       * <code>required float speed = 3;</code>
       * @return Whether the speed field is set.
       */
      public boolean hasSpeed() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <pre>
       * m/s
       * </pre>
       *
       * <code>required float speed = 3;</code>
       * @return The speed.
       */
      public float getSpeed() {
        return speed_;
      }
      /**
       * <pre>
       * m/s
       * </pre>
       *
       * <code>required float speed = 3;</code>
       * @param value The speed to set.
       * @return This builder for chaining.
       */
      public Builder setSpeed(float value) {
        bitField0_ |= 0x00000004;
        speed_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * m/s
       * </pre>
       *
       * <code>required float speed = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearSpeed() {
        bitField0_ = (bitField0_ & ~0x00000004);
        speed_ = 0F;
        onChanged();
        return this;
      }

      private float altitude_ ;
      /**
       * <pre>
       * m
       * </pre>
       *
       * <code>required float altitude = 4;</code>
       * @return Whether the altitude field is set.
       */
      public boolean hasAltitude() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <pre>
       * m
       * </pre>
       *
       * <code>required float altitude = 4;</code>
       * @return The altitude.
       */
      public float getAltitude() {
        return altitude_;
      }
      /**
       * <pre>
       * m
       * </pre>
       *
       * <code>required float altitude = 4;</code>
       * @param value The altitude to set.
       * @return This builder for chaining.
       */
      public Builder setAltitude(float value) {
        bitField0_ |= 0x00000008;
        altitude_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * m
       * </pre>
       *
       * <code>required float altitude = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearAltitude() {
        bitField0_ = (bitField0_ & ~0x00000008);
        altitude_ = 0F;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtGNSS)
    }

    // @@protoc_insertion_point(class_scope:RtGNSS)
    private static final RtGNSS DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtGNSS();
    }

    public static RtGNSS getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtGNSS>
        PARSER = new com.google.protobuf.AbstractParser<RtGNSS>() {
      @Override
      public RtGNSS parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtGNSS(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtGNSS> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtGNSS> getParserForType() {
      return PARSER;
    }

    @Override
    public RtGNSS getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtSensorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtSensor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .SensorOperation operation = 1;</code>
     * @return Whether the operation field is set.
     */
    boolean hasOperation();
    /**
     * <code>required .SensorOperation operation = 1;</code>
     * @return The operation.
     */
    SensorOperation getOperation();

    /**
     * <code>required fixed32 type = 2;</code>
     * @return Whether the type field is set.
     */
    boolean hasType();
    /**
     * <code>required fixed32 type = 2;</code>
     * @return The type.
     */
    int getType();
  }
  /**
   * Protobuf type {@code RtSensor}
   */
  public  static final class RtSensor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtSensor)
      RtSensorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtSensor.newBuilder() to construct.
    private RtSensor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtSensor() {
      operation_ = 0;
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtSensor();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtSensor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              SensorOperation value = SensorOperation.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                operation_ = rawValue;
              }
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              type_ = input.readFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtSensor_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtSensor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtSensor.class, Builder.class);
    }

    private int bitField0_;
    public static final int OPERATION_FIELD_NUMBER = 1;
    private int operation_;
    /**
     * <code>required .SensorOperation operation = 1;</code>
     * @return Whether the operation field is set.
     */
    public boolean hasOperation() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .SensorOperation operation = 1;</code>
     * @return The operation.
     */
    public SensorOperation getOperation() {
      @SuppressWarnings("deprecation")
      SensorOperation result = SensorOperation.valueOf(operation_);
      return result == null ? SensorOperation.SENSOR_START_SYNC : result;
    }

    public static final int TYPE_FIELD_NUMBER = 2;
    private int type_;
    /**
     * <code>required fixed32 type = 2;</code>
     * @return Whether the type field is set.
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required fixed32 type = 2;</code>
     * @return The type.
     */
    public int getType() {
      return type_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasOperation()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeEnum(1, operation_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeFixed32(2, type_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, operation_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(2, type_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtSensor)) {
        return super.equals(obj);
      }
      RtSensor other = (RtSensor) obj;

      if (hasOperation() != other.hasOperation()) return false;
      if (hasOperation()) {
        if (operation_ != other.operation_) return false;
      }
      if (hasType() != other.hasType()) return false;
      if (hasType()) {
        if (getType()
            != other.getType()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasOperation()) {
        hash = (37 * hash) + OPERATION_FIELD_NUMBER;
        hash = (53 * hash) + operation_;
      }
      if (hasType()) {
        hash = (37 * hash) + TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getType();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtSensor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSensor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSensor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSensor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSensor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSensor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSensor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtSensor parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtSensor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtSensor parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtSensor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtSensor parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtSensor prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtSensor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtSensor)
        RtSensorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtSensor_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtSensor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtSensor.class, Builder.class);
      }

      // Construct using RealtimeData.RtSensor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        operation_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtSensor_descriptor;
      }

      @Override
      public RtSensor getDefaultInstanceForType() {
        return RtSensor.getDefaultInstance();
      }

      @Override
      public RtSensor build() {
        RtSensor result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtSensor buildPartial() {
        RtSensor result = new RtSensor(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.operation_ = operation_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.type_ = type_;
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtSensor) {
          return mergeFrom((RtSensor)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtSensor other) {
        if (other == RtSensor.getDefaultInstance()) return this;
        if (other.hasOperation()) {
          setOperation(other.getOperation());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasOperation()) {
          return false;
        }
        if (!hasType()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtSensor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtSensor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int operation_ = 0;
      /**
       * <code>required .SensorOperation operation = 1;</code>
       * @return Whether the operation field is set.
       */
      public boolean hasOperation() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required .SensorOperation operation = 1;</code>
       * @return The operation.
       */
      public SensorOperation getOperation() {
        @SuppressWarnings("deprecation")
        SensorOperation result = SensorOperation.valueOf(operation_);
        return result == null ? SensorOperation.SENSOR_START_SYNC : result;
      }
      /**
       * <code>required .SensorOperation operation = 1;</code>
       * @param value The operation to set.
       * @return This builder for chaining.
       */
      public Builder setOperation(SensorOperation value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        operation_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .SensorOperation operation = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearOperation() {
        bitField0_ = (bitField0_ & ~0x00000001);
        operation_ = 0;
        onChanged();
        return this;
      }

      private int type_ ;
      /**
       * <code>required fixed32 type = 2;</code>
       * @return Whether the type field is set.
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required fixed32 type = 2;</code>
       * @return The type.
       */
      public int getType() {
        return type_;
      }
      /**
       * <code>required fixed32 type = 2;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(int value) {
        bitField0_ |= 0x00000002;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 type = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        type_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtSensor)
    }

    // @@protoc_insertion_point(class_scope:RtSensor)
    private static final RtSensor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtSensor();
    }

    public static RtSensor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtSensor>
        PARSER = new com.google.protobuf.AbstractParser<RtSensor>() {
      @Override
      public RtSensor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtSensor(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtSensor> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtSensor> getParserForType() {
      return PARSER;
    }

    @Override
    public RtSensor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtsportOrBuilder extends
      // @@protoc_insertion_point(interface_extends:Rtsport)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .SportOperation operation = 1;</code>
     * @return Whether the operation field is set.
     */
    boolean hasOperation();
    /**
     * <code>required .SportOperation operation = 1;</code>
     * @return The operation.
     */
    SportOperation getOperation();

    /**
     * <code>required fixed32 sport_type = 2;</code>
     * @return Whether the sportType field is set.
     */
    boolean hasSportType();
    /**
     * <code>required fixed32 sport_type = 2;</code>
     * @return The sportType.
     */
    int getSportType();
  }
  /**
   * Protobuf type {@code Rtsport}
   */
  public  static final class Rtsport extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Rtsport)
      RtsportOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Rtsport.newBuilder() to construct.
    private Rtsport(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Rtsport() {
      operation_ = 0;
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new Rtsport();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Rtsport(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              SportOperation value = SportOperation.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                operation_ = rawValue;
              }
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              sportType_ = input.readFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_Rtsport_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_Rtsport_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Rtsport.class, Builder.class);
    }

    private int bitField0_;
    public static final int OPERATION_FIELD_NUMBER = 1;
    private int operation_;
    /**
     * <code>required .SportOperation operation = 1;</code>
     * @return Whether the operation field is set.
     */
    public boolean hasOperation() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .SportOperation operation = 1;</code>
     * @return The operation.
     */
    public SportOperation getOperation() {
      @SuppressWarnings("deprecation")
      SportOperation result = SportOperation.valueOf(operation_);
      return result == null ? SportOperation.SPORT_START : result;
    }

    public static final int SPORT_TYPE_FIELD_NUMBER = 2;
    private int sportType_;
    /**
     * <code>required fixed32 sport_type = 2;</code>
     * @return Whether the sportType field is set.
     */
    public boolean hasSportType() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required fixed32 sport_type = 2;</code>
     * @return The sportType.
     */
    public int getSportType() {
      return sportType_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasOperation()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSportType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeEnum(1, operation_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeFixed32(2, sportType_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, operation_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(2, sportType_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof Rtsport)) {
        return super.equals(obj);
      }
      Rtsport other = (Rtsport) obj;

      if (hasOperation() != other.hasOperation()) return false;
      if (hasOperation()) {
        if (operation_ != other.operation_) return false;
      }
      if (hasSportType() != other.hasSportType()) return false;
      if (hasSportType()) {
        if (getSportType()
            != other.getSportType()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasOperation()) {
        hash = (37 * hash) + OPERATION_FIELD_NUMBER;
        hash = (53 * hash) + operation_;
      }
      if (hasSportType()) {
        hash = (37 * hash) + SPORT_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getSportType();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Rtsport parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Rtsport parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Rtsport parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Rtsport parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Rtsport parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Rtsport parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Rtsport parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Rtsport parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static Rtsport parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Rtsport parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static Rtsport parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Rtsport parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(Rtsport prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Rtsport}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Rtsport)
        RtsportOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_Rtsport_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_Rtsport_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Rtsport.class, Builder.class);
      }

      // Construct using RealtimeData.Rtsport.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        operation_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        sportType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_Rtsport_descriptor;
      }

      @Override
      public Rtsport getDefaultInstanceForType() {
        return Rtsport.getDefaultInstance();
      }

      @Override
      public Rtsport build() {
        Rtsport result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public Rtsport buildPartial() {
        Rtsport result = new Rtsport(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.operation_ = operation_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.sportType_ = sportType_;
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof Rtsport) {
          return mergeFrom((Rtsport)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Rtsport other) {
        if (other == Rtsport.getDefaultInstance()) return this;
        if (other.hasOperation()) {
          setOperation(other.getOperation());
        }
        if (other.hasSportType()) {
          setSportType(other.getSportType());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasOperation()) {
          return false;
        }
        if (!hasSportType()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Rtsport parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (Rtsport) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int operation_ = 0;
      /**
       * <code>required .SportOperation operation = 1;</code>
       * @return Whether the operation field is set.
       */
      public boolean hasOperation() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required .SportOperation operation = 1;</code>
       * @return The operation.
       */
      public SportOperation getOperation() {
        @SuppressWarnings("deprecation")
        SportOperation result = SportOperation.valueOf(operation_);
        return result == null ? SportOperation.SPORT_START : result;
      }
      /**
       * <code>required .SportOperation operation = 1;</code>
       * @param value The operation to set.
       * @return This builder for chaining.
       */
      public Builder setOperation(SportOperation value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        operation_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .SportOperation operation = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearOperation() {
        bitField0_ = (bitField0_ & ~0x00000001);
        operation_ = 0;
        onChanged();
        return this;
      }

      private int sportType_ ;
      /**
       * <code>required fixed32 sport_type = 2;</code>
       * @return Whether the sportType field is set.
       */
      public boolean hasSportType() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required fixed32 sport_type = 2;</code>
       * @return The sportType.
       */
      public int getSportType() {
        return sportType_;
      }
      /**
       * <code>required fixed32 sport_type = 2;</code>
       * @param value The sportType to set.
       * @return This builder for chaining.
       */
      public Builder setSportType(int value) {
        bitField0_ |= 0x00000002;
        sportType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 sport_type = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearSportType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        sportType_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:Rtsport)
    }

    // @@protoc_insertion_point(class_scope:Rtsport)
    private static final Rtsport DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new Rtsport();
    }

    public static Rtsport getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<Rtsport>
        PARSER = new com.google.protobuf.AbstractParser<Rtsport>() {
      @Override
      public Rtsport parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Rtsport(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Rtsport> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<Rtsport> getParserForType() {
      return PARSER;
    }

    @Override
    public Rtsport getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtSubscriberOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtSubscriber)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .RtSync time = 1;</code>
     * @return Whether the time field is set.
     */
    boolean hasTime();
    /**
     * <code>optional .RtSync time = 1;</code>
     * @return The time.
     */
    RtSync getTime();

    /**
     * <code>optional .RtSync battery = 2;</code>
     * @return Whether the battery field is set.
     */
    boolean hasBattery();
    /**
     * <code>optional .RtSync battery = 2;</code>
     * @return The battery.
     */
    RtSync getBattery();

    /**
     * <code>optional .RtSync health = 3;</code>
     * @return Whether the health field is set.
     */
    boolean hasHealth();
    /**
     * <code>optional .RtSync health = 3;</code>
     * @return The health.
     */
    RtSync getHealth();

    /**
     * <code>optional .RtMode mode = 4;</code>
     * @return Whether the mode field is set.
     */
    boolean hasMode();
    /**
     * <code>optional .RtMode mode = 4;</code>
     * @return The mode.
     */
    RtMode getMode();

    /**
     * <code>optional .RtSensor sensor = 5;</code>
     * @return Whether the sensor field is set.
     */
    boolean hasSensor();
    /**
     * <code>optional .RtSensor sensor = 5;</code>
     * @return The sensor.
     */
    RtSensor getSensor();
    /**
     * <code>optional .RtSensor sensor = 5;</code>
     */
    RtSensorOrBuilder getSensorOrBuilder();

    /**
     * <code>optional .Rtsport sport = 6;</code>
     * @return Whether the sport field is set.
     */
    boolean hasSport();
    /**
     * <code>optional .Rtsport sport = 6;</code>
     * @return The sport.
     */
    Rtsport getSport();
    /**
     * <code>optional .Rtsport sport = 6;</code>
     */
    RtsportOrBuilder getSportOrBuilder();
  }
  /**
   * Protobuf type {@code RtSubscriber}
   */
  public  static final class RtSubscriber extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtSubscriber)
      RtSubscriberOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtSubscriber.newBuilder() to construct.
    private RtSubscriber(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtSubscriber() {
      time_ = 0;
      battery_ = 0;
      health_ = 0;
      mode_ = 0;
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtSubscriber();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtSubscriber(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              RtSync value = RtSync.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                time_ = rawValue;
              }
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              RtSync value = RtSync.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                battery_ = rawValue;
              }
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              RtSync value = RtSync.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                health_ = rawValue;
              }
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              RtMode value = RtMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                mode_ = rawValue;
              }
              break;
            }
            case 42: {
              RtSensor.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) != 0)) {
                subBuilder = sensor_.toBuilder();
              }
              sensor_ = input.readMessage(RtSensor.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(sensor_);
                sensor_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 50: {
              Rtsport.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) != 0)) {
                subBuilder = sport_.toBuilder();
              }
              sport_ = input.readMessage(Rtsport.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(sport_);
                sport_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtSubscriber_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtSubscriber_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtSubscriber.class, Builder.class);
    }

    private int bitField0_;
    public static final int TIME_FIELD_NUMBER = 1;
    private int time_;
    /**
     * <code>optional .RtSync time = 1;</code>
     * @return Whether the time field is set.
     */
    public boolean hasTime() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .RtSync time = 1;</code>
     * @return The time.
     */
    public RtSync getTime() {
      @SuppressWarnings("deprecation")
      RtSync result = RtSync.valueOf(time_);
      return result == null ? RtSync.STOP_ALL : result;
    }

    public static final int BATTERY_FIELD_NUMBER = 2;
    private int battery_;
    /**
     * <code>optional .RtSync battery = 2;</code>
     * @return Whether the battery field is set.
     */
    public boolean hasBattery() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .RtSync battery = 2;</code>
     * @return The battery.
     */
    public RtSync getBattery() {
      @SuppressWarnings("deprecation")
      RtSync result = RtSync.valueOf(battery_);
      return result == null ? RtSync.STOP_ALL : result;
    }

    public static final int HEALTH_FIELD_NUMBER = 3;
    private int health_;
    /**
     * <code>optional .RtSync health = 3;</code>
     * @return Whether the health field is set.
     */
    public boolean hasHealth() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .RtSync health = 3;</code>
     * @return The health.
     */
    public RtSync getHealth() {
      @SuppressWarnings("deprecation")
      RtSync result = RtSync.valueOf(health_);
      return result == null ? RtSync.STOP_ALL : result;
    }

    public static final int MODE_FIELD_NUMBER = 4;
    private int mode_;
    /**
     * <code>optional .RtMode mode = 4;</code>
     * @return Whether the mode field is set.
     */
    public boolean hasMode() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .RtMode mode = 4;</code>
     * @return The mode.
     */
    public RtMode getMode() {
      @SuppressWarnings("deprecation")
      RtMode result = RtMode.valueOf(mode_);
      return result == null ? RtMode.RT_MODE_BACK_NORMAL : result;
    }

    public static final int SENSOR_FIELD_NUMBER = 5;
    private RtSensor sensor_;
    /**
     * <code>optional .RtSensor sensor = 5;</code>
     * @return Whether the sensor field is set.
     */
    public boolean hasSensor() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional .RtSensor sensor = 5;</code>
     * @return The sensor.
     */
    public RtSensor getSensor() {
      return sensor_ == null ? RtSensor.getDefaultInstance() : sensor_;
    }
    /**
     * <code>optional .RtSensor sensor = 5;</code>
     */
    public RtSensorOrBuilder getSensorOrBuilder() {
      return sensor_ == null ? RtSensor.getDefaultInstance() : sensor_;
    }

    public static final int SPORT_FIELD_NUMBER = 6;
    private Rtsport sport_;
    /**
     * <code>optional .Rtsport sport = 6;</code>
     * @return Whether the sport field is set.
     */
    public boolean hasSport() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional .Rtsport sport = 6;</code>
     * @return The sport.
     */
    public Rtsport getSport() {
      return sport_ == null ? Rtsport.getDefaultInstance() : sport_;
    }
    /**
     * <code>optional .Rtsport sport = 6;</code>
     */
    public RtsportOrBuilder getSportOrBuilder() {
      return sport_ == null ? Rtsport.getDefaultInstance() : sport_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (hasSensor()) {
        if (!getSensor().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSport()) {
        if (!getSport().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeEnum(1, time_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeEnum(2, battery_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeEnum(3, health_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeEnum(4, mode_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeMessage(5, getSensor());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeMessage(6, getSport());
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, time_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, battery_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, health_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, mode_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getSensor());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getSport());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtSubscriber)) {
        return super.equals(obj);
      }
      RtSubscriber other = (RtSubscriber) obj;

      if (hasTime() != other.hasTime()) return false;
      if (hasTime()) {
        if (time_ != other.time_) return false;
      }
      if (hasBattery() != other.hasBattery()) return false;
      if (hasBattery()) {
        if (battery_ != other.battery_) return false;
      }
      if (hasHealth() != other.hasHealth()) return false;
      if (hasHealth()) {
        if (health_ != other.health_) return false;
      }
      if (hasMode() != other.hasMode()) return false;
      if (hasMode()) {
        if (mode_ != other.mode_) return false;
      }
      if (hasSensor() != other.hasSensor()) return false;
      if (hasSensor()) {
        if (!getSensor()
            .equals(other.getSensor())) return false;
      }
      if (hasSport() != other.hasSport()) return false;
      if (hasSport()) {
        if (!getSport()
            .equals(other.getSport())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasTime()) {
        hash = (37 * hash) + TIME_FIELD_NUMBER;
        hash = (53 * hash) + time_;
      }
      if (hasBattery()) {
        hash = (37 * hash) + BATTERY_FIELD_NUMBER;
        hash = (53 * hash) + battery_;
      }
      if (hasHealth()) {
        hash = (37 * hash) + HEALTH_FIELD_NUMBER;
        hash = (53 * hash) + health_;
      }
      if (hasMode()) {
        hash = (37 * hash) + MODE_FIELD_NUMBER;
        hash = (53 * hash) + mode_;
      }
      if (hasSensor()) {
        hash = (37 * hash) + SENSOR_FIELD_NUMBER;
        hash = (53 * hash) + getSensor().hashCode();
      }
      if (hasSport()) {
        hash = (37 * hash) + SPORT_FIELD_NUMBER;
        hash = (53 * hash) + getSport().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtSubscriber parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSubscriber parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSubscriber parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSubscriber parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSubscriber parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSubscriber parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSubscriber parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtSubscriber parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtSubscriber parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtSubscriber parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtSubscriber parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtSubscriber parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtSubscriber prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtSubscriber}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtSubscriber)
        RtSubscriberOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtSubscriber_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtSubscriber_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtSubscriber.class, Builder.class);
      }

      // Construct using RealtimeData.RtSubscriber.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSensorFieldBuilder();
          getSportFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        time_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        battery_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        health_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        mode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (sensorBuilder_ == null) {
          sensor_ = null;
        } else {
          sensorBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (sportBuilder_ == null) {
          sport_ = null;
        } else {
          sportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtSubscriber_descriptor;
      }

      @Override
      public RtSubscriber getDefaultInstanceForType() {
        return RtSubscriber.getDefaultInstance();
      }

      @Override
      public RtSubscriber build() {
        RtSubscriber result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtSubscriber buildPartial() {
        RtSubscriber result = new RtSubscriber(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.time_ = time_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.battery_ = battery_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.health_ = health_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.mode_ = mode_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          if (sensorBuilder_ == null) {
            result.sensor_ = sensor_;
          } else {
            result.sensor_ = sensorBuilder_.build();
          }
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          if (sportBuilder_ == null) {
            result.sport_ = sport_;
          } else {
            result.sport_ = sportBuilder_.build();
          }
          to_bitField0_ |= 0x00000020;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtSubscriber) {
          return mergeFrom((RtSubscriber)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtSubscriber other) {
        if (other == RtSubscriber.getDefaultInstance()) return this;
        if (other.hasTime()) {
          setTime(other.getTime());
        }
        if (other.hasBattery()) {
          setBattery(other.getBattery());
        }
        if (other.hasHealth()) {
          setHealth(other.getHealth());
        }
        if (other.hasMode()) {
          setMode(other.getMode());
        }
        if (other.hasSensor()) {
          mergeSensor(other.getSensor());
        }
        if (other.hasSport()) {
          mergeSport(other.getSport());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (hasSensor()) {
          if (!getSensor().isInitialized()) {
            return false;
          }
        }
        if (hasSport()) {
          if (!getSport().isInitialized()) {
            return false;
          }
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtSubscriber parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtSubscriber) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int time_ = 0;
      /**
       * <code>optional .RtSync time = 1;</code>
       * @return Whether the time field is set.
       */
      public boolean hasTime() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional .RtSync time = 1;</code>
       * @return The time.
       */
      public RtSync getTime() {
        @SuppressWarnings("deprecation")
        RtSync result = RtSync.valueOf(time_);
        return result == null ? RtSync.STOP_ALL : result;
      }
      /**
       * <code>optional .RtSync time = 1;</code>
       * @param value The time to set.
       * @return This builder for chaining.
       */
      public Builder setTime(RtSync value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        time_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .RtSync time = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearTime() {
        bitField0_ = (bitField0_ & ~0x00000001);
        time_ = 0;
        onChanged();
        return this;
      }

      private int battery_ = 0;
      /**
       * <code>optional .RtSync battery = 2;</code>
       * @return Whether the battery field is set.
       */
      public boolean hasBattery() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .RtSync battery = 2;</code>
       * @return The battery.
       */
      public RtSync getBattery() {
        @SuppressWarnings("deprecation")
        RtSync result = RtSync.valueOf(battery_);
        return result == null ? RtSync.STOP_ALL : result;
      }
      /**
       * <code>optional .RtSync battery = 2;</code>
       * @param value The battery to set.
       * @return This builder for chaining.
       */
      public Builder setBattery(RtSync value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        battery_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .RtSync battery = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearBattery() {
        bitField0_ = (bitField0_ & ~0x00000002);
        battery_ = 0;
        onChanged();
        return this;
      }

      private int health_ = 0;
      /**
       * <code>optional .RtSync health = 3;</code>
       * @return Whether the health field is set.
       */
      public boolean hasHealth() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .RtSync health = 3;</code>
       * @return The health.
       */
      public RtSync getHealth() {
        @SuppressWarnings("deprecation")
        RtSync result = RtSync.valueOf(health_);
        return result == null ? RtSync.STOP_ALL : result;
      }
      /**
       * <code>optional .RtSync health = 3;</code>
       * @param value The health to set.
       * @return This builder for chaining.
       */
      public Builder setHealth(RtSync value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        health_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .RtSync health = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearHealth() {
        bitField0_ = (bitField0_ & ~0x00000004);
        health_ = 0;
        onChanged();
        return this;
      }

      private int mode_ = 0;
      /**
       * <code>optional .RtMode mode = 4;</code>
       * @return Whether the mode field is set.
       */
      public boolean hasMode() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .RtMode mode = 4;</code>
       * @return The mode.
       */
      public RtMode getMode() {
        @SuppressWarnings("deprecation")
        RtMode result = RtMode.valueOf(mode_);
        return result == null ? RtMode.RT_MODE_BACK_NORMAL : result;
      }
      /**
       * <code>optional .RtMode mode = 4;</code>
       * @param value The mode to set.
       * @return This builder for chaining.
       */
      public Builder setMode(RtMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        mode_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .RtMode mode = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearMode() {
        bitField0_ = (bitField0_ & ~0x00000008);
        mode_ = 0;
        onChanged();
        return this;
      }

      private RtSensor sensor_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RtSensor, RtSensor.Builder, RtSensorOrBuilder> sensorBuilder_;
      /**
       * <code>optional .RtSensor sensor = 5;</code>
       * @return Whether the sensor field is set.
       */
      public boolean hasSensor() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional .RtSensor sensor = 5;</code>
       * @return The sensor.
       */
      public RtSensor getSensor() {
        if (sensorBuilder_ == null) {
          return sensor_ == null ? RtSensor.getDefaultInstance() : sensor_;
        } else {
          return sensorBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .RtSensor sensor = 5;</code>
       */
      public Builder setSensor(RtSensor value) {
        if (sensorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          sensor_ = value;
          onChanged();
        } else {
          sensorBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .RtSensor sensor = 5;</code>
       */
      public Builder setSensor(
          RtSensor.Builder builderForValue) {
        if (sensorBuilder_ == null) {
          sensor_ = builderForValue.build();
          onChanged();
        } else {
          sensorBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .RtSensor sensor = 5;</code>
       */
      public Builder mergeSensor(RtSensor value) {
        if (sensorBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0) &&
              sensor_ != null &&
              sensor_ != RtSensor.getDefaultInstance()) {
            sensor_ =
              RtSensor.newBuilder(sensor_).mergeFrom(value).buildPartial();
          } else {
            sensor_ = value;
          }
          onChanged();
        } else {
          sensorBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .RtSensor sensor = 5;</code>
       */
      public Builder clearSensor() {
        if (sensorBuilder_ == null) {
          sensor_ = null;
          onChanged();
        } else {
          sensorBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .RtSensor sensor = 5;</code>
       */
      public RtSensor.Builder getSensorBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getSensorFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtSensor sensor = 5;</code>
       */
      public RtSensorOrBuilder getSensorOrBuilder() {
        if (sensorBuilder_ != null) {
          return sensorBuilder_.getMessageOrBuilder();
        } else {
          return sensor_ == null ?
              RtSensor.getDefaultInstance() : sensor_;
        }
      }
      /**
       * <code>optional .RtSensor sensor = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtSensor, RtSensor.Builder, RtSensorOrBuilder>
          getSensorFieldBuilder() {
        if (sensorBuilder_ == null) {
          sensorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtSensor, RtSensor.Builder, RtSensorOrBuilder>(
                  getSensor(),
                  getParentForChildren(),
                  isClean());
          sensor_ = null;
        }
        return sensorBuilder_;
      }

      private Rtsport sport_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Rtsport, Rtsport.Builder, RtsportOrBuilder> sportBuilder_;
      /**
       * <code>optional .Rtsport sport = 6;</code>
       * @return Whether the sport field is set.
       */
      public boolean hasSport() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional .Rtsport sport = 6;</code>
       * @return The sport.
       */
      public Rtsport getSport() {
        if (sportBuilder_ == null) {
          return sport_ == null ? Rtsport.getDefaultInstance() : sport_;
        } else {
          return sportBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Rtsport sport = 6;</code>
       */
      public Builder setSport(Rtsport value) {
        if (sportBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          sport_ = value;
          onChanged();
        } else {
          sportBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .Rtsport sport = 6;</code>
       */
      public Builder setSport(
          Rtsport.Builder builderForValue) {
        if (sportBuilder_ == null) {
          sport_ = builderForValue.build();
          onChanged();
        } else {
          sportBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .Rtsport sport = 6;</code>
       */
      public Builder mergeSport(Rtsport value) {
        if (sportBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0) &&
              sport_ != null &&
              sport_ != Rtsport.getDefaultInstance()) {
            sport_ =
              Rtsport.newBuilder(sport_).mergeFrom(value).buildPartial();
          } else {
            sport_ = value;
          }
          onChanged();
        } else {
          sportBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .Rtsport sport = 6;</code>
       */
      public Builder clearSport() {
        if (sportBuilder_ == null) {
          sport_ = null;
          onChanged();
        } else {
          sportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .Rtsport sport = 6;</code>
       */
      public Rtsport.Builder getSportBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getSportFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Rtsport sport = 6;</code>
       */
      public RtsportOrBuilder getSportOrBuilder() {
        if (sportBuilder_ != null) {
          return sportBuilder_.getMessageOrBuilder();
        } else {
          return sport_ == null ?
              Rtsport.getDefaultInstance() : sport_;
        }
      }
      /**
       * <code>optional .Rtsport sport = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Rtsport, Rtsport.Builder, RtsportOrBuilder>
          getSportFieldBuilder() {
        if (sportBuilder_ == null) {
          sportBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Rtsport, Rtsport.Builder, RtsportOrBuilder>(
                  getSport(),
                  getParentForChildren(),
                  isClean());
          sport_ = null;
        }
        return sportBuilder_;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtSubscriber)
    }

    // @@protoc_insertion_point(class_scope:RtSubscriber)
    private static final RtSubscriber DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtSubscriber();
    }

    public static RtSubscriber getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtSubscriber>
        PARSER = new com.google.protobuf.AbstractParser<RtSubscriber>() {
      @Override
      public RtSubscriber parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtSubscriber(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtSubscriber> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtSubscriber> getParserForType() {
      return PARSER;
    }

    @Override
    public RtSubscriber getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtDataOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtData)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .RtTime time = 1;</code>
     * @return Whether the time field is set.
     */
    boolean hasTime();
    /**
     * <code>optional .RtTime time = 1;</code>
     * @return The time.
     */
    RtTime getTime();
    /**
     * <code>optional .RtTime time = 1;</code>
     */
    RtTimeOrBuilder getTimeOrBuilder();

    /**
     * <code>optional .RtBattery battery = 2;</code>
     * @return Whether the battery field is set.
     */
    boolean hasBattery();
    /**
     * <code>optional .RtBattery battery = 2;</code>
     * @return The battery.
     */
    RtBattery getBattery();
    /**
     * <code>optional .RtBattery battery = 2;</code>
     */
    RtBatteryOrBuilder getBatteryOrBuilder();

    /**
     * <code>optional .RtHealth health = 3;</code>
     * @return Whether the health field is set.
     */
    boolean hasHealth();
    /**
     * <code>optional .RtHealth health = 3;</code>
     * @return The health.
     */
    RtHealth getHealth();
    /**
     * <code>optional .RtHealth health = 3;</code>
     */
    RtHealthOrBuilder getHealthOrBuilder();

    /**
     * <code>optional .RtKeyEvent key = 4;</code>
     * @return Whether the key field is set.
     */
    boolean hasKey();
    /**
     * <code>optional .RtKeyEvent key = 4;</code>
     * @return The key.
     */
    RtKeyEvent getKey();

    /**
     * <code>optional sfixed32 time_zone = 5;</code>
     * @return Whether the timeZone field is set.
     */
    boolean hasTimeZone();
    /**
     * <code>optional sfixed32 time_zone = 5;</code>
     * @return The timeZone.
     */
    int getTimeZone();

    /**
     * <code>optional .RtHealthResult healthresult = 6;</code>
     * @return Whether the healthresult field is set.
     */
    boolean hasHealthresult();
    /**
     * <code>optional .RtHealthResult healthresult = 6;</code>
     * @return The healthresult.
     */
    RtHealthResult getHealthresult();
    /**
     * <code>optional .RtHealthResult healthresult = 6;</code>
     */
    RtHealthResultOrBuilder getHealthresultOrBuilder();
  }
  /**
   * Protobuf type {@code RtData}
   */
  public  static final class RtData extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtData)
      RtDataOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtData.newBuilder() to construct.
    private RtData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtData() {
      key_ = 0;
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtData();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              RtTime.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = time_.toBuilder();
              }
              time_ = input.readMessage(RtTime.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(time_);
                time_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              RtBattery.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) != 0)) {
                subBuilder = battery_.toBuilder();
              }
              battery_ = input.readMessage(RtBattery.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(battery_);
                battery_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              RtHealth.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) != 0)) {
                subBuilder = health_.toBuilder();
              }
              health_ = input.readMessage(RtHealth.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(health_);
                health_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              RtKeyEvent value = RtKeyEvent.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                key_ = rawValue;
              }
              break;
            }
            case 45: {
              bitField0_ |= 0x00000010;
              timeZone_ = input.readSFixed32();
              break;
            }
            case 50: {
              RtHealthResult.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) != 0)) {
                subBuilder = healthresult_.toBuilder();
              }
              healthresult_ = input.readMessage(RtHealthResult.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(healthresult_);
                healthresult_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtData_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtData.class, Builder.class);
    }

    private int bitField0_;
    public static final int TIME_FIELD_NUMBER = 1;
    private RtTime time_;
    /**
     * <code>optional .RtTime time = 1;</code>
     * @return Whether the time field is set.
     */
    public boolean hasTime() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .RtTime time = 1;</code>
     * @return The time.
     */
    public RtTime getTime() {
      return time_ == null ? RtTime.getDefaultInstance() : time_;
    }
    /**
     * <code>optional .RtTime time = 1;</code>
     */
    public RtTimeOrBuilder getTimeOrBuilder() {
      return time_ == null ? RtTime.getDefaultInstance() : time_;
    }

    public static final int BATTERY_FIELD_NUMBER = 2;
    private RtBattery battery_;
    /**
     * <code>optional .RtBattery battery = 2;</code>
     * @return Whether the battery field is set.
     */
    public boolean hasBattery() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .RtBattery battery = 2;</code>
     * @return The battery.
     */
    public RtBattery getBattery() {
      return battery_ == null ? RtBattery.getDefaultInstance() : battery_;
    }
    /**
     * <code>optional .RtBattery battery = 2;</code>
     */
    public RtBatteryOrBuilder getBatteryOrBuilder() {
      return battery_ == null ? RtBattery.getDefaultInstance() : battery_;
    }

    public static final int HEALTH_FIELD_NUMBER = 3;
    private RtHealth health_;
    /**
     * <code>optional .RtHealth health = 3;</code>
     * @return Whether the health field is set.
     */
    public boolean hasHealth() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .RtHealth health = 3;</code>
     * @return The health.
     */
    public RtHealth getHealth() {
      return health_ == null ? RtHealth.getDefaultInstance() : health_;
    }
    /**
     * <code>optional .RtHealth health = 3;</code>
     */
    public RtHealthOrBuilder getHealthOrBuilder() {
      return health_ == null ? RtHealth.getDefaultInstance() : health_;
    }

    public static final int KEY_FIELD_NUMBER = 4;
    private int key_;
    /**
     * <code>optional .RtKeyEvent key = 4;</code>
     * @return Whether the key field is set.
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .RtKeyEvent key = 4;</code>
     * @return The key.
     */
    public RtKeyEvent getKey() {
      @SuppressWarnings("deprecation")
      RtKeyEvent result = RtKeyEvent.valueOf(key_);
      return result == null ? RtKeyEvent.RT_KEY_CAMERA : result;
    }

    public static final int TIME_ZONE_FIELD_NUMBER = 5;
    private int timeZone_;
    /**
     * <code>optional sfixed32 time_zone = 5;</code>
     * @return Whether the timeZone field is set.
     */
    public boolean hasTimeZone() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional sfixed32 time_zone = 5;</code>
     * @return The timeZone.
     */
    public int getTimeZone() {
      return timeZone_;
    }

    public static final int HEALTHRESULT_FIELD_NUMBER = 6;
    private RtHealthResult healthresult_;
    /**
     * <code>optional .RtHealthResult healthresult = 6;</code>
     * @return Whether the healthresult field is set.
     */
    public boolean hasHealthresult() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional .RtHealthResult healthresult = 6;</code>
     * @return The healthresult.
     */
    public RtHealthResult getHealthresult() {
      return healthresult_ == null ? RtHealthResult.getDefaultInstance() : healthresult_;
    }
    /**
     * <code>optional .RtHealthResult healthresult = 6;</code>
     */
    public RtHealthResultOrBuilder getHealthresultOrBuilder() {
      return healthresult_ == null ? RtHealthResult.getDefaultInstance() : healthresult_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (hasTime()) {
        if (!getTime().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasBattery()) {
        if (!getBattery().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasHealth()) {
        if (!getHealth().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasHealthresult()) {
        if (!getHealthresult().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(1, getTime());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeMessage(2, getBattery());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeMessage(3, getHealth());
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeEnum(4, key_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeSFixed32(5, timeZone_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeMessage(6, getHealthresult());
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getTime());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getBattery());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getHealth());
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, key_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSFixed32Size(5, timeZone_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getHealthresult());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtData)) {
        return super.equals(obj);
      }
      RtData other = (RtData) obj;

      if (hasTime() != other.hasTime()) return false;
      if (hasTime()) {
        if (!getTime()
            .equals(other.getTime())) return false;
      }
      if (hasBattery() != other.hasBattery()) return false;
      if (hasBattery()) {
        if (!getBattery()
            .equals(other.getBattery())) return false;
      }
      if (hasHealth() != other.hasHealth()) return false;
      if (hasHealth()) {
        if (!getHealth()
            .equals(other.getHealth())) return false;
      }
      if (hasKey() != other.hasKey()) return false;
      if (hasKey()) {
        if (key_ != other.key_) return false;
      }
      if (hasTimeZone() != other.hasTimeZone()) return false;
      if (hasTimeZone()) {
        if (getTimeZone()
            != other.getTimeZone()) return false;
      }
      if (hasHealthresult() != other.hasHealthresult()) return false;
      if (hasHealthresult()) {
        if (!getHealthresult()
            .equals(other.getHealthresult())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasTime()) {
        hash = (37 * hash) + TIME_FIELD_NUMBER;
        hash = (53 * hash) + getTime().hashCode();
      }
      if (hasBattery()) {
        hash = (37 * hash) + BATTERY_FIELD_NUMBER;
        hash = (53 * hash) + getBattery().hashCode();
      }
      if (hasHealth()) {
        hash = (37 * hash) + HEALTH_FIELD_NUMBER;
        hash = (53 * hash) + getHealth().hashCode();
      }
      if (hasKey()) {
        hash = (37 * hash) + KEY_FIELD_NUMBER;
        hash = (53 * hash) + key_;
      }
      if (hasTimeZone()) {
        hash = (37 * hash) + TIME_ZONE_FIELD_NUMBER;
        hash = (53 * hash) + getTimeZone();
      }
      if (hasHealthresult()) {
        hash = (37 * hash) + HEALTHRESULT_FIELD_NUMBER;
        hash = (53 * hash) + getHealthresult().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtData parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtData parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtData prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtData)
        RtDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtData_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtData.class, Builder.class);
      }

      // Construct using RealtimeData.RtData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTimeFieldBuilder();
          getBatteryFieldBuilder();
          getHealthFieldBuilder();
          getHealthresultFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        if (timeBuilder_ == null) {
          time_ = null;
        } else {
          timeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (batteryBuilder_ == null) {
          battery_ = null;
        } else {
          batteryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (healthBuilder_ == null) {
          health_ = null;
        } else {
          healthBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        key_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        timeZone_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        if (healthresultBuilder_ == null) {
          healthresult_ = null;
        } else {
          healthresultBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtData_descriptor;
      }

      @Override
      public RtData getDefaultInstanceForType() {
        return RtData.getDefaultInstance();
      }

      @Override
      public RtData build() {
        RtData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtData buildPartial() {
        RtData result = new RtData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (timeBuilder_ == null) {
            result.time_ = time_;
          } else {
            result.time_ = timeBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (batteryBuilder_ == null) {
            result.battery_ = battery_;
          } else {
            result.battery_ = batteryBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          if (healthBuilder_ == null) {
            result.health_ = health_;
          } else {
            result.health_ = healthBuilder_.build();
          }
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.timeZone_ = timeZone_;
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          if (healthresultBuilder_ == null) {
            result.healthresult_ = healthresult_;
          } else {
            result.healthresult_ = healthresultBuilder_.build();
          }
          to_bitField0_ |= 0x00000020;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtData) {
          return mergeFrom((RtData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtData other) {
        if (other == RtData.getDefaultInstance()) return this;
        if (other.hasTime()) {
          mergeTime(other.getTime());
        }
        if (other.hasBattery()) {
          mergeBattery(other.getBattery());
        }
        if (other.hasHealth()) {
          mergeHealth(other.getHealth());
        }
        if (other.hasKey()) {
          setKey(other.getKey());
        }
        if (other.hasTimeZone()) {
          setTimeZone(other.getTimeZone());
        }
        if (other.hasHealthresult()) {
          mergeHealthresult(other.getHealthresult());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (hasTime()) {
          if (!getTime().isInitialized()) {
            return false;
          }
        }
        if (hasBattery()) {
          if (!getBattery().isInitialized()) {
            return false;
          }
        }
        if (hasHealth()) {
          if (!getHealth().isInitialized()) {
            return false;
          }
        }
        if (hasHealthresult()) {
          if (!getHealthresult().isInitialized()) {
            return false;
          }
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtData) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private RtTime time_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RtTime, RtTime.Builder, RtTimeOrBuilder> timeBuilder_;
      /**
       * <code>optional .RtTime time = 1;</code>
       * @return Whether the time field is set.
       */
      public boolean hasTime() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional .RtTime time = 1;</code>
       * @return The time.
       */
      public RtTime getTime() {
        if (timeBuilder_ == null) {
          return time_ == null ? RtTime.getDefaultInstance() : time_;
        } else {
          return timeBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .RtTime time = 1;</code>
       */
      public Builder setTime(RtTime value) {
        if (timeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          time_ = value;
          onChanged();
        } else {
          timeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .RtTime time = 1;</code>
       */
      public Builder setTime(
          RtTime.Builder builderForValue) {
        if (timeBuilder_ == null) {
          time_ = builderForValue.build();
          onChanged();
        } else {
          timeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .RtTime time = 1;</code>
       */
      public Builder mergeTime(RtTime value) {
        if (timeBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              time_ != null &&
              time_ != RtTime.getDefaultInstance()) {
            time_ =
              RtTime.newBuilder(time_).mergeFrom(value).buildPartial();
          } else {
            time_ = value;
          }
          onChanged();
        } else {
          timeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .RtTime time = 1;</code>
       */
      public Builder clearTime() {
        if (timeBuilder_ == null) {
          time_ = null;
          onChanged();
        } else {
          timeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .RtTime time = 1;</code>
       */
      public RtTime.Builder getTimeBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTimeFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtTime time = 1;</code>
       */
      public RtTimeOrBuilder getTimeOrBuilder() {
        if (timeBuilder_ != null) {
          return timeBuilder_.getMessageOrBuilder();
        } else {
          return time_ == null ?
              RtTime.getDefaultInstance() : time_;
        }
      }
      /**
       * <code>optional .RtTime time = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtTime, RtTime.Builder, RtTimeOrBuilder>
          getTimeFieldBuilder() {
        if (timeBuilder_ == null) {
          timeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtTime, RtTime.Builder, RtTimeOrBuilder>(
                  getTime(),
                  getParentForChildren(),
                  isClean());
          time_ = null;
        }
        return timeBuilder_;
      }

      private RtBattery battery_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RtBattery, RtBattery.Builder, RtBatteryOrBuilder> batteryBuilder_;
      /**
       * <code>optional .RtBattery battery = 2;</code>
       * @return Whether the battery field is set.
       */
      public boolean hasBattery() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .RtBattery battery = 2;</code>
       * @return The battery.
       */
      public RtBattery getBattery() {
        if (batteryBuilder_ == null) {
          return battery_ == null ? RtBattery.getDefaultInstance() : battery_;
        } else {
          return batteryBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .RtBattery battery = 2;</code>
       */
      public Builder setBattery(RtBattery value) {
        if (batteryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          battery_ = value;
          onChanged();
        } else {
          batteryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .RtBattery battery = 2;</code>
       */
      public Builder setBattery(
          RtBattery.Builder builderForValue) {
        if (batteryBuilder_ == null) {
          battery_ = builderForValue.build();
          onChanged();
        } else {
          batteryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .RtBattery battery = 2;</code>
       */
      public Builder mergeBattery(RtBattery value) {
        if (batteryBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              battery_ != null &&
              battery_ != RtBattery.getDefaultInstance()) {
            battery_ =
              RtBattery.newBuilder(battery_).mergeFrom(value).buildPartial();
          } else {
            battery_ = value;
          }
          onChanged();
        } else {
          batteryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .RtBattery battery = 2;</code>
       */
      public Builder clearBattery() {
        if (batteryBuilder_ == null) {
          battery_ = null;
          onChanged();
        } else {
          batteryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .RtBattery battery = 2;</code>
       */
      public RtBattery.Builder getBatteryBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getBatteryFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtBattery battery = 2;</code>
       */
      public RtBatteryOrBuilder getBatteryOrBuilder() {
        if (batteryBuilder_ != null) {
          return batteryBuilder_.getMessageOrBuilder();
        } else {
          return battery_ == null ?
              RtBattery.getDefaultInstance() : battery_;
        }
      }
      /**
       * <code>optional .RtBattery battery = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtBattery, RtBattery.Builder, RtBatteryOrBuilder>
          getBatteryFieldBuilder() {
        if (batteryBuilder_ == null) {
          batteryBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtBattery, RtBattery.Builder, RtBatteryOrBuilder>(
                  getBattery(),
                  getParentForChildren(),
                  isClean());
          battery_ = null;
        }
        return batteryBuilder_;
      }

      private RtHealth health_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RtHealth, RtHealth.Builder, RtHealthOrBuilder> healthBuilder_;
      /**
       * <code>optional .RtHealth health = 3;</code>
       * @return Whether the health field is set.
       */
      public boolean hasHealth() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .RtHealth health = 3;</code>
       * @return The health.
       */
      public RtHealth getHealth() {
        if (healthBuilder_ == null) {
          return health_ == null ? RtHealth.getDefaultInstance() : health_;
        } else {
          return healthBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .RtHealth health = 3;</code>
       */
      public Builder setHealth(RtHealth value) {
        if (healthBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          health_ = value;
          onChanged();
        } else {
          healthBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .RtHealth health = 3;</code>
       */
      public Builder setHealth(
          RtHealth.Builder builderForValue) {
        if (healthBuilder_ == null) {
          health_ = builderForValue.build();
          onChanged();
        } else {
          healthBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .RtHealth health = 3;</code>
       */
      public Builder mergeHealth(RtHealth value) {
        if (healthBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0) &&
              health_ != null &&
              health_ != RtHealth.getDefaultInstance()) {
            health_ =
              RtHealth.newBuilder(health_).mergeFrom(value).buildPartial();
          } else {
            health_ = value;
          }
          onChanged();
        } else {
          healthBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .RtHealth health = 3;</code>
       */
      public Builder clearHealth() {
        if (healthBuilder_ == null) {
          health_ = null;
          onChanged();
        } else {
          healthBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .RtHealth health = 3;</code>
       */
      public RtHealth.Builder getHealthBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getHealthFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtHealth health = 3;</code>
       */
      public RtHealthOrBuilder getHealthOrBuilder() {
        if (healthBuilder_ != null) {
          return healthBuilder_.getMessageOrBuilder();
        } else {
          return health_ == null ?
              RtHealth.getDefaultInstance() : health_;
        }
      }
      /**
       * <code>optional .RtHealth health = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtHealth, RtHealth.Builder, RtHealthOrBuilder>
          getHealthFieldBuilder() {
        if (healthBuilder_ == null) {
          healthBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtHealth, RtHealth.Builder, RtHealthOrBuilder>(
                  getHealth(),
                  getParentForChildren(),
                  isClean());
          health_ = null;
        }
        return healthBuilder_;
      }

      private int key_ = 0;
      /**
       * <code>optional .RtKeyEvent key = 4;</code>
       * @return Whether the key field is set.
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .RtKeyEvent key = 4;</code>
       * @return The key.
       */
      public RtKeyEvent getKey() {
        @SuppressWarnings("deprecation")
        RtKeyEvent result = RtKeyEvent.valueOf(key_);
        return result == null ? RtKeyEvent.RT_KEY_CAMERA : result;
      }
      /**
       * <code>optional .RtKeyEvent key = 4;</code>
       * @param value The key to set.
       * @return This builder for chaining.
       */
      public Builder setKey(RtKeyEvent value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        key_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .RtKeyEvent key = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000008);
        key_ = 0;
        onChanged();
        return this;
      }

      private int timeZone_ ;
      /**
       * <code>optional sfixed32 time_zone = 5;</code>
       * @return Whether the timeZone field is set.
       */
      public boolean hasTimeZone() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional sfixed32 time_zone = 5;</code>
       * @return The timeZone.
       */
      public int getTimeZone() {
        return timeZone_;
      }
      /**
       * <code>optional sfixed32 time_zone = 5;</code>
       * @param value The timeZone to set.
       * @return This builder for chaining.
       */
      public Builder setTimeZone(int value) {
        bitField0_ |= 0x00000010;
        timeZone_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sfixed32 time_zone = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimeZone() {
        bitField0_ = (bitField0_ & ~0x00000010);
        timeZone_ = 0;
        onChanged();
        return this;
      }

      private RtHealthResult healthresult_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RtHealthResult, RtHealthResult.Builder, RtHealthResultOrBuilder> healthresultBuilder_;
      /**
       * <code>optional .RtHealthResult healthresult = 6;</code>
       * @return Whether the healthresult field is set.
       */
      public boolean hasHealthresult() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional .RtHealthResult healthresult = 6;</code>
       * @return The healthresult.
       */
      public RtHealthResult getHealthresult() {
        if (healthresultBuilder_ == null) {
          return healthresult_ == null ? RtHealthResult.getDefaultInstance() : healthresult_;
        } else {
          return healthresultBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .RtHealthResult healthresult = 6;</code>
       */
      public Builder setHealthresult(RtHealthResult value) {
        if (healthresultBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          healthresult_ = value;
          onChanged();
        } else {
          healthresultBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .RtHealthResult healthresult = 6;</code>
       */
      public Builder setHealthresult(
          RtHealthResult.Builder builderForValue) {
        if (healthresultBuilder_ == null) {
          healthresult_ = builderForValue.build();
          onChanged();
        } else {
          healthresultBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .RtHealthResult healthresult = 6;</code>
       */
      public Builder mergeHealthresult(RtHealthResult value) {
        if (healthresultBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0) &&
              healthresult_ != null &&
              healthresult_ != RtHealthResult.getDefaultInstance()) {
            healthresult_ =
              RtHealthResult.newBuilder(healthresult_).mergeFrom(value).buildPartial();
          } else {
            healthresult_ = value;
          }
          onChanged();
        } else {
          healthresultBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .RtHealthResult healthresult = 6;</code>
       */
      public Builder clearHealthresult() {
        if (healthresultBuilder_ == null) {
          healthresult_ = null;
          onChanged();
        } else {
          healthresultBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .RtHealthResult healthresult = 6;</code>
       */
      public RtHealthResult.Builder getHealthresultBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getHealthresultFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtHealthResult healthresult = 6;</code>
       */
      public RtHealthResultOrBuilder getHealthresultOrBuilder() {
        if (healthresultBuilder_ != null) {
          return healthresultBuilder_.getMessageOrBuilder();
        } else {
          return healthresult_ == null ?
              RtHealthResult.getDefaultInstance() : healthresult_;
        }
      }
      /**
       * <code>optional .RtHealthResult healthresult = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtHealthResult, RtHealthResult.Builder, RtHealthResultOrBuilder>
          getHealthresultFieldBuilder() {
        if (healthresultBuilder_ == null) {
          healthresultBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtHealthResult, RtHealthResult.Builder, RtHealthResultOrBuilder>(
                  getHealthresult(),
                  getParentForChildren(),
                  isClean());
          healthresult_ = null;
        }
        return healthresultBuilder_;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtData)
    }

    // @@protoc_insertion_point(class_scope:RtData)
    private static final RtData DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtData();
    }

    public static RtData getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtData>
        PARSER = new com.google.protobuf.AbstractParser<RtData>() {
      @Override
      public RtData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtData(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtData> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtData> getParserForType() {
      return PARSER;
    }

    @Override
    public RtData getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtStateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtState)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .RtSync time = 1;</code>
     * @return Whether the time field is set.
     */
    boolean hasTime();
    /**
     * <code>optional .RtSync time = 1;</code>
     * @return The time.
     */
    RtSync getTime();

    /**
     * <code>optional .RtSync battery = 2;</code>
     * @return Whether the battery field is set.
     */
    boolean hasBattery();
    /**
     * <code>optional .RtSync battery = 2;</code>
     * @return The battery.
     */
    RtSync getBattery();

    /**
     * <code>optional .RtSync health = 3;</code>
     * @return Whether the health field is set.
     */
    boolean hasHealth();
    /**
     * <code>optional .RtSync health = 3;</code>
     * @return The health.
     */
    RtSync getHealth();

    /**
     * <code>optional .RtMode mode = 4;</code>
     * @return Whether the mode field is set.
     */
    boolean hasMode();
    /**
     * <code>optional .RtMode mode = 4;</code>
     * @return The mode.
     */
    RtMode getMode();
  }
  /**
   * Protobuf type {@code RtState}
   */
  public  static final class RtState extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtState)
      RtStateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtState.newBuilder() to construct.
    private RtState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtState() {
      time_ = 0;
      battery_ = 0;
      health_ = 0;
      mode_ = 0;
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtState();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtState(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              RtSync value = RtSync.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                time_ = rawValue;
              }
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              RtSync value = RtSync.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                battery_ = rawValue;
              }
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              RtSync value = RtSync.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                health_ = rawValue;
              }
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              RtMode value = RtMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                mode_ = rawValue;
              }
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtState_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtState_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtState.class, Builder.class);
    }

    private int bitField0_;
    public static final int TIME_FIELD_NUMBER = 1;
    private int time_;
    /**
     * <code>optional .RtSync time = 1;</code>
     * @return Whether the time field is set.
     */
    public boolean hasTime() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .RtSync time = 1;</code>
     * @return The time.
     */
    public RtSync getTime() {
      @SuppressWarnings("deprecation")
      RtSync result = RtSync.valueOf(time_);
      return result == null ? RtSync.STOP_ALL : result;
    }

    public static final int BATTERY_FIELD_NUMBER = 2;
    private int battery_;
    /**
     * <code>optional .RtSync battery = 2;</code>
     * @return Whether the battery field is set.
     */
    public boolean hasBattery() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .RtSync battery = 2;</code>
     * @return The battery.
     */
    public RtSync getBattery() {
      @SuppressWarnings("deprecation")
      RtSync result = RtSync.valueOf(battery_);
      return result == null ? RtSync.STOP_ALL : result;
    }

    public static final int HEALTH_FIELD_NUMBER = 3;
    private int health_;
    /**
     * <code>optional .RtSync health = 3;</code>
     * @return Whether the health field is set.
     */
    public boolean hasHealth() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .RtSync health = 3;</code>
     * @return The health.
     */
    public RtSync getHealth() {
      @SuppressWarnings("deprecation")
      RtSync result = RtSync.valueOf(health_);
      return result == null ? RtSync.STOP_ALL : result;
    }

    public static final int MODE_FIELD_NUMBER = 4;
    private int mode_;
    /**
     * <code>optional .RtMode mode = 4;</code>
     * @return Whether the mode field is set.
     */
    public boolean hasMode() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .RtMode mode = 4;</code>
     * @return The mode.
     */
    public RtMode getMode() {
      @SuppressWarnings("deprecation")
      RtMode result = RtMode.valueOf(mode_);
      return result == null ? RtMode.RT_MODE_BACK_NORMAL : result;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeEnum(1, time_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeEnum(2, battery_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeEnum(3, health_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeEnum(4, mode_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, time_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, battery_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, health_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, mode_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtState)) {
        return super.equals(obj);
      }
      RtState other = (RtState) obj;

      if (hasTime() != other.hasTime()) return false;
      if (hasTime()) {
        if (time_ != other.time_) return false;
      }
      if (hasBattery() != other.hasBattery()) return false;
      if (hasBattery()) {
        if (battery_ != other.battery_) return false;
      }
      if (hasHealth() != other.hasHealth()) return false;
      if (hasHealth()) {
        if (health_ != other.health_) return false;
      }
      if (hasMode() != other.hasMode()) return false;
      if (hasMode()) {
        if (mode_ != other.mode_) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasTime()) {
        hash = (37 * hash) + TIME_FIELD_NUMBER;
        hash = (53 * hash) + time_;
      }
      if (hasBattery()) {
        hash = (37 * hash) + BATTERY_FIELD_NUMBER;
        hash = (53 * hash) + battery_;
      }
      if (hasHealth()) {
        hash = (37 * hash) + HEALTH_FIELD_NUMBER;
        hash = (53 * hash) + health_;
      }
      if (hasMode()) {
        hash = (37 * hash) + MODE_FIELD_NUMBER;
        hash = (53 * hash) + mode_;
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtState parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtState parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtState parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtState parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtState parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtState parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtState parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtState parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtState parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtState parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtState parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtState parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtState prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtState}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtState)
        RtStateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtState_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtState_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtState.class, Builder.class);
      }

      // Construct using RealtimeData.RtState.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        time_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        battery_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        health_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        mode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtState_descriptor;
      }

      @Override
      public RtState getDefaultInstanceForType() {
        return RtState.getDefaultInstance();
      }

      @Override
      public RtState build() {
        RtState result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtState buildPartial() {
        RtState result = new RtState(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.time_ = time_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.battery_ = battery_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.health_ = health_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.mode_ = mode_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtState) {
          return mergeFrom((RtState)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtState other) {
        if (other == RtState.getDefaultInstance()) return this;
        if (other.hasTime()) {
          setTime(other.getTime());
        }
        if (other.hasBattery()) {
          setBattery(other.getBattery());
        }
        if (other.hasHealth()) {
          setHealth(other.getHealth());
        }
        if (other.hasMode()) {
          setMode(other.getMode());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtState parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtState) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int time_ = 0;
      /**
       * <code>optional .RtSync time = 1;</code>
       * @return Whether the time field is set.
       */
      public boolean hasTime() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional .RtSync time = 1;</code>
       * @return The time.
       */
      public RtSync getTime() {
        @SuppressWarnings("deprecation")
        RtSync result = RtSync.valueOf(time_);
        return result == null ? RtSync.STOP_ALL : result;
      }
      /**
       * <code>optional .RtSync time = 1;</code>
       * @param value The time to set.
       * @return This builder for chaining.
       */
      public Builder setTime(RtSync value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        time_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .RtSync time = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearTime() {
        bitField0_ = (bitField0_ & ~0x00000001);
        time_ = 0;
        onChanged();
        return this;
      }

      private int battery_ = 0;
      /**
       * <code>optional .RtSync battery = 2;</code>
       * @return Whether the battery field is set.
       */
      public boolean hasBattery() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .RtSync battery = 2;</code>
       * @return The battery.
       */
      public RtSync getBattery() {
        @SuppressWarnings("deprecation")
        RtSync result = RtSync.valueOf(battery_);
        return result == null ? RtSync.STOP_ALL : result;
      }
      /**
       * <code>optional .RtSync battery = 2;</code>
       * @param value The battery to set.
       * @return This builder for chaining.
       */
      public Builder setBattery(RtSync value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        battery_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .RtSync battery = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearBattery() {
        bitField0_ = (bitField0_ & ~0x00000002);
        battery_ = 0;
        onChanged();
        return this;
      }

      private int health_ = 0;
      /**
       * <code>optional .RtSync health = 3;</code>
       * @return Whether the health field is set.
       */
      public boolean hasHealth() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .RtSync health = 3;</code>
       * @return The health.
       */
      public RtSync getHealth() {
        @SuppressWarnings("deprecation")
        RtSync result = RtSync.valueOf(health_);
        return result == null ? RtSync.STOP_ALL : result;
      }
      /**
       * <code>optional .RtSync health = 3;</code>
       * @param value The health to set.
       * @return This builder for chaining.
       */
      public Builder setHealth(RtSync value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        health_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .RtSync health = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearHealth() {
        bitField0_ = (bitField0_ & ~0x00000004);
        health_ = 0;
        onChanged();
        return this;
      }

      private int mode_ = 0;
      /**
       * <code>optional .RtMode mode = 4;</code>
       * @return Whether the mode field is set.
       */
      public boolean hasMode() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .RtMode mode = 4;</code>
       * @return The mode.
       */
      public RtMode getMode() {
        @SuppressWarnings("deprecation")
        RtMode result = RtMode.valueOf(mode_);
        return result == null ? RtMode.RT_MODE_BACK_NORMAL : result;
      }
      /**
       * <code>optional .RtMode mode = 4;</code>
       * @param value The mode to set.
       * @return This builder for chaining.
       */
      public Builder setMode(RtMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        mode_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .RtMode mode = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearMode() {
        bitField0_ = (bitField0_ & ~0x00000008);
        mode_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtState)
    }

    // @@protoc_insertion_point(class_scope:RtState)
    private static final RtState DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtState();
    }

    public static RtState getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtState>
        PARSER = new com.google.protobuf.AbstractParser<RtState>() {
      @Override
      public RtState parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtState(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtState> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtState> getParserForType() {
      return PARSER;
    }

    @Override
    public RtState getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtSensorDataOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtSensorData)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required fixed32 type = 1;</code>
     * @return Whether the type field is set.
     */
    boolean hasType();
    /**
     * <code>required fixed32 type = 1;</code>
     * @return The type.
     */
    int getType();

    /**
     * <code>required .RtTime time = 2;</code>
     * @return Whether the time field is set.
     */
    boolean hasTime();
    /**
     * <code>required .RtTime time = 2;</code>
     * @return The time.
     */
    RtTime getTime();
    /**
     * <code>required .RtTime time = 2;</code>
     */
    RtTimeOrBuilder getTimeOrBuilder();

    /**
     * <code>required fixed32 seq = 3;</code>
     * @return Whether the seq field is set.
     */
    boolean hasSeq();
    /**
     * <code>required fixed32 seq = 3;</code>
     * @return The seq.
     */
    int getSeq();

    /**
     * <code>repeated fixed32 data = 4;</code>
     * @return A list containing the data.
     */
    java.util.List<Integer> getDataList();
    /**
     * <code>repeated fixed32 data = 4;</code>
     * @return The count of data.
     */
    int getDataCount();
    /**
     * <code>repeated fixed32 data = 4;</code>
     * @param index The index of the element to return.
     * @return The data at the given index.
     */
    int getData(int index);
  }
  /**
   * Protobuf type {@code RtSensorData}
   */
  public  static final class RtSensorData extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtSensorData)
      RtSensorDataOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtSensorData.newBuilder() to construct.
    private RtSensorData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtSensorData() {
      data_ = emptyIntList();
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtSensorData();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtSensorData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              type_ = input.readFixed32();
              break;
            }
            case 18: {
              RtTime.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) != 0)) {
                subBuilder = time_.toBuilder();
              }
              time_ = input.readMessage(RtTime.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(time_);
                time_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              seq_ = input.readFixed32();
              break;
            }
            case 37: {
              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
                data_ = newIntList();
                mutable_bitField0_ |= 0x00000008;
              }
              data_.addInt(input.readFixed32());
              break;
            }
            case 34: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000008) != 0) && input.getBytesUntilLimit() > 0) {
                data_ = newIntList();
                mutable_bitField0_ |= 0x00000008;
              }
              while (input.getBytesUntilLimit() > 0) {
                data_.addInt(input.readFixed32());
              }
              input.popLimit(limit);
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) != 0)) {
          data_.makeImmutable(); // C
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtSensorData_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtSensorData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtSensorData.class, Builder.class);
    }

    private int bitField0_;
    public static final int TYPE_FIELD_NUMBER = 1;
    private int type_;
    /**
     * <code>required fixed32 type = 1;</code>
     * @return Whether the type field is set.
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required fixed32 type = 1;</code>
     * @return The type.
     */
    public int getType() {
      return type_;
    }

    public static final int TIME_FIELD_NUMBER = 2;
    private RtTime time_;
    /**
     * <code>required .RtTime time = 2;</code>
     * @return Whether the time field is set.
     */
    public boolean hasTime() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required .RtTime time = 2;</code>
     * @return The time.
     */
    public RtTime getTime() {
      return time_ == null ? RtTime.getDefaultInstance() : time_;
    }
    /**
     * <code>required .RtTime time = 2;</code>
     */
    public RtTimeOrBuilder getTimeOrBuilder() {
      return time_ == null ? RtTime.getDefaultInstance() : time_;
    }

    public static final int SEQ_FIELD_NUMBER = 3;
    private int seq_;
    /**
     * <code>required fixed32 seq = 3;</code>
     * @return Whether the seq field is set.
     */
    public boolean hasSeq() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>required fixed32 seq = 3;</code>
     * @return The seq.
     */
    public int getSeq() {
      return seq_;
    }

    public static final int DATA_FIELD_NUMBER = 4;
    private com.google.protobuf.Internal.IntList data_;
    /**
     * <code>repeated fixed32 data = 4;</code>
     * @return A list containing the data.
     */
    public java.util.List<Integer>
        getDataList() {
      return data_;
    }
    /**
     * <code>repeated fixed32 data = 4;</code>
     * @return The count of data.
     */
    public int getDataCount() {
      return data_.size();
    }
    /**
     * <code>repeated fixed32 data = 4;</code>
     * @param index The index of the element to return.
     * @return The data at the given index.
     */
    public int getData(int index) {
      return data_.getInt(index);
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTime()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSeq()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getTime().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, type_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeMessage(2, getTime());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFixed32(3, seq_);
      }
      for (int i = 0; i < data_.size(); i++) {
        output.writeFixed32(4, data_.getInt(i));
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, type_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getTime());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(3, seq_);
      }
      {
        int dataSize = 0;
        dataSize = 4 * getDataList().size();
        size += dataSize;
        size += 1 * getDataList().size();
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtSensorData)) {
        return super.equals(obj);
      }
      RtSensorData other = (RtSensorData) obj;

      if (hasType() != other.hasType()) return false;
      if (hasType()) {
        if (getType()
            != other.getType()) return false;
      }
      if (hasTime() != other.hasTime()) return false;
      if (hasTime()) {
        if (!getTime()
            .equals(other.getTime())) return false;
      }
      if (hasSeq() != other.hasSeq()) return false;
      if (hasSeq()) {
        if (getSeq()
            != other.getSeq()) return false;
      }
      if (!getDataList()
          .equals(other.getDataList())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasType()) {
        hash = (37 * hash) + TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getType();
      }
      if (hasTime()) {
        hash = (37 * hash) + TIME_FIELD_NUMBER;
        hash = (53 * hash) + getTime().hashCode();
      }
      if (hasSeq()) {
        hash = (37 * hash) + SEQ_FIELD_NUMBER;
        hash = (53 * hash) + getSeq();
      }
      if (getDataCount() > 0) {
        hash = (37 * hash) + DATA_FIELD_NUMBER;
        hash = (53 * hash) + getDataList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtSensorData parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSensorData parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSensorData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSensorData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSensorData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSensorData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSensorData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtSensorData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtSensorData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtSensorData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtSensorData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtSensorData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtSensorData prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtSensorData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtSensorData)
        RtSensorDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtSensorData_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtSensorData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtSensorData.class, Builder.class);
      }

      // Construct using RealtimeData.RtSensorData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTimeFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        type_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (timeBuilder_ == null) {
          time_ = null;
        } else {
          timeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        seq_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        data_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtSensorData_descriptor;
      }

      @Override
      public RtSensorData getDefaultInstanceForType() {
        return RtSensorData.getDefaultInstance();
      }

      @Override
      public RtSensorData build() {
        RtSensorData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtSensorData buildPartial() {
        RtSensorData result = new RtSensorData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.type_ = type_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (timeBuilder_ == null) {
            result.time_ = time_;
          } else {
            result.time_ = timeBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.seq_ = seq_;
          to_bitField0_ |= 0x00000004;
        }
        if (((bitField0_ & 0x00000008) != 0)) {
          data_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.data_ = data_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtSensorData) {
          return mergeFrom((RtSensorData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtSensorData other) {
        if (other == RtSensorData.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasTime()) {
          mergeTime(other.getTime());
        }
        if (other.hasSeq()) {
          setSeq(other.getSeq());
        }
        if (!other.data_.isEmpty()) {
          if (data_.isEmpty()) {
            data_ = other.data_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureDataIsMutable();
            data_.addAll(other.data_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasType()) {
          return false;
        }
        if (!hasTime()) {
          return false;
        }
        if (!hasSeq()) {
          return false;
        }
        if (!getTime().isInitialized()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtSensorData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtSensorData) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int type_ ;
      /**
       * <code>required fixed32 type = 1;</code>
       * @return Whether the type field is set.
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required fixed32 type = 1;</code>
       * @return The type.
       */
      public int getType() {
        return type_;
      }
      /**
       * <code>required fixed32 type = 1;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(int value) {
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 type = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = 0;
        onChanged();
        return this;
      }

      private RtTime time_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RtTime, RtTime.Builder, RtTimeOrBuilder> timeBuilder_;
      /**
       * <code>required .RtTime time = 2;</code>
       * @return Whether the time field is set.
       */
      public boolean hasTime() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required .RtTime time = 2;</code>
       * @return The time.
       */
      public RtTime getTime() {
        if (timeBuilder_ == null) {
          return time_ == null ? RtTime.getDefaultInstance() : time_;
        } else {
          return timeBuilder_.getMessage();
        }
      }
      /**
       * <code>required .RtTime time = 2;</code>
       */
      public Builder setTime(RtTime value) {
        if (timeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          time_ = value;
          onChanged();
        } else {
          timeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>required .RtTime time = 2;</code>
       */
      public Builder setTime(
          RtTime.Builder builderForValue) {
        if (timeBuilder_ == null) {
          time_ = builderForValue.build();
          onChanged();
        } else {
          timeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>required .RtTime time = 2;</code>
       */
      public Builder mergeTime(RtTime value) {
        if (timeBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              time_ != null &&
              time_ != RtTime.getDefaultInstance()) {
            time_ =
              RtTime.newBuilder(time_).mergeFrom(value).buildPartial();
          } else {
            time_ = value;
          }
          onChanged();
        } else {
          timeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>required .RtTime time = 2;</code>
       */
      public Builder clearTime() {
        if (timeBuilder_ == null) {
          time_ = null;
          onChanged();
        } else {
          timeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>required .RtTime time = 2;</code>
       */
      public RtTime.Builder getTimeBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getTimeFieldBuilder().getBuilder();
      }
      /**
       * <code>required .RtTime time = 2;</code>
       */
      public RtTimeOrBuilder getTimeOrBuilder() {
        if (timeBuilder_ != null) {
          return timeBuilder_.getMessageOrBuilder();
        } else {
          return time_ == null ?
              RtTime.getDefaultInstance() : time_;
        }
      }
      /**
       * <code>required .RtTime time = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtTime, RtTime.Builder, RtTimeOrBuilder>
          getTimeFieldBuilder() {
        if (timeBuilder_ == null) {
          timeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtTime, RtTime.Builder, RtTimeOrBuilder>(
                  getTime(),
                  getParentForChildren(),
                  isClean());
          time_ = null;
        }
        return timeBuilder_;
      }

      private int seq_ ;
      /**
       * <code>required fixed32 seq = 3;</code>
       * @return Whether the seq field is set.
       */
      public boolean hasSeq() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>required fixed32 seq = 3;</code>
       * @return The seq.
       */
      public int getSeq() {
        return seq_;
      }
      /**
       * <code>required fixed32 seq = 3;</code>
       * @param value The seq to set.
       * @return This builder for chaining.
       */
      public Builder setSeq(int value) {
        bitField0_ |= 0x00000004;
        seq_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 seq = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearSeq() {
        bitField0_ = (bitField0_ & ~0x00000004);
        seq_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList data_ = emptyIntList();
      private void ensureDataIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          data_ = mutableCopy(data_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated fixed32 data = 4;</code>
       * @return A list containing the data.
       */
      public java.util.List<Integer>
          getDataList() {
        return ((bitField0_ & 0x00000008) != 0) ?
                 java.util.Collections.unmodifiableList(data_) : data_;
      }
      /**
       * <code>repeated fixed32 data = 4;</code>
       * @return The count of data.
       */
      public int getDataCount() {
        return data_.size();
      }
      /**
       * <code>repeated fixed32 data = 4;</code>
       * @param index The index of the element to return.
       * @return The data at the given index.
       */
      public int getData(int index) {
        return data_.getInt(index);
      }
      /**
       * <code>repeated fixed32 data = 4;</code>
       * @param index The index to set the value at.
       * @param value The data to set.
       * @return This builder for chaining.
       */
      public Builder setData(
          int index, int value) {
        ensureDataIsMutable();
        data_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed32 data = 4;</code>
       * @param value The data to add.
       * @return This builder for chaining.
       */
      public Builder addData(int value) {
        ensureDataIsMutable();
        data_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed32 data = 4;</code>
       * @param values The data to add.
       * @return This builder for chaining.
       */
      public Builder addAllData(
          Iterable<? extends Integer> values) {
        ensureDataIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, data_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed32 data = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearData() {
        data_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtSensorData)
    }

    // @@protoc_insertion_point(class_scope:RtSensorData)
    private static final RtSensorData DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtSensorData();
    }

    public static RtSensorData getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtSensorData>
        PARSER = new com.google.protobuf.AbstractParser<RtSensorData>() {
      @Override
      public RtSensorData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtSensorData(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtSensorData> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtSensorData> getParserForType() {
      return PARSER;
    }

    @Override
    public RtSensorData getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtDtda_SummaryOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtDtda_Summary)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required fixed32 time = 1;</code>
     * @return Whether the time field is set.
     */
    boolean hasTime();
    /**
     * <code>required fixed32 time = 1;</code>
     * @return The time.
     */
    int getTime();

    /**
     * <code>required fixed32 steps = 2;</code>
     * @return Whether the steps field is set.
     */
    boolean hasSteps();
    /**
     * <code>required fixed32 steps = 2;</code>
     * @return The steps.
     */
    int getSteps();

    /**
     * <code>required fixed32 distance = 3;</code>
     * @return Whether the distance field is set.
     */
    boolean hasDistance();
    /**
     * <code>required fixed32 distance = 3;</code>
     * @return The distance.
     */
    int getDistance();

    /**
     * <code>required fixed32 calorie = 4;</code>
     * @return Whether the calorie field is set.
     */
    boolean hasCalorie();
    /**
     * <code>required fixed32 calorie = 4;</code>
     * @return The calorie.
     */
    int getCalorie();
  }
  /**
   * Protobuf type {@code RtDtda_Summary}
   */
  public  static final class RtDtda_Summary extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtDtda_Summary)
      RtDtda_SummaryOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtDtda_Summary.newBuilder() to construct.
    private RtDtda_Summary(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtDtda_Summary() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtDtda_Summary();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtDtda_Summary(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              time_ = input.readFixed32();
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              steps_ = input.readFixed32();
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              distance_ = input.readFixed32();
              break;
            }
            case 37: {
              bitField0_ |= 0x00000008;
              calorie_ = input.readFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtDtda_Summary_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtDtda_Summary_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtDtda_Summary.class, Builder.class);
    }

    private int bitField0_;
    public static final int TIME_FIELD_NUMBER = 1;
    private int time_;
    /**
     * <code>required fixed32 time = 1;</code>
     * @return Whether the time field is set.
     */
    public boolean hasTime() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required fixed32 time = 1;</code>
     * @return The time.
     */
    public int getTime() {
      return time_;
    }

    public static final int STEPS_FIELD_NUMBER = 2;
    private int steps_;
    /**
     * <code>required fixed32 steps = 2;</code>
     * @return Whether the steps field is set.
     */
    public boolean hasSteps() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required fixed32 steps = 2;</code>
     * @return The steps.
     */
    public int getSteps() {
      return steps_;
    }

    public static final int DISTANCE_FIELD_NUMBER = 3;
    private int distance_;
    /**
     * <code>required fixed32 distance = 3;</code>
     * @return Whether the distance field is set.
     */
    public boolean hasDistance() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>required fixed32 distance = 3;</code>
     * @return The distance.
     */
    public int getDistance() {
      return distance_;
    }

    public static final int CALORIE_FIELD_NUMBER = 4;
    private int calorie_;
    /**
     * <code>required fixed32 calorie = 4;</code>
     * @return Whether the calorie field is set.
     */
    public boolean hasCalorie() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>required fixed32 calorie = 4;</code>
     * @return The calorie.
     */
    public int getCalorie() {
      return calorie_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasTime()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSteps()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDistance()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasCalorie()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, time_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeFixed32(2, steps_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFixed32(3, distance_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeFixed32(4, calorie_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, time_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(2, steps_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(3, distance_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(4, calorie_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtDtda_Summary)) {
        return super.equals(obj);
      }
      RtDtda_Summary other = (RtDtda_Summary) obj;

      if (hasTime() != other.hasTime()) return false;
      if (hasTime()) {
        if (getTime()
            != other.getTime()) return false;
      }
      if (hasSteps() != other.hasSteps()) return false;
      if (hasSteps()) {
        if (getSteps()
            != other.getSteps()) return false;
      }
      if (hasDistance() != other.hasDistance()) return false;
      if (hasDistance()) {
        if (getDistance()
            != other.getDistance()) return false;
      }
      if (hasCalorie() != other.hasCalorie()) return false;
      if (hasCalorie()) {
        if (getCalorie()
            != other.getCalorie()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasTime()) {
        hash = (37 * hash) + TIME_FIELD_NUMBER;
        hash = (53 * hash) + getTime();
      }
      if (hasSteps()) {
        hash = (37 * hash) + STEPS_FIELD_NUMBER;
        hash = (53 * hash) + getSteps();
      }
      if (hasDistance()) {
        hash = (37 * hash) + DISTANCE_FIELD_NUMBER;
        hash = (53 * hash) + getDistance();
      }
      if (hasCalorie()) {
        hash = (37 * hash) + CALORIE_FIELD_NUMBER;
        hash = (53 * hash) + getCalorie();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtDtda_Summary parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtDtda_Summary parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtDtda_Summary parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtDtda_Summary parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtDtda_Summary parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtDtda_Summary parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtDtda_Summary parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtDtda_Summary parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtDtda_Summary parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtDtda_Summary parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtDtda_Summary parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtDtda_Summary parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtDtda_Summary prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtDtda_Summary}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtDtda_Summary)
        RtDtda_SummaryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtDtda_Summary_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtDtda_Summary_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtDtda_Summary.class, Builder.class);
      }

      // Construct using RealtimeData.RtDtda_Summary.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        time_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        steps_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        distance_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        calorie_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtDtda_Summary_descriptor;
      }

      @Override
      public RtDtda_Summary getDefaultInstanceForType() {
        return RtDtda_Summary.getDefaultInstance();
      }

      @Override
      public RtDtda_Summary build() {
        RtDtda_Summary result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtDtda_Summary buildPartial() {
        RtDtda_Summary result = new RtDtda_Summary(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.time_ = time_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.steps_ = steps_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.distance_ = distance_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.calorie_ = calorie_;
          to_bitField0_ |= 0x00000008;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtDtda_Summary) {
          return mergeFrom((RtDtda_Summary)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtDtda_Summary other) {
        if (other == RtDtda_Summary.getDefaultInstance()) return this;
        if (other.hasTime()) {
          setTime(other.getTime());
        }
        if (other.hasSteps()) {
          setSteps(other.getSteps());
        }
        if (other.hasDistance()) {
          setDistance(other.getDistance());
        }
        if (other.hasCalorie()) {
          setCalorie(other.getCalorie());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasTime()) {
          return false;
        }
        if (!hasSteps()) {
          return false;
        }
        if (!hasDistance()) {
          return false;
        }
        if (!hasCalorie()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtDtda_Summary parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtDtda_Summary) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int time_ ;
      /**
       * <code>required fixed32 time = 1;</code>
       * @return Whether the time field is set.
       */
      public boolean hasTime() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required fixed32 time = 1;</code>
       * @return The time.
       */
      public int getTime() {
        return time_;
      }
      /**
       * <code>required fixed32 time = 1;</code>
       * @param value The time to set.
       * @return This builder for chaining.
       */
      public Builder setTime(int value) {
        bitField0_ |= 0x00000001;
        time_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 time = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearTime() {
        bitField0_ = (bitField0_ & ~0x00000001);
        time_ = 0;
        onChanged();
        return this;
      }

      private int steps_ ;
      /**
       * <code>required fixed32 steps = 2;</code>
       * @return Whether the steps field is set.
       */
      public boolean hasSteps() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required fixed32 steps = 2;</code>
       * @return The steps.
       */
      public int getSteps() {
        return steps_;
      }
      /**
       * <code>required fixed32 steps = 2;</code>
       * @param value The steps to set.
       * @return This builder for chaining.
       */
      public Builder setSteps(int value) {
        bitField0_ |= 0x00000002;
        steps_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 steps = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearSteps() {
        bitField0_ = (bitField0_ & ~0x00000002);
        steps_ = 0;
        onChanged();
        return this;
      }

      private int distance_ ;
      /**
       * <code>required fixed32 distance = 3;</code>
       * @return Whether the distance field is set.
       */
      public boolean hasDistance() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>required fixed32 distance = 3;</code>
       * @return The distance.
       */
      public int getDistance() {
        return distance_;
      }
      /**
       * <code>required fixed32 distance = 3;</code>
       * @param value The distance to set.
       * @return This builder for chaining.
       */
      public Builder setDistance(int value) {
        bitField0_ |= 0x00000004;
        distance_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 distance = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearDistance() {
        bitField0_ = (bitField0_ & ~0x00000004);
        distance_ = 0;
        onChanged();
        return this;
      }

      private int calorie_ ;
      /**
       * <code>required fixed32 calorie = 4;</code>
       * @return Whether the calorie field is set.
       */
      public boolean hasCalorie() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>required fixed32 calorie = 4;</code>
       * @return The calorie.
       */
      public int getCalorie() {
        return calorie_;
      }
      /**
       * <code>required fixed32 calorie = 4;</code>
       * @param value The calorie to set.
       * @return This builder for chaining.
       */
      public Builder setCalorie(int value) {
        bitField0_ |= 0x00000008;
        calorie_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 calorie = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearCalorie() {
        bitField0_ = (bitField0_ & ~0x00000008);
        calorie_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtDtda_Summary)
    }

    // @@protoc_insertion_point(class_scope:RtDtda_Summary)
    private static final RtDtda_Summary DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtDtda_Summary();
    }

    public static RtDtda_Summary getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtDtda_Summary>
        PARSER = new com.google.protobuf.AbstractParser<RtDtda_Summary>() {
      @Override
      public RtDtda_Summary parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtDtda_Summary(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtDtda_Summary> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtDtda_Summary> getParserForType() {
      return PARSER;
    }

    @Override
    public RtDtda_Summary getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtSportDataOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtSportData)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required fixed32 sd_sportType = 1;</code>
     * @return Whether the sdSportType field is set.
     */
    boolean hasSdSportType();
    /**
     * <code>required fixed32 sd_sportType = 1;</code>
     * @return The sdSportType.
     */
    int getSdSportType();

    /**
     * <code>required fixed32 hr_total = 2;</code>
     * @return Whether the hrTotal field is set.
     */
    boolean hasHrTotal();
    /**
     * <code>required fixed32 hr_total = 2;</code>
     * @return The hrTotal.
     */
    int getHrTotal();

    /**
     * <code>required fixed32 hr_count = 3;</code>
     * @return Whether the hrCount field is set.
     */
    boolean hasHrCount();
    /**
     * <code>required fixed32 hr_count = 3;</code>
     * @return The hrCount.
     */
    int getHrCount();

    /**
     * <code>required fixed32 realtime_pace = 4;</code>
     * @return Whether the realtimePace field is set.
     */
    boolean hasRealtimePace();
    /**
     * <code>required fixed32 realtime_pace = 4;</code>
     * @return The realtimePace.
     */
    int getRealtimePace();

    /**
     * <code>required fixed32 realtime_spm = 5;</code>
     * @return Whether the realtimeSpm field is set.
     */
    boolean hasRealtimeSpm();
    /**
     * <code>required fixed32 realtime_spm = 5;</code>
     * @return The realtimeSpm.
     */
    int getRealtimeSpm();

    /**
     * <code>required fixed32 realtime_hr = 6;</code>
     * @return Whether the realtimeHr field is set.
     */
    boolean hasRealtimeHr();
    /**
     * <code>required fixed32 realtime_hr = 6;</code>
     * @return The realtimeHr.
     */
    int getRealtimeHr();

    /**
     * <code>required fixed32 swim_circle = 7;</code>
     * @return Whether the swimCircle field is set.
     */
    boolean hasSwimCircle();
    /**
     * <code>required fixed32 swim_circle = 7;</code>
     * @return The swimCircle.
     */
    int getSwimCircle();

    /**
     * <code>required fixed32 swim_stroke = 8;</code>
     * @return Whether the swimStroke field is set.
     */
    boolean hasSwimStroke();
    /**
     * <code>required fixed32 swim_stroke = 8;</code>
     * @return The swimStroke.
     */
    int getSwimStroke();

    /**
     * <code>required .RtDtda_Summary data_total = 9;</code>
     * @return Whether the dataTotal field is set.
     */
    boolean hasDataTotal();
    /**
     * <code>required .RtDtda_Summary data_total = 9;</code>
     * @return The dataTotal.
     */
    RtDtda_Summary getDataTotal();
    /**
     * <code>required .RtDtda_Summary data_total = 9;</code>
     */
    RtDtda_SummaryOrBuilder getDataTotalOrBuilder();

    /**
     * <code>required .RtDtda_Summary data_sport = 10;</code>
     * @return Whether the dataSport field is set.
     */
    boolean hasDataSport();
    /**
     * <code>required .RtDtda_Summary data_sport = 10;</code>
     * @return The dataSport.
     */
    RtDtda_Summary getDataSport();
    /**
     * <code>required .RtDtda_Summary data_sport = 10;</code>
     */
    RtDtda_SummaryOrBuilder getDataSportOrBuilder();
  }
  /**
   * Protobuf type {@code RtSportData}
   */
  public  static final class RtSportData extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtSportData)
      RtSportDataOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtSportData.newBuilder() to construct.
    private RtSportData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtSportData() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtSportData();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtSportData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              sdSportType_ = input.readFixed32();
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              hrTotal_ = input.readFixed32();
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              hrCount_ = input.readFixed32();
              break;
            }
            case 37: {
              bitField0_ |= 0x00000008;
              realtimePace_ = input.readFixed32();
              break;
            }
            case 45: {
              bitField0_ |= 0x00000010;
              realtimeSpm_ = input.readFixed32();
              break;
            }
            case 53: {
              bitField0_ |= 0x00000020;
              realtimeHr_ = input.readFixed32();
              break;
            }
            case 61: {
              bitField0_ |= 0x00000040;
              swimCircle_ = input.readFixed32();
              break;
            }
            case 69: {
              bitField0_ |= 0x00000080;
              swimStroke_ = input.readFixed32();
              break;
            }
            case 74: {
              RtDtda_Summary.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) != 0)) {
                subBuilder = dataTotal_.toBuilder();
              }
              dataTotal_ = input.readMessage(RtDtda_Summary.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(dataTotal_);
                dataTotal_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 82: {
              RtDtda_Summary.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) != 0)) {
                subBuilder = dataSport_.toBuilder();
              }
              dataSport_ = input.readMessage(RtDtda_Summary.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(dataSport_);
                dataSport_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtSportData_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtSportData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtSportData.class, Builder.class);
    }

    private int bitField0_;
    public static final int SD_SPORTTYPE_FIELD_NUMBER = 1;
    private int sdSportType_;
    /**
     * <code>required fixed32 sd_sportType = 1;</code>
     * @return Whether the sdSportType field is set.
     */
    public boolean hasSdSportType() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required fixed32 sd_sportType = 1;</code>
     * @return The sdSportType.
     */
    public int getSdSportType() {
      return sdSportType_;
    }

    public static final int HR_TOTAL_FIELD_NUMBER = 2;
    private int hrTotal_;
    /**
     * <code>required fixed32 hr_total = 2;</code>
     * @return Whether the hrTotal field is set.
     */
    public boolean hasHrTotal() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required fixed32 hr_total = 2;</code>
     * @return The hrTotal.
     */
    public int getHrTotal() {
      return hrTotal_;
    }

    public static final int HR_COUNT_FIELD_NUMBER = 3;
    private int hrCount_;
    /**
     * <code>required fixed32 hr_count = 3;</code>
     * @return Whether the hrCount field is set.
     */
    public boolean hasHrCount() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>required fixed32 hr_count = 3;</code>
     * @return The hrCount.
     */
    public int getHrCount() {
      return hrCount_;
    }

    public static final int REALTIME_PACE_FIELD_NUMBER = 4;
    private int realtimePace_;
    /**
     * <code>required fixed32 realtime_pace = 4;</code>
     * @return Whether the realtimePace field is set.
     */
    public boolean hasRealtimePace() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>required fixed32 realtime_pace = 4;</code>
     * @return The realtimePace.
     */
    public int getRealtimePace() {
      return realtimePace_;
    }

    public static final int REALTIME_SPM_FIELD_NUMBER = 5;
    private int realtimeSpm_;
    /**
     * <code>required fixed32 realtime_spm = 5;</code>
     * @return Whether the realtimeSpm field is set.
     */
    public boolean hasRealtimeSpm() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>required fixed32 realtime_spm = 5;</code>
     * @return The realtimeSpm.
     */
    public int getRealtimeSpm() {
      return realtimeSpm_;
    }

    public static final int REALTIME_HR_FIELD_NUMBER = 6;
    private int realtimeHr_;
    /**
     * <code>required fixed32 realtime_hr = 6;</code>
     * @return Whether the realtimeHr field is set.
     */
    public boolean hasRealtimeHr() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>required fixed32 realtime_hr = 6;</code>
     * @return The realtimeHr.
     */
    public int getRealtimeHr() {
      return realtimeHr_;
    }

    public static final int SWIM_CIRCLE_FIELD_NUMBER = 7;
    private int swimCircle_;
    /**
     * <code>required fixed32 swim_circle = 7;</code>
     * @return Whether the swimCircle field is set.
     */
    public boolean hasSwimCircle() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>required fixed32 swim_circle = 7;</code>
     * @return The swimCircle.
     */
    public int getSwimCircle() {
      return swimCircle_;
    }

    public static final int SWIM_STROKE_FIELD_NUMBER = 8;
    private int swimStroke_;
    /**
     * <code>required fixed32 swim_stroke = 8;</code>
     * @return Whether the swimStroke field is set.
     */
    public boolean hasSwimStroke() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>required fixed32 swim_stroke = 8;</code>
     * @return The swimStroke.
     */
    public int getSwimStroke() {
      return swimStroke_;
    }

    public static final int DATA_TOTAL_FIELD_NUMBER = 9;
    private RtDtda_Summary dataTotal_;
    /**
     * <code>required .RtDtda_Summary data_total = 9;</code>
     * @return Whether the dataTotal field is set.
     */
    public boolean hasDataTotal() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>required .RtDtda_Summary data_total = 9;</code>
     * @return The dataTotal.
     */
    public RtDtda_Summary getDataTotal() {
      return dataTotal_ == null ? RtDtda_Summary.getDefaultInstance() : dataTotal_;
    }
    /**
     * <code>required .RtDtda_Summary data_total = 9;</code>
     */
    public RtDtda_SummaryOrBuilder getDataTotalOrBuilder() {
      return dataTotal_ == null ? RtDtda_Summary.getDefaultInstance() : dataTotal_;
    }

    public static final int DATA_SPORT_FIELD_NUMBER = 10;
    private RtDtda_Summary dataSport_;
    /**
     * <code>required .RtDtda_Summary data_sport = 10;</code>
     * @return Whether the dataSport field is set.
     */
    public boolean hasDataSport() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>required .RtDtda_Summary data_sport = 10;</code>
     * @return The dataSport.
     */
    public RtDtda_Summary getDataSport() {
      return dataSport_ == null ? RtDtda_Summary.getDefaultInstance() : dataSport_;
    }
    /**
     * <code>required .RtDtda_Summary data_sport = 10;</code>
     */
    public RtDtda_SummaryOrBuilder getDataSportOrBuilder() {
      return dataSport_ == null ? RtDtda_Summary.getDefaultInstance() : dataSport_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasSdSportType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasHrTotal()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasHrCount()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasRealtimePace()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasRealtimeSpm()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasRealtimeHr()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSwimCircle()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSwimStroke()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDataTotal()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDataSport()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getDataTotal().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getDataSport().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, sdSportType_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeFixed32(2, hrTotal_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFixed32(3, hrCount_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeFixed32(4, realtimePace_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeFixed32(5, realtimeSpm_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeFixed32(6, realtimeHr_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeFixed32(7, swimCircle_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeFixed32(8, swimStroke_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        output.writeMessage(9, getDataTotal());
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        output.writeMessage(10, getDataSport());
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, sdSportType_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(2, hrTotal_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(3, hrCount_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(4, realtimePace_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(5, realtimeSpm_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(6, realtimeHr_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(7, swimCircle_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(8, swimStroke_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, getDataTotal());
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getDataSport());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtSportData)) {
        return super.equals(obj);
      }
      RtSportData other = (RtSportData) obj;

      if (hasSdSportType() != other.hasSdSportType()) return false;
      if (hasSdSportType()) {
        if (getSdSportType()
            != other.getSdSportType()) return false;
      }
      if (hasHrTotal() != other.hasHrTotal()) return false;
      if (hasHrTotal()) {
        if (getHrTotal()
            != other.getHrTotal()) return false;
      }
      if (hasHrCount() != other.hasHrCount()) return false;
      if (hasHrCount()) {
        if (getHrCount()
            != other.getHrCount()) return false;
      }
      if (hasRealtimePace() != other.hasRealtimePace()) return false;
      if (hasRealtimePace()) {
        if (getRealtimePace()
            != other.getRealtimePace()) return false;
      }
      if (hasRealtimeSpm() != other.hasRealtimeSpm()) return false;
      if (hasRealtimeSpm()) {
        if (getRealtimeSpm()
            != other.getRealtimeSpm()) return false;
      }
      if (hasRealtimeHr() != other.hasRealtimeHr()) return false;
      if (hasRealtimeHr()) {
        if (getRealtimeHr()
            != other.getRealtimeHr()) return false;
      }
      if (hasSwimCircle() != other.hasSwimCircle()) return false;
      if (hasSwimCircle()) {
        if (getSwimCircle()
            != other.getSwimCircle()) return false;
      }
      if (hasSwimStroke() != other.hasSwimStroke()) return false;
      if (hasSwimStroke()) {
        if (getSwimStroke()
            != other.getSwimStroke()) return false;
      }
      if (hasDataTotal() != other.hasDataTotal()) return false;
      if (hasDataTotal()) {
        if (!getDataTotal()
            .equals(other.getDataTotal())) return false;
      }
      if (hasDataSport() != other.hasDataSport()) return false;
      if (hasDataSport()) {
        if (!getDataSport()
            .equals(other.getDataSport())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasSdSportType()) {
        hash = (37 * hash) + SD_SPORTTYPE_FIELD_NUMBER;
        hash = (53 * hash) + getSdSportType();
      }
      if (hasHrTotal()) {
        hash = (37 * hash) + HR_TOTAL_FIELD_NUMBER;
        hash = (53 * hash) + getHrTotal();
      }
      if (hasHrCount()) {
        hash = (37 * hash) + HR_COUNT_FIELD_NUMBER;
        hash = (53 * hash) + getHrCount();
      }
      if (hasRealtimePace()) {
        hash = (37 * hash) + REALTIME_PACE_FIELD_NUMBER;
        hash = (53 * hash) + getRealtimePace();
      }
      if (hasRealtimeSpm()) {
        hash = (37 * hash) + REALTIME_SPM_FIELD_NUMBER;
        hash = (53 * hash) + getRealtimeSpm();
      }
      if (hasRealtimeHr()) {
        hash = (37 * hash) + REALTIME_HR_FIELD_NUMBER;
        hash = (53 * hash) + getRealtimeHr();
      }
      if (hasSwimCircle()) {
        hash = (37 * hash) + SWIM_CIRCLE_FIELD_NUMBER;
        hash = (53 * hash) + getSwimCircle();
      }
      if (hasSwimStroke()) {
        hash = (37 * hash) + SWIM_STROKE_FIELD_NUMBER;
        hash = (53 * hash) + getSwimStroke();
      }
      if (hasDataTotal()) {
        hash = (37 * hash) + DATA_TOTAL_FIELD_NUMBER;
        hash = (53 * hash) + getDataTotal().hashCode();
      }
      if (hasDataSport()) {
        hash = (37 * hash) + DATA_SPORT_FIELD_NUMBER;
        hash = (53 * hash) + getDataSport().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtSportData parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSportData parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSportData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSportData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSportData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtSportData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtSportData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtSportData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtSportData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtSportData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtSportData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtSportData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtSportData prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtSportData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtSportData)
        RtSportDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtSportData_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtSportData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtSportData.class, Builder.class);
      }

      // Construct using RealtimeData.RtSportData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getDataTotalFieldBuilder();
          getDataSportFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        sdSportType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        hrTotal_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        hrCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        realtimePace_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        realtimeSpm_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        realtimeHr_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        swimCircle_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        swimStroke_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (dataTotalBuilder_ == null) {
          dataTotal_ = null;
        } else {
          dataTotalBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (dataSportBuilder_ == null) {
          dataSport_ = null;
        } else {
          dataSportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtSportData_descriptor;
      }

      @Override
      public RtSportData getDefaultInstanceForType() {
        return RtSportData.getDefaultInstance();
      }

      @Override
      public RtSportData build() {
        RtSportData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtSportData buildPartial() {
        RtSportData result = new RtSportData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.sdSportType_ = sdSportType_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.hrTotal_ = hrTotal_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.hrCount_ = hrCount_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.realtimePace_ = realtimePace_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.realtimeSpm_ = realtimeSpm_;
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.realtimeHr_ = realtimeHr_;
          to_bitField0_ |= 0x00000020;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.swimCircle_ = swimCircle_;
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.swimStroke_ = swimStroke_;
          to_bitField0_ |= 0x00000080;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          if (dataTotalBuilder_ == null) {
            result.dataTotal_ = dataTotal_;
          } else {
            result.dataTotal_ = dataTotalBuilder_.build();
          }
          to_bitField0_ |= 0x00000100;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          if (dataSportBuilder_ == null) {
            result.dataSport_ = dataSport_;
          } else {
            result.dataSport_ = dataSportBuilder_.build();
          }
          to_bitField0_ |= 0x00000200;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtSportData) {
          return mergeFrom((RtSportData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtSportData other) {
        if (other == RtSportData.getDefaultInstance()) return this;
        if (other.hasSdSportType()) {
          setSdSportType(other.getSdSportType());
        }
        if (other.hasHrTotal()) {
          setHrTotal(other.getHrTotal());
        }
        if (other.hasHrCount()) {
          setHrCount(other.getHrCount());
        }
        if (other.hasRealtimePace()) {
          setRealtimePace(other.getRealtimePace());
        }
        if (other.hasRealtimeSpm()) {
          setRealtimeSpm(other.getRealtimeSpm());
        }
        if (other.hasRealtimeHr()) {
          setRealtimeHr(other.getRealtimeHr());
        }
        if (other.hasSwimCircle()) {
          setSwimCircle(other.getSwimCircle());
        }
        if (other.hasSwimStroke()) {
          setSwimStroke(other.getSwimStroke());
        }
        if (other.hasDataTotal()) {
          mergeDataTotal(other.getDataTotal());
        }
        if (other.hasDataSport()) {
          mergeDataSport(other.getDataSport());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasSdSportType()) {
          return false;
        }
        if (!hasHrTotal()) {
          return false;
        }
        if (!hasHrCount()) {
          return false;
        }
        if (!hasRealtimePace()) {
          return false;
        }
        if (!hasRealtimeSpm()) {
          return false;
        }
        if (!hasRealtimeHr()) {
          return false;
        }
        if (!hasSwimCircle()) {
          return false;
        }
        if (!hasSwimStroke()) {
          return false;
        }
        if (!hasDataTotal()) {
          return false;
        }
        if (!hasDataSport()) {
          return false;
        }
        if (!getDataTotal().isInitialized()) {
          return false;
        }
        if (!getDataSport().isInitialized()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtSportData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtSportData) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int sdSportType_ ;
      /**
       * <code>required fixed32 sd_sportType = 1;</code>
       * @return Whether the sdSportType field is set.
       */
      public boolean hasSdSportType() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required fixed32 sd_sportType = 1;</code>
       * @return The sdSportType.
       */
      public int getSdSportType() {
        return sdSportType_;
      }
      /**
       * <code>required fixed32 sd_sportType = 1;</code>
       * @param value The sdSportType to set.
       * @return This builder for chaining.
       */
      public Builder setSdSportType(int value) {
        bitField0_ |= 0x00000001;
        sdSportType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 sd_sportType = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSdSportType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        sdSportType_ = 0;
        onChanged();
        return this;
      }

      private int hrTotal_ ;
      /**
       * <code>required fixed32 hr_total = 2;</code>
       * @return Whether the hrTotal field is set.
       */
      public boolean hasHrTotal() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required fixed32 hr_total = 2;</code>
       * @return The hrTotal.
       */
      public int getHrTotal() {
        return hrTotal_;
      }
      /**
       * <code>required fixed32 hr_total = 2;</code>
       * @param value The hrTotal to set.
       * @return This builder for chaining.
       */
      public Builder setHrTotal(int value) {
        bitField0_ |= 0x00000002;
        hrTotal_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 hr_total = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearHrTotal() {
        bitField0_ = (bitField0_ & ~0x00000002);
        hrTotal_ = 0;
        onChanged();
        return this;
      }

      private int hrCount_ ;
      /**
       * <code>required fixed32 hr_count = 3;</code>
       * @return Whether the hrCount field is set.
       */
      public boolean hasHrCount() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>required fixed32 hr_count = 3;</code>
       * @return The hrCount.
       */
      public int getHrCount() {
        return hrCount_;
      }
      /**
       * <code>required fixed32 hr_count = 3;</code>
       * @param value The hrCount to set.
       * @return This builder for chaining.
       */
      public Builder setHrCount(int value) {
        bitField0_ |= 0x00000004;
        hrCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 hr_count = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearHrCount() {
        bitField0_ = (bitField0_ & ~0x00000004);
        hrCount_ = 0;
        onChanged();
        return this;
      }

      private int realtimePace_ ;
      /**
       * <code>required fixed32 realtime_pace = 4;</code>
       * @return Whether the realtimePace field is set.
       */
      public boolean hasRealtimePace() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>required fixed32 realtime_pace = 4;</code>
       * @return The realtimePace.
       */
      public int getRealtimePace() {
        return realtimePace_;
      }
      /**
       * <code>required fixed32 realtime_pace = 4;</code>
       * @param value The realtimePace to set.
       * @return This builder for chaining.
       */
      public Builder setRealtimePace(int value) {
        bitField0_ |= 0x00000008;
        realtimePace_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 realtime_pace = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearRealtimePace() {
        bitField0_ = (bitField0_ & ~0x00000008);
        realtimePace_ = 0;
        onChanged();
        return this;
      }

      private int realtimeSpm_ ;
      /**
       * <code>required fixed32 realtime_spm = 5;</code>
       * @return Whether the realtimeSpm field is set.
       */
      public boolean hasRealtimeSpm() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>required fixed32 realtime_spm = 5;</code>
       * @return The realtimeSpm.
       */
      public int getRealtimeSpm() {
        return realtimeSpm_;
      }
      /**
       * <code>required fixed32 realtime_spm = 5;</code>
       * @param value The realtimeSpm to set.
       * @return This builder for chaining.
       */
      public Builder setRealtimeSpm(int value) {
        bitField0_ |= 0x00000010;
        realtimeSpm_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 realtime_spm = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearRealtimeSpm() {
        bitField0_ = (bitField0_ & ~0x00000010);
        realtimeSpm_ = 0;
        onChanged();
        return this;
      }

      private int realtimeHr_ ;
      /**
       * <code>required fixed32 realtime_hr = 6;</code>
       * @return Whether the realtimeHr field is set.
       */
      public boolean hasRealtimeHr() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>required fixed32 realtime_hr = 6;</code>
       * @return The realtimeHr.
       */
      public int getRealtimeHr() {
        return realtimeHr_;
      }
      /**
       * <code>required fixed32 realtime_hr = 6;</code>
       * @param value The realtimeHr to set.
       * @return This builder for chaining.
       */
      public Builder setRealtimeHr(int value) {
        bitField0_ |= 0x00000020;
        realtimeHr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 realtime_hr = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearRealtimeHr() {
        bitField0_ = (bitField0_ & ~0x00000020);
        realtimeHr_ = 0;
        onChanged();
        return this;
      }

      private int swimCircle_ ;
      /**
       * <code>required fixed32 swim_circle = 7;</code>
       * @return Whether the swimCircle field is set.
       */
      public boolean hasSwimCircle() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>required fixed32 swim_circle = 7;</code>
       * @return The swimCircle.
       */
      public int getSwimCircle() {
        return swimCircle_;
      }
      /**
       * <code>required fixed32 swim_circle = 7;</code>
       * @param value The swimCircle to set.
       * @return This builder for chaining.
       */
      public Builder setSwimCircle(int value) {
        bitField0_ |= 0x00000040;
        swimCircle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 swim_circle = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearSwimCircle() {
        bitField0_ = (bitField0_ & ~0x00000040);
        swimCircle_ = 0;
        onChanged();
        return this;
      }

      private int swimStroke_ ;
      /**
       * <code>required fixed32 swim_stroke = 8;</code>
       * @return Whether the swimStroke field is set.
       */
      public boolean hasSwimStroke() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>required fixed32 swim_stroke = 8;</code>
       * @return The swimStroke.
       */
      public int getSwimStroke() {
        return swimStroke_;
      }
      /**
       * <code>required fixed32 swim_stroke = 8;</code>
       * @param value The swimStroke to set.
       * @return This builder for chaining.
       */
      public Builder setSwimStroke(int value) {
        bitField0_ |= 0x00000080;
        swimStroke_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 swim_stroke = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearSwimStroke() {
        bitField0_ = (bitField0_ & ~0x00000080);
        swimStroke_ = 0;
        onChanged();
        return this;
      }

      private RtDtda_Summary dataTotal_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RtDtda_Summary, RtDtda_Summary.Builder, RtDtda_SummaryOrBuilder> dataTotalBuilder_;
      /**
       * <code>required .RtDtda_Summary data_total = 9;</code>
       * @return Whether the dataTotal field is set.
       */
      public boolean hasDataTotal() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>required .RtDtda_Summary data_total = 9;</code>
       * @return The dataTotal.
       */
      public RtDtda_Summary getDataTotal() {
        if (dataTotalBuilder_ == null) {
          return dataTotal_ == null ? RtDtda_Summary.getDefaultInstance() : dataTotal_;
        } else {
          return dataTotalBuilder_.getMessage();
        }
      }
      /**
       * <code>required .RtDtda_Summary data_total = 9;</code>
       */
      public Builder setDataTotal(RtDtda_Summary value) {
        if (dataTotalBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          dataTotal_ = value;
          onChanged();
        } else {
          dataTotalBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>required .RtDtda_Summary data_total = 9;</code>
       */
      public Builder setDataTotal(
          RtDtda_Summary.Builder builderForValue) {
        if (dataTotalBuilder_ == null) {
          dataTotal_ = builderForValue.build();
          onChanged();
        } else {
          dataTotalBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>required .RtDtda_Summary data_total = 9;</code>
       */
      public Builder mergeDataTotal(RtDtda_Summary value) {
        if (dataTotalBuilder_ == null) {
          if (((bitField0_ & 0x00000100) != 0) &&
              dataTotal_ != null &&
              dataTotal_ != RtDtda_Summary.getDefaultInstance()) {
            dataTotal_ =
              RtDtda_Summary.newBuilder(dataTotal_).mergeFrom(value).buildPartial();
          } else {
            dataTotal_ = value;
          }
          onChanged();
        } else {
          dataTotalBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>required .RtDtda_Summary data_total = 9;</code>
       */
      public Builder clearDataTotal() {
        if (dataTotalBuilder_ == null) {
          dataTotal_ = null;
          onChanged();
        } else {
          dataTotalBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>required .RtDtda_Summary data_total = 9;</code>
       */
      public RtDtda_Summary.Builder getDataTotalBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getDataTotalFieldBuilder().getBuilder();
      }
      /**
       * <code>required .RtDtda_Summary data_total = 9;</code>
       */
      public RtDtda_SummaryOrBuilder getDataTotalOrBuilder() {
        if (dataTotalBuilder_ != null) {
          return dataTotalBuilder_.getMessageOrBuilder();
        } else {
          return dataTotal_ == null ?
              RtDtda_Summary.getDefaultInstance() : dataTotal_;
        }
      }
      /**
       * <code>required .RtDtda_Summary data_total = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtDtda_Summary, RtDtda_Summary.Builder, RtDtda_SummaryOrBuilder>
          getDataTotalFieldBuilder() {
        if (dataTotalBuilder_ == null) {
          dataTotalBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtDtda_Summary, RtDtda_Summary.Builder, RtDtda_SummaryOrBuilder>(
                  getDataTotal(),
                  getParentForChildren(),
                  isClean());
          dataTotal_ = null;
        }
        return dataTotalBuilder_;
      }

      private RtDtda_Summary dataSport_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RtDtda_Summary, RtDtda_Summary.Builder, RtDtda_SummaryOrBuilder> dataSportBuilder_;
      /**
       * <code>required .RtDtda_Summary data_sport = 10;</code>
       * @return Whether the dataSport field is set.
       */
      public boolean hasDataSport() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <code>required .RtDtda_Summary data_sport = 10;</code>
       * @return The dataSport.
       */
      public RtDtda_Summary getDataSport() {
        if (dataSportBuilder_ == null) {
          return dataSport_ == null ? RtDtda_Summary.getDefaultInstance() : dataSport_;
        } else {
          return dataSportBuilder_.getMessage();
        }
      }
      /**
       * <code>required .RtDtda_Summary data_sport = 10;</code>
       */
      public Builder setDataSport(RtDtda_Summary value) {
        if (dataSportBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          dataSport_ = value;
          onChanged();
        } else {
          dataSportBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>required .RtDtda_Summary data_sport = 10;</code>
       */
      public Builder setDataSport(
          RtDtda_Summary.Builder builderForValue) {
        if (dataSportBuilder_ == null) {
          dataSport_ = builderForValue.build();
          onChanged();
        } else {
          dataSportBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>required .RtDtda_Summary data_sport = 10;</code>
       */
      public Builder mergeDataSport(RtDtda_Summary value) {
        if (dataSportBuilder_ == null) {
          if (((bitField0_ & 0x00000200) != 0) &&
              dataSport_ != null &&
              dataSport_ != RtDtda_Summary.getDefaultInstance()) {
            dataSport_ =
              RtDtda_Summary.newBuilder(dataSport_).mergeFrom(value).buildPartial();
          } else {
            dataSport_ = value;
          }
          onChanged();
        } else {
          dataSportBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>required .RtDtda_Summary data_sport = 10;</code>
       */
      public Builder clearDataSport() {
        if (dataSportBuilder_ == null) {
          dataSport_ = null;
          onChanged();
        } else {
          dataSportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       * <code>required .RtDtda_Summary data_sport = 10;</code>
       */
      public RtDtda_Summary.Builder getDataSportBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getDataSportFieldBuilder().getBuilder();
      }
      /**
       * <code>required .RtDtda_Summary data_sport = 10;</code>
       */
      public RtDtda_SummaryOrBuilder getDataSportOrBuilder() {
        if (dataSportBuilder_ != null) {
          return dataSportBuilder_.getMessageOrBuilder();
        } else {
          return dataSport_ == null ?
              RtDtda_Summary.getDefaultInstance() : dataSport_;
        }
      }
      /**
       * <code>required .RtDtda_Summary data_sport = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtDtda_Summary, RtDtda_Summary.Builder, RtDtda_SummaryOrBuilder>
          getDataSportFieldBuilder() {
        if (dataSportBuilder_ == null) {
          dataSportBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtDtda_Summary, RtDtda_Summary.Builder, RtDtda_SummaryOrBuilder>(
                  getDataSport(),
                  getParentForChildren(),
                  isClean());
          dataSport_ = null;
        }
        return dataSportBuilder_;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtSportData)
    }

    // @@protoc_insertion_point(class_scope:RtSportData)
    private static final RtSportData DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtSportData();
    }

    public static RtSportData getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtSportData>
        PARSER = new com.google.protobuf.AbstractParser<RtSportData>() {
      @Override
      public RtSportData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtSportData(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtSportData> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtSportData> getParserForType() {
      return PARSER;
    }

    @Override
    public RtSportData getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RtNotificationOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RtNotification)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .RtData rt_data = 1;</code>
     * @return Whether the rtData field is set.
     */
    boolean hasRtData();
    /**
     * <code>optional .RtData rt_data = 1;</code>
     * @return The rtData.
     */
    RtData getRtData();
    /**
     * <code>optional .RtData rt_data = 1;</code>
     */
    RtDataOrBuilder getRtDataOrBuilder();

    /**
     * <code>optional .RtState rt_state = 2;</code>
     * @return Whether the rtState field is set.
     */
    boolean hasRtState();
    /**
     * <code>optional .RtState rt_state = 2;</code>
     * @return The rtState.
     */
    RtState getRtState();
    /**
     * <code>optional .RtState rt_state = 2;</code>
     */
    RtStateOrBuilder getRtStateOrBuilder();

    /**
     * <code>optional .RtSensorData rt_sensordata = 3;</code>
     * @return Whether the rtSensordata field is set.
     */
    boolean hasRtSensordata();
    /**
     * <code>optional .RtSensorData rt_sensordata = 3;</code>
     * @return The rtSensordata.
     */
    RtSensorData getRtSensordata();
    /**
     * <code>optional .RtSensorData rt_sensordata = 3;</code>
     */
    RtSensorDataOrBuilder getRtSensordataOrBuilder();

    /**
     * <code>optional .RtSportData rt_sport_data = 4;</code>
     * @return Whether the rtSportData field is set.
     */
    boolean hasRtSportData();
    /**
     * <code>optional .RtSportData rt_sport_data = 4;</code>
     * @return The rtSportData.
     */
    RtSportData getRtSportData();
    /**
     * <code>optional .RtSportData rt_sport_data = 4;</code>
     */
    RtSportDataOrBuilder getRtSportDataOrBuilder();

    public RtNotification.DataCase getDataCase();
  }
  /**
   * Protobuf type {@code RtNotification}
   */
  public  static final class RtNotification extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RtNotification)
      RtNotificationOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RtNotification.newBuilder() to construct.
    private RtNotification(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RtNotification() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new RtNotification();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RtNotification(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              RtData.Builder subBuilder = null;
              if (dataCase_ == 1) {
                subBuilder = ((RtData) data_).toBuilder();
              }
              data_ =
                  input.readMessage(RtData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((RtData) data_);
                data_ = subBuilder.buildPartial();
              }
              dataCase_ = 1;
              break;
            }
            case 18: {
              RtState.Builder subBuilder = null;
              if (dataCase_ == 2) {
                subBuilder = ((RtState) data_).toBuilder();
              }
              data_ =
                  input.readMessage(RtState.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((RtState) data_);
                data_ = subBuilder.buildPartial();
              }
              dataCase_ = 2;
              break;
            }
            case 26: {
              RtSensorData.Builder subBuilder = null;
              if (dataCase_ == 3) {
                subBuilder = ((RtSensorData) data_).toBuilder();
              }
              data_ =
                  input.readMessage(RtSensorData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((RtSensorData) data_);
                data_ = subBuilder.buildPartial();
              }
              dataCase_ = 3;
              break;
            }
            case 34: {
              RtSportData.Builder subBuilder = null;
              if (dataCase_ == 4) {
                subBuilder = ((RtSportData) data_).toBuilder();
              }
              data_ =
                  input.readMessage(RtSportData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((RtSportData) data_);
                data_ = subBuilder.buildPartial();
              }
              dataCase_ = 4;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return RealtimeData.internal_static_RtNotification_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return RealtimeData.internal_static_RtNotification_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              RtNotification.class, Builder.class);
    }

    private int bitField0_;
    private int dataCase_ = 0;
    private Object data_;
    public enum DataCase
        implements com.google.protobuf.Internal.EnumLite,
            InternalOneOfEnum {
      RT_DATA(1),
      RT_STATE(2),
      RT_SENSORDATA(3),
      RT_SPORT_DATA(4),
      DATA_NOT_SET(0);
      private final int value;
      private DataCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @Deprecated
      public static DataCase valueOf(int value) {
        return forNumber(value);
      }

      public static DataCase forNumber(int value) {
        switch (value) {
          case 1: return RT_DATA;
          case 2: return RT_STATE;
          case 3: return RT_SENSORDATA;
          case 4: return RT_SPORT_DATA;
          case 0: return DATA_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public DataCase
    getDataCase() {
      return DataCase.forNumber(
          dataCase_);
    }

    public static final int RT_DATA_FIELD_NUMBER = 1;
    /**
     * <code>optional .RtData rt_data = 1;</code>
     * @return Whether the rtData field is set.
     */
    public boolean hasRtData() {
      return dataCase_ == 1;
    }
    /**
     * <code>optional .RtData rt_data = 1;</code>
     * @return The rtData.
     */
    public RtData getRtData() {
      if (dataCase_ == 1) {
         return (RtData) data_;
      }
      return RtData.getDefaultInstance();
    }
    /**
     * <code>optional .RtData rt_data = 1;</code>
     */
    public RtDataOrBuilder getRtDataOrBuilder() {
      if (dataCase_ == 1) {
         return (RtData) data_;
      }
      return RtData.getDefaultInstance();
    }

    public static final int RT_STATE_FIELD_NUMBER = 2;
    /**
     * <code>optional .RtState rt_state = 2;</code>
     * @return Whether the rtState field is set.
     */
    public boolean hasRtState() {
      return dataCase_ == 2;
    }
    /**
     * <code>optional .RtState rt_state = 2;</code>
     * @return The rtState.
     */
    public RtState getRtState() {
      if (dataCase_ == 2) {
         return (RtState) data_;
      }
      return RtState.getDefaultInstance();
    }
    /**
     * <code>optional .RtState rt_state = 2;</code>
     */
    public RtStateOrBuilder getRtStateOrBuilder() {
      if (dataCase_ == 2) {
         return (RtState) data_;
      }
      return RtState.getDefaultInstance();
    }

    public static final int RT_SENSORDATA_FIELD_NUMBER = 3;
    /**
     * <code>optional .RtSensorData rt_sensordata = 3;</code>
     * @return Whether the rtSensordata field is set.
     */
    public boolean hasRtSensordata() {
      return dataCase_ == 3;
    }
    /**
     * <code>optional .RtSensorData rt_sensordata = 3;</code>
     * @return The rtSensordata.
     */
    public RtSensorData getRtSensordata() {
      if (dataCase_ == 3) {
         return (RtSensorData) data_;
      }
      return RtSensorData.getDefaultInstance();
    }
    /**
     * <code>optional .RtSensorData rt_sensordata = 3;</code>
     */
    public RtSensorDataOrBuilder getRtSensordataOrBuilder() {
      if (dataCase_ == 3) {
         return (RtSensorData) data_;
      }
      return RtSensorData.getDefaultInstance();
    }

    public static final int RT_SPORT_DATA_FIELD_NUMBER = 4;
    /**
     * <code>optional .RtSportData rt_sport_data = 4;</code>
     * @return Whether the rtSportData field is set.
     */
    public boolean hasRtSportData() {
      return dataCase_ == 4;
    }
    /**
     * <code>optional .RtSportData rt_sport_data = 4;</code>
     * @return The rtSportData.
     */
    public RtSportData getRtSportData() {
      if (dataCase_ == 4) {
         return (RtSportData) data_;
      }
      return RtSportData.getDefaultInstance();
    }
    /**
     * <code>optional .RtSportData rt_sport_data = 4;</code>
     */
    public RtSportDataOrBuilder getRtSportDataOrBuilder() {
      if (dataCase_ == 4) {
         return (RtSportData) data_;
      }
      return RtSportData.getDefaultInstance();
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (hasRtData()) {
        if (!getRtData().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasRtSensordata()) {
        if (!getRtSensordata().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasRtSportData()) {
        if (!getRtSportData().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (dataCase_ == 1) {
        output.writeMessage(1, (RtData) data_);
      }
      if (dataCase_ == 2) {
        output.writeMessage(2, (RtState) data_);
      }
      if (dataCase_ == 3) {
        output.writeMessage(3, (RtSensorData) data_);
      }
      if (dataCase_ == 4) {
        output.writeMessage(4, (RtSportData) data_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (dataCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (RtData) data_);
      }
      if (dataCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (RtState) data_);
      }
      if (dataCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, (RtSensorData) data_);
      }
      if (dataCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, (RtSportData) data_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof RtNotification)) {
        return super.equals(obj);
      }
      RtNotification other = (RtNotification) obj;

      if (!getDataCase().equals(other.getDataCase())) return false;
      switch (dataCase_) {
        case 1:
          if (!getRtData()
              .equals(other.getRtData())) return false;
          break;
        case 2:
          if (!getRtState()
              .equals(other.getRtState())) return false;
          break;
        case 3:
          if (!getRtSensordata()
              .equals(other.getRtSensordata())) return false;
          break;
        case 4:
          if (!getRtSportData()
              .equals(other.getRtSportData())) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (dataCase_) {
        case 1:
          hash = (37 * hash) + RT_DATA_FIELD_NUMBER;
          hash = (53 * hash) + getRtData().hashCode();
          break;
        case 2:
          hash = (37 * hash) + RT_STATE_FIELD_NUMBER;
          hash = (53 * hash) + getRtState().hashCode();
          break;
        case 3:
          hash = (37 * hash) + RT_SENSORDATA_FIELD_NUMBER;
          hash = (53 * hash) + getRtSensordata().hashCode();
          break;
        case 4:
          hash = (37 * hash) + RT_SPORT_DATA_FIELD_NUMBER;
          hash = (53 * hash) + getRtSportData().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static RtNotification parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtNotification parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtNotification parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtNotification parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtNotification parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static RtNotification parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static RtNotification parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtNotification parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtNotification parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static RtNotification parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static RtNotification parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static RtNotification parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(RtNotification prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RtNotification}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RtNotification)
        RtNotificationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return RealtimeData.internal_static_RtNotification_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return RealtimeData.internal_static_RtNotification_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                RtNotification.class, Builder.class);
      }

      // Construct using RealtimeData.RtNotification.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        dataCase_ = 0;
        data_ = null;
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return RealtimeData.internal_static_RtNotification_descriptor;
      }

      @Override
      public RtNotification getDefaultInstanceForType() {
        return RtNotification.getDefaultInstance();
      }

      @Override
      public RtNotification build() {
        RtNotification result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public RtNotification buildPartial() {
        RtNotification result = new RtNotification(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (dataCase_ == 1) {
          if (rtDataBuilder_ == null) {
            result.data_ = data_;
          } else {
            result.data_ = rtDataBuilder_.build();
          }
        }
        if (dataCase_ == 2) {
          if (rtStateBuilder_ == null) {
            result.data_ = data_;
          } else {
            result.data_ = rtStateBuilder_.build();
          }
        }
        if (dataCase_ == 3) {
          if (rtSensordataBuilder_ == null) {
            result.data_ = data_;
          } else {
            result.data_ = rtSensordataBuilder_.build();
          }
        }
        if (dataCase_ == 4) {
          if (rtSportDataBuilder_ == null) {
            result.data_ = data_;
          } else {
            result.data_ = rtSportDataBuilder_.build();
          }
        }
        result.bitField0_ = to_bitField0_;
        result.dataCase_ = dataCase_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof RtNotification) {
          return mergeFrom((RtNotification)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(RtNotification other) {
        if (other == RtNotification.getDefaultInstance()) return this;
        switch (other.getDataCase()) {
          case RT_DATA: {
            mergeRtData(other.getRtData());
            break;
          }
          case RT_STATE: {
            mergeRtState(other.getRtState());
            break;
          }
          case RT_SENSORDATA: {
            mergeRtSensordata(other.getRtSensordata());
            break;
          }
          case RT_SPORT_DATA: {
            mergeRtSportData(other.getRtSportData());
            break;
          }
          case DATA_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (hasRtData()) {
          if (!getRtData().isInitialized()) {
            return false;
          }
        }
        if (hasRtSensordata()) {
          if (!getRtSensordata().isInitialized()) {
            return false;
          }
        }
        if (hasRtSportData()) {
          if (!getRtSportData().isInitialized()) {
            return false;
          }
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        RtNotification parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (RtNotification) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int dataCase_ = 0;
      private Object data_;
      public DataCase
          getDataCase() {
        return DataCase.forNumber(
            dataCase_);
      }

      public Builder clearData() {
        dataCase_ = 0;
        data_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.SingleFieldBuilderV3<
          RtData, RtData.Builder, RtDataOrBuilder> rtDataBuilder_;
      /**
       * <code>optional .RtData rt_data = 1;</code>
       * @return Whether the rtData field is set.
       */
      public boolean hasRtData() {
        return dataCase_ == 1;
      }
      /**
       * <code>optional .RtData rt_data = 1;</code>
       * @return The rtData.
       */
      public RtData getRtData() {
        if (rtDataBuilder_ == null) {
          if (dataCase_ == 1) {
            return (RtData) data_;
          }
          return RtData.getDefaultInstance();
        } else {
          if (dataCase_ == 1) {
            return rtDataBuilder_.getMessage();
          }
          return RtData.getDefaultInstance();
        }
      }
      /**
       * <code>optional .RtData rt_data = 1;</code>
       */
      public Builder setRtData(RtData value) {
        if (rtDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
          onChanged();
        } else {
          rtDataBuilder_.setMessage(value);
        }
        dataCase_ = 1;
        return this;
      }
      /**
       * <code>optional .RtData rt_data = 1;</code>
       */
      public Builder setRtData(
          RtData.Builder builderForValue) {
        if (rtDataBuilder_ == null) {
          data_ = builderForValue.build();
          onChanged();
        } else {
          rtDataBuilder_.setMessage(builderForValue.build());
        }
        dataCase_ = 1;
        return this;
      }
      /**
       * <code>optional .RtData rt_data = 1;</code>
       */
      public Builder mergeRtData(RtData value) {
        if (rtDataBuilder_ == null) {
          if (dataCase_ == 1 &&
              data_ != RtData.getDefaultInstance()) {
            data_ = RtData.newBuilder((RtData) data_)
                .mergeFrom(value).buildPartial();
          } else {
            data_ = value;
          }
          onChanged();
        } else {
          if (dataCase_ == 1) {
            rtDataBuilder_.mergeFrom(value);
          }
          rtDataBuilder_.setMessage(value);
        }
        dataCase_ = 1;
        return this;
      }
      /**
       * <code>optional .RtData rt_data = 1;</code>
       */
      public Builder clearRtData() {
        if (rtDataBuilder_ == null) {
          if (dataCase_ == 1) {
            dataCase_ = 0;
            data_ = null;
            onChanged();
          }
        } else {
          if (dataCase_ == 1) {
            dataCase_ = 0;
            data_ = null;
          }
          rtDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>optional .RtData rt_data = 1;</code>
       */
      public RtData.Builder getRtDataBuilder() {
        return getRtDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtData rt_data = 1;</code>
       */
      public RtDataOrBuilder getRtDataOrBuilder() {
        if ((dataCase_ == 1) && (rtDataBuilder_ != null)) {
          return rtDataBuilder_.getMessageOrBuilder();
        } else {
          if (dataCase_ == 1) {
            return (RtData) data_;
          }
          return RtData.getDefaultInstance();
        }
      }
      /**
       * <code>optional .RtData rt_data = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtData, RtData.Builder, RtDataOrBuilder>
          getRtDataFieldBuilder() {
        if (rtDataBuilder_ == null) {
          if (!(dataCase_ == 1)) {
            data_ = RtData.getDefaultInstance();
          }
          rtDataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtData, RtData.Builder, RtDataOrBuilder>(
                  (RtData) data_,
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        dataCase_ = 1;
        onChanged();;
        return rtDataBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          RtState, RtState.Builder, RtStateOrBuilder> rtStateBuilder_;
      /**
       * <code>optional .RtState rt_state = 2;</code>
       * @return Whether the rtState field is set.
       */
      public boolean hasRtState() {
        return dataCase_ == 2;
      }
      /**
       * <code>optional .RtState rt_state = 2;</code>
       * @return The rtState.
       */
      public RtState getRtState() {
        if (rtStateBuilder_ == null) {
          if (dataCase_ == 2) {
            return (RtState) data_;
          }
          return RtState.getDefaultInstance();
        } else {
          if (dataCase_ == 2) {
            return rtStateBuilder_.getMessage();
          }
          return RtState.getDefaultInstance();
        }
      }
      /**
       * <code>optional .RtState rt_state = 2;</code>
       */
      public Builder setRtState(RtState value) {
        if (rtStateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
          onChanged();
        } else {
          rtStateBuilder_.setMessage(value);
        }
        dataCase_ = 2;
        return this;
      }
      /**
       * <code>optional .RtState rt_state = 2;</code>
       */
      public Builder setRtState(
          RtState.Builder builderForValue) {
        if (rtStateBuilder_ == null) {
          data_ = builderForValue.build();
          onChanged();
        } else {
          rtStateBuilder_.setMessage(builderForValue.build());
        }
        dataCase_ = 2;
        return this;
      }
      /**
       * <code>optional .RtState rt_state = 2;</code>
       */
      public Builder mergeRtState(RtState value) {
        if (rtStateBuilder_ == null) {
          if (dataCase_ == 2 &&
              data_ != RtState.getDefaultInstance()) {
            data_ = RtState.newBuilder((RtState) data_)
                .mergeFrom(value).buildPartial();
          } else {
            data_ = value;
          }
          onChanged();
        } else {
          if (dataCase_ == 2) {
            rtStateBuilder_.mergeFrom(value);
          }
          rtStateBuilder_.setMessage(value);
        }
        dataCase_ = 2;
        return this;
      }
      /**
       * <code>optional .RtState rt_state = 2;</code>
       */
      public Builder clearRtState() {
        if (rtStateBuilder_ == null) {
          if (dataCase_ == 2) {
            dataCase_ = 0;
            data_ = null;
            onChanged();
          }
        } else {
          if (dataCase_ == 2) {
            dataCase_ = 0;
            data_ = null;
          }
          rtStateBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>optional .RtState rt_state = 2;</code>
       */
      public RtState.Builder getRtStateBuilder() {
        return getRtStateFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtState rt_state = 2;</code>
       */
      public RtStateOrBuilder getRtStateOrBuilder() {
        if ((dataCase_ == 2) && (rtStateBuilder_ != null)) {
          return rtStateBuilder_.getMessageOrBuilder();
        } else {
          if (dataCase_ == 2) {
            return (RtState) data_;
          }
          return RtState.getDefaultInstance();
        }
      }
      /**
       * <code>optional .RtState rt_state = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtState, RtState.Builder, RtStateOrBuilder>
          getRtStateFieldBuilder() {
        if (rtStateBuilder_ == null) {
          if (!(dataCase_ == 2)) {
            data_ = RtState.getDefaultInstance();
          }
          rtStateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtState, RtState.Builder, RtStateOrBuilder>(
                  (RtState) data_,
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        dataCase_ = 2;
        onChanged();;
        return rtStateBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          RtSensorData, RtSensorData.Builder, RtSensorDataOrBuilder> rtSensordataBuilder_;
      /**
       * <code>optional .RtSensorData rt_sensordata = 3;</code>
       * @return Whether the rtSensordata field is set.
       */
      public boolean hasRtSensordata() {
        return dataCase_ == 3;
      }
      /**
       * <code>optional .RtSensorData rt_sensordata = 3;</code>
       * @return The rtSensordata.
       */
      public RtSensorData getRtSensordata() {
        if (rtSensordataBuilder_ == null) {
          if (dataCase_ == 3) {
            return (RtSensorData) data_;
          }
          return RtSensorData.getDefaultInstance();
        } else {
          if (dataCase_ == 3) {
            return rtSensordataBuilder_.getMessage();
          }
          return RtSensorData.getDefaultInstance();
        }
      }
      /**
       * <code>optional .RtSensorData rt_sensordata = 3;</code>
       */
      public Builder setRtSensordata(RtSensorData value) {
        if (rtSensordataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
          onChanged();
        } else {
          rtSensordataBuilder_.setMessage(value);
        }
        dataCase_ = 3;
        return this;
      }
      /**
       * <code>optional .RtSensorData rt_sensordata = 3;</code>
       */
      public Builder setRtSensordata(
          RtSensorData.Builder builderForValue) {
        if (rtSensordataBuilder_ == null) {
          data_ = builderForValue.build();
          onChanged();
        } else {
          rtSensordataBuilder_.setMessage(builderForValue.build());
        }
        dataCase_ = 3;
        return this;
      }
      /**
       * <code>optional .RtSensorData rt_sensordata = 3;</code>
       */
      public Builder mergeRtSensordata(RtSensorData value) {
        if (rtSensordataBuilder_ == null) {
          if (dataCase_ == 3 &&
              data_ != RtSensorData.getDefaultInstance()) {
            data_ = RtSensorData.newBuilder((RtSensorData) data_)
                .mergeFrom(value).buildPartial();
          } else {
            data_ = value;
          }
          onChanged();
        } else {
          if (dataCase_ == 3) {
            rtSensordataBuilder_.mergeFrom(value);
          }
          rtSensordataBuilder_.setMessage(value);
        }
        dataCase_ = 3;
        return this;
      }
      /**
       * <code>optional .RtSensorData rt_sensordata = 3;</code>
       */
      public Builder clearRtSensordata() {
        if (rtSensordataBuilder_ == null) {
          if (dataCase_ == 3) {
            dataCase_ = 0;
            data_ = null;
            onChanged();
          }
        } else {
          if (dataCase_ == 3) {
            dataCase_ = 0;
            data_ = null;
          }
          rtSensordataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>optional .RtSensorData rt_sensordata = 3;</code>
       */
      public RtSensorData.Builder getRtSensordataBuilder() {
        return getRtSensordataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtSensorData rt_sensordata = 3;</code>
       */
      public RtSensorDataOrBuilder getRtSensordataOrBuilder() {
        if ((dataCase_ == 3) && (rtSensordataBuilder_ != null)) {
          return rtSensordataBuilder_.getMessageOrBuilder();
        } else {
          if (dataCase_ == 3) {
            return (RtSensorData) data_;
          }
          return RtSensorData.getDefaultInstance();
        }
      }
      /**
       * <code>optional .RtSensorData rt_sensordata = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtSensorData, RtSensorData.Builder, RtSensorDataOrBuilder>
          getRtSensordataFieldBuilder() {
        if (rtSensordataBuilder_ == null) {
          if (!(dataCase_ == 3)) {
            data_ = RtSensorData.getDefaultInstance();
          }
          rtSensordataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtSensorData, RtSensorData.Builder, RtSensorDataOrBuilder>(
                  (RtSensorData) data_,
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        dataCase_ = 3;
        onChanged();;
        return rtSensordataBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          RtSportData, RtSportData.Builder, RtSportDataOrBuilder> rtSportDataBuilder_;
      /**
       * <code>optional .RtSportData rt_sport_data = 4;</code>
       * @return Whether the rtSportData field is set.
       */
      public boolean hasRtSportData() {
        return dataCase_ == 4;
      }
      /**
       * <code>optional .RtSportData rt_sport_data = 4;</code>
       * @return The rtSportData.
       */
      public RtSportData getRtSportData() {
        if (rtSportDataBuilder_ == null) {
          if (dataCase_ == 4) {
            return (RtSportData) data_;
          }
          return RtSportData.getDefaultInstance();
        } else {
          if (dataCase_ == 4) {
            return rtSportDataBuilder_.getMessage();
          }
          return RtSportData.getDefaultInstance();
        }
      }
      /**
       * <code>optional .RtSportData rt_sport_data = 4;</code>
       */
      public Builder setRtSportData(RtSportData value) {
        if (rtSportDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
          onChanged();
        } else {
          rtSportDataBuilder_.setMessage(value);
        }
        dataCase_ = 4;
        return this;
      }
      /**
       * <code>optional .RtSportData rt_sport_data = 4;</code>
       */
      public Builder setRtSportData(
          RtSportData.Builder builderForValue) {
        if (rtSportDataBuilder_ == null) {
          data_ = builderForValue.build();
          onChanged();
        } else {
          rtSportDataBuilder_.setMessage(builderForValue.build());
        }
        dataCase_ = 4;
        return this;
      }
      /**
       * <code>optional .RtSportData rt_sport_data = 4;</code>
       */
      public Builder mergeRtSportData(RtSportData value) {
        if (rtSportDataBuilder_ == null) {
          if (dataCase_ == 4 &&
              data_ != RtSportData.getDefaultInstance()) {
            data_ = RtSportData.newBuilder((RtSportData) data_)
                .mergeFrom(value).buildPartial();
          } else {
            data_ = value;
          }
          onChanged();
        } else {
          if (dataCase_ == 4) {
            rtSportDataBuilder_.mergeFrom(value);
          }
          rtSportDataBuilder_.setMessage(value);
        }
        dataCase_ = 4;
        return this;
      }
      /**
       * <code>optional .RtSportData rt_sport_data = 4;</code>
       */
      public Builder clearRtSportData() {
        if (rtSportDataBuilder_ == null) {
          if (dataCase_ == 4) {
            dataCase_ = 0;
            data_ = null;
            onChanged();
          }
        } else {
          if (dataCase_ == 4) {
            dataCase_ = 0;
            data_ = null;
          }
          rtSportDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>optional .RtSportData rt_sport_data = 4;</code>
       */
      public RtSportData.Builder getRtSportDataBuilder() {
        return getRtSportDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtSportData rt_sport_data = 4;</code>
       */
      public RtSportDataOrBuilder getRtSportDataOrBuilder() {
        if ((dataCase_ == 4) && (rtSportDataBuilder_ != null)) {
          return rtSportDataBuilder_.getMessageOrBuilder();
        } else {
          if (dataCase_ == 4) {
            return (RtSportData) data_;
          }
          return RtSportData.getDefaultInstance();
        }
      }
      /**
       * <code>optional .RtSportData rt_sport_data = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RtSportData, RtSportData.Builder, RtSportDataOrBuilder>
          getRtSportDataFieldBuilder() {
        if (rtSportDataBuilder_ == null) {
          if (!(dataCase_ == 4)) {
            data_ = RtSportData.getDefaultInstance();
          }
          rtSportDataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RtSportData, RtSportData.Builder, RtSportDataOrBuilder>(
                  (RtSportData) data_,
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        dataCase_ = 4;
        onChanged();;
        return rtSportDataBuilder_;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:RtNotification)
    }

    // @@protoc_insertion_point(class_scope:RtNotification)
    private static final RtNotification DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new RtNotification();
    }

    public static RtNotification getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<RtNotification>
        PARSER = new com.google.protobuf.AbstractParser<RtNotification>() {
      @Override
      public RtNotification parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RtNotification(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RtNotification> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<RtNotification> getParserForType() {
      return PARSER;
    }

    @Override
    public RtNotification getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtTime_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtTime_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_DateTime_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_DateTime_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtBattery_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtBattery_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtHealth_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtHealth_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_BPresult_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_BPresult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtHealthResult_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtHealthResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtGNSS_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtGNSS_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtSensor_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtSensor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Rtsport_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Rtsport_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtSubscriber_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtSubscriber_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtData_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtData_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtState_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtState_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtSensorData_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtSensorData_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtDtda_Summary_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtDtda_Summary_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtSportData_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtSportData_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RtNotification_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RtNotification_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    String[] descriptorData = {
      "\n\023realtime_data.proto\"\031\n\006RtTime\022\017\n\007secon" +
      "ds\030\001 \002(\007\"9\n\010DateTime\022\032\n\tdate_time\030\001 \002(\0132" +
      "\007.RtTime\022\021\n\ttime_zone\030\002 \002(\017\",\n\tRtBattery" +
      "\022\r\n\005level\030\001 \002(\007\022\020\n\010charging\030\002 \002(\010\"<\n\010RtH" +
      "ealth\022\r\n\005steps\030\001 \002(\007\022\020\n\010distance\030\002 \002(\007\022\017" +
      "\n\007calorie\030\003 \002(\007\"$\n\010BPresult\022\013\n\003sbp\030\001 \002(\007" +
      "\022\013\n\003dbp\030\002 \002(\007\"\212\001\n\016RtHealthResult\022\017\n\007fati" +
      "gue\030\001 \001(\007\022\016\n\006stress\030\002 \001(\007\022\014\n\004spo2\030\003 \001(\007\022" +
      "\n\n\002hr\030\004 \001(\007\022\025\n\002bp\030\005 \001(\0132\t.BPresult\022\022\n\nbr" +
      "eathrate\030\006 \001(\007\022\022\n\ntemperatur\030\007 \001(\007\"N\n\006Rt" +
      "GNSS\022\021\n\tlongitude\030\001 \002(\002\022\020\n\010latitude\030\002 \002(" +
      "\002\022\r\n\005speed\030\003 \002(\002\022\020\n\010altitude\030\004 \002(\002\"=\n\010Rt" +
      "Sensor\022#\n\toperation\030\001 \002(\0162\020.SensorOperat" +
      "ion\022\014\n\004type\030\002 \002(\007\"A\n\007Rtsport\022\"\n\toperatio" +
      "n\030\001 \002(\0162\017.SportOperation\022\022\n\nsport_type\030\002" +
      " \002(\007\"\243\001\n\014RtSubscriber\022\025\n\004time\030\001 \001(\0162\007.Rt" +
      "Sync\022\030\n\007battery\030\002 \001(\0162\007.RtSync\022\027\n\006health" +
      "\030\003 \001(\0162\007.RtSync\022\025\n\004mode\030\004 \001(\0162\007.RtMode\022\031" +
      "\n\006sensor\030\005 \001(\0132\t.RtSensor\022\027\n\005sport\030\006 \001(\013" +
      "2\010.Rtsport\"\253\001\n\006RtData\022\025\n\004time\030\001 \001(\0132\007.Rt" +
      "Time\022\033\n\007battery\030\002 \001(\0132\n.RtBattery\022\031\n\006hea" +
      "lth\030\003 \001(\0132\t.RtHealth\022\030\n\003key\030\004 \001(\0162\013.RtKe" +
      "yEvent\022\021\n\ttime_zone\030\005 \001(\017\022%\n\014healthresul" +
      "t\030\006 \001(\0132\017.RtHealthResult\"j\n\007RtState\022\025\n\004t" +
      "ime\030\001 \001(\0162\007.RtSync\022\030\n\007battery\030\002 \001(\0162\007.Rt" +
      "Sync\022\027\n\006health\030\003 \001(\0162\007.RtSync\022\025\n\004mode\030\004 " +
      "\001(\0162\007.RtMode\"N\n\014RtSensorData\022\014\n\004type\030\001 \002" +
      "(\007\022\025\n\004time\030\002 \002(\0132\007.RtTime\022\013\n\003seq\030\003 \002(\007\022\014" +
      "\n\004data\030\004 \003(\007\"P\n\016RtDtda_Summary\022\014\n\004time\030\001" +
      " \002(\007\022\r\n\005steps\030\002 \002(\007\022\020\n\010distance\030\003 \002(\007\022\017\n" +
      "\007calorie\030\004 \002(\007\"\375\001\n\013RtSportData\022\024\n\014sd_spo" +
      "rtType\030\001 \002(\007\022\020\n\010hr_total\030\002 \002(\007\022\020\n\010hr_cou" +
      "nt\030\003 \002(\007\022\025\n\rrealtime_pace\030\004 \002(\007\022\024\n\014realt" +
      "ime_spm\030\005 \002(\007\022\023\n\013realtime_hr\030\006 \002(\007\022\023\n\013sw" +
      "im_circle\030\007 \002(\007\022\023\n\013swim_stroke\030\010 \002(\007\022#\n\n" +
      "data_total\030\t \002(\0132\017.RtDtda_Summary\022#\n\ndat" +
      "a_sport\030\n \002(\0132\017.RtDtda_Summary\"\241\001\n\016RtNot" +
      "ification\022\032\n\007rt_data\030\001 \001(\0132\007.RtDataH\000\022\034\n" +
      "\010rt_state\030\002 \001(\0132\010.RtStateH\000\022&\n\rrt_sensor" +
      "data\030\003 \001(\0132\r.RtSensorDataH\000\022%\n\rrt_sport_" +
      "data\030\004 \001(\0132\014.RtSportDataH\000B\006\n\004data*\331\001\n\006R" +
      "tMode\022\027\n\023RT_MODE_BACK_NORMAL\020\000\022\030\n\024RT_MOD" +
      "E_ENTER_CAMERA\020\001\022\027\n\023RT_START_FIND_WATCH\020" +
      "\002\022\025\n\021RT_START_DFU_MODE\020\003\022\026\n\022RT_MODE_HR_M" +
      "EASURE\020\004\022\033\n\027RT_MODE_FATIGUE_MEASURE\020\005\022\034\n" +
      "\030RT_MODE_PRESSURE_MEASURE\020\006\022\031\n\025RT_VIEW_M" +
      "EASURE_STATE\020\007*\376\001\n\nRtKeyEvent\022\021\n\rRT_KEY_" +
      "CAMERA\020\000\022\025\n\021RT_KEY_AUDIO_PLAY\020\001\022\024\n\020RT_KE" +
      "Y_AUDIO_PRE\020\002\022\025\n\021RT_KEY_AUDIO_NEXT\020\003\022\032\n\026" +
      "RT_KEY_AUDIO_VOLUME_UP\020\004\022\034\n\030RT_KEY_AUDIO" +
      "_VOLUME_DOWN\020\005\022\027\n\023RT_START_FIND_PHONE\020\006\022" +
      "\027\n\023RT_STOP_FIND_DEVICE\020\007\022\030\n\024RT_LN_HEALTH" +
      "_MEASURE\020\010\022\023\n\017RT_NONE_MEASURE\020\t*\247\001\n\006RtSy" +
      "nc\022\014\n\010STOP_ALL\020\000\022\r\n\tONLY_ONCE\020\001\022\023\n\017ON_VA" +
      "LUE_CHANGE\020\002\022\024\n\020ON_SECOND_CHANGE\020\003\022\024\n\020ON" +
      "_MINUTE_CHANGE\020\004\022\022\n\016ON_HOUR_CHANGE\020\005\022\021\n\r" +
      "ON_DAY_CHANGE\020\006\022\030\n\024ON_TEN_MINUTE_CHANGE\020" +
      "\007*\234\002\n\nSensorType\022\010\n\004NONE\020\000\022\007\n\003ECG\020\001\022\007\n\003P" +
      "PG\020\002\022\007\n\003MAG\020\004\022\010\n\004GYRO\020\010\022\007\n\003ACC\020\020\022\006\n\002BP\020 " +
      "\022\014\n\010BPRESULT\020@\022\020\n\013TEMPERATURE\020\200\001\022\014\n\007TWO_" +
      "ECG\020\200\002\022\t\n\004BIOZ\020\200\004\022\017\n\nECG_DETECT\020\200\010\022\020\n\013FA" +
      "CTORY_ECG\020\200\020\022\021\n\014FACTORY_BIOZ\020\200 \022\014\n\007HR_LE" +
      "AK\020\200@\022\r\n\007BP_LEAK\020\200\200\001\022\n\n\004SPO2\020\200\200\002\022\t\n\003OAQ\020" +
      "\200\200\004\022\t\n\003IAQ\020\200\200\010\022\016\n\010HUMITURE\020\200\200\020\022\020\n\nULTRAS" +
      "ONIC\020\200\200 *U\n\017SensorOperation\022\025\n\021SENSOR_ST" +
      "ART_SYNC\020\000\022\025\n\021SENSOR_PAUSE_SYNC\020\001\022\024\n\020SEN" +
      "SOR_STOP_SYNC\020\002*B\n\016SportOperation\022\017\n\013SPO" +
      "RT_START\020\000\022\017\n\013SPORT_PAUSE\020\001\022\016\n\nSPORT_STO" +
      "P\020\002B\tZ\007./iwown"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        });
    internal_static_RtTime_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_RtTime_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtTime_descriptor,
        new String[] { "Seconds", });
    internal_static_DateTime_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_DateTime_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_DateTime_descriptor,
        new String[] { "DateTime", "TimeZone", });
    internal_static_RtBattery_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_RtBattery_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtBattery_descriptor,
        new String[] { "Level", "Charging", });
    internal_static_RtHealth_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_RtHealth_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtHealth_descriptor,
        new String[] { "Steps", "Distance", "Calorie", });
    internal_static_BPresult_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_BPresult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_BPresult_descriptor,
        new String[] { "Sbp", "Dbp", });
    internal_static_RtHealthResult_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_RtHealthResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtHealthResult_descriptor,
        new String[] { "Fatigue", "Stress", "Spo2", "Hr", "Bp", "Breathrate", "Temperatur", });
    internal_static_RtGNSS_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_RtGNSS_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtGNSS_descriptor,
        new String[] { "Longitude", "Latitude", "Speed", "Altitude", });
    internal_static_RtSensor_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_RtSensor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtSensor_descriptor,
        new String[] { "Operation", "Type", });
    internal_static_Rtsport_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_Rtsport_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Rtsport_descriptor,
        new String[] { "Operation", "SportType", });
    internal_static_RtSubscriber_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_RtSubscriber_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtSubscriber_descriptor,
        new String[] { "Time", "Battery", "Health", "Mode", "Sensor", "Sport", });
    internal_static_RtData_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_RtData_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtData_descriptor,
        new String[] { "Time", "Battery", "Health", "Key", "TimeZone", "Healthresult", });
    internal_static_RtState_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_RtState_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtState_descriptor,
        new String[] { "Time", "Battery", "Health", "Mode", });
    internal_static_RtSensorData_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_RtSensorData_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtSensorData_descriptor,
        new String[] { "Type", "Time", "Seq", "Data", });
    internal_static_RtDtda_Summary_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_RtDtda_Summary_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtDtda_Summary_descriptor,
        new String[] { "Time", "Steps", "Distance", "Calorie", });
    internal_static_RtSportData_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_RtSportData_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtSportData_descriptor,
        new String[] { "SdSportType", "HrTotal", "HrCount", "RealtimePace", "RealtimeSpm", "RealtimeHr", "SwimCircle", "SwimStroke", "DataTotal", "DataSport", });
    internal_static_RtNotification_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_RtNotification_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RtNotification_descriptor,
        new String[] { "RtData", "RtState", "RtSensordata", "RtSportData", "Data", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
