// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: Global_Uconnect_DRM.proto
#pragma warning disable 1591, 0612, 3021
#region Designer generated code

using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Com.Fca.Uconnect.Global {

  /// <summary>Holder for reflection information generated from Global_Uconnect_DRM.proto</summary>
  public static partial class GlobalUconnectDRMReflection {

    #region Descriptor
    /// <summary>File descriptor for Global_Uconnect_DRM.proto</summary>
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;

    static GlobalUconnectDRMReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "ChlHbG9iYWxfVWNvbm5lY3RfRFJNLnByb3RvEhdjb20uZmNhLnVjb25uZWN0",
            "Lmdsb2JhbCInChBYNTA5Q2VydGlmaWNhdGVzEhMKC2NlcnRpZmljYXRlGAEg",
            "AygJIrYCCgxEUk1TaWduYXR1cmUSSgoNc2lnbmF0dXJlVHlwZRgBIAEoDjIz",
            "LmNvbS5mY2EudWNvbm5lY3QuZ2xvYmFsLkRSTVNpZ25hdHVyZS5TaWduYXR1",
            "cmVUeXBlEhEKCXNpZ25hdHVyZRgEIAEoDBJDChB4NTA5Q2VydGlmaWNhdGVz",
            "GAUgASgLMikuY29tLmZjYS51Y29ubmVjdC5nbG9iYWwuWDUwOUNlcnRpZmlj",
            "YXRlcyKBAQoNU2lnbmF0dXJlVHlwZRIkCiBSU0EyMDQ4X1NIQTI1Nl9SU0FT",
            "U0FfUEtDUzFfVjFfNRAAEiQKIFJTQTMwNzJfU0hBMjU2X1JTQVNTQV9QS0NT",
            "MV9WMV81EAESJAogUlNBNDA5Nl9TSEEyNTZfUlNBU1NBX1BLQ1MxX1YxXzUQ",
            "AiLCAQoDRFJNEj4KC2NvbnRlbnRUeXBlGAMgASgOMikuY29tLmZjYS51Y29u",
            "bmVjdC5nbG9iYWwuRFJNLkNvbnRlbnRUeXBlcxIPCgdkcm1GaWxlGAEgASgM",
            "EjsKDGRybVNpZ25hdHVyZRgCIAEoCzIlLmNvbS5mY2EudWNvbm5lY3QuZ2xv",
            "YmFsLkRSTVNpZ25hdHVyZSItCgxDb250ZW50VHlwZXMSCwoHR0VORVJJQxAA",
            "EgcKA0pWTRABEgcKA0FQSxACIpAECg9EUk1SZWdpc3RyYXRpb24SWwoScmVn",
            "aXN0cmF0aW9uU3RhdHVzGAEgASgOMj8uY29tLmZjYS51Y29ubmVjdC5nbG9i",
            "YWwuRFJNUmVnaXN0cmF0aW9uLlJlZ2lzdHJhdGlvblN0YXR1c0VudW0SSQoJ",
            "b3BlcmF0aW9uGAIgASgOMjYuY29tLmZjYS51Y29ubmVjdC5nbG9iYWwuRFJN",
            "UmVnaXN0cmF0aW9uLk9wZXJhdGlvbkVudW0SHwoXYmFzaWNSZWdFeHBpcnlU",
            "aW1lU3RhbXAYAyABKAMSEQoJYWNjb3VudEROGAcgASgJEhIKCmV4cGlyZVRp",
            "bWUYCCABKAMSEgoKZmlsZUxlbmd0aBgJIAEoBRIUCgxmaWxlQ2hlY2tzdW0Y",
            "CiABKAUSGwoTZXhwaXJlVGltZVNwYW5CZWdpbhgMIAEoAxIZChFleHBpcmVU",
            "aW1lU3BhbkVuZBgNIAEoAxIPCgdlbWFpbElkGA4gASgJIjcKDU9wZXJhdGlv",
            "bkVudW0SCAoETk9PUBAAEgkKBVJFU0VUEAESEQoNUkVUVVJOX1RPX05FVxAC",
            "ImEKFlJlZ2lzdHJhdGlvblN0YXR1c0VudW0SEgoOTk9UX1JFR0lTVEVSRUQQ",
            "ABIPCgtCQVNJQ19TVEFHRRABEg4KCkZVTExfU1RBR0UQAhISCg5DT01QTEVU",
            "RV9TVEFHRRADYgZwcm90bzM="));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { },
          new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.X509Certificates), global::Com.Fca.Uconnect.Global.X509Certificates.Parser, new[]{ "Certificate" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.DRMSignature), global::Com.Fca.Uconnect.Global.DRMSignature.Parser, new[]{ "SignatureType", "Signature", "X509Certificates" }, null, new[]{ typeof(global::Com.Fca.Uconnect.Global.DRMSignature.Types.SignatureType) }, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.DRM), global::Com.Fca.Uconnect.Global.DRM.Parser, new[]{ "ContentType", "DrmFile", "DrmSignature" }, null, new[]{ typeof(global::Com.Fca.Uconnect.Global.DRM.Types.ContentTypes) }, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.DRMRegistration), global::Com.Fca.Uconnect.Global.DRMRegistration.Parser, new[]{ "RegistrationStatus", "Operation", "BasicRegExpiryTimeStamp", "AccountDN", "ExpireTime", "FileLength", "FileChecksum", "ExpireTimeSpanBegin", "ExpireTimeSpanEnd", "EmailId" }, null, new[]{ typeof(global::Com.Fca.Uconnect.Global.DRMRegistration.Types.OperationEnum), typeof(global::Com.Fca.Uconnect.Global.DRMRegistration.Types.RegistrationStatusEnum) }, null)
          }));
    }
    #endregion

  }
  #region Messages
  public sealed partial class X509Certificates : pb::IMessage<X509Certificates> {
    private static readonly pb::MessageParser<X509Certificates> _parser = new pb::MessageParser<X509Certificates>(() => new X509Certificates());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<X509Certificates> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectDRMReflection.Descriptor.MessageTypes[0]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public X509Certificates() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public X509Certificates(X509Certificates other) : this() {
      certificate_ = other.certificate_.Clone();
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public X509Certificates Clone() {
      return new X509Certificates(this);
    }

    /// <summary>Field number for the "certificate" field.</summary>
    public const int CertificateFieldNumber = 1;
    private static readonly pb::FieldCodec<string> _repeated_certificate_codec
        = pb::FieldCodec.ForString(10);
    private readonly pbc::RepeatedField<string> certificate_ = new pbc::RepeatedField<string>();
    /// <summary>
    //// PEM-encoded X.509 certificate chain
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<string> Certificate {
      get { return certificate_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as X509Certificates);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(X509Certificates other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!certificate_.Equals(other.certificate_)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= certificate_.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      certificate_.WriteTo(output, _repeated_certificate_codec);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += certificate_.CalculateSize(_repeated_certificate_codec);
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(X509Certificates other) {
      if (other == null) {
        return;
      }
      certificate_.Add(other.certificate_);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            certificate_.AddEntriesFrom(input, _repeated_certificate_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class DRMSignature : pb::IMessage<DRMSignature> {
    private static readonly pb::MessageParser<DRMSignature> _parser = new pb::MessageParser<DRMSignature>(() => new DRMSignature());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<DRMSignature> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectDRMReflection.Descriptor.MessageTypes[1]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DRMSignature() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DRMSignature(DRMSignature other) : this() {
      signatureType_ = other.signatureType_;
      signature_ = other.signature_;
      X509Certificates = other.x509Certificates_ != null ? other.X509Certificates.Clone() : null;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DRMSignature Clone() {
      return new DRMSignature(this);
    }

    /// <summary>Field number for the "signatureType" field.</summary>
    public const int SignatureTypeFieldNumber = 1;
    private global::Com.Fca.Uconnect.Global.DRMSignature.Types.SignatureType signatureType_ = 0;
    /// <summary>
    //// This defines the type of Signature used to sign the drmFile buffer. Optional fields to be used only when the signature is not a JarSigned file.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.DRMSignature.Types.SignatureType SignatureType {
      get { return signatureType_; }
      set {
        signatureType_ = value;
      }
    }

    /// <summary>Field number for the "signature" field.</summary>
    public const int SignatureFieldNumber = 4;
    private pb::ByteString signature_ = pb::ByteString.Empty;
    /// <summary>
    ///string issuer = 6;///RFC 5280 (4.1.2.4) The issuer field identifies the entity that has signed and issued the certificate. The issuer of the certificate, that shall be used to verify the DRM.
    ///bytes serialNumber = 7; /// The Serial Number of the Certificate that shall be used to verify the DRM
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pb::ByteString Signature {
      get { return signature_; }
      set {
        signature_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "x509Certificates" field.</summary>
    public const int X509CertificatesFieldNumber = 5;
    private global::Com.Fca.Uconnect.Global.X509Certificates x509Certificates_;
    /// <summary>
    //// X.509 Certificate chain, where the first certificate is the one that shall be used to verify the signature and the last one is root of the DRM subtree.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.X509Certificates X509Certificates {
      get { return x509Certificates_; }
      set {
        x509Certificates_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as DRMSignature);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(DRMSignature other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (SignatureType != other.SignatureType) return false;
      if (Signature != other.Signature) return false;
      if (!object.Equals(X509Certificates, other.X509Certificates)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (SignatureType != 0) hash ^= SignatureType.GetHashCode();
      if (Signature.Length != 0) hash ^= Signature.GetHashCode();
      if (x509Certificates_ != null) hash ^= X509Certificates.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (SignatureType != 0) {
        output.WriteRawTag(8);
        output.WriteEnum((int) SignatureType);
      }
      if (Signature.Length != 0) {
        output.WriteRawTag(34);
        output.WriteBytes(Signature);
      }
      if (x509Certificates_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(X509Certificates);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (SignatureType != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) SignatureType);
      }
      if (Signature.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeBytesSize(Signature);
      }
      if (x509Certificates_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(X509Certificates);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(DRMSignature other) {
      if (other == null) {
        return;
      }
      if (other.SignatureType != 0) {
        SignatureType = other.SignatureType;
      }
      if (other.Signature.Length != 0) {
        Signature = other.Signature;
      }
      if (other.x509Certificates_ != null) {
        if (x509Certificates_ == null) {
          x509Certificates_ = new global::Com.Fca.Uconnect.Global.X509Certificates();
        }
        X509Certificates.MergeFrom(other.X509Certificates);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            signatureType_ = (global::Com.Fca.Uconnect.Global.DRMSignature.Types.SignatureType) input.ReadEnum();
            break;
          }
          case 34: {
            Signature = input.ReadBytes();
            break;
          }
          case 42: {
            if (x509Certificates_ == null) {
              x509Certificates_ = new global::Com.Fca.Uconnect.Global.X509Certificates();
            }
            input.ReadMessage(x509Certificates_);
            break;
          }
        }
      }
    }

    #region Nested types
    /// <summary>Container for nested types declared in the DRMSignature message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static partial class Types {
      public enum SignatureType {
        /// <summary>
        //// RSA 2048 signature with SHA256 digest and signature scheme RSASSA_PKCS1_V1_5
        /// </summary>
        [pbr::OriginalName("RSA2048_SHA256_RSASSA_PKCS1_V1_5")] Rsa2048Sha256RsassaPkcs1V15 = 0,
        /// <summary>
        //// RSA 3072 signature with SHA256 digest and signature scheme RSASSA_PKCS1_V1_5
        /// </summary>
        [pbr::OriginalName("RSA3072_SHA256_RSASSA_PKCS1_V1_5")] Rsa3072Sha256RsassaPkcs1V15 = 1,
        /// <summary>
        //// RSA 4096 signature with SHA256 digest and signature scheme RSASSA_PKCS1_V1_5
        /// </summary>
        [pbr::OriginalName("RSA4096_SHA256_RSASSA_PKCS1_V1_5")] Rsa4096Sha256RsassaPkcs1V15 = 2,
      }

    }
    #endregion

  }

  /// <summary>
  //// Upload the DRM File using this message
  /// </summary>
  public sealed partial class DRM : pb::IMessage<DRM> {
    private static readonly pb::MessageParser<DRM> _parser = new pb::MessageParser<DRM>(() => new DRM());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<DRM> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectDRMReflection.Descriptor.MessageTypes[2]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DRM() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DRM(DRM other) : this() {
      contentType_ = other.contentType_;
      drmFile_ = other.drmFile_;
      DrmSignature = other.drmSignature_ != null ? other.DrmSignature.Clone() : null;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DRM Clone() {
      return new DRM(this);
    }

    /// <summary>Field number for the "contentType" field.</summary>
    public const int ContentTypeFieldNumber = 3;
    private global::Com.Fca.Uconnect.Global.DRM.Types.ContentTypes contentType_ = 0;
    /// <summary>
    //// Defines the type of DRM content type.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.DRM.Types.ContentTypes ContentType {
      get { return contentType_; }
      set {
        contentType_ = value;
      }
    }

    /// <summary>Field number for the "drmFile" field.</summary>
    public const int DrmFileFieldNumber = 1;
    private pb::ByteString drmFile_ = pb::ByteString.Empty;
    /// <summary>
    //// The content of the drmFile shall be serialized in the following way: drmFile = BASE64(UTF8(drm.properties)). This contain the base64 encoded DRM file contents to support sending a file for features and services. drmFile = BASE64(UTF8(drm.properties)) or drmFile = BASE64(drm.jar)
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pb::ByteString DrmFile {
      get { return drmFile_; }
      set {
        drmFile_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "drmSignature" field.</summary>
    public const int DrmSignatureFieldNumber = 2;
    private global::Com.Fca.Uconnect.Global.DRMSignature drmSignature_;
    /// <summary>
    //// info to choose the right certificate from ecu certificate store
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.DRMSignature DrmSignature {
      get { return drmSignature_; }
      set {
        drmSignature_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as DRM);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(DRM other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (ContentType != other.ContentType) return false;
      if (DrmFile != other.DrmFile) return false;
      if (!object.Equals(DrmSignature, other.DrmSignature)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (ContentType != 0) hash ^= ContentType.GetHashCode();
      if (DrmFile.Length != 0) hash ^= DrmFile.GetHashCode();
      if (drmSignature_ != null) hash ^= DrmSignature.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (DrmFile.Length != 0) {
        output.WriteRawTag(10);
        output.WriteBytes(DrmFile);
      }
      if (drmSignature_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(DrmSignature);
      }
      if (ContentType != 0) {
        output.WriteRawTag(24);
        output.WriteEnum((int) ContentType);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (ContentType != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ContentType);
      }
      if (DrmFile.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeBytesSize(DrmFile);
      }
      if (drmSignature_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(DrmSignature);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(DRM other) {
      if (other == null) {
        return;
      }
      if (other.ContentType != 0) {
        ContentType = other.ContentType;
      }
      if (other.DrmFile.Length != 0) {
        DrmFile = other.DrmFile;
      }
      if (other.drmSignature_ != null) {
        if (drmSignature_ == null) {
          drmSignature_ = new global::Com.Fca.Uconnect.Global.DRMSignature();
        }
        DrmSignature.MergeFrom(other.DrmSignature);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            DrmFile = input.ReadBytes();
            break;
          }
          case 18: {
            if (drmSignature_ == null) {
              drmSignature_ = new global::Com.Fca.Uconnect.Global.DRMSignature();
            }
            input.ReadMessage(drmSignature_);
            break;
          }
          case 24: {
            contentType_ = (global::Com.Fca.Uconnect.Global.DRM.Types.ContentTypes) input.ReadEnum();
            break;
          }
        }
      }
    }

    #region Nested types
    /// <summary>Container for nested types declared in the DRM message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static partial class Types {
      public enum ContentTypes {
        /// <summary>
        //// File Contents intended for any generic ECU
        /// </summary>
        [pbr::OriginalName("GENERIC")] Generic = 0,
        /// <summary>
        //// File contents intended for JAVA based systems
        /// </summary>
        [pbr::OriginalName("JVM")] Jvm = 1,
        /// <summary>
        //// File contents intended for Android based systems
        /// </summary>
        [pbr::OriginalName("APK")] Apk = 2,
      }

    }
    #endregion

  }

  /// <summary>
  //// Not currently used
  /// </summary>
  public sealed partial class DRMRegistration : pb::IMessage<DRMRegistration> {
    private static readonly pb::MessageParser<DRMRegistration> _parser = new pb::MessageParser<DRMRegistration>(() => new DRMRegistration());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<DRMRegistration> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectDRMReflection.Descriptor.MessageTypes[3]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DRMRegistration() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DRMRegistration(DRMRegistration other) : this() {
      registrationStatus_ = other.registrationStatus_;
      operation_ = other.operation_;
      basicRegExpiryTimeStamp_ = other.basicRegExpiryTimeStamp_;
      accountDN_ = other.accountDN_;
      expireTime_ = other.expireTime_;
      fileLength_ = other.fileLength_;
      fileChecksum_ = other.fileChecksum_;
      expireTimeSpanBegin_ = other.expireTimeSpanBegin_;
      expireTimeSpanEnd_ = other.expireTimeSpanEnd_;
      emailId_ = other.emailId_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DRMRegistration Clone() {
      return new DRMRegistration(this);
    }

    /// <summary>Field number for the "registrationStatus" field.</summary>
    public const int RegistrationStatusFieldNumber = 1;
    private global::Com.Fca.Uconnect.Global.DRMRegistration.Types.RegistrationStatusEnum registrationStatus_ = 0;
    /// <summary>
    //// This contains Uconnect Access registration status of the VIN the TU it is installed on.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.DRMRegistration.Types.RegistrationStatusEnum RegistrationStatus {
      get { return registrationStatus_; }
      set {
        registrationStatus_ = value;
      }
    }

    /// <summary>Field number for the "operation" field.</summary>
    public const int OperationFieldNumber = 2;
    private global::Com.Fca.Uconnect.Global.DRMRegistration.Types.OperationEnum operation_ = 0;
    /// <summary>
    //// This indicates which stage of registration has been performed for VIN.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.DRMRegistration.Types.OperationEnum Operation {
      get { return operation_; }
      set {
        operation_ = value;
      }
    }

    /// <summary>Field number for the "basicRegExpiryTimeStamp" field.</summary>
    public const int BasicRegExpiryTimeStampFieldNumber = 3;
    private long basicRegExpiryTimeStamp_;
    /// <summary>
    //// This indicates the expiration date of the user initiated basic registration date, displayed in millisecond values.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long BasicRegExpiryTimeStamp {
      get { return basicRegExpiryTimeStamp_; }
      set {
        basicRegExpiryTimeStamp_ = value;
      }
    }

    /// <summary>Field number for the "accountDN" field.</summary>
    public const int AccountDNFieldNumber = 7;
    private string accountDN_ = "";
    /// <summary>
    //// accountDN number of the TU being registered
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string AccountDN {
      get { return accountDN_; }
      set {
        accountDN_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "expireTime" field.</summary>
    public const int ExpireTimeFieldNumber = 8;
    private long expireTime_;
    /// <summary>
    //// The service being provisioned/activated is considered active from the time this message is received until the expire time, expressed in milliseconds elapsed since 1 January 1970 00:00:00 UTC.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long ExpireTime {
      get { return expireTime_; }
      set {
        expireTime_ = value;
      }
    }

    /// <summary>Field number for the "fileLength" field.</summary>
    public const int FileLengthFieldNumber = 9;
    private int fileLength_;
    /// <summary>
    //// file length in bytes
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int FileLength {
      get { return fileLength_; }
      set {
        fileLength_ = value;
      }
    }

    /// <summary>Field number for the "fileChecksum" field.</summary>
    public const int FileChecksumFieldNumber = 10;
    private int fileChecksum_;
    /// <summary>
    //// filechecksum information
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int FileChecksum {
      get { return fileChecksum_; }
      set {
        fileChecksum_ = value;
      }
    }

    /// <summary>Field number for the "expireTimeSpanBegin" field.</summary>
    public const int ExpireTimeSpanBeginFieldNumber = 12;
    private long expireTimeSpanBegin_;
    /// <summary>
    /// string featureMask = 11; /// DRM Feature Mask
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long ExpireTimeSpanBegin {
      get { return expireTimeSpanBegin_; }
      set {
        expireTimeSpanBegin_ = value;
      }
    }

    /// <summary>Field number for the "expireTimeSpanEnd" field.</summary>
    public const int ExpireTimeSpanEndFieldNumber = 13;
    private long expireTimeSpanEnd_;
    /// <summary>
    //// DRM expiration time end
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long ExpireTimeSpanEnd {
      get { return expireTimeSpanEnd_; }
      set {
        expireTimeSpanEnd_ = value;
      }
    }

    /// <summary>Field number for the "emailId" field.</summary>
    public const int EmailIdFieldNumber = 14;
    private string emailId_ = "";
    /// <summary>
    //// emailID if needed
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string EmailId {
      get { return emailId_; }
      set {
        emailId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as DRMRegistration);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(DRMRegistration other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (RegistrationStatus != other.RegistrationStatus) return false;
      if (Operation != other.Operation) return false;
      if (BasicRegExpiryTimeStamp != other.BasicRegExpiryTimeStamp) return false;
      if (AccountDN != other.AccountDN) return false;
      if (ExpireTime != other.ExpireTime) return false;
      if (FileLength != other.FileLength) return false;
      if (FileChecksum != other.FileChecksum) return false;
      if (ExpireTimeSpanBegin != other.ExpireTimeSpanBegin) return false;
      if (ExpireTimeSpanEnd != other.ExpireTimeSpanEnd) return false;
      if (EmailId != other.EmailId) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (RegistrationStatus != 0) hash ^= RegistrationStatus.GetHashCode();
      if (Operation != 0) hash ^= Operation.GetHashCode();
      if (BasicRegExpiryTimeStamp != 0L) hash ^= BasicRegExpiryTimeStamp.GetHashCode();
      if (AccountDN.Length != 0) hash ^= AccountDN.GetHashCode();
      if (ExpireTime != 0L) hash ^= ExpireTime.GetHashCode();
      if (FileLength != 0) hash ^= FileLength.GetHashCode();
      if (FileChecksum != 0) hash ^= FileChecksum.GetHashCode();
      if (ExpireTimeSpanBegin != 0L) hash ^= ExpireTimeSpanBegin.GetHashCode();
      if (ExpireTimeSpanEnd != 0L) hash ^= ExpireTimeSpanEnd.GetHashCode();
      if (EmailId.Length != 0) hash ^= EmailId.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (RegistrationStatus != 0) {
        output.WriteRawTag(8);
        output.WriteEnum((int) RegistrationStatus);
      }
      if (Operation != 0) {
        output.WriteRawTag(16);
        output.WriteEnum((int) Operation);
      }
      if (BasicRegExpiryTimeStamp != 0L) {
        output.WriteRawTag(24);
        output.WriteInt64(BasicRegExpiryTimeStamp);
      }
      if (AccountDN.Length != 0) {
        output.WriteRawTag(58);
        output.WriteString(AccountDN);
      }
      if (ExpireTime != 0L) {
        output.WriteRawTag(64);
        output.WriteInt64(ExpireTime);
      }
      if (FileLength != 0) {
        output.WriteRawTag(72);
        output.WriteInt32(FileLength);
      }
      if (FileChecksum != 0) {
        output.WriteRawTag(80);
        output.WriteInt32(FileChecksum);
      }
      if (ExpireTimeSpanBegin != 0L) {
        output.WriteRawTag(96);
        output.WriteInt64(ExpireTimeSpanBegin);
      }
      if (ExpireTimeSpanEnd != 0L) {
        output.WriteRawTag(104);
        output.WriteInt64(ExpireTimeSpanEnd);
      }
      if (EmailId.Length != 0) {
        output.WriteRawTag(114);
        output.WriteString(EmailId);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (RegistrationStatus != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) RegistrationStatus);
      }
      if (Operation != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Operation);
      }
      if (BasicRegExpiryTimeStamp != 0L) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(BasicRegExpiryTimeStamp);
      }
      if (AccountDN.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(AccountDN);
      }
      if (ExpireTime != 0L) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(ExpireTime);
      }
      if (FileLength != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(FileLength);
      }
      if (FileChecksum != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(FileChecksum);
      }
      if (ExpireTimeSpanBegin != 0L) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(ExpireTimeSpanBegin);
      }
      if (ExpireTimeSpanEnd != 0L) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(ExpireTimeSpanEnd);
      }
      if (EmailId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(EmailId);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(DRMRegistration other) {
      if (other == null) {
        return;
      }
      if (other.RegistrationStatus != 0) {
        RegistrationStatus = other.RegistrationStatus;
      }
      if (other.Operation != 0) {
        Operation = other.Operation;
      }
      if (other.BasicRegExpiryTimeStamp != 0L) {
        BasicRegExpiryTimeStamp = other.BasicRegExpiryTimeStamp;
      }
      if (other.AccountDN.Length != 0) {
        AccountDN = other.AccountDN;
      }
      if (other.ExpireTime != 0L) {
        ExpireTime = other.ExpireTime;
      }
      if (other.FileLength != 0) {
        FileLength = other.FileLength;
      }
      if (other.FileChecksum != 0) {
        FileChecksum = other.FileChecksum;
      }
      if (other.ExpireTimeSpanBegin != 0L) {
        ExpireTimeSpanBegin = other.ExpireTimeSpanBegin;
      }
      if (other.ExpireTimeSpanEnd != 0L) {
        ExpireTimeSpanEnd = other.ExpireTimeSpanEnd;
      }
      if (other.EmailId.Length != 0) {
        EmailId = other.EmailId;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            registrationStatus_ = (global::Com.Fca.Uconnect.Global.DRMRegistration.Types.RegistrationStatusEnum) input.ReadEnum();
            break;
          }
          case 16: {
            operation_ = (global::Com.Fca.Uconnect.Global.DRMRegistration.Types.OperationEnum) input.ReadEnum();
            break;
          }
          case 24: {
            BasicRegExpiryTimeStamp = input.ReadInt64();
            break;
          }
          case 58: {
            AccountDN = input.ReadString();
            break;
          }
          case 64: {
            ExpireTime = input.ReadInt64();
            break;
          }
          case 72: {
            FileLength = input.ReadInt32();
            break;
          }
          case 80: {
            FileChecksum = input.ReadInt32();
            break;
          }
          case 96: {
            ExpireTimeSpanBegin = input.ReadInt64();
            break;
          }
          case 104: {
            ExpireTimeSpanEnd = input.ReadInt64();
            break;
          }
          case 114: {
            EmailId = input.ReadString();
            break;
          }
        }
      }
    }

    #region Nested types
    /// <summary>Container for nested types declared in the DRMRegistration message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static partial class Types {
      public enum OperationEnum {
        /// <summary>
        //// Indicates there is no operation to be executed by the device.
        /// </summary>
        [pbr::OriginalName("NOOP")] Noop = 0,
        /// <summary>
        //// Indicates the device shall be reset which involves disconnecting and re-connecting to the SDP.
        /// </summary>
        [pbr::OriginalName("RESET")] Reset = 1,
        /// <summary>
        //// Indicates the device shall be reset and cleared of user configuration data.
        /// </summary>
        [pbr::OriginalName("RETURN_TO_NEW")] ReturnToNew = 2,
      }

      public enum RegistrationStatusEnum {
        /// <summary>
        //// The user has not registered this vehicle with a Uconnect Account.
        /// </summary>
        [pbr::OriginalName("NOT_REGISTERED")] NotRegistered = 0,
        /// <summary>
        //// When the user requested the registration email, but has not yet completed the registration process.
        /// </summary>
        [pbr::OriginalName("BASIC_STAGE")] BasicStage = 1,
        /// <summary>
        //// User has completed registration, but did not have a wallet account setup.
        /// </summary>
        [pbr::OriginalName("FULL_STAGE")] FullStage = 2,
        /// <summary>
        //// Final stage where the user has a wallet configured to allow purchasing of services.
        /// </summary>
        [pbr::OriginalName("COMPLETE_STAGE")] CompleteStage = 3,
      }

    }
    #endregion

  }

  #endregion

}

#endregion Designer generated code
