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

#ifndef GOOGLE_PROTOBUF_INCLUDED_midi_5finternal_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_midi_5finternal_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3015000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 3015008 < PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/port_undef.inc>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_table_driven.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/metadata_lite.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
#include <google/protobuf/extension_set.h>  // IWYU pragma: export
#include <google/protobuf/unknown_field_set.h>
#include <google/protobuf/descriptor.pb.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
#define PROTOBUF_INTERNAL_EXPORT_midi_5finternal_2eproto
PROTOBUF_NAMESPACE_OPEN
namespace internal {
class AnyMetadata;
}  // namespace internal
PROTOBUF_NAMESPACE_CLOSE

// Internal implementation detail -- do not use these members.
struct TableStruct_midi_5finternal_2eproto {
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::AuxiliaryParseTableField aux[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[8]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
  static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
  static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
};
extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_midi_5finternal_2eproto;
::PROTOBUF_NAMESPACE_ID::Metadata descriptor_table_midi_5finternal_2eproto_metadata_getter(int index);
namespace midi {
class ContinuousFeature;
struct ContinuousFeatureDefaultTypeInternal;
extern ContinuousFeatureDefaultTypeInternal _ContinuousFeature_default_instance_;
class Dataset;
struct DatasetDefaultTypeInternal;
extern DatasetDefaultTypeInternal _Dataset_default_instance_;
class Dataset_Item;
struct Dataset_ItemDefaultTypeInternal;
extern Dataset_ItemDefaultTypeInternal _Dataset_Item_default_instance_;
class GenreData;
struct GenreDataDefaultTypeInternal;
extern GenreDataDefaultTypeInternal _GenreData_default_instance_;
class ModelMetadata;
struct ModelMetadataDefaultTypeInternal;
extern ModelMetadataDefaultTypeInternal _ModelMetadata_default_instance_;
class Note;
struct NoteDefaultTypeInternal;
extern NoteDefaultTypeInternal _Note_default_instance_;
class TrackFeatures;
struct TrackFeaturesDefaultTypeInternal;
extern TrackFeaturesDefaultTypeInternal _TrackFeatures_default_instance_;
class ValidTrack;
struct ValidTrackDefaultTypeInternal;
extern ValidTrackDefaultTypeInternal _ValidTrack_default_instance_;
}  // namespace midi
PROTOBUF_NAMESPACE_OPEN
template<> ::midi::ContinuousFeature* Arena::CreateMaybeMessage<::midi::ContinuousFeature>(Arena*);
template<> ::midi::Dataset* Arena::CreateMaybeMessage<::midi::Dataset>(Arena*);
template<> ::midi::Dataset_Item* Arena::CreateMaybeMessage<::midi::Dataset_Item>(Arena*);
template<> ::midi::GenreData* Arena::CreateMaybeMessage<::midi::GenreData>(Arena*);
template<> ::midi::ModelMetadata* Arena::CreateMaybeMessage<::midi::ModelMetadata>(Arena*);
template<> ::midi::Note* Arena::CreateMaybeMessage<::midi::Note>(Arena*);
template<> ::midi::TrackFeatures* Arena::CreateMaybeMessage<::midi::TrackFeatures>(Arena*);
template<> ::midi::ValidTrack* Arena::CreateMaybeMessage<::midi::ValidTrack>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace midi {

// ===================================================================

class ContinuousFeature PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:midi.ContinuousFeature) */ {
 public:
  inline ContinuousFeature() : ContinuousFeature(nullptr) {}
  virtual ~ContinuousFeature();
  explicit constexpr ContinuousFeature(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ContinuousFeature(const ContinuousFeature& from);
  ContinuousFeature(ContinuousFeature&& from) noexcept
    : ContinuousFeature() {
    *this = ::std::move(from);
  }

  inline ContinuousFeature& operator=(const ContinuousFeature& from) {
    CopyFrom(from);
    return *this;
  }
  inline ContinuousFeature& operator=(ContinuousFeature&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ContinuousFeature& default_instance() {
    return *internal_default_instance();
  }
  static inline const ContinuousFeature* internal_default_instance() {
    return reinterpret_cast<const ContinuousFeature*>(
               &_ContinuousFeature_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    0;

  friend void swap(ContinuousFeature& a, ContinuousFeature& b) {
    a.Swap(&b);
  }
  inline void Swap(ContinuousFeature* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ContinuousFeature* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline ContinuousFeature* New() const final {
    return CreateMaybeMessage<ContinuousFeature>(nullptr);
  }

  ContinuousFeature* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<ContinuousFeature>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const ContinuousFeature& from);
  void MergeFrom(const ContinuousFeature& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ContinuousFeature* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "midi.ContinuousFeature";
  }
  protected:
  explicit ContinuousFeature(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    return ::descriptor_table_midi_5finternal_2eproto_metadata_getter(kIndexInFileMessages);
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kAvPolyphonyFieldNumber = 1,
    kAvSilenceFieldNumber = 2,
    kNoteDurationFieldNumber = 3,
    kNoteDurationNormFieldNumber = 4,
  };
  // optional float av_polyphony = 1;
  bool has_av_polyphony() const;
  private:
  bool _internal_has_av_polyphony() const;
  public:
  void clear_av_polyphony();
  float av_polyphony() const;
  void set_av_polyphony(float value);
  private:
  float _internal_av_polyphony() const;
  void _internal_set_av_polyphony(float value);
  public:

  // optional float av_silence = 2;
  bool has_av_silence() const;
  private:
  bool _internal_has_av_silence() const;
  public:
  void clear_av_silence();
  float av_silence() const;
  void set_av_silence(float value);
  private:
  float _internal_av_silence() const;
  void _internal_set_av_silence(float value);
  public:

  // optional float note_duration = 3;
  bool has_note_duration() const;
  private:
  bool _internal_has_note_duration() const;
  public:
  void clear_note_duration();
  float note_duration() const;
  void set_note_duration(float value);
  private:
  float _internal_note_duration() const;
  void _internal_set_note_duration(float value);
  public:

  // optional float note_duration_norm = 4;
  bool has_note_duration_norm() const;
  private:
  bool _internal_has_note_duration_norm() const;
  public:
  void clear_note_duration_norm();
  float note_duration_norm() const;
  void set_note_duration_norm(float value);
  private:
  float _internal_note_duration_norm() const;
  void _internal_set_note_duration_norm(float value);
  public:

  // @@protoc_insertion_point(class_scope:midi.ContinuousFeature)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  float av_polyphony_;
  float av_silence_;
  float note_duration_;
  float note_duration_norm_;
  friend struct ::TableStruct_midi_5finternal_2eproto;
};
// -------------------------------------------------------------------

class TrackFeatures PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:midi.TrackFeatures) */ {
 public:
  inline TrackFeatures() : TrackFeatures(nullptr) {}
  virtual ~TrackFeatures();
  explicit constexpr TrackFeatures(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  TrackFeatures(const TrackFeatures& from);
  TrackFeatures(TrackFeatures&& from) noexcept
    : TrackFeatures() {
    *this = ::std::move(from);
  }

  inline TrackFeatures& operator=(const TrackFeatures& from) {
    CopyFrom(from);
    return *this;
  }
  inline TrackFeatures& operator=(TrackFeatures&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const TrackFeatures& default_instance() {
    return *internal_default_instance();
  }
  static inline const TrackFeatures* internal_default_instance() {
    return reinterpret_cast<const TrackFeatures*>(
               &_TrackFeatures_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    1;

  friend void swap(TrackFeatures& a, TrackFeatures& b) {
    a.Swap(&b);
  }
  inline void Swap(TrackFeatures* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(TrackFeatures* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline TrackFeatures* New() const final {
    return CreateMaybeMessage<TrackFeatures>(nullptr);
  }

  TrackFeatures* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<TrackFeatures>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const TrackFeatures& from);
  void MergeFrom(const TrackFeatures& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(TrackFeatures* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "midi.TrackFeatures";
  }
  protected:
  explicit TrackFeatures(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    return ::descriptor_table_midi_5finternal_2eproto_metadata_getter(kIndexInFileMessages);
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kPolyphonyDistributionFieldNumber = 15,
    kGenreStrFieldNumber = 10,
    kMinPitchFieldNumber = 1,
    kMaxPitchFieldNumber = 2,
    kAvPolyphonyFieldNumber = 3,
    kNoteDensityFieldNumber = 4,
    kNoteDensityV2FieldNumber = 5,
    kMaxPolyphonyFieldNumber = 6,
    kShouldPruneFieldNumber = 7,
    kOrderFieldNumber = 8,
    kNoteDurationFieldNumber = 9,
    kMinPolyphonyQFieldNumber = 11,
    kMaxPolyphonyQFieldNumber = 12,
    kMinNoteDurationQFieldNumber = 13,
    kMaxNoteDurationQFieldNumber = 14,
    kNoteDensityValueFieldNumber = 16,
  };
  // repeated int32 polyphony_distribution = 15;
  int polyphony_distribution_size() const;
  private:
  int _internal_polyphony_distribution_size() const;
  public:
  void clear_polyphony_distribution();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_polyphony_distribution(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_polyphony_distribution() const;
  void _internal_add_polyphony_distribution(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_polyphony_distribution();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 polyphony_distribution(int index) const;
  void set_polyphony_distribution(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_polyphony_distribution(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      polyphony_distribution() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_polyphony_distribution();

  // optional string genre_str = 10;
  bool has_genre_str() const;
  private:
  bool _internal_has_genre_str() const;
  public:
  void clear_genre_str();
  const std::string& genre_str() const;
  void set_genre_str(const std::string& value);
  void set_genre_str(std::string&& value);
  void set_genre_str(const char* value);
  void set_genre_str(const char* value, size_t size);
  std::string* mutable_genre_str();
  std::string* release_genre_str();
  void set_allocated_genre_str(std::string* genre_str);
  private:
  const std::string& _internal_genre_str() const;
  void _internal_set_genre_str(const std::string& value);
  std::string* _internal_mutable_genre_str();
  public:

  // optional int32 min_pitch = 1;
  bool has_min_pitch() const;
  private:
  bool _internal_has_min_pitch() const;
  public:
  void clear_min_pitch();
  ::PROTOBUF_NAMESPACE_ID::int32 min_pitch() const;
  void set_min_pitch(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_min_pitch() const;
  void _internal_set_min_pitch(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 max_pitch = 2;
  bool has_max_pitch() const;
  private:
  bool _internal_has_max_pitch() const;
  public:
  void clear_max_pitch();
  ::PROTOBUF_NAMESPACE_ID::int32 max_pitch() const;
  void set_max_pitch(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_pitch() const;
  void _internal_set_max_pitch(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional float av_polyphony = 3;
  bool has_av_polyphony() const;
  private:
  bool _internal_has_av_polyphony() const;
  public:
  void clear_av_polyphony();
  float av_polyphony() const;
  void set_av_polyphony(float value);
  private:
  float _internal_av_polyphony() const;
  void _internal_set_av_polyphony(float value);
  public:

  // optional int32 note_density = 4;
  bool has_note_density() const;
  private:
  bool _internal_has_note_density() const;
  public:
  void clear_note_density();
  ::PROTOBUF_NAMESPACE_ID::int32 note_density() const;
  void set_note_density(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_note_density() const;
  void _internal_set_note_density(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 note_density_v2 = 5;
  bool has_note_density_v2() const;
  private:
  bool _internal_has_note_density_v2() const;
  public:
  void clear_note_density_v2();
  ::PROTOBUF_NAMESPACE_ID::int32 note_density_v2() const;
  void set_note_density_v2(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_note_density_v2() const;
  void _internal_set_note_density_v2(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 max_polyphony = 6;
  bool has_max_polyphony() const;
  private:
  bool _internal_has_max_polyphony() const;
  public:
  void clear_max_polyphony();
  ::PROTOBUF_NAMESPACE_ID::int32 max_polyphony() const;
  void set_max_polyphony(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_polyphony() const;
  void _internal_set_max_polyphony(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional bool should_prune = 7;
  bool has_should_prune() const;
  private:
  bool _internal_has_should_prune() const;
  public:
  void clear_should_prune();
  bool should_prune() const;
  void set_should_prune(bool value);
  private:
  bool _internal_should_prune() const;
  void _internal_set_should_prune(bool value);
  public:

  // optional int32 order = 8;
  bool has_order() const;
  private:
  bool _internal_has_order() const;
  public:
  void clear_order();
  ::PROTOBUF_NAMESPACE_ID::int32 order() const;
  void set_order(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_order() const;
  void _internal_set_order(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional float note_duration = 9;
  bool has_note_duration() const;
  private:
  bool _internal_has_note_duration() const;
  public:
  void clear_note_duration();
  float note_duration() const;
  void set_note_duration(float value);
  private:
  float _internal_note_duration() const;
  void _internal_set_note_duration(float value);
  public:

  // optional int32 min_polyphony_q = 11;
  bool has_min_polyphony_q() const;
  private:
  bool _internal_has_min_polyphony_q() const;
  public:
  void clear_min_polyphony_q();
  ::PROTOBUF_NAMESPACE_ID::int32 min_polyphony_q() const;
  void set_min_polyphony_q(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_min_polyphony_q() const;
  void _internal_set_min_polyphony_q(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 max_polyphony_q = 12;
  bool has_max_polyphony_q() const;
  private:
  bool _internal_has_max_polyphony_q() const;
  public:
  void clear_max_polyphony_q();
  ::PROTOBUF_NAMESPACE_ID::int32 max_polyphony_q() const;
  void set_max_polyphony_q(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_polyphony_q() const;
  void _internal_set_max_polyphony_q(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 min_note_duration_q = 13;
  bool has_min_note_duration_q() const;
  private:
  bool _internal_has_min_note_duration_q() const;
  public:
  void clear_min_note_duration_q();
  ::PROTOBUF_NAMESPACE_ID::int32 min_note_duration_q() const;
  void set_min_note_duration_q(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_min_note_duration_q() const;
  void _internal_set_min_note_duration_q(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 max_note_duration_q = 14;
  bool has_max_note_duration_q() const;
  private:
  bool _internal_has_max_note_duration_q() const;
  public:
  void clear_max_note_duration_q();
  ::PROTOBUF_NAMESPACE_ID::int32 max_note_duration_q() const;
  void set_max_note_duration_q(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_note_duration_q() const;
  void _internal_set_max_note_duration_q(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional float note_density_value = 16;
  bool has_note_density_value() const;
  private:
  bool _internal_has_note_density_value() const;
  public:
  void clear_note_density_value();
  float note_density_value() const;
  void set_note_density_value(float value);
  private:
  float _internal_note_density_value() const;
  void _internal_set_note_density_value(float value);
  public:

  // @@protoc_insertion_point(class_scope:midi.TrackFeatures)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > polyphony_distribution_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr genre_str_;
  ::PROTOBUF_NAMESPACE_ID::int32 min_pitch_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_pitch_;
  float av_polyphony_;
  ::PROTOBUF_NAMESPACE_ID::int32 note_density_;
  ::PROTOBUF_NAMESPACE_ID::int32 note_density_v2_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_polyphony_;
  bool should_prune_;
  ::PROTOBUF_NAMESPACE_ID::int32 order_;
  float note_duration_;
  ::PROTOBUF_NAMESPACE_ID::int32 min_polyphony_q_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_polyphony_q_;
  ::PROTOBUF_NAMESPACE_ID::int32 min_note_duration_q_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_note_duration_q_;
  float note_density_value_;
  friend struct ::TableStruct_midi_5finternal_2eproto;
};
// -------------------------------------------------------------------

class Note PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:midi.Note) */ {
 public:
  inline Note() : Note(nullptr) {}
  virtual ~Note();
  explicit constexpr Note(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Note(const Note& from);
  Note(Note&& from) noexcept
    : Note() {
    *this = ::std::move(from);
  }

  inline Note& operator=(const Note& from) {
    CopyFrom(from);
    return *this;
  }
  inline Note& operator=(Note&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Note& default_instance() {
    return *internal_default_instance();
  }
  static inline const Note* internal_default_instance() {
    return reinterpret_cast<const Note*>(
               &_Note_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    2;

  friend void swap(Note& a, Note& b) {
    a.Swap(&b);
  }
  inline void Swap(Note* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Note* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline Note* New() const final {
    return CreateMaybeMessage<Note>(nullptr);
  }

  Note* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Note>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Note& from);
  void MergeFrom(const Note& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Note* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "midi.Note";
  }
  protected:
  explicit Note(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    return ::descriptor_table_midi_5finternal_2eproto_metadata_getter(kIndexInFileMessages);
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kStartFieldNumber = 1,
    kEndFieldNumber = 2,
    kPitchFieldNumber = 3,
  };
  // optional int32 start = 1;
  bool has_start() const;
  private:
  bool _internal_has_start() const;
  public:
  void clear_start();
  ::PROTOBUF_NAMESPACE_ID::int32 start() const;
  void set_start(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_start() const;
  void _internal_set_start(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 end = 2;
  bool has_end() const;
  private:
  bool _internal_has_end() const;
  public:
  void clear_end();
  ::PROTOBUF_NAMESPACE_ID::int32 end() const;
  void set_end(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_end() const;
  void _internal_set_end(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 pitch = 3;
  bool has_pitch() const;
  private:
  bool _internal_has_pitch() const;
  public:
  void clear_pitch();
  ::PROTOBUF_NAMESPACE_ID::int32 pitch() const;
  void set_pitch(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_pitch() const;
  void _internal_set_pitch(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // @@protoc_insertion_point(class_scope:midi.Note)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::int32 start_;
  ::PROTOBUF_NAMESPACE_ID::int32 end_;
  ::PROTOBUF_NAMESPACE_ID::int32 pitch_;
  friend struct ::TableStruct_midi_5finternal_2eproto;
};
// -------------------------------------------------------------------

class ValidTrack PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:midi.ValidTrack) */ {
 public:
  inline ValidTrack() : ValidTrack(nullptr) {}
  virtual ~ValidTrack();
  explicit constexpr ValidTrack(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ValidTrack(const ValidTrack& from);
  ValidTrack(ValidTrack&& from) noexcept
    : ValidTrack() {
    *this = ::std::move(from);
  }

  inline ValidTrack& operator=(const ValidTrack& from) {
    CopyFrom(from);
    return *this;
  }
  inline ValidTrack& operator=(ValidTrack&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ValidTrack& default_instance() {
    return *internal_default_instance();
  }
  static inline const ValidTrack* internal_default_instance() {
    return reinterpret_cast<const ValidTrack*>(
               &_ValidTrack_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    3;

  friend void swap(ValidTrack& a, ValidTrack& b) {
    a.Swap(&b);
  }
  inline void Swap(ValidTrack* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ValidTrack* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline ValidTrack* New() const final {
    return CreateMaybeMessage<ValidTrack>(nullptr);
  }

  ValidTrack* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<ValidTrack>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const ValidTrack& from);
  void MergeFrom(const ValidTrack& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ValidTrack* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "midi.ValidTrack";
  }
  protected:
  explicit ValidTrack(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    return ::descriptor_table_midi_5finternal_2eproto_metadata_getter(kIndexInFileMessages);
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kTracksFieldNumber = 1,
  };
  // repeated int32 tracks = 1;
  int tracks_size() const;
  private:
  int _internal_tracks_size() const;
  public:
  void clear_tracks();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_tracks(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_tracks() const;
  void _internal_add_tracks(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_tracks();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 tracks(int index) const;
  void set_tracks(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_tracks(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      tracks() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_tracks();

  // @@protoc_insertion_point(class_scope:midi.ValidTrack)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > tracks_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_midi_5finternal_2eproto;
};
// -------------------------------------------------------------------

class Dataset_Item PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:midi.Dataset.Item) */ {
 public:
  inline Dataset_Item() : Dataset_Item(nullptr) {}
  virtual ~Dataset_Item();
  explicit constexpr Dataset_Item(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Dataset_Item(const Dataset_Item& from);
  Dataset_Item(Dataset_Item&& from) noexcept
    : Dataset_Item() {
    *this = ::std::move(from);
  }

  inline Dataset_Item& operator=(const Dataset_Item& from) {
    CopyFrom(from);
    return *this;
  }
  inline Dataset_Item& operator=(Dataset_Item&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Dataset_Item& default_instance() {
    return *internal_default_instance();
  }
  static inline const Dataset_Item* internal_default_instance() {
    return reinterpret_cast<const Dataset_Item*>(
               &_Dataset_Item_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    4;

  friend void swap(Dataset_Item& a, Dataset_Item& b) {
    a.Swap(&b);
  }
  inline void Swap(Dataset_Item* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Dataset_Item* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline Dataset_Item* New() const final {
    return CreateMaybeMessage<Dataset_Item>(nullptr);
  }

  Dataset_Item* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Dataset_Item>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Dataset_Item& from);
  void MergeFrom(const Dataset_Item& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Dataset_Item* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "midi.Dataset.Item";
  }
  protected:
  explicit Dataset_Item(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    return ::descriptor_table_midi_5finternal_2eproto_metadata_getter(kIndexInFileMessages);
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kStartFieldNumber = 1,
    kEndFieldNumber = 2,
    kSrcSizeFieldNumber = 3,
  };
  // required uint64 start = 1;
  bool has_start() const;
  private:
  bool _internal_has_start() const;
  public:
  void clear_start();
  ::PROTOBUF_NAMESPACE_ID::uint64 start() const;
  void set_start(::PROTOBUF_NAMESPACE_ID::uint64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::uint64 _internal_start() const;
  void _internal_set_start(::PROTOBUF_NAMESPACE_ID::uint64 value);
  public:

  // required uint64 end = 2;
  bool has_end() const;
  private:
  bool _internal_has_end() const;
  public:
  void clear_end();
  ::PROTOBUF_NAMESPACE_ID::uint64 end() const;
  void set_end(::PROTOBUF_NAMESPACE_ID::uint64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::uint64 _internal_end() const;
  void _internal_set_end(::PROTOBUF_NAMESPACE_ID::uint64 value);
  public:

  // required uint64 src_size = 3;
  bool has_src_size() const;
  private:
  bool _internal_has_src_size() const;
  public:
  void clear_src_size();
  ::PROTOBUF_NAMESPACE_ID::uint64 src_size() const;
  void set_src_size(::PROTOBUF_NAMESPACE_ID::uint64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::uint64 _internal_src_size() const;
  void _internal_set_src_size(::PROTOBUF_NAMESPACE_ID::uint64 value);
  public:

  // @@protoc_insertion_point(class_scope:midi.Dataset.Item)
 private:
  class _Internal;

  // helper for ByteSizeLong()
  size_t RequiredFieldsByteSizeFallback() const;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::uint64 start_;
  ::PROTOBUF_NAMESPACE_ID::uint64 end_;
  ::PROTOBUF_NAMESPACE_ID::uint64 src_size_;
  friend struct ::TableStruct_midi_5finternal_2eproto;
};
// -------------------------------------------------------------------

class Dataset PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:midi.Dataset) */ {
 public:
  inline Dataset() : Dataset(nullptr) {}
  virtual ~Dataset();
  explicit constexpr Dataset(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  Dataset(const Dataset& from);
  Dataset(Dataset&& from) noexcept
    : Dataset() {
    *this = ::std::move(from);
  }

  inline Dataset& operator=(const Dataset& from) {
    CopyFrom(from);
    return *this;
  }
  inline Dataset& operator=(Dataset&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Dataset& default_instance() {
    return *internal_default_instance();
  }
  static inline const Dataset* internal_default_instance() {
    return reinterpret_cast<const Dataset*>(
               &_Dataset_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    5;

  friend void swap(Dataset& a, Dataset& b) {
    a.Swap(&b);
  }
  inline void Swap(Dataset* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Dataset* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline Dataset* New() const final {
    return CreateMaybeMessage<Dataset>(nullptr);
  }

  Dataset* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Dataset>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Dataset& from);
  void MergeFrom(const Dataset& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Dataset* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "midi.Dataset";
  }
  protected:
  explicit Dataset(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    return ::descriptor_table_midi_5finternal_2eproto_metadata_getter(kIndexInFileMessages);
  }

  public:

  // nested types ----------------------------------------------------

  typedef Dataset_Item Item;

  // accessors -------------------------------------------------------

  enum : int {
    kTrainFieldNumber = 1,
    kValidFieldNumber = 2,
    kTestFieldNumber = 3,
  };
  // repeated .midi.Dataset.Item train = 1;
  int train_size() const;
  private:
  int _internal_train_size() const;
  public:
  void clear_train();
  ::midi::Dataset_Item* mutable_train(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >*
      mutable_train();
  private:
  const ::midi::Dataset_Item& _internal_train(int index) const;
  ::midi::Dataset_Item* _internal_add_train();
  public:
  const ::midi::Dataset_Item& train(int index) const;
  ::midi::Dataset_Item* add_train();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >&
      train() const;

  // repeated .midi.Dataset.Item valid = 2;
  int valid_size() const;
  private:
  int _internal_valid_size() const;
  public:
  void clear_valid();
  ::midi::Dataset_Item* mutable_valid(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >*
      mutable_valid();
  private:
  const ::midi::Dataset_Item& _internal_valid(int index) const;
  ::midi::Dataset_Item* _internal_add_valid();
  public:
  const ::midi::Dataset_Item& valid(int index) const;
  ::midi::Dataset_Item* add_valid();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >&
      valid() const;

  // repeated .midi.Dataset.Item test = 3;
  int test_size() const;
  private:
  int _internal_test_size() const;
  public:
  void clear_test();
  ::midi::Dataset_Item* mutable_test(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >*
      mutable_test();
  private:
  const ::midi::Dataset_Item& _internal_test(int index) const;
  ::midi::Dataset_Item* _internal_add_test();
  public:
  const ::midi::Dataset_Item& test(int index) const;
  ::midi::Dataset_Item* add_test();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >&
      test() const;

  // @@protoc_insertion_point(class_scope:midi.Dataset)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item > train_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item > valid_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item > test_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_midi_5finternal_2eproto;
};
// -------------------------------------------------------------------

class ModelMetadata PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:midi.ModelMetadata) */ {
 public:
  inline ModelMetadata() : ModelMetadata(nullptr) {}
  virtual ~ModelMetadata();
  explicit constexpr ModelMetadata(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  ModelMetadata(const ModelMetadata& from);
  ModelMetadata(ModelMetadata&& from) noexcept
    : ModelMetadata() {
    *this = ::std::move(from);
  }

  inline ModelMetadata& operator=(const ModelMetadata& from) {
    CopyFrom(from);
    return *this;
  }
  inline ModelMetadata& operator=(ModelMetadata&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ModelMetadata& default_instance() {
    return *internal_default_instance();
  }
  static inline const ModelMetadata* internal_default_instance() {
    return reinterpret_cast<const ModelMetadata*>(
               &_ModelMetadata_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    6;

  friend void swap(ModelMetadata& a, ModelMetadata& b) {
    a.Swap(&b);
  }
  inline void Swap(ModelMetadata* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ModelMetadata* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline ModelMetadata* New() const final {
    return CreateMaybeMessage<ModelMetadata>(nullptr);
  }

  ModelMetadata* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<ModelMetadata>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const ModelMetadata& from);
  void MergeFrom(const ModelMetadata& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ModelMetadata* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "midi.ModelMetadata";
  }
  protected:
  explicit ModelMetadata(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    return ::descriptor_table_midi_5finternal_2eproto_metadata_getter(kIndexInFileMessages);
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kEncoderFieldNumber = 1,
    kNumLayersFieldNumber = 2,
    kNumHeadsFieldNumber = 3,
    kNumHiddenFieldNumber = 4,
    kModelDimFieldNumber = 5,
    kNewStateFieldNumber = 6,
  };
  // optional string encoder = 1;
  bool has_encoder() const;
  private:
  bool _internal_has_encoder() const;
  public:
  void clear_encoder();
  const std::string& encoder() const;
  void set_encoder(const std::string& value);
  void set_encoder(std::string&& value);
  void set_encoder(const char* value);
  void set_encoder(const char* value, size_t size);
  std::string* mutable_encoder();
  std::string* release_encoder();
  void set_allocated_encoder(std::string* encoder);
  private:
  const std::string& _internal_encoder() const;
  void _internal_set_encoder(const std::string& value);
  std::string* _internal_mutable_encoder();
  public:

  // optional int32 num_layers = 2;
  bool has_num_layers() const;
  private:
  bool _internal_has_num_layers() const;
  public:
  void clear_num_layers();
  ::PROTOBUF_NAMESPACE_ID::int32 num_layers() const;
  void set_num_layers(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_num_layers() const;
  void _internal_set_num_layers(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 num_heads = 3;
  bool has_num_heads() const;
  private:
  bool _internal_has_num_heads() const;
  public:
  void clear_num_heads();
  ::PROTOBUF_NAMESPACE_ID::int32 num_heads() const;
  void set_num_heads(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_num_heads() const;
  void _internal_set_num_heads(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 num_hidden = 4;
  bool has_num_hidden() const;
  private:
  bool _internal_has_num_hidden() const;
  public:
  void clear_num_hidden();
  ::PROTOBUF_NAMESPACE_ID::int32 num_hidden() const;
  void set_num_hidden(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_num_hidden() const;
  void _internal_set_num_hidden(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 model_dim = 5;
  bool has_model_dim() const;
  private:
  bool _internal_has_model_dim() const;
  public:
  void clear_model_dim();
  ::PROTOBUF_NAMESPACE_ID::int32 model_dim() const;
  void set_model_dim(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_model_dim() const;
  void _internal_set_model_dim(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional bool new_state = 6;
  bool has_new_state() const;
  private:
  bool _internal_has_new_state() const;
  public:
  void clear_new_state();
  bool new_state() const;
  void set_new_state(bool value);
  private:
  bool _internal_new_state() const;
  void _internal_set_new_state(bool value);
  public:

  // @@protoc_insertion_point(class_scope:midi.ModelMetadata)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr encoder_;
  ::PROTOBUF_NAMESPACE_ID::int32 num_layers_;
  ::PROTOBUF_NAMESPACE_ID::int32 num_heads_;
  ::PROTOBUF_NAMESPACE_ID::int32 num_hidden_;
  ::PROTOBUF_NAMESPACE_ID::int32 model_dim_;
  bool new_state_;
  friend struct ::TableStruct_midi_5finternal_2eproto;
};
// -------------------------------------------------------------------

class GenreData PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:midi.GenreData) */ {
 public:
  inline GenreData() : GenreData(nullptr) {}
  virtual ~GenreData();
  explicit constexpr GenreData(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

  GenreData(const GenreData& from);
  GenreData(GenreData&& from) noexcept
    : GenreData() {
    *this = ::std::move(from);
  }

  inline GenreData& operator=(const GenreData& from) {
    CopyFrom(from);
    return *this;
  }
  inline GenreData& operator=(GenreData&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const GenreData& default_instance() {
    return *internal_default_instance();
  }
  static inline const GenreData* internal_default_instance() {
    return reinterpret_cast<const GenreData*>(
               &_GenreData_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    7;

  friend void swap(GenreData& a, GenreData& b) {
    a.Swap(&b);
  }
  inline void Swap(GenreData* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(GenreData* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline GenreData* New() const final {
    return CreateMaybeMessage<GenreData>(nullptr);
  }

  GenreData* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<GenreData>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const GenreData& from);
  void MergeFrom(const GenreData& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(GenreData* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "midi.GenreData";
  }
  protected:
  explicit GenreData(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    return ::descriptor_table_midi_5finternal_2eproto_metadata_getter(kIndexInFileMessages);
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kDiscogsFieldNumber = 1,
    kLastfmFieldNumber = 2,
    kTagtraumFieldNumber = 3,
  };
  // optional string discogs = 1;
  bool has_discogs() const;
  private:
  bool _internal_has_discogs() const;
  public:
  void clear_discogs();
  const std::string& discogs() const;
  void set_discogs(const std::string& value);
  void set_discogs(std::string&& value);
  void set_discogs(const char* value);
  void set_discogs(const char* value, size_t size);
  std::string* mutable_discogs();
  std::string* release_discogs();
  void set_allocated_discogs(std::string* discogs);
  private:
  const std::string& _internal_discogs() const;
  void _internal_set_discogs(const std::string& value);
  std::string* _internal_mutable_discogs();
  public:

  // optional string lastfm = 2;
  bool has_lastfm() const;
  private:
  bool _internal_has_lastfm() const;
  public:
  void clear_lastfm();
  const std::string& lastfm() const;
  void set_lastfm(const std::string& value);
  void set_lastfm(std::string&& value);
  void set_lastfm(const char* value);
  void set_lastfm(const char* value, size_t size);
  std::string* mutable_lastfm();
  std::string* release_lastfm();
  void set_allocated_lastfm(std::string* lastfm);
  private:
  const std::string& _internal_lastfm() const;
  void _internal_set_lastfm(const std::string& value);
  std::string* _internal_mutable_lastfm();
  public:

  // optional string tagtraum = 3;
  bool has_tagtraum() const;
  private:
  bool _internal_has_tagtraum() const;
  public:
  void clear_tagtraum();
  const std::string& tagtraum() const;
  void set_tagtraum(const std::string& value);
  void set_tagtraum(std::string&& value);
  void set_tagtraum(const char* value);
  void set_tagtraum(const char* value, size_t size);
  std::string* mutable_tagtraum();
  std::string* release_tagtraum();
  void set_allocated_tagtraum(std::string* tagtraum);
  private:
  const std::string& _internal_tagtraum() const;
  void _internal_set_tagtraum(const std::string& value);
  std::string* _internal_mutable_tagtraum();
  public:

  // @@protoc_insertion_point(class_scope:midi.GenreData)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr discogs_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr lastfm_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr tagtraum_;
  friend struct ::TableStruct_midi_5finternal_2eproto;
};
// ===================================================================

static const int kMaxvalFieldNumber = 50001;
extern ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< ::google::protobuf::FieldOptions,
    ::PROTOBUF_NAMESPACE_ID::internal::PrimitiveTypeTraits< ::PROTOBUF_NAMESPACE_ID::int32 >, 5, false >
  maxval;
static const int kMinvalFieldNumber = 50002;
extern ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< ::google::protobuf::FieldOptions,
    ::PROTOBUF_NAMESPACE_ID::internal::PrimitiveTypeTraits< ::PROTOBUF_NAMESPACE_ID::int32 >, 5, false >
  minval;
static const int kFmaxvalFieldNumber = 50003;
extern ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< ::google::protobuf::FieldOptions,
    ::PROTOBUF_NAMESPACE_ID::internal::PrimitiveTypeTraits< float >, 2, false >
  fmaxval;
static const int kFminvalFieldNumber = 50004;
extern ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< ::google::protobuf::FieldOptions,
    ::PROTOBUF_NAMESPACE_ID::internal::PrimitiveTypeTraits< float >, 2, false >
  fminval;

// ===================================================================

#ifdef __GNUC__
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// ContinuousFeature

// optional float av_polyphony = 1;
inline bool ContinuousFeature::_internal_has_av_polyphony() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  return value;
}
inline bool ContinuousFeature::has_av_polyphony() const {
  return _internal_has_av_polyphony();
}
inline void ContinuousFeature::clear_av_polyphony() {
  av_polyphony_ = 0;
  _has_bits_[0] &= ~0x00000001u;
}
inline float ContinuousFeature::_internal_av_polyphony() const {
  return av_polyphony_;
}
inline float ContinuousFeature::av_polyphony() const {
  // @@protoc_insertion_point(field_get:midi.ContinuousFeature.av_polyphony)
  return _internal_av_polyphony();
}
inline void ContinuousFeature::_internal_set_av_polyphony(float value) {
  _has_bits_[0] |= 0x00000001u;
  av_polyphony_ = value;
}
inline void ContinuousFeature::set_av_polyphony(float value) {
  _internal_set_av_polyphony(value);
  // @@protoc_insertion_point(field_set:midi.ContinuousFeature.av_polyphony)
}

// optional float av_silence = 2;
inline bool ContinuousFeature::_internal_has_av_silence() const {
  bool value = (_has_bits_[0] & 0x00000002u) != 0;
  return value;
}
inline bool ContinuousFeature::has_av_silence() const {
  return _internal_has_av_silence();
}
inline void ContinuousFeature::clear_av_silence() {
  av_silence_ = 0;
  _has_bits_[0] &= ~0x00000002u;
}
inline float ContinuousFeature::_internal_av_silence() const {
  return av_silence_;
}
inline float ContinuousFeature::av_silence() const {
  // @@protoc_insertion_point(field_get:midi.ContinuousFeature.av_silence)
  return _internal_av_silence();
}
inline void ContinuousFeature::_internal_set_av_silence(float value) {
  _has_bits_[0] |= 0x00000002u;
  av_silence_ = value;
}
inline void ContinuousFeature::set_av_silence(float value) {
  _internal_set_av_silence(value);
  // @@protoc_insertion_point(field_set:midi.ContinuousFeature.av_silence)
}

// optional float note_duration = 3;
inline bool ContinuousFeature::_internal_has_note_duration() const {
  bool value = (_has_bits_[0] & 0x00000004u) != 0;
  return value;
}
inline bool ContinuousFeature::has_note_duration() const {
  return _internal_has_note_duration();
}
inline void ContinuousFeature::clear_note_duration() {
  note_duration_ = 0;
  _has_bits_[0] &= ~0x00000004u;
}
inline float ContinuousFeature::_internal_note_duration() const {
  return note_duration_;
}
inline float ContinuousFeature::note_duration() const {
  // @@protoc_insertion_point(field_get:midi.ContinuousFeature.note_duration)
  return _internal_note_duration();
}
inline void ContinuousFeature::_internal_set_note_duration(float value) {
  _has_bits_[0] |= 0x00000004u;
  note_duration_ = value;
}
inline void ContinuousFeature::set_note_duration(float value) {
  _internal_set_note_duration(value);
  // @@protoc_insertion_point(field_set:midi.ContinuousFeature.note_duration)
}

// optional float note_duration_norm = 4;
inline bool ContinuousFeature::_internal_has_note_duration_norm() const {
  bool value = (_has_bits_[0] & 0x00000008u) != 0;
  return value;
}
inline bool ContinuousFeature::has_note_duration_norm() const {
  return _internal_has_note_duration_norm();
}
inline void ContinuousFeature::clear_note_duration_norm() {
  note_duration_norm_ = 0;
  _has_bits_[0] &= ~0x00000008u;
}
inline float ContinuousFeature::_internal_note_duration_norm() const {
  return note_duration_norm_;
}
inline float ContinuousFeature::note_duration_norm() const {
  // @@protoc_insertion_point(field_get:midi.ContinuousFeature.note_duration_norm)
  return _internal_note_duration_norm();
}
inline void ContinuousFeature::_internal_set_note_duration_norm(float value) {
  _has_bits_[0] |= 0x00000008u;
  note_duration_norm_ = value;
}
inline void ContinuousFeature::set_note_duration_norm(float value) {
  _internal_set_note_duration_norm(value);
  // @@protoc_insertion_point(field_set:midi.ContinuousFeature.note_duration_norm)
}

// -------------------------------------------------------------------

// TrackFeatures

// optional int32 min_pitch = 1;
inline bool TrackFeatures::_internal_has_min_pitch() const {
  bool value = (_has_bits_[0] & 0x00000002u) != 0;
  return value;
}
inline bool TrackFeatures::has_min_pitch() const {
  return _internal_has_min_pitch();
}
inline void TrackFeatures::clear_min_pitch() {
  min_pitch_ = 0;
  _has_bits_[0] &= ~0x00000002u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_min_pitch() const {
  return min_pitch_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::min_pitch() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.min_pitch)
  return _internal_min_pitch();
}
inline void TrackFeatures::_internal_set_min_pitch(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000002u;
  min_pitch_ = value;
}
inline void TrackFeatures::set_min_pitch(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_min_pitch(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.min_pitch)
}

// optional int32 max_pitch = 2;
inline bool TrackFeatures::_internal_has_max_pitch() const {
  bool value = (_has_bits_[0] & 0x00000004u) != 0;
  return value;
}
inline bool TrackFeatures::has_max_pitch() const {
  return _internal_has_max_pitch();
}
inline void TrackFeatures::clear_max_pitch() {
  max_pitch_ = 0;
  _has_bits_[0] &= ~0x00000004u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_max_pitch() const {
  return max_pitch_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::max_pitch() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.max_pitch)
  return _internal_max_pitch();
}
inline void TrackFeatures::_internal_set_max_pitch(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000004u;
  max_pitch_ = value;
}
inline void TrackFeatures::set_max_pitch(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_pitch(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.max_pitch)
}

// optional float av_polyphony = 3;
inline bool TrackFeatures::_internal_has_av_polyphony() const {
  bool value = (_has_bits_[0] & 0x00000008u) != 0;
  return value;
}
inline bool TrackFeatures::has_av_polyphony() const {
  return _internal_has_av_polyphony();
}
inline void TrackFeatures::clear_av_polyphony() {
  av_polyphony_ = 0;
  _has_bits_[0] &= ~0x00000008u;
}
inline float TrackFeatures::_internal_av_polyphony() const {
  return av_polyphony_;
}
inline float TrackFeatures::av_polyphony() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.av_polyphony)
  return _internal_av_polyphony();
}
inline void TrackFeatures::_internal_set_av_polyphony(float value) {
  _has_bits_[0] |= 0x00000008u;
  av_polyphony_ = value;
}
inline void TrackFeatures::set_av_polyphony(float value) {
  _internal_set_av_polyphony(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.av_polyphony)
}

// optional int32 note_density = 4;
inline bool TrackFeatures::_internal_has_note_density() const {
  bool value = (_has_bits_[0] & 0x00000010u) != 0;
  return value;
}
inline bool TrackFeatures::has_note_density() const {
  return _internal_has_note_density();
}
inline void TrackFeatures::clear_note_density() {
  note_density_ = 0;
  _has_bits_[0] &= ~0x00000010u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_note_density() const {
  return note_density_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::note_density() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.note_density)
  return _internal_note_density();
}
inline void TrackFeatures::_internal_set_note_density(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000010u;
  note_density_ = value;
}
inline void TrackFeatures::set_note_density(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_note_density(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.note_density)
}

// optional int32 note_density_v2 = 5;
inline bool TrackFeatures::_internal_has_note_density_v2() const {
  bool value = (_has_bits_[0] & 0x00000020u) != 0;
  return value;
}
inline bool TrackFeatures::has_note_density_v2() const {
  return _internal_has_note_density_v2();
}
inline void TrackFeatures::clear_note_density_v2() {
  note_density_v2_ = 0;
  _has_bits_[0] &= ~0x00000020u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_note_density_v2() const {
  return note_density_v2_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::note_density_v2() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.note_density_v2)
  return _internal_note_density_v2();
}
inline void TrackFeatures::_internal_set_note_density_v2(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000020u;
  note_density_v2_ = value;
}
inline void TrackFeatures::set_note_density_v2(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_note_density_v2(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.note_density_v2)
}

// optional int32 max_polyphony = 6;
inline bool TrackFeatures::_internal_has_max_polyphony() const {
  bool value = (_has_bits_[0] & 0x00000040u) != 0;
  return value;
}
inline bool TrackFeatures::has_max_polyphony() const {
  return _internal_has_max_polyphony();
}
inline void TrackFeatures::clear_max_polyphony() {
  max_polyphony_ = 0;
  _has_bits_[0] &= ~0x00000040u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_max_polyphony() const {
  return max_polyphony_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::max_polyphony() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.max_polyphony)
  return _internal_max_polyphony();
}
inline void TrackFeatures::_internal_set_max_polyphony(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000040u;
  max_polyphony_ = value;
}
inline void TrackFeatures::set_max_polyphony(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_polyphony(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.max_polyphony)
}

// optional bool should_prune = 7;
inline bool TrackFeatures::_internal_has_should_prune() const {
  bool value = (_has_bits_[0] & 0x00000080u) != 0;
  return value;
}
inline bool TrackFeatures::has_should_prune() const {
  return _internal_has_should_prune();
}
inline void TrackFeatures::clear_should_prune() {
  should_prune_ = false;
  _has_bits_[0] &= ~0x00000080u;
}
inline bool TrackFeatures::_internal_should_prune() const {
  return should_prune_;
}
inline bool TrackFeatures::should_prune() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.should_prune)
  return _internal_should_prune();
}
inline void TrackFeatures::_internal_set_should_prune(bool value) {
  _has_bits_[0] |= 0x00000080u;
  should_prune_ = value;
}
inline void TrackFeatures::set_should_prune(bool value) {
  _internal_set_should_prune(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.should_prune)
}

// optional int32 order = 8;
inline bool TrackFeatures::_internal_has_order() const {
  bool value = (_has_bits_[0] & 0x00000100u) != 0;
  return value;
}
inline bool TrackFeatures::has_order() const {
  return _internal_has_order();
}
inline void TrackFeatures::clear_order() {
  order_ = 0;
  _has_bits_[0] &= ~0x00000100u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_order() const {
  return order_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::order() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.order)
  return _internal_order();
}
inline void TrackFeatures::_internal_set_order(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000100u;
  order_ = value;
}
inline void TrackFeatures::set_order(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_order(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.order)
}

// optional float note_duration = 9;
inline bool TrackFeatures::_internal_has_note_duration() const {
  bool value = (_has_bits_[0] & 0x00000200u) != 0;
  return value;
}
inline bool TrackFeatures::has_note_duration() const {
  return _internal_has_note_duration();
}
inline void TrackFeatures::clear_note_duration() {
  note_duration_ = 0;
  _has_bits_[0] &= ~0x00000200u;
}
inline float TrackFeatures::_internal_note_duration() const {
  return note_duration_;
}
inline float TrackFeatures::note_duration() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.note_duration)
  return _internal_note_duration();
}
inline void TrackFeatures::_internal_set_note_duration(float value) {
  _has_bits_[0] |= 0x00000200u;
  note_duration_ = value;
}
inline void TrackFeatures::set_note_duration(float value) {
  _internal_set_note_duration(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.note_duration)
}

// optional string genre_str = 10;
inline bool TrackFeatures::_internal_has_genre_str() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  return value;
}
inline bool TrackFeatures::has_genre_str() const {
  return _internal_has_genre_str();
}
inline void TrackFeatures::clear_genre_str() {
  genre_str_.ClearToEmpty();
  _has_bits_[0] &= ~0x00000001u;
}
inline const std::string& TrackFeatures::genre_str() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.genre_str)
  return _internal_genre_str();
}
inline void TrackFeatures::set_genre_str(const std::string& value) {
  _internal_set_genre_str(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.genre_str)
}
inline std::string* TrackFeatures::mutable_genre_str() {
  // @@protoc_insertion_point(field_mutable:midi.TrackFeatures.genre_str)
  return _internal_mutable_genre_str();
}
inline const std::string& TrackFeatures::_internal_genre_str() const {
  return genre_str_.Get();
}
inline void TrackFeatures::_internal_set_genre_str(const std::string& value) {
  _has_bits_[0] |= 0x00000001u;
  genre_str_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
}
inline void TrackFeatures::set_genre_str(std::string&& value) {
  _has_bits_[0] |= 0x00000001u;
  genre_str_.Set(
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:midi.TrackFeatures.genre_str)
}
inline void TrackFeatures::set_genre_str(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  _has_bits_[0] |= 0x00000001u;
  genre_str_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
  // @@protoc_insertion_point(field_set_char:midi.TrackFeatures.genre_str)
}
inline void TrackFeatures::set_genre_str(const char* value,
    size_t size) {
  _has_bits_[0] |= 0x00000001u;
  genre_str_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:midi.TrackFeatures.genre_str)
}
inline std::string* TrackFeatures::_internal_mutable_genre_str() {
  _has_bits_[0] |= 0x00000001u;
  return genre_str_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
}
inline std::string* TrackFeatures::release_genre_str() {
  // @@protoc_insertion_point(field_release:midi.TrackFeatures.genre_str)
  if (!_internal_has_genre_str()) {
    return nullptr;
  }
  _has_bits_[0] &= ~0x00000001u;
  return genre_str_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void TrackFeatures::set_allocated_genre_str(std::string* genre_str) {
  if (genre_str != nullptr) {
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  genre_str_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), genre_str,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:midi.TrackFeatures.genre_str)
}

// optional int32 min_polyphony_q = 11;
inline bool TrackFeatures::_internal_has_min_polyphony_q() const {
  bool value = (_has_bits_[0] & 0x00000400u) != 0;
  return value;
}
inline bool TrackFeatures::has_min_polyphony_q() const {
  return _internal_has_min_polyphony_q();
}
inline void TrackFeatures::clear_min_polyphony_q() {
  min_polyphony_q_ = 0;
  _has_bits_[0] &= ~0x00000400u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_min_polyphony_q() const {
  return min_polyphony_q_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::min_polyphony_q() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.min_polyphony_q)
  return _internal_min_polyphony_q();
}
inline void TrackFeatures::_internal_set_min_polyphony_q(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000400u;
  min_polyphony_q_ = value;
}
inline void TrackFeatures::set_min_polyphony_q(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_min_polyphony_q(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.min_polyphony_q)
}

// optional int32 max_polyphony_q = 12;
inline bool TrackFeatures::_internal_has_max_polyphony_q() const {
  bool value = (_has_bits_[0] & 0x00000800u) != 0;
  return value;
}
inline bool TrackFeatures::has_max_polyphony_q() const {
  return _internal_has_max_polyphony_q();
}
inline void TrackFeatures::clear_max_polyphony_q() {
  max_polyphony_q_ = 0;
  _has_bits_[0] &= ~0x00000800u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_max_polyphony_q() const {
  return max_polyphony_q_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::max_polyphony_q() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.max_polyphony_q)
  return _internal_max_polyphony_q();
}
inline void TrackFeatures::_internal_set_max_polyphony_q(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000800u;
  max_polyphony_q_ = value;
}
inline void TrackFeatures::set_max_polyphony_q(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_polyphony_q(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.max_polyphony_q)
}

// optional int32 min_note_duration_q = 13;
inline bool TrackFeatures::_internal_has_min_note_duration_q() const {
  bool value = (_has_bits_[0] & 0x00001000u) != 0;
  return value;
}
inline bool TrackFeatures::has_min_note_duration_q() const {
  return _internal_has_min_note_duration_q();
}
inline void TrackFeatures::clear_min_note_duration_q() {
  min_note_duration_q_ = 0;
  _has_bits_[0] &= ~0x00001000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_min_note_duration_q() const {
  return min_note_duration_q_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::min_note_duration_q() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.min_note_duration_q)
  return _internal_min_note_duration_q();
}
inline void TrackFeatures::_internal_set_min_note_duration_q(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00001000u;
  min_note_duration_q_ = value;
}
inline void TrackFeatures::set_min_note_duration_q(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_min_note_duration_q(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.min_note_duration_q)
}

// optional int32 max_note_duration_q = 14;
inline bool TrackFeatures::_internal_has_max_note_duration_q() const {
  bool value = (_has_bits_[0] & 0x00002000u) != 0;
  return value;
}
inline bool TrackFeatures::has_max_note_duration_q() const {
  return _internal_has_max_note_duration_q();
}
inline void TrackFeatures::clear_max_note_duration_q() {
  max_note_duration_q_ = 0;
  _has_bits_[0] &= ~0x00002000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_max_note_duration_q() const {
  return max_note_duration_q_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::max_note_duration_q() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.max_note_duration_q)
  return _internal_max_note_duration_q();
}
inline void TrackFeatures::_internal_set_max_note_duration_q(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00002000u;
  max_note_duration_q_ = value;
}
inline void TrackFeatures::set_max_note_duration_q(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_note_duration_q(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.max_note_duration_q)
}

// repeated int32 polyphony_distribution = 15;
inline int TrackFeatures::_internal_polyphony_distribution_size() const {
  return polyphony_distribution_.size();
}
inline int TrackFeatures::polyphony_distribution_size() const {
  return _internal_polyphony_distribution_size();
}
inline void TrackFeatures::clear_polyphony_distribution() {
  polyphony_distribution_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::_internal_polyphony_distribution(int index) const {
  return polyphony_distribution_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TrackFeatures::polyphony_distribution(int index) const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.polyphony_distribution)
  return _internal_polyphony_distribution(index);
}
inline void TrackFeatures::set_polyphony_distribution(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  polyphony_distribution_.Set(index, value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.polyphony_distribution)
}
inline void TrackFeatures::_internal_add_polyphony_distribution(::PROTOBUF_NAMESPACE_ID::int32 value) {
  polyphony_distribution_.Add(value);
}
inline void TrackFeatures::add_polyphony_distribution(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_polyphony_distribution(value);
  // @@protoc_insertion_point(field_add:midi.TrackFeatures.polyphony_distribution)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
TrackFeatures::_internal_polyphony_distribution() const {
  return polyphony_distribution_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
TrackFeatures::polyphony_distribution() const {
  // @@protoc_insertion_point(field_list:midi.TrackFeatures.polyphony_distribution)
  return _internal_polyphony_distribution();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
TrackFeatures::_internal_mutable_polyphony_distribution() {
  return &polyphony_distribution_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
TrackFeatures::mutable_polyphony_distribution() {
  // @@protoc_insertion_point(field_mutable_list:midi.TrackFeatures.polyphony_distribution)
  return _internal_mutable_polyphony_distribution();
}

// optional float note_density_value = 16;
inline bool TrackFeatures::_internal_has_note_density_value() const {
  bool value = (_has_bits_[0] & 0x00004000u) != 0;
  return value;
}
inline bool TrackFeatures::has_note_density_value() const {
  return _internal_has_note_density_value();
}
inline void TrackFeatures::clear_note_density_value() {
  note_density_value_ = 0;
  _has_bits_[0] &= ~0x00004000u;
}
inline float TrackFeatures::_internal_note_density_value() const {
  return note_density_value_;
}
inline float TrackFeatures::note_density_value() const {
  // @@protoc_insertion_point(field_get:midi.TrackFeatures.note_density_value)
  return _internal_note_density_value();
}
inline void TrackFeatures::_internal_set_note_density_value(float value) {
  _has_bits_[0] |= 0x00004000u;
  note_density_value_ = value;
}
inline void TrackFeatures::set_note_density_value(float value) {
  _internal_set_note_density_value(value);
  // @@protoc_insertion_point(field_set:midi.TrackFeatures.note_density_value)
}

// -------------------------------------------------------------------

// Note

// optional int32 start = 1;
inline bool Note::_internal_has_start() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  return value;
}
inline bool Note::has_start() const {
  return _internal_has_start();
}
inline void Note::clear_start() {
  start_ = 0;
  _has_bits_[0] &= ~0x00000001u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 Note::_internal_start() const {
  return start_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 Note::start() const {
  // @@protoc_insertion_point(field_get:midi.Note.start)
  return _internal_start();
}
inline void Note::_internal_set_start(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000001u;
  start_ = value;
}
inline void Note::set_start(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_start(value);
  // @@protoc_insertion_point(field_set:midi.Note.start)
}

// optional int32 end = 2;
inline bool Note::_internal_has_end() const {
  bool value = (_has_bits_[0] & 0x00000002u) != 0;
  return value;
}
inline bool Note::has_end() const {
  return _internal_has_end();
}
inline void Note::clear_end() {
  end_ = 0;
  _has_bits_[0] &= ~0x00000002u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 Note::_internal_end() const {
  return end_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 Note::end() const {
  // @@protoc_insertion_point(field_get:midi.Note.end)
  return _internal_end();
}
inline void Note::_internal_set_end(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000002u;
  end_ = value;
}
inline void Note::set_end(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_end(value);
  // @@protoc_insertion_point(field_set:midi.Note.end)
}

// optional int32 pitch = 3;
inline bool Note::_internal_has_pitch() const {
  bool value = (_has_bits_[0] & 0x00000004u) != 0;
  return value;
}
inline bool Note::has_pitch() const {
  return _internal_has_pitch();
}
inline void Note::clear_pitch() {
  pitch_ = 0;
  _has_bits_[0] &= ~0x00000004u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 Note::_internal_pitch() const {
  return pitch_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 Note::pitch() const {
  // @@protoc_insertion_point(field_get:midi.Note.pitch)
  return _internal_pitch();
}
inline void Note::_internal_set_pitch(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000004u;
  pitch_ = value;
}
inline void Note::set_pitch(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_pitch(value);
  // @@protoc_insertion_point(field_set:midi.Note.pitch)
}

// -------------------------------------------------------------------

// ValidTrack

// repeated int32 tracks = 1;
inline int ValidTrack::_internal_tracks_size() const {
  return tracks_.size();
}
inline int ValidTrack::tracks_size() const {
  return _internal_tracks_size();
}
inline void ValidTrack::clear_tracks() {
  tracks_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ValidTrack::_internal_tracks(int index) const {
  return tracks_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ValidTrack::tracks(int index) const {
  // @@protoc_insertion_point(field_get:midi.ValidTrack.tracks)
  return _internal_tracks(index);
}
inline void ValidTrack::set_tracks(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  tracks_.Set(index, value);
  // @@protoc_insertion_point(field_set:midi.ValidTrack.tracks)
}
inline void ValidTrack::_internal_add_tracks(::PROTOBUF_NAMESPACE_ID::int32 value) {
  tracks_.Add(value);
}
inline void ValidTrack::add_tracks(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_tracks(value);
  // @@protoc_insertion_point(field_add:midi.ValidTrack.tracks)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
ValidTrack::_internal_tracks() const {
  return tracks_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
ValidTrack::tracks() const {
  // @@protoc_insertion_point(field_list:midi.ValidTrack.tracks)
  return _internal_tracks();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
ValidTrack::_internal_mutable_tracks() {
  return &tracks_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
ValidTrack::mutable_tracks() {
  // @@protoc_insertion_point(field_mutable_list:midi.ValidTrack.tracks)
  return _internal_mutable_tracks();
}

// -------------------------------------------------------------------

// Dataset_Item

// required uint64 start = 1;
inline bool Dataset_Item::_internal_has_start() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  return value;
}
inline bool Dataset_Item::has_start() const {
  return _internal_has_start();
}
inline void Dataset_Item::clear_start() {
  start_ = PROTOBUF_ULONGLONG(0);
  _has_bits_[0] &= ~0x00000001u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint64 Dataset_Item::_internal_start() const {
  return start_;
}
inline ::PROTOBUF_NAMESPACE_ID::uint64 Dataset_Item::start() const {
  // @@protoc_insertion_point(field_get:midi.Dataset.Item.start)
  return _internal_start();
}
inline void Dataset_Item::_internal_set_start(::PROTOBUF_NAMESPACE_ID::uint64 value) {
  _has_bits_[0] |= 0x00000001u;
  start_ = value;
}
inline void Dataset_Item::set_start(::PROTOBUF_NAMESPACE_ID::uint64 value) {
  _internal_set_start(value);
  // @@protoc_insertion_point(field_set:midi.Dataset.Item.start)
}

// required uint64 end = 2;
inline bool Dataset_Item::_internal_has_end() const {
  bool value = (_has_bits_[0] & 0x00000002u) != 0;
  return value;
}
inline bool Dataset_Item::has_end() const {
  return _internal_has_end();
}
inline void Dataset_Item::clear_end() {
  end_ = PROTOBUF_ULONGLONG(0);
  _has_bits_[0] &= ~0x00000002u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint64 Dataset_Item::_internal_end() const {
  return end_;
}
inline ::PROTOBUF_NAMESPACE_ID::uint64 Dataset_Item::end() const {
  // @@protoc_insertion_point(field_get:midi.Dataset.Item.end)
  return _internal_end();
}
inline void Dataset_Item::_internal_set_end(::PROTOBUF_NAMESPACE_ID::uint64 value) {
  _has_bits_[0] |= 0x00000002u;
  end_ = value;
}
inline void Dataset_Item::set_end(::PROTOBUF_NAMESPACE_ID::uint64 value) {
  _internal_set_end(value);
  // @@protoc_insertion_point(field_set:midi.Dataset.Item.end)
}

// required uint64 src_size = 3;
inline bool Dataset_Item::_internal_has_src_size() const {
  bool value = (_has_bits_[0] & 0x00000004u) != 0;
  return value;
}
inline bool Dataset_Item::has_src_size() const {
  return _internal_has_src_size();
}
inline void Dataset_Item::clear_src_size() {
  src_size_ = PROTOBUF_ULONGLONG(0);
  _has_bits_[0] &= ~0x00000004u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint64 Dataset_Item::_internal_src_size() const {
  return src_size_;
}
inline ::PROTOBUF_NAMESPACE_ID::uint64 Dataset_Item::src_size() const {
  // @@protoc_insertion_point(field_get:midi.Dataset.Item.src_size)
  return _internal_src_size();
}
inline void Dataset_Item::_internal_set_src_size(::PROTOBUF_NAMESPACE_ID::uint64 value) {
  _has_bits_[0] |= 0x00000004u;
  src_size_ = value;
}
inline void Dataset_Item::set_src_size(::PROTOBUF_NAMESPACE_ID::uint64 value) {
  _internal_set_src_size(value);
  // @@protoc_insertion_point(field_set:midi.Dataset.Item.src_size)
}

// -------------------------------------------------------------------

// Dataset

// repeated .midi.Dataset.Item train = 1;
inline int Dataset::_internal_train_size() const {
  return train_.size();
}
inline int Dataset::train_size() const {
  return _internal_train_size();
}
inline void Dataset::clear_train() {
  train_.Clear();
}
inline ::midi::Dataset_Item* Dataset::mutable_train(int index) {
  // @@protoc_insertion_point(field_mutable:midi.Dataset.train)
  return train_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >*
Dataset::mutable_train() {
  // @@protoc_insertion_point(field_mutable_list:midi.Dataset.train)
  return &train_;
}
inline const ::midi::Dataset_Item& Dataset::_internal_train(int index) const {
  return train_.Get(index);
}
inline const ::midi::Dataset_Item& Dataset::train(int index) const {
  // @@protoc_insertion_point(field_get:midi.Dataset.train)
  return _internal_train(index);
}
inline ::midi::Dataset_Item* Dataset::_internal_add_train() {
  return train_.Add();
}
inline ::midi::Dataset_Item* Dataset::add_train() {
  // @@protoc_insertion_point(field_add:midi.Dataset.train)
  return _internal_add_train();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >&
Dataset::train() const {
  // @@protoc_insertion_point(field_list:midi.Dataset.train)
  return train_;
}

// repeated .midi.Dataset.Item valid = 2;
inline int Dataset::_internal_valid_size() const {
  return valid_.size();
}
inline int Dataset::valid_size() const {
  return _internal_valid_size();
}
inline void Dataset::clear_valid() {
  valid_.Clear();
}
inline ::midi::Dataset_Item* Dataset::mutable_valid(int index) {
  // @@protoc_insertion_point(field_mutable:midi.Dataset.valid)
  return valid_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >*
Dataset::mutable_valid() {
  // @@protoc_insertion_point(field_mutable_list:midi.Dataset.valid)
  return &valid_;
}
inline const ::midi::Dataset_Item& Dataset::_internal_valid(int index) const {
  return valid_.Get(index);
}
inline const ::midi::Dataset_Item& Dataset::valid(int index) const {
  // @@protoc_insertion_point(field_get:midi.Dataset.valid)
  return _internal_valid(index);
}
inline ::midi::Dataset_Item* Dataset::_internal_add_valid() {
  return valid_.Add();
}
inline ::midi::Dataset_Item* Dataset::add_valid() {
  // @@protoc_insertion_point(field_add:midi.Dataset.valid)
  return _internal_add_valid();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >&
Dataset::valid() const {
  // @@protoc_insertion_point(field_list:midi.Dataset.valid)
  return valid_;
}

// repeated .midi.Dataset.Item test = 3;
inline int Dataset::_internal_test_size() const {
  return test_.size();
}
inline int Dataset::test_size() const {
  return _internal_test_size();
}
inline void Dataset::clear_test() {
  test_.Clear();
}
inline ::midi::Dataset_Item* Dataset::mutable_test(int index) {
  // @@protoc_insertion_point(field_mutable:midi.Dataset.test)
  return test_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >*
Dataset::mutable_test() {
  // @@protoc_insertion_point(field_mutable_list:midi.Dataset.test)
  return &test_;
}
inline const ::midi::Dataset_Item& Dataset::_internal_test(int index) const {
  return test_.Get(index);
}
inline const ::midi::Dataset_Item& Dataset::test(int index) const {
  // @@protoc_insertion_point(field_get:midi.Dataset.test)
  return _internal_test(index);
}
inline ::midi::Dataset_Item* Dataset::_internal_add_test() {
  return test_.Add();
}
inline ::midi::Dataset_Item* Dataset::add_test() {
  // @@protoc_insertion_point(field_add:midi.Dataset.test)
  return _internal_add_test();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::midi::Dataset_Item >&
Dataset::test() const {
  // @@protoc_insertion_point(field_list:midi.Dataset.test)
  return test_;
}

// -------------------------------------------------------------------

// ModelMetadata

// optional string encoder = 1;
inline bool ModelMetadata::_internal_has_encoder() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  return value;
}
inline bool ModelMetadata::has_encoder() const {
  return _internal_has_encoder();
}
inline void ModelMetadata::clear_encoder() {
  encoder_.ClearToEmpty();
  _has_bits_[0] &= ~0x00000001u;
}
inline const std::string& ModelMetadata::encoder() const {
  // @@protoc_insertion_point(field_get:midi.ModelMetadata.encoder)
  return _internal_encoder();
}
inline void ModelMetadata::set_encoder(const std::string& value) {
  _internal_set_encoder(value);
  // @@protoc_insertion_point(field_set:midi.ModelMetadata.encoder)
}
inline std::string* ModelMetadata::mutable_encoder() {
  // @@protoc_insertion_point(field_mutable:midi.ModelMetadata.encoder)
  return _internal_mutable_encoder();
}
inline const std::string& ModelMetadata::_internal_encoder() const {
  return encoder_.Get();
}
inline void ModelMetadata::_internal_set_encoder(const std::string& value) {
  _has_bits_[0] |= 0x00000001u;
  encoder_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
}
inline void ModelMetadata::set_encoder(std::string&& value) {
  _has_bits_[0] |= 0x00000001u;
  encoder_.Set(
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:midi.ModelMetadata.encoder)
}
inline void ModelMetadata::set_encoder(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  _has_bits_[0] |= 0x00000001u;
  encoder_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
  // @@protoc_insertion_point(field_set_char:midi.ModelMetadata.encoder)
}
inline void ModelMetadata::set_encoder(const char* value,
    size_t size) {
  _has_bits_[0] |= 0x00000001u;
  encoder_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:midi.ModelMetadata.encoder)
}
inline std::string* ModelMetadata::_internal_mutable_encoder() {
  _has_bits_[0] |= 0x00000001u;
  return encoder_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
}
inline std::string* ModelMetadata::release_encoder() {
  // @@protoc_insertion_point(field_release:midi.ModelMetadata.encoder)
  if (!_internal_has_encoder()) {
    return nullptr;
  }
  _has_bits_[0] &= ~0x00000001u;
  return encoder_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void ModelMetadata::set_allocated_encoder(std::string* encoder) {
  if (encoder != nullptr) {
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  encoder_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), encoder,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:midi.ModelMetadata.encoder)
}

// optional int32 num_layers = 2;
inline bool ModelMetadata::_internal_has_num_layers() const {
  bool value = (_has_bits_[0] & 0x00000002u) != 0;
  return value;
}
inline bool ModelMetadata::has_num_layers() const {
  return _internal_has_num_layers();
}
inline void ModelMetadata::clear_num_layers() {
  num_layers_ = 0;
  _has_bits_[0] &= ~0x00000002u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ModelMetadata::_internal_num_layers() const {
  return num_layers_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ModelMetadata::num_layers() const {
  // @@protoc_insertion_point(field_get:midi.ModelMetadata.num_layers)
  return _internal_num_layers();
}
inline void ModelMetadata::_internal_set_num_layers(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000002u;
  num_layers_ = value;
}
inline void ModelMetadata::set_num_layers(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_num_layers(value);
  // @@protoc_insertion_point(field_set:midi.ModelMetadata.num_layers)
}

// optional int32 num_heads = 3;
inline bool ModelMetadata::_internal_has_num_heads() const {
  bool value = (_has_bits_[0] & 0x00000004u) != 0;
  return value;
}
inline bool ModelMetadata::has_num_heads() const {
  return _internal_has_num_heads();
}
inline void ModelMetadata::clear_num_heads() {
  num_heads_ = 0;
  _has_bits_[0] &= ~0x00000004u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ModelMetadata::_internal_num_heads() const {
  return num_heads_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ModelMetadata::num_heads() const {
  // @@protoc_insertion_point(field_get:midi.ModelMetadata.num_heads)
  return _internal_num_heads();
}
inline void ModelMetadata::_internal_set_num_heads(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000004u;
  num_heads_ = value;
}
inline void ModelMetadata::set_num_heads(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_num_heads(value);
  // @@protoc_insertion_point(field_set:midi.ModelMetadata.num_heads)
}

// optional int32 num_hidden = 4;
inline bool ModelMetadata::_internal_has_num_hidden() const {
  bool value = (_has_bits_[0] & 0x00000008u) != 0;
  return value;
}
inline bool ModelMetadata::has_num_hidden() const {
  return _internal_has_num_hidden();
}
inline void ModelMetadata::clear_num_hidden() {
  num_hidden_ = 0;
  _has_bits_[0] &= ~0x00000008u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ModelMetadata::_internal_num_hidden() const {
  return num_hidden_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ModelMetadata::num_hidden() const {
  // @@protoc_insertion_point(field_get:midi.ModelMetadata.num_hidden)
  return _internal_num_hidden();
}
inline void ModelMetadata::_internal_set_num_hidden(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000008u;
  num_hidden_ = value;
}
inline void ModelMetadata::set_num_hidden(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_num_hidden(value);
  // @@protoc_insertion_point(field_set:midi.ModelMetadata.num_hidden)
}

// optional int32 model_dim = 5;
inline bool ModelMetadata::_internal_has_model_dim() const {
  bool value = (_has_bits_[0] & 0x00000010u) != 0;
  return value;
}
inline bool ModelMetadata::has_model_dim() const {
  return _internal_has_model_dim();
}
inline void ModelMetadata::clear_model_dim() {
  model_dim_ = 0;
  _has_bits_[0] &= ~0x00000010u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ModelMetadata::_internal_model_dim() const {
  return model_dim_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ModelMetadata::model_dim() const {
  // @@protoc_insertion_point(field_get:midi.ModelMetadata.model_dim)
  return _internal_model_dim();
}
inline void ModelMetadata::_internal_set_model_dim(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000010u;
  model_dim_ = value;
}
inline void ModelMetadata::set_model_dim(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_model_dim(value);
  // @@protoc_insertion_point(field_set:midi.ModelMetadata.model_dim)
}

// optional bool new_state = 6;
inline bool ModelMetadata::_internal_has_new_state() const {
  bool value = (_has_bits_[0] & 0x00000020u) != 0;
  return value;
}
inline bool ModelMetadata::has_new_state() const {
  return _internal_has_new_state();
}
inline void ModelMetadata::clear_new_state() {
  new_state_ = false;
  _has_bits_[0] &= ~0x00000020u;
}
inline bool ModelMetadata::_internal_new_state() const {
  return new_state_;
}
inline bool ModelMetadata::new_state() const {
  // @@protoc_insertion_point(field_get:midi.ModelMetadata.new_state)
  return _internal_new_state();
}
inline void ModelMetadata::_internal_set_new_state(bool value) {
  _has_bits_[0] |= 0x00000020u;
  new_state_ = value;
}
inline void ModelMetadata::set_new_state(bool value) {
  _internal_set_new_state(value);
  // @@protoc_insertion_point(field_set:midi.ModelMetadata.new_state)
}

// -------------------------------------------------------------------

// GenreData

// optional string discogs = 1;
inline bool GenreData::_internal_has_discogs() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  return value;
}
inline bool GenreData::has_discogs() const {
  return _internal_has_discogs();
}
inline void GenreData::clear_discogs() {
  discogs_.ClearToEmpty();
  _has_bits_[0] &= ~0x00000001u;
}
inline const std::string& GenreData::discogs() const {
  // @@protoc_insertion_point(field_get:midi.GenreData.discogs)
  return _internal_discogs();
}
inline void GenreData::set_discogs(const std::string& value) {
  _internal_set_discogs(value);
  // @@protoc_insertion_point(field_set:midi.GenreData.discogs)
}
inline std::string* GenreData::mutable_discogs() {
  // @@protoc_insertion_point(field_mutable:midi.GenreData.discogs)
  return _internal_mutable_discogs();
}
inline const std::string& GenreData::_internal_discogs() const {
  return discogs_.Get();
}
inline void GenreData::_internal_set_discogs(const std::string& value) {
  _has_bits_[0] |= 0x00000001u;
  discogs_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
}
inline void GenreData::set_discogs(std::string&& value) {
  _has_bits_[0] |= 0x00000001u;
  discogs_.Set(
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:midi.GenreData.discogs)
}
inline void GenreData::set_discogs(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  _has_bits_[0] |= 0x00000001u;
  discogs_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
  // @@protoc_insertion_point(field_set_char:midi.GenreData.discogs)
}
inline void GenreData::set_discogs(const char* value,
    size_t size) {
  _has_bits_[0] |= 0x00000001u;
  discogs_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:midi.GenreData.discogs)
}
inline std::string* GenreData::_internal_mutable_discogs() {
  _has_bits_[0] |= 0x00000001u;
  return discogs_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
}
inline std::string* GenreData::release_discogs() {
  // @@protoc_insertion_point(field_release:midi.GenreData.discogs)
  if (!_internal_has_discogs()) {
    return nullptr;
  }
  _has_bits_[0] &= ~0x00000001u;
  return discogs_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void GenreData::set_allocated_discogs(std::string* discogs) {
  if (discogs != nullptr) {
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  discogs_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), discogs,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:midi.GenreData.discogs)
}

// optional string lastfm = 2;
inline bool GenreData::_internal_has_lastfm() const {
  bool value = (_has_bits_[0] & 0x00000002u) != 0;
  return value;
}
inline bool GenreData::has_lastfm() const {
  return _internal_has_lastfm();
}
inline void GenreData::clear_lastfm() {
  lastfm_.ClearToEmpty();
  _has_bits_[0] &= ~0x00000002u;
}
inline const std::string& GenreData::lastfm() const {
  // @@protoc_insertion_point(field_get:midi.GenreData.lastfm)
  return _internal_lastfm();
}
inline void GenreData::set_lastfm(const std::string& value) {
  _internal_set_lastfm(value);
  // @@protoc_insertion_point(field_set:midi.GenreData.lastfm)
}
inline std::string* GenreData::mutable_lastfm() {
  // @@protoc_insertion_point(field_mutable:midi.GenreData.lastfm)
  return _internal_mutable_lastfm();
}
inline const std::string& GenreData::_internal_lastfm() const {
  return lastfm_.Get();
}
inline void GenreData::_internal_set_lastfm(const std::string& value) {
  _has_bits_[0] |= 0x00000002u;
  lastfm_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
}
inline void GenreData::set_lastfm(std::string&& value) {
  _has_bits_[0] |= 0x00000002u;
  lastfm_.Set(
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:midi.GenreData.lastfm)
}
inline void GenreData::set_lastfm(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  _has_bits_[0] |= 0x00000002u;
  lastfm_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
  // @@protoc_insertion_point(field_set_char:midi.GenreData.lastfm)
}
inline void GenreData::set_lastfm(const char* value,
    size_t size) {
  _has_bits_[0] |= 0x00000002u;
  lastfm_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:midi.GenreData.lastfm)
}
inline std::string* GenreData::_internal_mutable_lastfm() {
  _has_bits_[0] |= 0x00000002u;
  return lastfm_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
}
inline std::string* GenreData::release_lastfm() {
  // @@protoc_insertion_point(field_release:midi.GenreData.lastfm)
  if (!_internal_has_lastfm()) {
    return nullptr;
  }
  _has_bits_[0] &= ~0x00000002u;
  return lastfm_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void GenreData::set_allocated_lastfm(std::string* lastfm) {
  if (lastfm != nullptr) {
    _has_bits_[0] |= 0x00000002u;
  } else {
    _has_bits_[0] &= ~0x00000002u;
  }
  lastfm_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), lastfm,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:midi.GenreData.lastfm)
}

// optional string tagtraum = 3;
inline bool GenreData::_internal_has_tagtraum() const {
  bool value = (_has_bits_[0] & 0x00000004u) != 0;
  return value;
}
inline bool GenreData::has_tagtraum() const {
  return _internal_has_tagtraum();
}
inline void GenreData::clear_tagtraum() {
  tagtraum_.ClearToEmpty();
  _has_bits_[0] &= ~0x00000004u;
}
inline const std::string& GenreData::tagtraum() const {
  // @@protoc_insertion_point(field_get:midi.GenreData.tagtraum)
  return _internal_tagtraum();
}
inline void GenreData::set_tagtraum(const std::string& value) {
  _internal_set_tagtraum(value);
  // @@protoc_insertion_point(field_set:midi.GenreData.tagtraum)
}
inline std::string* GenreData::mutable_tagtraum() {
  // @@protoc_insertion_point(field_mutable:midi.GenreData.tagtraum)
  return _internal_mutable_tagtraum();
}
inline const std::string& GenreData::_internal_tagtraum() const {
  return tagtraum_.Get();
}
inline void GenreData::_internal_set_tagtraum(const std::string& value) {
  _has_bits_[0] |= 0x00000004u;
  tagtraum_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
}
inline void GenreData::set_tagtraum(std::string&& value) {
  _has_bits_[0] |= 0x00000004u;
  tagtraum_.Set(
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:midi.GenreData.tagtraum)
}
inline void GenreData::set_tagtraum(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  _has_bits_[0] |= 0x00000004u;
  tagtraum_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(value), GetArena());
  // @@protoc_insertion_point(field_set_char:midi.GenreData.tagtraum)
}
inline void GenreData::set_tagtraum(const char* value,
    size_t size) {
  _has_bits_[0] |= 0x00000004u;
  tagtraum_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:midi.GenreData.tagtraum)
}
inline std::string* GenreData::_internal_mutable_tagtraum() {
  _has_bits_[0] |= 0x00000004u;
  return tagtraum_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
}
inline std::string* GenreData::release_tagtraum() {
  // @@protoc_insertion_point(field_release:midi.GenreData.tagtraum)
  if (!_internal_has_tagtraum()) {
    return nullptr;
  }
  _has_bits_[0] &= ~0x00000004u;
  return tagtraum_.ReleaseNonDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void GenreData::set_allocated_tagtraum(std::string* tagtraum) {
  if (tagtraum != nullptr) {
    _has_bits_[0] |= 0x00000004u;
  } else {
    _has_bits_[0] &= ~0x00000004u;
  }
  tagtraum_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), tagtraum,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:midi.GenreData.tagtraum)
}

#ifdef __GNUC__
  #pragma GCC diagnostic pop
#endif  // __GNUC__
// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------


// @@protoc_insertion_point(namespace_scope)

}  // namespace midi

// @@protoc_insertion_point(global_scope)

#include <google/protobuf/port_undef.inc>
#endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_midi_5finternal_2eproto
