// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: igpsport/training.proto

package nodomain.freeyourgadget.gadgetbridge.proto.igpsport;

public final class Training {
  private Training() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }
  /**
   * Protobuf enum {@code TRAINING_SUB_OPERATE_TYPE}
   */
  public enum TRAINING_SUB_OPERATE_TYPE
      implements com.google.protobuf.Internal.EnumLite {
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE = 0;</code>
     */
    enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE(0),
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_SET_USE = 1;</code>
     */
    enum_TRAINING_SUB_OPERATE_TYPE_SET_USE(1),
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_SET_NAME = 2;</code>
     */
    enum_TRAINING_SUB_OPERATE_TYPE_SET_NAME(2),
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_SET_REMIND = 3;</code>
     */
    enum_TRAINING_SUB_OPERATE_TYPE_SET_REMIND(3),
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_GET_MODULE_INFO = 17;</code>
     */
    enum_TRAINING_SUB_OPERATE_TYPE_GET_MODULE_INFO(17),
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_GET_LIST = 18;</code>
     */
    enum_TRAINING_SUB_OPERATE_TYPE_GET_LIST(18),
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_GET_LIST_NUM = 19;</code>
     */
    enum_TRAINING_SUB_OPERATE_TYPE_GET_LIST_NUM(19),
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_ADD_FILE = 33;</code>
     */
    enum_TRAINING_SUB_OPERATE_TYPE_ADD_FILE(33),
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_DEL_FILE = 49;</code>
     */
    enum_TRAINING_SUB_OPERATE_TYPE_DEL_FILE(49),
    ;

    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE = 0;</code>
     */
    public static final int enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE_VALUE = 0;
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_SET_USE = 1;</code>
     */
    public static final int enum_TRAINING_SUB_OPERATE_TYPE_SET_USE_VALUE = 1;
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_SET_NAME = 2;</code>
     */
    public static final int enum_TRAINING_SUB_OPERATE_TYPE_SET_NAME_VALUE = 2;
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_SET_REMIND = 3;</code>
     */
    public static final int enum_TRAINING_SUB_OPERATE_TYPE_SET_REMIND_VALUE = 3;
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_GET_MODULE_INFO = 17;</code>
     */
    public static final int enum_TRAINING_SUB_OPERATE_TYPE_GET_MODULE_INFO_VALUE = 17;
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_GET_LIST = 18;</code>
     */
    public static final int enum_TRAINING_SUB_OPERATE_TYPE_GET_LIST_VALUE = 18;
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_GET_LIST_NUM = 19;</code>
     */
    public static final int enum_TRAINING_SUB_OPERATE_TYPE_GET_LIST_NUM_VALUE = 19;
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_ADD_FILE = 33;</code>
     */
    public static final int enum_TRAINING_SUB_OPERATE_TYPE_ADD_FILE_VALUE = 33;
    /**
     * <code>enum_TRAINING_SUB_OPERATE_TYPE_DEL_FILE = 49;</code>
     */
    public static final int enum_TRAINING_SUB_OPERATE_TYPE_DEL_FILE_VALUE = 49;


    @java.lang.Override
    public final int getNumber() {
      return 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.
     */
    @java.lang.Deprecated
    public static TRAINING_SUB_OPERATE_TYPE valueOf(int value) {
      return forNumber(value);
    }

    public static TRAINING_SUB_OPERATE_TYPE forNumber(int value) {
      switch (value) {
        case 0: return enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE;
        case 1: return enum_TRAINING_SUB_OPERATE_TYPE_SET_USE;
        case 2: return enum_TRAINING_SUB_OPERATE_TYPE_SET_NAME;
        case 3: return enum_TRAINING_SUB_OPERATE_TYPE_SET_REMIND;
        case 17: return enum_TRAINING_SUB_OPERATE_TYPE_GET_MODULE_INFO;
        case 18: return enum_TRAINING_SUB_OPERATE_TYPE_GET_LIST;
        case 19: return enum_TRAINING_SUB_OPERATE_TYPE_GET_LIST_NUM;
        case 33: return enum_TRAINING_SUB_OPERATE_TYPE_ADD_FILE;
        case 49: return enum_TRAINING_SUB_OPERATE_TYPE_DEL_FILE;
        default: return null;
      }
    }

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

    public static com.google.protobuf.Internal.EnumVerifier 
        internalGetVerifier() {
      return TRAINING_SUB_OPERATE_TYPEVerifier.INSTANCE;
    }

    private static final class TRAINING_SUB_OPERATE_TYPEVerifier implements 
         com.google.protobuf.Internal.EnumVerifier { 
            static final com.google.protobuf.Internal.EnumVerifier           INSTANCE = new TRAINING_SUB_OPERATE_TYPEVerifier();
            @java.lang.Override
            public boolean isInRange(int number) {
              return TRAINING_SUB_OPERATE_TYPE.forNumber(number) != null;
            }
          };

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:TRAINING_SUB_OPERATE_TYPE)
  }

  /**
   * Protobuf enum {@code TRAINING_FILE_TYPE}
   */
  public enum TRAINING_FILE_TYPE
      implements com.google.protobuf.Internal.EnumLite {
    /**
     * <code>enum_TRAINING_FILE_TYPE_INVALIDE = 0;</code>
     */
    enum_TRAINING_FILE_TYPE_INVALIDE(0),
    /**
     * <code>enum_TRAINING_FILE_TYPE_JSON = 1;</code>
     */
    enum_TRAINING_FILE_TYPE_JSON(1),
    /**
     * <code>enum_TRAINING_FILE_TYPE_XML = 2;</code>
     */
    enum_TRAINING_FILE_TYPE_XML(2),
    /**
     * <code>enum_TRAINING_FILE_TYPE_FIT = 3;</code>
     */
    enum_TRAINING_FILE_TYPE_FIT(3),
    /**
     * <code>enum_TRAINING_FILE_TYPE_CSV = 4;</code>
     */
    enum_TRAINING_FILE_TYPE_CSV(4),
    /**
     * <code>enum_TRAINING_FILE_TYPE_GPX = 5;</code>
     */
    enum_TRAINING_FILE_TYPE_GPX(5),
    /**
     * <code>enum_TRAINING_FILE_TYPE_GZ = 6;</code>
     */
    enum_TRAINING_FILE_TYPE_GZ(6),
    /**
     * <code>enum_TRAINING_FILE_TYPE_HRM = 7;</code>
     */
    enum_TRAINING_FILE_TYPE_HRM(7),
    /**
     * <code>enum_TRAINING_FILE_TYPE_HST = 8;</code>
     */
    enum_TRAINING_FILE_TYPE_HST(8),
    /**
     * <code>enum_TRAINING_FILE_TYPE_PWPB = 9;</code>
     */
    enum_TRAINING_FILE_TYPE_PWPB(9),
    /**
     * <code>enum_TRAINING_FILE_TYPE_PWX = 10;</code>
     */
    enum_TRAINING_FILE_TYPE_PWX(10),
    /**
     * <code>enum_TRAINING_FILE_TYPE_SDF = 11;</code>
     */
    enum_TRAINING_FILE_TYPE_SDF(11),
    /**
     * <code>enum_TRAINING_FILE_TYPE_SRM = 12;</code>
     */
    enum_TRAINING_FILE_TYPE_SRM(12),
    /**
     * <code>enum_TRAINING_FILE_TYPE_TCX = 13;</code>
     */
    enum_TRAINING_FILE_TYPE_TCX(13),
    /**
     * <code>enum_TRAINING_FILE_TYPE_TXT = 14;</code>
     */
    enum_TRAINING_FILE_TYPE_TXT(14),
    /**
     * <code>enum_TRAINING_FILE_TYPE_WKO = 15;</code>
     */
    enum_TRAINING_FILE_TYPE_WKO(15),
    /**
     * <code>enum_TRAINING_FILE_TYPE_XLSX = 16;</code>
     */
    enum_TRAINING_FILE_TYPE_XLSX(16),
    /**
     * <code>enum_TRAINING_FILE_TYPE_CUSTOM = 254;</code>
     */
    enum_TRAINING_FILE_TYPE_CUSTOM(254),
    ;

    /**
     * <code>enum_TRAINING_FILE_TYPE_INVALIDE = 0;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_INVALIDE_VALUE = 0;
    /**
     * <code>enum_TRAINING_FILE_TYPE_JSON = 1;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_JSON_VALUE = 1;
    /**
     * <code>enum_TRAINING_FILE_TYPE_XML = 2;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_XML_VALUE = 2;
    /**
     * <code>enum_TRAINING_FILE_TYPE_FIT = 3;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_FIT_VALUE = 3;
    /**
     * <code>enum_TRAINING_FILE_TYPE_CSV = 4;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_CSV_VALUE = 4;
    /**
     * <code>enum_TRAINING_FILE_TYPE_GPX = 5;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_GPX_VALUE = 5;
    /**
     * <code>enum_TRAINING_FILE_TYPE_GZ = 6;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_GZ_VALUE = 6;
    /**
     * <code>enum_TRAINING_FILE_TYPE_HRM = 7;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_HRM_VALUE = 7;
    /**
     * <code>enum_TRAINING_FILE_TYPE_HST = 8;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_HST_VALUE = 8;
    /**
     * <code>enum_TRAINING_FILE_TYPE_PWPB = 9;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_PWPB_VALUE = 9;
    /**
     * <code>enum_TRAINING_FILE_TYPE_PWX = 10;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_PWX_VALUE = 10;
    /**
     * <code>enum_TRAINING_FILE_TYPE_SDF = 11;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_SDF_VALUE = 11;
    /**
     * <code>enum_TRAINING_FILE_TYPE_SRM = 12;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_SRM_VALUE = 12;
    /**
     * <code>enum_TRAINING_FILE_TYPE_TCX = 13;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_TCX_VALUE = 13;
    /**
     * <code>enum_TRAINING_FILE_TYPE_TXT = 14;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_TXT_VALUE = 14;
    /**
     * <code>enum_TRAINING_FILE_TYPE_WKO = 15;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_WKO_VALUE = 15;
    /**
     * <code>enum_TRAINING_FILE_TYPE_XLSX = 16;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_XLSX_VALUE = 16;
    /**
     * <code>enum_TRAINING_FILE_TYPE_CUSTOM = 254;</code>
     */
    public static final int enum_TRAINING_FILE_TYPE_CUSTOM_VALUE = 254;


    @java.lang.Override
    public final int getNumber() {
      return 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.
     */
    @java.lang.Deprecated
    public static TRAINING_FILE_TYPE valueOf(int value) {
      return forNumber(value);
    }

    public static TRAINING_FILE_TYPE forNumber(int value) {
      switch (value) {
        case 0: return enum_TRAINING_FILE_TYPE_INVALIDE;
        case 1: return enum_TRAINING_FILE_TYPE_JSON;
        case 2: return enum_TRAINING_FILE_TYPE_XML;
        case 3: return enum_TRAINING_FILE_TYPE_FIT;
        case 4: return enum_TRAINING_FILE_TYPE_CSV;
        case 5: return enum_TRAINING_FILE_TYPE_GPX;
        case 6: return enum_TRAINING_FILE_TYPE_GZ;
        case 7: return enum_TRAINING_FILE_TYPE_HRM;
        case 8: return enum_TRAINING_FILE_TYPE_HST;
        case 9: return enum_TRAINING_FILE_TYPE_PWPB;
        case 10: return enum_TRAINING_FILE_TYPE_PWX;
        case 11: return enum_TRAINING_FILE_TYPE_SDF;
        case 12: return enum_TRAINING_FILE_TYPE_SRM;
        case 13: return enum_TRAINING_FILE_TYPE_TCX;
        case 14: return enum_TRAINING_FILE_TYPE_TXT;
        case 15: return enum_TRAINING_FILE_TYPE_WKO;
        case 16: return enum_TRAINING_FILE_TYPE_XLSX;
        case 254: return enum_TRAINING_FILE_TYPE_CUSTOM;
        default: return null;
      }
    }

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

    public static com.google.protobuf.Internal.EnumVerifier 
        internalGetVerifier() {
      return TRAINING_FILE_TYPEVerifier.INSTANCE;
    }

    private static final class TRAINING_FILE_TYPEVerifier implements 
         com.google.protobuf.Internal.EnumVerifier { 
            static final com.google.protobuf.Internal.EnumVerifier           INSTANCE = new TRAINING_FILE_TYPEVerifier();
            @java.lang.Override
            public boolean isInRange(int number) {
              return TRAINING_FILE_TYPE.forNumber(number) != null;
            }
          };

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:TRAINING_FILE_TYPE)
  }

  /**
   * Protobuf enum {@code TRAINING_TYPE}
   */
  public enum TRAINING_TYPE
      implements com.google.protobuf.Internal.EnumLite {
    /**
     * <code>enum_TRAINING_TYPE_INVALID = 0;</code>
     */
    enum_TRAINING_TYPE_INVALID(0),
    /**
     * <code>enum_TRAINING_TYPE_WORKOUT = 1;</code>
     */
    enum_TRAINING_TYPE_WORKOUT(1),
    /**
     * <code>enum_TRAINING_TYPE_SEGMENT = 2;</code>
     */
    enum_TRAINING_TYPE_SEGMENT(2),
    /**
     * <code>enum_TRAINING_TYPE_INDOOR = 3;</code>
     */
    enum_TRAINING_TYPE_INDOOR(3),
    /**
     * <code>enum_TRAINING_TYPE_CUSTOM = 254;</code>
     */
    enum_TRAINING_TYPE_CUSTOM(254),
    ;

    /**
     * <code>enum_TRAINING_TYPE_INVALID = 0;</code>
     */
    public static final int enum_TRAINING_TYPE_INVALID_VALUE = 0;
    /**
     * <code>enum_TRAINING_TYPE_WORKOUT = 1;</code>
     */
    public static final int enum_TRAINING_TYPE_WORKOUT_VALUE = 1;
    /**
     * <code>enum_TRAINING_TYPE_SEGMENT = 2;</code>
     */
    public static final int enum_TRAINING_TYPE_SEGMENT_VALUE = 2;
    /**
     * <code>enum_TRAINING_TYPE_INDOOR = 3;</code>
     */
    public static final int enum_TRAINING_TYPE_INDOOR_VALUE = 3;
    /**
     * <code>enum_TRAINING_TYPE_CUSTOM = 254;</code>
     */
    public static final int enum_TRAINING_TYPE_CUSTOM_VALUE = 254;


    @java.lang.Override
    public final int getNumber() {
      return 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.
     */
    @java.lang.Deprecated
    public static TRAINING_TYPE valueOf(int value) {
      return forNumber(value);
    }

    public static TRAINING_TYPE forNumber(int value) {
      switch (value) {
        case 0: return enum_TRAINING_TYPE_INVALID;
        case 1: return enum_TRAINING_TYPE_WORKOUT;
        case 2: return enum_TRAINING_TYPE_SEGMENT;
        case 3: return enum_TRAINING_TYPE_INDOOR;
        case 254: return enum_TRAINING_TYPE_CUSTOM;
        default: return null;
      }
    }

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

    public static com.google.protobuf.Internal.EnumVerifier 
        internalGetVerifier() {
      return TRAINING_TYPEVerifier.INSTANCE;
    }

    private static final class TRAINING_TYPEVerifier implements 
         com.google.protobuf.Internal.EnumVerifier { 
            static final com.google.protobuf.Internal.EnumVerifier           INSTANCE = new TRAINING_TYPEVerifier();
            @java.lang.Override
            public boolean isInRange(int number) {
              return TRAINING_TYPE.forNumber(number) != null;
            }
          };

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:TRAINING_TYPE)
  }

  /**
   * Protobuf enum {@code TRAINING_OBJECT}
   */
  public enum TRAINING_OBJECT
      implements com.google.protobuf.Internal.EnumLite {
    /**
     * <code>enum_TRAINING_OBJECT_INVALID = 0;</code>
     */
    enum_TRAINING_OBJECT_INVALID(0),
    /**
     * <code>enum_TRAINING_OBJECT_TIME = 1;</code>
     */
    enum_TRAINING_OBJECT_TIME(1),
    /**
     * <code>enum_TRAINING_OBJECT_DISTANCE = 2;</code>
     */
    enum_TRAINING_OBJECT_DISTANCE(2),
    /**
     * <code>enum_TRAINING_OBJECT_SPD = 3;</code>
     */
    enum_TRAINING_OBJECT_SPD(3),
    /**
     * <code>enum_TRAINING_OBJECT_CALORIE = 4;</code>
     */
    enum_TRAINING_OBJECT_CALORIE(4),
    /**
     * <code>enum_TRAINING_OBJECT_CLIMB = 5;</code>
     */
    enum_TRAINING_OBJECT_CLIMB(5),
    /**
     * <code>enum_TRAINING_OBJECT_PWR = 6;</code>
     */
    enum_TRAINING_OBJECT_PWR(6),
    /**
     * <code>enum_TRAINING_OBJECT_PWR_ZONE = 7;</code>
     */
    enum_TRAINING_OBJECT_PWR_ZONE(7),
    /**
     * <code>enum_TRAINING_OBJECT_HRM = 8;</code>
     */
    enum_TRAINING_OBJECT_HRM(8),
    /**
     * <code>enum_TRAINING_OBJECT_HRM_ZONE = 9;</code>
     */
    enum_TRAINING_OBJECT_HRM_ZONE(9),
    /**
     * <code>enum_TRAINING_OBJECT_CUSTOM = 254;</code>
     */
    enum_TRAINING_OBJECT_CUSTOM(254),
    ;

    /**
     * <code>enum_TRAINING_OBJECT_INVALID = 0;</code>
     */
    public static final int enum_TRAINING_OBJECT_INVALID_VALUE = 0;
    /**
     * <code>enum_TRAINING_OBJECT_TIME = 1;</code>
     */
    public static final int enum_TRAINING_OBJECT_TIME_VALUE = 1;
    /**
     * <code>enum_TRAINING_OBJECT_DISTANCE = 2;</code>
     */
    public static final int enum_TRAINING_OBJECT_DISTANCE_VALUE = 2;
    /**
     * <code>enum_TRAINING_OBJECT_SPD = 3;</code>
     */
    public static final int enum_TRAINING_OBJECT_SPD_VALUE = 3;
    /**
     * <code>enum_TRAINING_OBJECT_CALORIE = 4;</code>
     */
    public static final int enum_TRAINING_OBJECT_CALORIE_VALUE = 4;
    /**
     * <code>enum_TRAINING_OBJECT_CLIMB = 5;</code>
     */
    public static final int enum_TRAINING_OBJECT_CLIMB_VALUE = 5;
    /**
     * <code>enum_TRAINING_OBJECT_PWR = 6;</code>
     */
    public static final int enum_TRAINING_OBJECT_PWR_VALUE = 6;
    /**
     * <code>enum_TRAINING_OBJECT_PWR_ZONE = 7;</code>
     */
    public static final int enum_TRAINING_OBJECT_PWR_ZONE_VALUE = 7;
    /**
     * <code>enum_TRAINING_OBJECT_HRM = 8;</code>
     */
    public static final int enum_TRAINING_OBJECT_HRM_VALUE = 8;
    /**
     * <code>enum_TRAINING_OBJECT_HRM_ZONE = 9;</code>
     */
    public static final int enum_TRAINING_OBJECT_HRM_ZONE_VALUE = 9;
    /**
     * <code>enum_TRAINING_OBJECT_CUSTOM = 254;</code>
     */
    public static final int enum_TRAINING_OBJECT_CUSTOM_VALUE = 254;


    @java.lang.Override
    public final int getNumber() {
      return 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.
     */
    @java.lang.Deprecated
    public static TRAINING_OBJECT valueOf(int value) {
      return forNumber(value);
    }

    public static TRAINING_OBJECT forNumber(int value) {
      switch (value) {
        case 0: return enum_TRAINING_OBJECT_INVALID;
        case 1: return enum_TRAINING_OBJECT_TIME;
        case 2: return enum_TRAINING_OBJECT_DISTANCE;
        case 3: return enum_TRAINING_OBJECT_SPD;
        case 4: return enum_TRAINING_OBJECT_CALORIE;
        case 5: return enum_TRAINING_OBJECT_CLIMB;
        case 6: return enum_TRAINING_OBJECT_PWR;
        case 7: return enum_TRAINING_OBJECT_PWR_ZONE;
        case 8: return enum_TRAINING_OBJECT_HRM;
        case 9: return enum_TRAINING_OBJECT_HRM_ZONE;
        case 254: return enum_TRAINING_OBJECT_CUSTOM;
        default: return null;
      }
    }

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

    public static com.google.protobuf.Internal.EnumVerifier 
        internalGetVerifier() {
      return TRAINING_OBJECTVerifier.INSTANCE;
    }

    private static final class TRAINING_OBJECTVerifier implements 
         com.google.protobuf.Internal.EnumVerifier { 
            static final com.google.protobuf.Internal.EnumVerifier           INSTANCE = new TRAINING_OBJECTVerifier();
            @java.lang.Override
            public boolean isInRange(int number) {
              return TRAINING_OBJECT.forNumber(number) != null;
            }
          };

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:TRAINING_OBJECT)
  }

  /**
   * Protobuf enum {@code TRAINING_FILE_STATUS}
   */
  public enum TRAINING_FILE_STATUS
      implements com.google.protobuf.Internal.EnumLite {
    /**
     * <code>enum_TRAINING_INVALID_STATUS = 0;</code>
     */
    enum_TRAINING_INVALID_STATUS(0),
    /**
     * <code>enum_TRAINING_USED_STATUS = 1;</code>
     */
    enum_TRAINING_USED_STATUS(1),
    /**
     * <code>enum_TRAINING_UNUSED_STATUS = 2;</code>
     */
    enum_TRAINING_UNUSED_STATUS(2),
    ;

    /**
     * <code>enum_TRAINING_INVALID_STATUS = 0;</code>
     */
    public static final int enum_TRAINING_INVALID_STATUS_VALUE = 0;
    /**
     * <code>enum_TRAINING_USED_STATUS = 1;</code>
     */
    public static final int enum_TRAINING_USED_STATUS_VALUE = 1;
    /**
     * <code>enum_TRAINING_UNUSED_STATUS = 2;</code>
     */
    public static final int enum_TRAINING_UNUSED_STATUS_VALUE = 2;


    @java.lang.Override
    public final int getNumber() {
      return 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.
     */
    @java.lang.Deprecated
    public static TRAINING_FILE_STATUS valueOf(int value) {
      return forNumber(value);
    }

    public static TRAINING_FILE_STATUS forNumber(int value) {
      switch (value) {
        case 0: return enum_TRAINING_INVALID_STATUS;
        case 1: return enum_TRAINING_USED_STATUS;
        case 2: return enum_TRAINING_UNUSED_STATUS;
        default: return null;
      }
    }

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

    public static com.google.protobuf.Internal.EnumVerifier 
        internalGetVerifier() {
      return TRAINING_FILE_STATUSVerifier.INSTANCE;
    }

    private static final class TRAINING_FILE_STATUSVerifier implements 
         com.google.protobuf.Internal.EnumVerifier { 
            static final com.google.protobuf.Internal.EnumVerifier           INSTANCE = new TRAINING_FILE_STATUSVerifier();
            @java.lang.Override
            public boolean isInRange(int number) {
              return TRAINING_FILE_STATUS.forNumber(number) != null;
            }
          };

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:TRAINING_FILE_STATUS)
  }

  public interface training_object_msgOrBuilder extends
      // @@protoc_insertion_point(interface_extends:training_object_msg)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>required .TRAINING_OBJECT trainning_obj = 1 [default = enum_TRAINING_OBJECT_INVALID];</code>
     * @return Whether the trainningObj field is set.
     */
    boolean hasTrainningObj();
    /**
     * <code>required .TRAINING_OBJECT trainning_obj = 1 [default = enum_TRAINING_OBJECT_INVALID];</code>
     * @return The trainningObj.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_OBJECT getTrainningObj();

    /**
     * <code>optional uint32 data_max = 2;</code>
     * @return Whether the dataMax field is set.
     */
    boolean hasDataMax();
    /**
     * <code>optional uint32 data_max = 2;</code>
     * @return The dataMax.
     */
    int getDataMax();

    /**
     * <code>optional uint32 data_min = 3;</code>
     * @return Whether the dataMin field is set.
     */
    boolean hasDataMin();
    /**
     * <code>optional uint32 data_min = 3;</code>
     * @return The dataMin.
     */
    int getDataMin();
  }
  /**
   * Protobuf type {@code training_object_msg}
   */
  public  static final class training_object_msg extends
      com.google.protobuf.GeneratedMessageLite<
          training_object_msg, training_object_msg.Builder> implements
      // @@protoc_insertion_point(message_implements:training_object_msg)
      training_object_msgOrBuilder {
    private training_object_msg() {
    }
    private int bitField0_;
    public static final int TRAINNING_OBJ_FIELD_NUMBER = 1;
    private int trainningObj_;
    /**
     * <code>required .TRAINING_OBJECT trainning_obj = 1 [default = enum_TRAINING_OBJECT_INVALID];</code>
     * @return Whether the trainningObj field is set.
     */
    @java.lang.Override
    public boolean hasTrainningObj() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .TRAINING_OBJECT trainning_obj = 1 [default = enum_TRAINING_OBJECT_INVALID];</code>
     * @return The trainningObj.
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_OBJECT getTrainningObj() {
      nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_OBJECT result = nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_OBJECT.forNumber(trainningObj_);
      return result == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_OBJECT.enum_TRAINING_OBJECT_INVALID : result;
    }
    /**
     * <code>required .TRAINING_OBJECT trainning_obj = 1 [default = enum_TRAINING_OBJECT_INVALID];</code>
     * @param value The trainningObj to set.
     */
    private void setTrainningObj(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_OBJECT value) {
      trainningObj_ = value.getNumber();
      bitField0_ |= 0x00000001;
    }
    /**
     * <code>required .TRAINING_OBJECT trainning_obj = 1 [default = enum_TRAINING_OBJECT_INVALID];</code>
     */
    private void clearTrainningObj() {
      bitField0_ = (bitField0_ & ~0x00000001);
      trainningObj_ = 0;
    }

    public static final int DATA_MAX_FIELD_NUMBER = 2;
    private int dataMax_;
    /**
     * <code>optional uint32 data_max = 2;</code>
     * @return Whether the dataMax field is set.
     */
    @java.lang.Override
    public boolean hasDataMax() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional uint32 data_max = 2;</code>
     * @return The dataMax.
     */
    @java.lang.Override
    public int getDataMax() {
      return dataMax_;
    }
    /**
     * <code>optional uint32 data_max = 2;</code>
     * @param value The dataMax to set.
     */
    private void setDataMax(int value) {
      bitField0_ |= 0x00000002;
      dataMax_ = value;
    }
    /**
     * <code>optional uint32 data_max = 2;</code>
     */
    private void clearDataMax() {
      bitField0_ = (bitField0_ & ~0x00000002);
      dataMax_ = 0;
    }

    public static final int DATA_MIN_FIELD_NUMBER = 3;
    private int dataMin_;
    /**
     * <code>optional uint32 data_min = 3;</code>
     * @return Whether the dataMin field is set.
     */
    @java.lang.Override
    public boolean hasDataMin() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional uint32 data_min = 3;</code>
     * @return The dataMin.
     */
    @java.lang.Override
    public int getDataMin() {
      return dataMin_;
    }
    /**
     * <code>optional uint32 data_min = 3;</code>
     * @param value The dataMin to set.
     */
    private void setDataMin(int value) {
      bitField0_ |= 0x00000004;
      dataMin_ = value;
    }
    /**
     * <code>optional uint32 data_min = 3;</code>
     */
    private void clearDataMin() {
      bitField0_ = (bitField0_ & ~0x00000004);
      dataMin_ = 0;
    }

    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * Protobuf type {@code training_object_msg}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg, Builder> implements
        // @@protoc_insertion_point(builder_implements:training_object_msg)
        nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msgOrBuilder {
      // Construct using nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <code>required .TRAINING_OBJECT trainning_obj = 1 [default = enum_TRAINING_OBJECT_INVALID];</code>
       * @return Whether the trainningObj field is set.
       */
      @java.lang.Override
      public boolean hasTrainningObj() {
        return instance.hasTrainningObj();
      }
      /**
       * <code>required .TRAINING_OBJECT trainning_obj = 1 [default = enum_TRAINING_OBJECT_INVALID];</code>
       * @return The trainningObj.
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_OBJECT getTrainningObj() {
        return instance.getTrainningObj();
      }
      /**
       * <code>required .TRAINING_OBJECT trainning_obj = 1 [default = enum_TRAINING_OBJECT_INVALID];</code>
       * @param value The enum numeric value on the wire for trainningObj to set.
       * @return This builder for chaining.
       */
      public Builder setTrainningObj(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_OBJECT value) {
        copyOnWrite();
        instance.setTrainningObj(value);
        return this;
      }
      /**
       * <code>required .TRAINING_OBJECT trainning_obj = 1 [default = enum_TRAINING_OBJECT_INVALID];</code>
       * @return This builder for chaining.
       */
      public Builder clearTrainningObj() {
        copyOnWrite();
        instance.clearTrainningObj();
        return this;
      }

      /**
       * <code>optional uint32 data_max = 2;</code>
       * @return Whether the dataMax field is set.
       */
      @java.lang.Override
      public boolean hasDataMax() {
        return instance.hasDataMax();
      }
      /**
       * <code>optional uint32 data_max = 2;</code>
       * @return The dataMax.
       */
      @java.lang.Override
      public int getDataMax() {
        return instance.getDataMax();
      }
      /**
       * <code>optional uint32 data_max = 2;</code>
       * @param value The dataMax to set.
       * @return This builder for chaining.
       */
      public Builder setDataMax(int value) {
        copyOnWrite();
        instance.setDataMax(value);
        return this;
      }
      /**
       * <code>optional uint32 data_max = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearDataMax() {
        copyOnWrite();
        instance.clearDataMax();
        return this;
      }

      /**
       * <code>optional uint32 data_min = 3;</code>
       * @return Whether the dataMin field is set.
       */
      @java.lang.Override
      public boolean hasDataMin() {
        return instance.hasDataMin();
      }
      /**
       * <code>optional uint32 data_min = 3;</code>
       * @return The dataMin.
       */
      @java.lang.Override
      public int getDataMin() {
        return instance.getDataMin();
      }
      /**
       * <code>optional uint32 data_min = 3;</code>
       * @param value The dataMin to set.
       * @return This builder for chaining.
       */
      public Builder setDataMin(int value) {
        copyOnWrite();
        instance.setDataMin(value);
        return this;
      }
      /**
       * <code>optional uint32 data_min = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearDataMin() {
        copyOnWrite();
        instance.clearDataMin();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:training_object_msg)
    }
    private byte memoizedIsInitialized = 2;
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "trainningObj_",
              nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_OBJECT.internalGetVerifier(),
              "dataMax_",
              "dataMin_",
            };
            java.lang.String info =
                "\u0001\u0003\u0000\u0001\u0001\u0003\u0003\u0000\u0000\u0001\u0001\u150c\u0000\u0002" +
                "\u100b\u0001\u0003\u100b\u0002";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg> parser = PARSER;
          if (parser == null) {
            synchronized (nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return memoizedIsInitialized;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        memoizedIsInitialized = (byte) (arg0 == null ? 0 : 1);
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:training_object_msg)
    private static final nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg DEFAULT_INSTANCE;
    static {
      training_object_msg defaultInstance = new training_object_msg();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        training_object_msg.class, defaultInstance);
    }

    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<training_object_msg> PARSER;

    public static com.google.protobuf.Parser<training_object_msg> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }

  public interface training_data_messageOrBuilder extends
      // @@protoc_insertion_point(interface_extends:training_data_message)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>optional uint32 file_id = 1;</code>
     * @return Whether the fileId field is set.
     */
    boolean hasFileId();
    /**
     * <code>optional uint32 file_id = 1;</code>
     * @return The fileId.
     */
    int getFileId();

    /**
     * <code>optional string file_name = 2;</code>
     * @return Whether the fileName field is set.
     */
    boolean hasFileName();
    /**
     * <code>optional string file_name = 2;</code>
     * @return The fileName.
     */
    java.lang.String getFileName();
    /**
     * <code>optional string file_name = 2;</code>
     * @return The bytes for fileName.
     */
    com.google.protobuf.ByteString
        getFileNameBytes();

    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 3;</code>
     * @return Whether the fileType field is set.
     */
    boolean hasFileType();
    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 3;</code>
     * @return The fileType.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE getFileType();

    /**
     * <code>optional uint32 training_period = 4;</code>
     * @return Whether the trainingPeriod field is set.
     */
    boolean hasTrainingPeriod();
    /**
     * <code>optional uint32 training_period = 4;</code>
     * @return The trainingPeriod.
     */
    int getTrainingPeriod();

    /**
     * <code>optional .TRAINING_TYPE training_type = 5;</code>
     * @return Whether the trainingType field is set.
     */
    boolean hasTrainingType();
    /**
     * <code>optional .TRAINING_TYPE training_type = 5;</code>
     * @return The trainingType.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_TYPE getTrainingType();

    /**
     * <code>optional .training_object_msg training_object_message = 6;</code>
     * @return Whether the trainingObjectMessage field is set.
     */
    boolean hasTrainingObjectMessage();
    /**
     * <code>optional .training_object_msg training_object_message = 6;</code>
     * @return The trainingObjectMessage.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg getTrainingObjectMessage();

    /**
     * <code>optional uint32 training_time = 7;</code>
     * @return Whether the trainingTime field is set.
     */
    boolean hasTrainingTime();
    /**
     * <code>optional uint32 training_time = 7;</code>
     * @return The trainingTime.
     */
    int getTrainingTime();

    /**
     * <code>optional bytes file_content = 13;</code>
     * @return Whether the fileContent field is set.
     */
    boolean hasFileContent();
    /**
     * <code>optional bytes file_content = 13;</code>
     * @return The fileContent.
     */
    com.google.protobuf.ByteString getFileContent();
  }
  /**
   * Protobuf type {@code training_data_message}
   */
  public  static final class training_data_message extends
      com.google.protobuf.GeneratedMessageLite<
          training_data_message, training_data_message.Builder> implements
      // @@protoc_insertion_point(message_implements:training_data_message)
      training_data_messageOrBuilder {
    private training_data_message() {
      fileName_ = "";
      fileContent_ = com.google.protobuf.ByteString.EMPTY;
    }
    private int bitField0_;
    public static final int FILE_ID_FIELD_NUMBER = 1;
    private int fileId_;
    /**
     * <code>optional uint32 file_id = 1;</code>
     * @return Whether the fileId field is set.
     */
    @java.lang.Override
    public boolean hasFileId() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional uint32 file_id = 1;</code>
     * @return The fileId.
     */
    @java.lang.Override
    public int getFileId() {
      return fileId_;
    }
    /**
     * <code>optional uint32 file_id = 1;</code>
     * @param value The fileId to set.
     */
    private void setFileId(int value) {
      bitField0_ |= 0x00000001;
      fileId_ = value;
    }
    /**
     * <code>optional uint32 file_id = 1;</code>
     */
    private void clearFileId() {
      bitField0_ = (bitField0_ & ~0x00000001);
      fileId_ = 0;
    }

    public static final int FILE_NAME_FIELD_NUMBER = 2;
    private java.lang.String fileName_;
    /**
     * <code>optional string file_name = 2;</code>
     * @return Whether the fileName field is set.
     */
    @java.lang.Override
    public boolean hasFileName() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string file_name = 2;</code>
     * @return The fileName.
     */
    @java.lang.Override
    public java.lang.String getFileName() {
      return fileName_;
    }
    /**
     * <code>optional string file_name = 2;</code>
     * @return The bytes for fileName.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getFileNameBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(fileName_);
    }
    /**
     * <code>optional string file_name = 2;</code>
     * @param value The fileName to set.
     */
    private void setFileName(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000002;
      fileName_ = value;
    }
    /**
     * <code>optional string file_name = 2;</code>
     */
    private void clearFileName() {
      bitField0_ = (bitField0_ & ~0x00000002);
      fileName_ = getDefaultInstance().getFileName();
    }
    /**
     * <code>optional string file_name = 2;</code>
     * @param value The bytes for fileName to set.
     */
    private void setFileNameBytes(
        com.google.protobuf.ByteString value) {
      fileName_ = value.toStringUtf8();
      bitField0_ |= 0x00000002;
    }

    public static final int FILE_TYPE_FIELD_NUMBER = 3;
    private int fileType_;
    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 3;</code>
     * @return Whether the fileType field is set.
     */
    @java.lang.Override
    public boolean hasFileType() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 3;</code>
     * @return The fileType.
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE getFileType() {
      nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE result = nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE.forNumber(fileType_);
      return result == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE.enum_TRAINING_FILE_TYPE_INVALIDE : result;
    }
    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 3;</code>
     * @param value The fileType to set.
     */
    private void setFileType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE value) {
      fileType_ = value.getNumber();
      bitField0_ |= 0x00000004;
    }
    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 3;</code>
     */
    private void clearFileType() {
      bitField0_ = (bitField0_ & ~0x00000004);
      fileType_ = 0;
    }

    public static final int TRAINING_PERIOD_FIELD_NUMBER = 4;
    private int trainingPeriod_;
    /**
     * <code>optional uint32 training_period = 4;</code>
     * @return Whether the trainingPeriod field is set.
     */
    @java.lang.Override
    public boolean hasTrainingPeriod() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional uint32 training_period = 4;</code>
     * @return The trainingPeriod.
     */
    @java.lang.Override
    public int getTrainingPeriod() {
      return trainingPeriod_;
    }
    /**
     * <code>optional uint32 training_period = 4;</code>
     * @param value The trainingPeriod to set.
     */
    private void setTrainingPeriod(int value) {
      bitField0_ |= 0x00000008;
      trainingPeriod_ = value;
    }
    /**
     * <code>optional uint32 training_period = 4;</code>
     */
    private void clearTrainingPeriod() {
      bitField0_ = (bitField0_ & ~0x00000008);
      trainingPeriod_ = 0;
    }

    public static final int TRAINING_TYPE_FIELD_NUMBER = 5;
    private int trainingType_;
    /**
     * <code>optional .TRAINING_TYPE training_type = 5;</code>
     * @return Whether the trainingType field is set.
     */
    @java.lang.Override
    public boolean hasTrainingType() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional .TRAINING_TYPE training_type = 5;</code>
     * @return The trainingType.
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_TYPE getTrainingType() {
      nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_TYPE result = nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_TYPE.forNumber(trainingType_);
      return result == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_TYPE.enum_TRAINING_TYPE_INVALID : result;
    }
    /**
     * <code>optional .TRAINING_TYPE training_type = 5;</code>
     * @param value The trainingType to set.
     */
    private void setTrainingType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_TYPE value) {
      trainingType_ = value.getNumber();
      bitField0_ |= 0x00000010;
    }
    /**
     * <code>optional .TRAINING_TYPE training_type = 5;</code>
     */
    private void clearTrainingType() {
      bitField0_ = (bitField0_ & ~0x00000010);
      trainingType_ = 0;
    }

    public static final int TRAINING_OBJECT_MESSAGE_FIELD_NUMBER = 6;
    private nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg trainingObjectMessage_;
    /**
     * <code>optional .training_object_msg training_object_message = 6;</code>
     */
    @java.lang.Override
    public boolean hasTrainingObjectMessage() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional .training_object_msg training_object_message = 6;</code>
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg getTrainingObjectMessage() {
      return trainingObjectMessage_ == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg.getDefaultInstance() : trainingObjectMessage_;
    }
    /**
     * <code>optional .training_object_msg training_object_message = 6;</code>
     */
    private void setTrainingObjectMessage(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg value) {
      value.getClass();
  trainingObjectMessage_ = value;
      bitField0_ |= 0x00000020;
      }
    /**
     * <code>optional .training_object_msg training_object_message = 6;</code>
     */
    @java.lang.SuppressWarnings({"ReferenceEquality"})
    private void mergeTrainingObjectMessage(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg value) {
      value.getClass();
  if (trainingObjectMessage_ != null &&
          trainingObjectMessage_ != nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg.getDefaultInstance()) {
        trainingObjectMessage_ =
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg.newBuilder(trainingObjectMessage_).mergeFrom(value).buildPartial();
      } else {
        trainingObjectMessage_ = value;
      }
      bitField0_ |= 0x00000020;
    }
    /**
     * <code>optional .training_object_msg training_object_message = 6;</code>
     */
    private void clearTrainingObjectMessage() {  trainingObjectMessage_ = null;
      bitField0_ = (bitField0_ & ~0x00000020);
    }

    public static final int TRAINING_TIME_FIELD_NUMBER = 7;
    private int trainingTime_;
    /**
     * <code>optional uint32 training_time = 7;</code>
     * @return Whether the trainingTime field is set.
     */
    @java.lang.Override
    public boolean hasTrainingTime() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional uint32 training_time = 7;</code>
     * @return The trainingTime.
     */
    @java.lang.Override
    public int getTrainingTime() {
      return trainingTime_;
    }
    /**
     * <code>optional uint32 training_time = 7;</code>
     * @param value The trainingTime to set.
     */
    private void setTrainingTime(int value) {
      bitField0_ |= 0x00000040;
      trainingTime_ = value;
    }
    /**
     * <code>optional uint32 training_time = 7;</code>
     */
    private void clearTrainingTime() {
      bitField0_ = (bitField0_ & ~0x00000040);
      trainingTime_ = 0;
    }

    public static final int FILE_CONTENT_FIELD_NUMBER = 13;
    private com.google.protobuf.ByteString fileContent_;
    /**
     * <code>optional bytes file_content = 13;</code>
     * @return Whether the fileContent field is set.
     */
    @java.lang.Override
    public boolean hasFileContent() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional bytes file_content = 13;</code>
     * @return The fileContent.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getFileContent() {
      return fileContent_;
    }
    /**
     * <code>optional bytes file_content = 13;</code>
     * @param value The fileContent to set.
     */
    private void setFileContent(com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000080;
      fileContent_ = value;
    }
    /**
     * <code>optional bytes file_content = 13;</code>
     */
    private void clearFileContent() {
      bitField0_ = (bitField0_ & ~0x00000080);
      fileContent_ = getDefaultInstance().getFileContent();
    }

    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * Protobuf type {@code training_data_message}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message, Builder> implements
        // @@protoc_insertion_point(builder_implements:training_data_message)
        nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_messageOrBuilder {
      // Construct using nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <code>optional uint32 file_id = 1;</code>
       * @return Whether the fileId field is set.
       */
      @java.lang.Override
      public boolean hasFileId() {
        return instance.hasFileId();
      }
      /**
       * <code>optional uint32 file_id = 1;</code>
       * @return The fileId.
       */
      @java.lang.Override
      public int getFileId() {
        return instance.getFileId();
      }
      /**
       * <code>optional uint32 file_id = 1;</code>
       * @param value The fileId to set.
       * @return This builder for chaining.
       */
      public Builder setFileId(int value) {
        copyOnWrite();
        instance.setFileId(value);
        return this;
      }
      /**
       * <code>optional uint32 file_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFileId() {
        copyOnWrite();
        instance.clearFileId();
        return this;
      }

      /**
       * <code>optional string file_name = 2;</code>
       * @return Whether the fileName field is set.
       */
      @java.lang.Override
      public boolean hasFileName() {
        return instance.hasFileName();
      }
      /**
       * <code>optional string file_name = 2;</code>
       * @return The fileName.
       */
      @java.lang.Override
      public java.lang.String getFileName() {
        return instance.getFileName();
      }
      /**
       * <code>optional string file_name = 2;</code>
       * @return The bytes for fileName.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getFileNameBytes() {
        return instance.getFileNameBytes();
      }
      /**
       * <code>optional string file_name = 2;</code>
       * @param value The fileName to set.
       * @return This builder for chaining.
       */
      public Builder setFileName(
          java.lang.String value) {
        copyOnWrite();
        instance.setFileName(value);
        return this;
      }
      /**
       * <code>optional string file_name = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearFileName() {
        copyOnWrite();
        instance.clearFileName();
        return this;
      }
      /**
       * <code>optional string file_name = 2;</code>
       * @param value The bytes for fileName to set.
       * @return This builder for chaining.
       */
      public Builder setFileNameBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setFileNameBytes(value);
        return this;
      }

      /**
       * <code>optional .TRAINING_FILE_TYPE file_type = 3;</code>
       * @return Whether the fileType field is set.
       */
      @java.lang.Override
      public boolean hasFileType() {
        return instance.hasFileType();
      }
      /**
       * <code>optional .TRAINING_FILE_TYPE file_type = 3;</code>
       * @return The fileType.
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE getFileType() {
        return instance.getFileType();
      }
      /**
       * <code>optional .TRAINING_FILE_TYPE file_type = 3;</code>
       * @param value The enum numeric value on the wire for fileType to set.
       * @return This builder for chaining.
       */
      public Builder setFileType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE value) {
        copyOnWrite();
        instance.setFileType(value);
        return this;
      }
      /**
       * <code>optional .TRAINING_FILE_TYPE file_type = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearFileType() {
        copyOnWrite();
        instance.clearFileType();
        return this;
      }

      /**
       * <code>optional uint32 training_period = 4;</code>
       * @return Whether the trainingPeriod field is set.
       */
      @java.lang.Override
      public boolean hasTrainingPeriod() {
        return instance.hasTrainingPeriod();
      }
      /**
       * <code>optional uint32 training_period = 4;</code>
       * @return The trainingPeriod.
       */
      @java.lang.Override
      public int getTrainingPeriod() {
        return instance.getTrainingPeriod();
      }
      /**
       * <code>optional uint32 training_period = 4;</code>
       * @param value The trainingPeriod to set.
       * @return This builder for chaining.
       */
      public Builder setTrainingPeriod(int value) {
        copyOnWrite();
        instance.setTrainingPeriod(value);
        return this;
      }
      /**
       * <code>optional uint32 training_period = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearTrainingPeriod() {
        copyOnWrite();
        instance.clearTrainingPeriod();
        return this;
      }

      /**
       * <code>optional .TRAINING_TYPE training_type = 5;</code>
       * @return Whether the trainingType field is set.
       */
      @java.lang.Override
      public boolean hasTrainingType() {
        return instance.hasTrainingType();
      }
      /**
       * <code>optional .TRAINING_TYPE training_type = 5;</code>
       * @return The trainingType.
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_TYPE getTrainingType() {
        return instance.getTrainingType();
      }
      /**
       * <code>optional .TRAINING_TYPE training_type = 5;</code>
       * @param value The enum numeric value on the wire for trainingType to set.
       * @return This builder for chaining.
       */
      public Builder setTrainingType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_TYPE value) {
        copyOnWrite();
        instance.setTrainingType(value);
        return this;
      }
      /**
       * <code>optional .TRAINING_TYPE training_type = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearTrainingType() {
        copyOnWrite();
        instance.clearTrainingType();
        return this;
      }

      /**
       * <code>optional .training_object_msg training_object_message = 6;</code>
       */
      @java.lang.Override
      public boolean hasTrainingObjectMessage() {
        return instance.hasTrainingObjectMessage();
      }
      /**
       * <code>optional .training_object_msg training_object_message = 6;</code>
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg getTrainingObjectMessage() {
        return instance.getTrainingObjectMessage();
      }
      /**
       * <code>optional .training_object_msg training_object_message = 6;</code>
       */
      public Builder setTrainingObjectMessage(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg value) {
        copyOnWrite();
        instance.setTrainingObjectMessage(value);
        return this;
        }
      /**
       * <code>optional .training_object_msg training_object_message = 6;</code>
       */
      public Builder setTrainingObjectMessage(
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg.Builder builderForValue) {
        copyOnWrite();
        instance.setTrainingObjectMessage(builderForValue.build());
        return this;
      }
      /**
       * <code>optional .training_object_msg training_object_message = 6;</code>
       */
      public Builder mergeTrainingObjectMessage(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_object_msg value) {
        copyOnWrite();
        instance.mergeTrainingObjectMessage(value);
        return this;
      }
      /**
       * <code>optional .training_object_msg training_object_message = 6;</code>
       */
      public Builder clearTrainingObjectMessage() {  copyOnWrite();
        instance.clearTrainingObjectMessage();
        return this;
      }

      /**
       * <code>optional uint32 training_time = 7;</code>
       * @return Whether the trainingTime field is set.
       */
      @java.lang.Override
      public boolean hasTrainingTime() {
        return instance.hasTrainingTime();
      }
      /**
       * <code>optional uint32 training_time = 7;</code>
       * @return The trainingTime.
       */
      @java.lang.Override
      public int getTrainingTime() {
        return instance.getTrainingTime();
      }
      /**
       * <code>optional uint32 training_time = 7;</code>
       * @param value The trainingTime to set.
       * @return This builder for chaining.
       */
      public Builder setTrainingTime(int value) {
        copyOnWrite();
        instance.setTrainingTime(value);
        return this;
      }
      /**
       * <code>optional uint32 training_time = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearTrainingTime() {
        copyOnWrite();
        instance.clearTrainingTime();
        return this;
      }

      /**
       * <code>optional bytes file_content = 13;</code>
       * @return Whether the fileContent field is set.
       */
      @java.lang.Override
      public boolean hasFileContent() {
        return instance.hasFileContent();
      }
      /**
       * <code>optional bytes file_content = 13;</code>
       * @return The fileContent.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getFileContent() {
        return instance.getFileContent();
      }
      /**
       * <code>optional bytes file_content = 13;</code>
       * @param value The fileContent to set.
       * @return This builder for chaining.
       */
      public Builder setFileContent(com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setFileContent(value);
        return this;
      }
      /**
       * <code>optional bytes file_content = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearFileContent() {
        copyOnWrite();
        instance.clearFileContent();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:training_data_message)
    }
    private byte memoizedIsInitialized = 2;
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "fileId_",
              "fileName_",
              "fileType_",
              nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE.internalGetVerifier(),
              "trainingPeriod_",
              "trainingType_",
              nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_TYPE.internalGetVerifier(),
              "trainingObjectMessage_",
              "trainingTime_",
              "fileContent_",
            };
            java.lang.String info =
                "\u0001\b\u0000\u0001\u0001\r\b\u0000\u0000\u0001\u0001\u100b\u0000\u0002\u1008\u0001" +
                "\u0003\u100c\u0002\u0004\u100b\u0003\u0005\u100c\u0004\u0006\u1409\u0005\u0007\u100b" +
                "\u0006\r\u100a\u0007";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message> parser = PARSER;
          if (parser == null) {
            synchronized (nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return memoizedIsInitialized;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        memoizedIsInitialized = (byte) (arg0 == null ? 0 : 1);
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:training_data_message)
    private static final nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message DEFAULT_INSTANCE;
    static {
      training_data_message defaultInstance = new training_data_message();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        training_data_message.class, defaultInstance);
    }

    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<training_data_message> PARSER;

    public static com.google.protobuf.Parser<training_data_message> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }

  public interface training_list_messageOrBuilder extends
      // @@protoc_insertion_point(interface_extends:training_list_message)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>optional uint32 file_id = 1;</code>
     * @return Whether the fileId field is set.
     */
    boolean hasFileId();
    /**
     * <code>optional uint32 file_id = 1;</code>
     * @return The fileId.
     */
    int getFileId();

    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 2;</code>
     * @return Whether the fileType field is set.
     */
    boolean hasFileType();
    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 2;</code>
     * @return The fileType.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE getFileType();

    /**
     * <code>optional string file_name = 3;</code>
     * @return Whether the fileName field is set.
     */
    boolean hasFileName();
    /**
     * <code>optional string file_name = 3;</code>
     * @return The fileName.
     */
    java.lang.String getFileName();
    /**
     * <code>optional string file_name = 3;</code>
     * @return The bytes for fileName.
     */
    com.google.protobuf.ByteString
        getFileNameBytes();

    /**
     * <code>optional .TRAINING_FILE_STATUS status = 4;</code>
     * @return Whether the status field is set.
     */
    boolean hasStatus();
    /**
     * <code>optional .TRAINING_FILE_STATUS status = 4;</code>
     * @return The status.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_STATUS getStatus();

    /**
     * <code>optional uint32 training_period = 5;</code>
     * @return Whether the trainingPeriod field is set.
     */
    boolean hasTrainingPeriod();
    /**
     * <code>optional uint32 training_period = 5;</code>
     * @return The trainingPeriod.
     */
    int getTrainingPeriod();
  }
  /**
   * Protobuf type {@code training_list_message}
   */
  public  static final class training_list_message extends
      com.google.protobuf.GeneratedMessageLite<
          training_list_message, training_list_message.Builder> implements
      // @@protoc_insertion_point(message_implements:training_list_message)
      training_list_messageOrBuilder {
    private training_list_message() {
      fileName_ = "";
    }
    private int bitField0_;
    public static final int FILE_ID_FIELD_NUMBER = 1;
    private int fileId_;
    /**
     * <code>optional uint32 file_id = 1;</code>
     * @return Whether the fileId field is set.
     */
    @java.lang.Override
    public boolean hasFileId() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional uint32 file_id = 1;</code>
     * @return The fileId.
     */
    @java.lang.Override
    public int getFileId() {
      return fileId_;
    }
    /**
     * <code>optional uint32 file_id = 1;</code>
     * @param value The fileId to set.
     */
    private void setFileId(int value) {
      bitField0_ |= 0x00000001;
      fileId_ = value;
    }
    /**
     * <code>optional uint32 file_id = 1;</code>
     */
    private void clearFileId() {
      bitField0_ = (bitField0_ & ~0x00000001);
      fileId_ = 0;
    }

    public static final int FILE_TYPE_FIELD_NUMBER = 2;
    private int fileType_;
    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 2;</code>
     * @return Whether the fileType field is set.
     */
    @java.lang.Override
    public boolean hasFileType() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 2;</code>
     * @return The fileType.
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE getFileType() {
      nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE result = nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE.forNumber(fileType_);
      return result == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE.enum_TRAINING_FILE_TYPE_INVALIDE : result;
    }
    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 2;</code>
     * @param value The fileType to set.
     */
    private void setFileType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE value) {
      fileType_ = value.getNumber();
      bitField0_ |= 0x00000002;
    }
    /**
     * <code>optional .TRAINING_FILE_TYPE file_type = 2;</code>
     */
    private void clearFileType() {
      bitField0_ = (bitField0_ & ~0x00000002);
      fileType_ = 0;
    }

    public static final int FILE_NAME_FIELD_NUMBER = 3;
    private java.lang.String fileName_;
    /**
     * <code>optional string file_name = 3;</code>
     * @return Whether the fileName field is set.
     */
    @java.lang.Override
    public boolean hasFileName() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional string file_name = 3;</code>
     * @return The fileName.
     */
    @java.lang.Override
    public java.lang.String getFileName() {
      return fileName_;
    }
    /**
     * <code>optional string file_name = 3;</code>
     * @return The bytes for fileName.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getFileNameBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(fileName_);
    }
    /**
     * <code>optional string file_name = 3;</code>
     * @param value The fileName to set.
     */
    private void setFileName(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000004;
      fileName_ = value;
    }
    /**
     * <code>optional string file_name = 3;</code>
     */
    private void clearFileName() {
      bitField0_ = (bitField0_ & ~0x00000004);
      fileName_ = getDefaultInstance().getFileName();
    }
    /**
     * <code>optional string file_name = 3;</code>
     * @param value The bytes for fileName to set.
     */
    private void setFileNameBytes(
        com.google.protobuf.ByteString value) {
      fileName_ = value.toStringUtf8();
      bitField0_ |= 0x00000004;
    }

    public static final int STATUS_FIELD_NUMBER = 4;
    private int status_;
    /**
     * <code>optional .TRAINING_FILE_STATUS status = 4;</code>
     * @return Whether the status field is set.
     */
    @java.lang.Override
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .TRAINING_FILE_STATUS status = 4;</code>
     * @return The status.
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_STATUS getStatus() {
      nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_STATUS result = nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_STATUS.forNumber(status_);
      return result == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_STATUS.enum_TRAINING_INVALID_STATUS : result;
    }
    /**
     * <code>optional .TRAINING_FILE_STATUS status = 4;</code>
     * @param value The status to set.
     */
    private void setStatus(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_STATUS value) {
      status_ = value.getNumber();
      bitField0_ |= 0x00000008;
    }
    /**
     * <code>optional .TRAINING_FILE_STATUS status = 4;</code>
     */
    private void clearStatus() {
      bitField0_ = (bitField0_ & ~0x00000008);
      status_ = 0;
    }

    public static final int TRAINING_PERIOD_FIELD_NUMBER = 5;
    private int trainingPeriod_;
    /**
     * <code>optional uint32 training_period = 5;</code>
     * @return Whether the trainingPeriod field is set.
     */
    @java.lang.Override
    public boolean hasTrainingPeriod() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional uint32 training_period = 5;</code>
     * @return The trainingPeriod.
     */
    @java.lang.Override
    public int getTrainingPeriod() {
      return trainingPeriod_;
    }
    /**
     * <code>optional uint32 training_period = 5;</code>
     * @param value The trainingPeriod to set.
     */
    private void setTrainingPeriod(int value) {
      bitField0_ |= 0x00000010;
      trainingPeriod_ = value;
    }
    /**
     * <code>optional uint32 training_period = 5;</code>
     */
    private void clearTrainingPeriod() {
      bitField0_ = (bitField0_ & ~0x00000010);
      trainingPeriod_ = 0;
    }

    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * Protobuf type {@code training_list_message}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message, Builder> implements
        // @@protoc_insertion_point(builder_implements:training_list_message)
        nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_messageOrBuilder {
      // Construct using nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <code>optional uint32 file_id = 1;</code>
       * @return Whether the fileId field is set.
       */
      @java.lang.Override
      public boolean hasFileId() {
        return instance.hasFileId();
      }
      /**
       * <code>optional uint32 file_id = 1;</code>
       * @return The fileId.
       */
      @java.lang.Override
      public int getFileId() {
        return instance.getFileId();
      }
      /**
       * <code>optional uint32 file_id = 1;</code>
       * @param value The fileId to set.
       * @return This builder for chaining.
       */
      public Builder setFileId(int value) {
        copyOnWrite();
        instance.setFileId(value);
        return this;
      }
      /**
       * <code>optional uint32 file_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFileId() {
        copyOnWrite();
        instance.clearFileId();
        return this;
      }

      /**
       * <code>optional .TRAINING_FILE_TYPE file_type = 2;</code>
       * @return Whether the fileType field is set.
       */
      @java.lang.Override
      public boolean hasFileType() {
        return instance.hasFileType();
      }
      /**
       * <code>optional .TRAINING_FILE_TYPE file_type = 2;</code>
       * @return The fileType.
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE getFileType() {
        return instance.getFileType();
      }
      /**
       * <code>optional .TRAINING_FILE_TYPE file_type = 2;</code>
       * @param value The enum numeric value on the wire for fileType to set.
       * @return This builder for chaining.
       */
      public Builder setFileType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE value) {
        copyOnWrite();
        instance.setFileType(value);
        return this;
      }
      /**
       * <code>optional .TRAINING_FILE_TYPE file_type = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearFileType() {
        copyOnWrite();
        instance.clearFileType();
        return this;
      }

      /**
       * <code>optional string file_name = 3;</code>
       * @return Whether the fileName field is set.
       */
      @java.lang.Override
      public boolean hasFileName() {
        return instance.hasFileName();
      }
      /**
       * <code>optional string file_name = 3;</code>
       * @return The fileName.
       */
      @java.lang.Override
      public java.lang.String getFileName() {
        return instance.getFileName();
      }
      /**
       * <code>optional string file_name = 3;</code>
       * @return The bytes for fileName.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getFileNameBytes() {
        return instance.getFileNameBytes();
      }
      /**
       * <code>optional string file_name = 3;</code>
       * @param value The fileName to set.
       * @return This builder for chaining.
       */
      public Builder setFileName(
          java.lang.String value) {
        copyOnWrite();
        instance.setFileName(value);
        return this;
      }
      /**
       * <code>optional string file_name = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearFileName() {
        copyOnWrite();
        instance.clearFileName();
        return this;
      }
      /**
       * <code>optional string file_name = 3;</code>
       * @param value The bytes for fileName to set.
       * @return This builder for chaining.
       */
      public Builder setFileNameBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setFileNameBytes(value);
        return this;
      }

      /**
       * <code>optional .TRAINING_FILE_STATUS status = 4;</code>
       * @return Whether the status field is set.
       */
      @java.lang.Override
      public boolean hasStatus() {
        return instance.hasStatus();
      }
      /**
       * <code>optional .TRAINING_FILE_STATUS status = 4;</code>
       * @return The status.
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_STATUS getStatus() {
        return instance.getStatus();
      }
      /**
       * <code>optional .TRAINING_FILE_STATUS status = 4;</code>
       * @param value The enum numeric value on the wire for status to set.
       * @return This builder for chaining.
       */
      public Builder setStatus(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_STATUS value) {
        copyOnWrite();
        instance.setStatus(value);
        return this;
      }
      /**
       * <code>optional .TRAINING_FILE_STATUS status = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearStatus() {
        copyOnWrite();
        instance.clearStatus();
        return this;
      }

      /**
       * <code>optional uint32 training_period = 5;</code>
       * @return Whether the trainingPeriod field is set.
       */
      @java.lang.Override
      public boolean hasTrainingPeriod() {
        return instance.hasTrainingPeriod();
      }
      /**
       * <code>optional uint32 training_period = 5;</code>
       * @return The trainingPeriod.
       */
      @java.lang.Override
      public int getTrainingPeriod() {
        return instance.getTrainingPeriod();
      }
      /**
       * <code>optional uint32 training_period = 5;</code>
       * @param value The trainingPeriod to set.
       * @return This builder for chaining.
       */
      public Builder setTrainingPeriod(int value) {
        copyOnWrite();
        instance.setTrainingPeriod(value);
        return this;
      }
      /**
       * <code>optional uint32 training_period = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearTrainingPeriod() {
        copyOnWrite();
        instance.clearTrainingPeriod();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:training_list_message)
    }
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "fileId_",
              "fileType_",
              nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_TYPE.internalGetVerifier(),
              "fileName_",
              "status_",
              nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_FILE_STATUS.internalGetVerifier(),
              "trainingPeriod_",
            };
            java.lang.String info =
                "\u0001\u0005\u0000\u0001\u0001\u0005\u0005\u0000\u0000\u0000\u0001\u100b\u0000\u0002" +
                "\u100c\u0001\u0003\u1008\u0002\u0004\u100c\u0003\u0005\u100b\u0004";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message> parser = PARSER;
          if (parser == null) {
            synchronized (nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return (byte) 1;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:training_list_message)
    private static final nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message DEFAULT_INSTANCE;
    static {
      training_list_message defaultInstance = new training_list_message();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        training_list_message.class, defaultInstance);
    }

    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<training_list_message> PARSER;

    public static com.google.protobuf.Parser<training_list_message> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }

  public interface training_module_info_messageOrBuilder extends
      // @@protoc_insertion_point(interface_extends:training_module_info_message)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
     * @return A list containing the subOperateType.
     */
    java.util.List<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE> getSubOperateTypeList();
    /**
     * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
     * @return The count of subOperateType.
     */
    int getSubOperateTypeCount();
    /**
     * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
     * @param index The index of the element to return.
     * @return The subOperateType at the given index.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE getSubOperateType(int index);

    /**
     * <code>optional uint32 training_module_version = 2 [default = 100];</code>
     * @return Whether the trainingModuleVersion field is set.
     */
    boolean hasTrainingModuleVersion();
    /**
     * <code>optional uint32 training_module_version = 2 [default = 100];</code>
     * @return The trainingModuleVersion.
     */
    int getTrainingModuleVersion();
  }
  /**
   * Protobuf type {@code training_module_info_message}
   */
  public  static final class training_module_info_message extends
      com.google.protobuf.GeneratedMessageLite<
          training_module_info_message, training_module_info_message.Builder> implements
      // @@protoc_insertion_point(message_implements:training_module_info_message)
      training_module_info_messageOrBuilder {
    private training_module_info_message() {
      subOperateType_ = emptyIntList();
      trainingModuleVersion_ = 100;
    }
    private int bitField0_;
    public static final int SUB_OPERATE_TYPE_FIELD_NUMBER = 1;
    private com.google.protobuf.Internal.IntList subOperateType_;
    private static final com.google.protobuf.Internal.ListAdapter.Converter<
        java.lang.Integer, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE> subOperateType_converter_ =
            new com.google.protobuf.Internal.ListAdapter.Converter<
                java.lang.Integer, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE>() {
              @java.lang.Override
              public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE convert(java.lang.Integer from) {
                nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE result = nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE.forNumber(from);
                return result == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE.enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE : result;
              }
            };
    /**
     * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
     * @return A list containing the subOperateType.
     */
    @java.lang.Override
    public java.util.List<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE> getSubOperateTypeList() {
      return new com.google.protobuf.Internal.ListAdapter<
          java.lang.Integer, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE>(subOperateType_, subOperateType_converter_);
    }
    /**
     * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
     * @return The count of subOperateType.
     */
    @java.lang.Override
    public int getSubOperateTypeCount() {
      return subOperateType_.size();
    }
    /**
     * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
     * @param index The index of the element to return.
     * @return The subOperateType at the given index.
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE getSubOperateType(int index) {
      nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE result = nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE.forNumber(subOperateType_.getInt(index));
      return result == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE.enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE : result;
    }
    private void ensureSubOperateTypeIsMutable() {
      com.google.protobuf.Internal.IntList tmp = subOperateType_;
      if (!tmp.isModifiable()) {
        subOperateType_ =
            com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp);
      }
    }
    /**
     * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
     * @param index The index to set the value at.
     * @param value The subOperateType to set.
     */
    private void setSubOperateType(
        int index, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE value) {
      value.getClass();
  ensureSubOperateTypeIsMutable();
      subOperateType_.setInt(index, value.getNumber());
    }
    /**
     * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
     * @param value The subOperateType to add.
     */
    private void addSubOperateType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE value) {
      value.getClass();
  ensureSubOperateTypeIsMutable();
      subOperateType_.addInt(value.getNumber());
    }
    /**
     * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
     * @param values The subOperateType to add.
     */
    private void addAllSubOperateType(
        java.lang.Iterable<? extends nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE> values) {
      ensureSubOperateTypeIsMutable();
      for (nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE value : values) {
        subOperateType_.addInt(value.getNumber());
      }
    }
    /**
     * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
     */
    private void clearSubOperateType() {
      subOperateType_ = emptyIntList();
    }

    public static final int TRAINING_MODULE_VERSION_FIELD_NUMBER = 2;
    private int trainingModuleVersion_;
    /**
     * <code>optional uint32 training_module_version = 2 [default = 100];</code>
     * @return Whether the trainingModuleVersion field is set.
     */
    @java.lang.Override
    public boolean hasTrainingModuleVersion() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional uint32 training_module_version = 2 [default = 100];</code>
     * @return The trainingModuleVersion.
     */
    @java.lang.Override
    public int getTrainingModuleVersion() {
      return trainingModuleVersion_;
    }
    /**
     * <code>optional uint32 training_module_version = 2 [default = 100];</code>
     * @param value The trainingModuleVersion to set.
     */
    private void setTrainingModuleVersion(int value) {
      bitField0_ |= 0x00000001;
      trainingModuleVersion_ = value;
    }
    /**
     * <code>optional uint32 training_module_version = 2 [default = 100];</code>
     */
    private void clearTrainingModuleVersion() {
      bitField0_ = (bitField0_ & ~0x00000001);
      trainingModuleVersion_ = 100;
    }

    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * Protobuf type {@code training_module_info_message}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message, Builder> implements
        // @@protoc_insertion_point(builder_implements:training_module_info_message)
        nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_messageOrBuilder {
      // Construct using nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
       * @return A list containing the subOperateType.
       */
      @java.lang.Override
      public java.util.List<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE> getSubOperateTypeList() {
        return instance.getSubOperateTypeList();
      }
      /**
       * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
       * @return The count of subOperateType.
       */
      @java.lang.Override
      public int getSubOperateTypeCount() {
        return instance.getSubOperateTypeCount();
      }
      /**
       * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
       * @param index The index of the element to return.
       * @return The subOperateType at the given index.
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE getSubOperateType(int index) {
        return instance.getSubOperateType(index);
      }
      /**
       * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
       * @param index The index to set the value at.
       * @param value The subOperateType to set.
       * @return This builder for chaining.
       */
      public Builder setSubOperateType(
          int index, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE value) {
        copyOnWrite();
        instance.setSubOperateType(index, value);
        return this;
      }
      /**
       * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
       * @param value The subOperateType to add.
       * @return This builder for chaining.
       */
      public Builder addSubOperateType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE value) {
        copyOnWrite();
        instance.addSubOperateType(value);
        return this;
      }
      /**
       * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
       * @param values The subOperateType to add.
       * @return This builder for chaining.
       */
      public Builder addAllSubOperateType(
          java.lang.Iterable<? extends nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE> values) {
        copyOnWrite();
        instance.addAllSubOperateType(values);  return this;
      }
      /**
       * <code>repeated .TRAINING_SUB_OPERATE_TYPE sub_operate_type = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSubOperateType() {
        copyOnWrite();
        instance.clearSubOperateType();
        return this;
      }

      /**
       * <code>optional uint32 training_module_version = 2 [default = 100];</code>
       * @return Whether the trainingModuleVersion field is set.
       */
      @java.lang.Override
      public boolean hasTrainingModuleVersion() {
        return instance.hasTrainingModuleVersion();
      }
      /**
       * <code>optional uint32 training_module_version = 2 [default = 100];</code>
       * @return The trainingModuleVersion.
       */
      @java.lang.Override
      public int getTrainingModuleVersion() {
        return instance.getTrainingModuleVersion();
      }
      /**
       * <code>optional uint32 training_module_version = 2 [default = 100];</code>
       * @param value The trainingModuleVersion to set.
       * @return This builder for chaining.
       */
      public Builder setTrainingModuleVersion(int value) {
        copyOnWrite();
        instance.setTrainingModuleVersion(value);
        return this;
      }
      /**
       * <code>optional uint32 training_module_version = 2 [default = 100];</code>
       * @return This builder for chaining.
       */
      public Builder clearTrainingModuleVersion() {
        copyOnWrite();
        instance.clearTrainingModuleVersion();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:training_module_info_message)
    }
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "subOperateType_",
              nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE.internalGetVerifier(),
              "trainingModuleVersion_",
            };
            java.lang.String info =
                "\u0001\u0002\u0000\u0001\u0001\u0002\u0002\u0000\u0001\u0000\u0001\u001e\u0002\u100b" +
                "\u0000";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message> parser = PARSER;
          if (parser == null) {
            synchronized (nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return (byte) 1;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:training_module_info_message)
    private static final nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message DEFAULT_INSTANCE;
    static {
      training_module_info_message defaultInstance = new training_module_info_message();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        training_module_info_message.class, defaultInstance);
    }

    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<training_module_info_message> PARSER;

    public static com.google.protobuf.Parser<training_module_info_message> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }

  public interface training_messageOrBuilder extends
      // @@protoc_insertion_point(interface_extends:training_message)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>required .service_type_index service_type = 1 [default = enum_SERVICE_TYPE_INDEX_TRAINING];</code>
     * @return Whether the serviceType field is set.
     */
    boolean hasServiceType();
    /**
     * <code>required .service_type_index service_type = 1 [default = enum_SERVICE_TYPE_INDEX_TRAINING];</code>
     * @return The serviceType.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.service_type_index getServiceType();

    /**
     * <code>required .SERVICE_OPERATE_TYPE operate_type = 2 [default = enum_SERVICE_OPERATE_TYPE_NONE];</code>
     * @return Whether the operateType field is set.
     */
    boolean hasOperateType();
    /**
     * <code>required .SERVICE_OPERATE_TYPE operate_type = 2 [default = enum_SERVICE_OPERATE_TYPE_NONE];</code>
     * @return The operateType.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.SERVICE_OPERATE_TYPE getOperateType();

    /**
     * <code>required .TRAINING_SUB_OPERATE_TYPE training_sub_operate_type = 3 [default = enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE];</code>
     * @return Whether the trainingSubOperateType field is set.
     */
    boolean hasTrainingSubOperateType();
    /**
     * <code>required .TRAINING_SUB_OPERATE_TYPE training_sub_operate_type = 3 [default = enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE];</code>
     * @return The trainingSubOperateType.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE getTrainingSubOperateType();

    /**
     * <code>optional .training_data_message training_data_msg = 4;</code>
     * @return Whether the trainingDataMsg field is set.
     */
    boolean hasTrainingDataMsg();
    /**
     * <code>optional .training_data_message training_data_msg = 4;</code>
     * @return The trainingDataMsg.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message getTrainingDataMsg();

    /**
     * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
     * @return Whether the trainingListGetMsg field is set.
     */
    boolean hasTrainingListGetMsg();
    /**
     * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
     * @return The trainingListGetMsg.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message getTrainingListGetMsg();

    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    java.util.List<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message> 
        getTrainingListMsgList();
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message getTrainingListMsg(int index);
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    int getTrainingListMsgCount();

    /**
     * <code>optional .training_module_info_message module_info_msg = 13;</code>
     * @return Whether the moduleInfoMsg field is set.
     */
    boolean hasModuleInfoMsg();
    /**
     * <code>optional .training_module_info_message module_info_msg = 13;</code>
     * @return The moduleInfoMsg.
     */
    nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message getModuleInfoMsg();
  }
  /**
   * Protobuf type {@code training_message}
   */
  public  static final class training_message extends
      com.google.protobuf.GeneratedMessageLite<
          training_message, training_message.Builder> implements
      // @@protoc_insertion_point(message_implements:training_message)
      training_messageOrBuilder {
    private training_message() {
      serviceType_ = 15;
      trainingListMsg_ = emptyProtobufList();
    }
    private int bitField0_;
    public static final int SERVICE_TYPE_FIELD_NUMBER = 1;
    private int serviceType_;
    /**
     * <code>required .service_type_index service_type = 1 [default = enum_SERVICE_TYPE_INDEX_TRAINING];</code>
     * @return Whether the serviceType field is set.
     */
    @java.lang.Override
    public boolean hasServiceType() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .service_type_index service_type = 1 [default = enum_SERVICE_TYPE_INDEX_TRAINING];</code>
     * @return The serviceType.
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.service_type_index getServiceType() {
      nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.service_type_index result = nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.service_type_index.forNumber(serviceType_);
      return result == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.service_type_index.enum_SERVICE_TYPE_INDEX_TRAINING : result;
    }
    /**
     * <code>required .service_type_index service_type = 1 [default = enum_SERVICE_TYPE_INDEX_TRAINING];</code>
     * @param value The serviceType to set.
     */
    private void setServiceType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.service_type_index value) {
      serviceType_ = value.getNumber();
      bitField0_ |= 0x00000001;
    }
    /**
     * <code>required .service_type_index service_type = 1 [default = enum_SERVICE_TYPE_INDEX_TRAINING];</code>
     */
    private void clearServiceType() {
      bitField0_ = (bitField0_ & ~0x00000001);
      serviceType_ = 15;
    }

    public static final int OPERATE_TYPE_FIELD_NUMBER = 2;
    private int operateType_;
    /**
     * <code>required .SERVICE_OPERATE_TYPE operate_type = 2 [default = enum_SERVICE_OPERATE_TYPE_NONE];</code>
     * @return Whether the operateType field is set.
     */
    @java.lang.Override
    public boolean hasOperateType() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required .SERVICE_OPERATE_TYPE operate_type = 2 [default = enum_SERVICE_OPERATE_TYPE_NONE];</code>
     * @return The operateType.
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.SERVICE_OPERATE_TYPE getOperateType() {
      nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.SERVICE_OPERATE_TYPE result = nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.SERVICE_OPERATE_TYPE.forNumber(operateType_);
      return result == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.SERVICE_OPERATE_TYPE.enum_SERVICE_OPERATE_TYPE_NONE : result;
    }
    /**
     * <code>required .SERVICE_OPERATE_TYPE operate_type = 2 [default = enum_SERVICE_OPERATE_TYPE_NONE];</code>
     * @param value The operateType to set.
     */
    private void setOperateType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.SERVICE_OPERATE_TYPE value) {
      operateType_ = value.getNumber();
      bitField0_ |= 0x00000002;
    }
    /**
     * <code>required .SERVICE_OPERATE_TYPE operate_type = 2 [default = enum_SERVICE_OPERATE_TYPE_NONE];</code>
     */
    private void clearOperateType() {
      bitField0_ = (bitField0_ & ~0x00000002);
      operateType_ = 0;
    }

    public static final int TRAINING_SUB_OPERATE_TYPE_FIELD_NUMBER = 3;
    private int trainingSubOperateType_;
    /**
     * <code>required .TRAINING_SUB_OPERATE_TYPE training_sub_operate_type = 3 [default = enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE];</code>
     * @return Whether the trainingSubOperateType field is set.
     */
    @java.lang.Override
    public boolean hasTrainingSubOperateType() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>required .TRAINING_SUB_OPERATE_TYPE training_sub_operate_type = 3 [default = enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE];</code>
     * @return The trainingSubOperateType.
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE getTrainingSubOperateType() {
      nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE result = nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE.forNumber(trainingSubOperateType_);
      return result == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE.enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE : result;
    }
    /**
     * <code>required .TRAINING_SUB_OPERATE_TYPE training_sub_operate_type = 3 [default = enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE];</code>
     * @param value The trainingSubOperateType to set.
     */
    private void setTrainingSubOperateType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE value) {
      trainingSubOperateType_ = value.getNumber();
      bitField0_ |= 0x00000004;
    }
    /**
     * <code>required .TRAINING_SUB_OPERATE_TYPE training_sub_operate_type = 3 [default = enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE];</code>
     */
    private void clearTrainingSubOperateType() {
      bitField0_ = (bitField0_ & ~0x00000004);
      trainingSubOperateType_ = 0;
    }

    public static final int TRAINING_DATA_MSG_FIELD_NUMBER = 4;
    private nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message trainingDataMsg_;
    /**
     * <code>optional .training_data_message training_data_msg = 4;</code>
     */
    @java.lang.Override
    public boolean hasTrainingDataMsg() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .training_data_message training_data_msg = 4;</code>
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message getTrainingDataMsg() {
      return trainingDataMsg_ == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message.getDefaultInstance() : trainingDataMsg_;
    }
    /**
     * <code>optional .training_data_message training_data_msg = 4;</code>
     */
    private void setTrainingDataMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message value) {
      value.getClass();
  trainingDataMsg_ = value;
      bitField0_ |= 0x00000008;
      }
    /**
     * <code>optional .training_data_message training_data_msg = 4;</code>
     */
    @java.lang.SuppressWarnings({"ReferenceEquality"})
    private void mergeTrainingDataMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message value) {
      value.getClass();
  if (trainingDataMsg_ != null &&
          trainingDataMsg_ != nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message.getDefaultInstance()) {
        trainingDataMsg_ =
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message.newBuilder(trainingDataMsg_).mergeFrom(value).buildPartial();
      } else {
        trainingDataMsg_ = value;
      }
      bitField0_ |= 0x00000008;
    }
    /**
     * <code>optional .training_data_message training_data_msg = 4;</code>
     */
    private void clearTrainingDataMsg() {  trainingDataMsg_ = null;
      bitField0_ = (bitField0_ & ~0x00000008);
    }

    public static final int TRAINING_LIST_GET_MSG_FIELD_NUMBER = 5;
    private nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message trainingListGetMsg_;
    /**
     * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
     */
    @java.lang.Override
    public boolean hasTrainingListGetMsg() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message getTrainingListGetMsg() {
      return trainingListGetMsg_ == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message.getDefaultInstance() : trainingListGetMsg_;
    }
    /**
     * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
     */
    private void setTrainingListGetMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message value) {
      value.getClass();
  trainingListGetMsg_ = value;
      bitField0_ |= 0x00000010;
      }
    /**
     * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
     */
    @java.lang.SuppressWarnings({"ReferenceEquality"})
    private void mergeTrainingListGetMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message value) {
      value.getClass();
  if (trainingListGetMsg_ != null &&
          trainingListGetMsg_ != nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message.getDefaultInstance()) {
        trainingListGetMsg_ =
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message.newBuilder(trainingListGetMsg_).mergeFrom(value).buildPartial();
      } else {
        trainingListGetMsg_ = value;
      }
      bitField0_ |= 0x00000010;
    }
    /**
     * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
     */
    private void clearTrainingListGetMsg() {  trainingListGetMsg_ = null;
      bitField0_ = (bitField0_ & ~0x00000010);
    }

    public static final int TRAINING_LIST_MSG_FIELD_NUMBER = 6;
    private com.google.protobuf.Internal.ProtobufList<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message> trainingListMsg_;
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    @java.lang.Override
    public java.util.List<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message> getTrainingListMsgList() {
      return trainingListMsg_;
    }
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    public java.util.List<? extends nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_messageOrBuilder> 
        getTrainingListMsgOrBuilderList() {
      return trainingListMsg_;
    }
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    @java.lang.Override
    public int getTrainingListMsgCount() {
      return trainingListMsg_.size();
    }
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message getTrainingListMsg(int index) {
      return trainingListMsg_.get(index);
    }
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_messageOrBuilder getTrainingListMsgOrBuilder(
        int index) {
      return trainingListMsg_.get(index);
    }
    private void ensureTrainingListMsgIsMutable() {
      com.google.protobuf.Internal.ProtobufList<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message> tmp = trainingListMsg_;
      if (!tmp.isModifiable()) {
        trainingListMsg_ =
            com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp);
       }
    }

    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    private void setTrainingListMsg(
        int index, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message value) {
      value.getClass();
  ensureTrainingListMsgIsMutable();
      trainingListMsg_.set(index, value);
    }
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    private void addTrainingListMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message value) {
      value.getClass();
  ensureTrainingListMsgIsMutable();
      trainingListMsg_.add(value);
    }
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    private void addTrainingListMsg(
        int index, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message value) {
      value.getClass();
  ensureTrainingListMsgIsMutable();
      trainingListMsg_.add(index, value);
    }
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    private void addAllTrainingListMsg(
        java.lang.Iterable<? extends nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message> values) {
      ensureTrainingListMsgIsMutable();
      com.google.protobuf.AbstractMessageLite.addAll(
          values, trainingListMsg_);
    }
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    private void clearTrainingListMsg() {
      trainingListMsg_ = emptyProtobufList();
    }
    /**
     * <code>repeated .training_list_message training_list_msg = 6;</code>
     */
    private void removeTrainingListMsg(int index) {
      ensureTrainingListMsgIsMutable();
      trainingListMsg_.remove(index);
    }

    public static final int MODULE_INFO_MSG_FIELD_NUMBER = 13;
    private nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message moduleInfoMsg_;
    /**
     * <code>optional .training_module_info_message module_info_msg = 13;</code>
     */
    @java.lang.Override
    public boolean hasModuleInfoMsg() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional .training_module_info_message module_info_msg = 13;</code>
     */
    @java.lang.Override
    public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message getModuleInfoMsg() {
      return moduleInfoMsg_ == null ? nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message.getDefaultInstance() : moduleInfoMsg_;
    }
    /**
     * <code>optional .training_module_info_message module_info_msg = 13;</code>
     */
    private void setModuleInfoMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message value) {
      value.getClass();
  moduleInfoMsg_ = value;
      bitField0_ |= 0x00000020;
      }
    /**
     * <code>optional .training_module_info_message module_info_msg = 13;</code>
     */
    @java.lang.SuppressWarnings({"ReferenceEquality"})
    private void mergeModuleInfoMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message value) {
      value.getClass();
  if (moduleInfoMsg_ != null &&
          moduleInfoMsg_ != nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message.getDefaultInstance()) {
        moduleInfoMsg_ =
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message.newBuilder(moduleInfoMsg_).mergeFrom(value).buildPartial();
      } else {
        moduleInfoMsg_ = value;
      }
      bitField0_ |= 0x00000020;
    }
    /**
     * <code>optional .training_module_info_message module_info_msg = 13;</code>
     */
    private void clearModuleInfoMsg() {  moduleInfoMsg_ = null;
      bitField0_ = (bitField0_ & ~0x00000020);
    }

    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * Protobuf type {@code training_message}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message, Builder> implements
        // @@protoc_insertion_point(builder_implements:training_message)
        nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_messageOrBuilder {
      // Construct using nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <code>required .service_type_index service_type = 1 [default = enum_SERVICE_TYPE_INDEX_TRAINING];</code>
       * @return Whether the serviceType field is set.
       */
      @java.lang.Override
      public boolean hasServiceType() {
        return instance.hasServiceType();
      }
      /**
       * <code>required .service_type_index service_type = 1 [default = enum_SERVICE_TYPE_INDEX_TRAINING];</code>
       * @return The serviceType.
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.service_type_index getServiceType() {
        return instance.getServiceType();
      }
      /**
       * <code>required .service_type_index service_type = 1 [default = enum_SERVICE_TYPE_INDEX_TRAINING];</code>
       * @param value The enum numeric value on the wire for serviceType to set.
       * @return This builder for chaining.
       */
      public Builder setServiceType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.service_type_index value) {
        copyOnWrite();
        instance.setServiceType(value);
        return this;
      }
      /**
       * <code>required .service_type_index service_type = 1 [default = enum_SERVICE_TYPE_INDEX_TRAINING];</code>
       * @return This builder for chaining.
       */
      public Builder clearServiceType() {
        copyOnWrite();
        instance.clearServiceType();
        return this;
      }

      /**
       * <code>required .SERVICE_OPERATE_TYPE operate_type = 2 [default = enum_SERVICE_OPERATE_TYPE_NONE];</code>
       * @return Whether the operateType field is set.
       */
      @java.lang.Override
      public boolean hasOperateType() {
        return instance.hasOperateType();
      }
      /**
       * <code>required .SERVICE_OPERATE_TYPE operate_type = 2 [default = enum_SERVICE_OPERATE_TYPE_NONE];</code>
       * @return The operateType.
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.SERVICE_OPERATE_TYPE getOperateType() {
        return instance.getOperateType();
      }
      /**
       * <code>required .SERVICE_OPERATE_TYPE operate_type = 2 [default = enum_SERVICE_OPERATE_TYPE_NONE];</code>
       * @param value The enum numeric value on the wire for operateType to set.
       * @return This builder for chaining.
       */
      public Builder setOperateType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.SERVICE_OPERATE_TYPE value) {
        copyOnWrite();
        instance.setOperateType(value);
        return this;
      }
      /**
       * <code>required .SERVICE_OPERATE_TYPE operate_type = 2 [default = enum_SERVICE_OPERATE_TYPE_NONE];</code>
       * @return This builder for chaining.
       */
      public Builder clearOperateType() {
        copyOnWrite();
        instance.clearOperateType();
        return this;
      }

      /**
       * <code>required .TRAINING_SUB_OPERATE_TYPE training_sub_operate_type = 3 [default = enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE];</code>
       * @return Whether the trainingSubOperateType field is set.
       */
      @java.lang.Override
      public boolean hasTrainingSubOperateType() {
        return instance.hasTrainingSubOperateType();
      }
      /**
       * <code>required .TRAINING_SUB_OPERATE_TYPE training_sub_operate_type = 3 [default = enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE];</code>
       * @return The trainingSubOperateType.
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE getTrainingSubOperateType() {
        return instance.getTrainingSubOperateType();
      }
      /**
       * <code>required .TRAINING_SUB_OPERATE_TYPE training_sub_operate_type = 3 [default = enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE];</code>
       * @param value The enum numeric value on the wire for trainingSubOperateType to set.
       * @return This builder for chaining.
       */
      public Builder setTrainingSubOperateType(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE value) {
        copyOnWrite();
        instance.setTrainingSubOperateType(value);
        return this;
      }
      /**
       * <code>required .TRAINING_SUB_OPERATE_TYPE training_sub_operate_type = 3 [default = enum_TRAINING_SUB_OPERATE_TYPE_INAVLIDE];</code>
       * @return This builder for chaining.
       */
      public Builder clearTrainingSubOperateType() {
        copyOnWrite();
        instance.clearTrainingSubOperateType();
        return this;
      }

      /**
       * <code>optional .training_data_message training_data_msg = 4;</code>
       */
      @java.lang.Override
      public boolean hasTrainingDataMsg() {
        return instance.hasTrainingDataMsg();
      }
      /**
       * <code>optional .training_data_message training_data_msg = 4;</code>
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message getTrainingDataMsg() {
        return instance.getTrainingDataMsg();
      }
      /**
       * <code>optional .training_data_message training_data_msg = 4;</code>
       */
      public Builder setTrainingDataMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message value) {
        copyOnWrite();
        instance.setTrainingDataMsg(value);
        return this;
        }
      /**
       * <code>optional .training_data_message training_data_msg = 4;</code>
       */
      public Builder setTrainingDataMsg(
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message.Builder builderForValue) {
        copyOnWrite();
        instance.setTrainingDataMsg(builderForValue.build());
        return this;
      }
      /**
       * <code>optional .training_data_message training_data_msg = 4;</code>
       */
      public Builder mergeTrainingDataMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_data_message value) {
        copyOnWrite();
        instance.mergeTrainingDataMsg(value);
        return this;
      }
      /**
       * <code>optional .training_data_message training_data_msg = 4;</code>
       */
      public Builder clearTrainingDataMsg() {  copyOnWrite();
        instance.clearTrainingDataMsg();
        return this;
      }

      /**
       * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
       */
      @java.lang.Override
      public boolean hasTrainingListGetMsg() {
        return instance.hasTrainingListGetMsg();
      }
      /**
       * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message getTrainingListGetMsg() {
        return instance.getTrainingListGetMsg();
      }
      /**
       * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
       */
      public Builder setTrainingListGetMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message value) {
        copyOnWrite();
        instance.setTrainingListGetMsg(value);
        return this;
        }
      /**
       * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
       */
      public Builder setTrainingListGetMsg(
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message.Builder builderForValue) {
        copyOnWrite();
        instance.setTrainingListGetMsg(builderForValue.build());
        return this;
      }
      /**
       * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
       */
      public Builder mergeTrainingListGetMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.file_list_get_message value) {
        copyOnWrite();
        instance.mergeTrainingListGetMsg(value);
        return this;
      }
      /**
       * <code>optional .file_list_get_message training_list_get_msg = 5;</code>
       */
      public Builder clearTrainingListGetMsg() {  copyOnWrite();
        instance.clearTrainingListGetMsg();
        return this;
      }

      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      @java.lang.Override
      public java.util.List<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message> getTrainingListMsgList() {
        return java.util.Collections.unmodifiableList(
            instance.getTrainingListMsgList());
      }
      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      @java.lang.Override
      public int getTrainingListMsgCount() {
        return instance.getTrainingListMsgCount();
      }/**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message getTrainingListMsg(int index) {
        return instance.getTrainingListMsg(index);
      }
      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      public Builder setTrainingListMsg(
          int index, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message value) {
        copyOnWrite();
        instance.setTrainingListMsg(index, value);
        return this;
      }
      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      public Builder setTrainingListMsg(
          int index, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message.Builder builderForValue) {
        copyOnWrite();
        instance.setTrainingListMsg(index,
            builderForValue.build());
        return this;
      }
      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      public Builder addTrainingListMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message value) {
        copyOnWrite();
        instance.addTrainingListMsg(value);
        return this;
      }
      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      public Builder addTrainingListMsg(
          int index, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message value) {
        copyOnWrite();
        instance.addTrainingListMsg(index, value);
        return this;
      }
      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      public Builder addTrainingListMsg(
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message.Builder builderForValue) {
        copyOnWrite();
        instance.addTrainingListMsg(builderForValue.build());
        return this;
      }
      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      public Builder addTrainingListMsg(
          int index, nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message.Builder builderForValue) {
        copyOnWrite();
        instance.addTrainingListMsg(index,
            builderForValue.build());
        return this;
      }
      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      public Builder addAllTrainingListMsg(
          java.lang.Iterable<? extends nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message> values) {
        copyOnWrite();
        instance.addAllTrainingListMsg(values);
        return this;
      }
      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      public Builder clearTrainingListMsg() {
        copyOnWrite();
        instance.clearTrainingListMsg();
        return this;
      }
      /**
       * <code>repeated .training_list_message training_list_msg = 6;</code>
       */
      public Builder removeTrainingListMsg(int index) {
        copyOnWrite();
        instance.removeTrainingListMsg(index);
        return this;
      }

      /**
       * <code>optional .training_module_info_message module_info_msg = 13;</code>
       */
      @java.lang.Override
      public boolean hasModuleInfoMsg() {
        return instance.hasModuleInfoMsg();
      }
      /**
       * <code>optional .training_module_info_message module_info_msg = 13;</code>
       */
      @java.lang.Override
      public nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message getModuleInfoMsg() {
        return instance.getModuleInfoMsg();
      }
      /**
       * <code>optional .training_module_info_message module_info_msg = 13;</code>
       */
      public Builder setModuleInfoMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message value) {
        copyOnWrite();
        instance.setModuleInfoMsg(value);
        return this;
        }
      /**
       * <code>optional .training_module_info_message module_info_msg = 13;</code>
       */
      public Builder setModuleInfoMsg(
          nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message.Builder builderForValue) {
        copyOnWrite();
        instance.setModuleInfoMsg(builderForValue.build());
        return this;
      }
      /**
       * <code>optional .training_module_info_message module_info_msg = 13;</code>
       */
      public Builder mergeModuleInfoMsg(nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_module_info_message value) {
        copyOnWrite();
        instance.mergeModuleInfoMsg(value);
        return this;
      }
      /**
       * <code>optional .training_module_info_message module_info_msg = 13;</code>
       */
      public Builder clearModuleInfoMsg() {  copyOnWrite();
        instance.clearModuleInfoMsg();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:training_message)
    }
    private byte memoizedIsInitialized = 2;
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "serviceType_",
              nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.service_type_index.internalGetVerifier(),
              "operateType_",
              nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Common.SERVICE_OPERATE_TYPE.internalGetVerifier(),
              "trainingSubOperateType_",
              nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.TRAINING_SUB_OPERATE_TYPE.internalGetVerifier(),
              "trainingDataMsg_",
              "trainingListGetMsg_",
              "trainingListMsg_",
              nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_list_message.class,
              "moduleInfoMsg_",
            };
            java.lang.String info =
                "\u0001\u0007\u0000\u0001\u0001\r\u0007\u0000\u0001\u0004\u0001\u150c\u0000\u0002" +
                "\u150c\u0001\u0003\u150c\u0002\u0004\u1409\u0003\u0005\u1009\u0004\u0006\u001b\r" +
                "\u1009\u0005";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message> parser = PARSER;
          if (parser == null) {
            synchronized (nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return memoizedIsInitialized;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        memoizedIsInitialized = (byte) (arg0 == null ? 0 : 1);
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:training_message)
    private static final nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message DEFAULT_INSTANCE;
    static {
      training_message defaultInstance = new training_message();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        training_message.class, defaultInstance);
    }

    public static nodomain.freeyourgadget.gadgetbridge.proto.igpsport.Training.training_message getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<training_message> PARSER;

    public static com.google.protobuf.Parser<training_message> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }


  static {
  }

  // @@protoc_insertion_point(outer_class_scope)
}
