// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: keyapis/jwks/v1/keyapis_jwks_key_v1.proto

package ru.keyapis.jwks.v1;

public final class KeyapisJwksV1Proto {
  private KeyapisJwksV1Proto() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface KeyInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.KeyInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Идентификатор ключа, соответсвует kid.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The id.
     */
    java.lang.String getId();
    /**
     * <pre>
     * Идентификатор ключа, соответсвует kid.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for id.
     */
    com.google.protobuf.ByteString
        getIdBytes();

    /**
     * <pre>
     * Публичный ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return Whether the publicKey field is set.
     */
    boolean hasPublicKey();
    /**
     * <pre>
     * Публичный ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The publicKey.
     */
    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getPublicKey();
    /**
     * <pre>
     * Публичный ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder getPublicKeyOrBuilder();

    /**
     * <pre>
     * Дата создания.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return Whether the createdAt field is set.
     */
    boolean hasCreatedAt();
    /**
     * <pre>
     * Дата создания.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return The createdAt.
     */
    com.google.protobuf.Timestamp getCreatedAt();
    /**
     * <pre>
     * Дата создания.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    com.google.protobuf.TimestampOrBuilder getCreatedAtOrBuilder();
  }
  /**
   * <pre>
   * Ключ.
   * # Описание модели
   * </pre>
   *
   * Protobuf type {@code keyapis.jwks.v1.KeyInfo}
   */
  public static final class KeyInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.KeyInfo)
      KeyInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use KeyInfo.newBuilder() to construct.
    private KeyInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private KeyInfo() {
      id_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new KeyInfo();
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.Builder.class);
    }

    public interface PublicKeyOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.KeyInfo.PublicKey)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Вид использования.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string use = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The use.
       */
      java.lang.String getUse();
      /**
       * <pre>
       * Вид использования.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string use = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for use.
       */
      com.google.protobuf.ByteString
          getUseBytes();

      /**
       * <pre>
       * Тип ключа.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string kty = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The kty.
       */
      java.lang.String getKty();
      /**
       * <pre>
       * Тип ключа.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string kty = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for kty.
       */
      com.google.protobuf.ByteString
          getKtyBytes();

      /**
       * <pre>
       * Идентификатор.
       * # Тип: Guid
       * </pre>
       *
       * <code>string kid = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The kid.
       */
      java.lang.String getKid();
      /**
       * <pre>
       * Идентификатор.
       * # Тип: Guid
       * </pre>
       *
       * <code>string kid = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for kid.
       */
      com.google.protobuf.ByteString
          getKidBytes();

      /**
       * <pre>
       * Алгоритм шифрования.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string alg = 4;</code>
       * @return The alg.
       */
      java.lang.String getAlg();
      /**
       * <pre>
       * Алгоритм шифрования.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string alg = 4;</code>
       * @return The bytes for alg.
       */
      com.google.protobuf.ByteString
          getAlgBytes();

      /**
       * <pre>
       * Параметр Modulus
       * </pre>
       *
       * <code>string n = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The n.
       */
      java.lang.String getN();
      /**
       * <pre>
       * Параметр Modulus
       * </pre>
       *
       * <code>string n = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for n.
       */
      com.google.protobuf.ByteString
          getNBytes();

      /**
       * <pre>
       * Параметр Exponent
       * </pre>
       *
       * <code>string e = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The e.
       */
      java.lang.String getE();
      /**
       * <pre>
       * Параметр Exponent
       * </pre>
       *
       * <code>string e = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for e.
       */
      com.google.protobuf.ByteString
          getEBytes();

      /**
       * <pre>
       * Цепочка сертификатов X.509.
       * # Диапазон: 0..100
       * </pre>
       *
       * <code>repeated string x5c = 7;</code>
       * @return A list containing the x5c.
       */
      java.util.List<java.lang.String>
          getX5CList();
      /**
       * <pre>
       * Цепочка сертификатов X.509.
       * # Диапазон: 0..100
       * </pre>
       *
       * <code>repeated string x5c = 7;</code>
       * @return The count of x5c.
       */
      int getX5CCount();
      /**
       * <pre>
       * Цепочка сертификатов X.509.
       * # Диапазон: 0..100
       * </pre>
       *
       * <code>repeated string x5c = 7;</code>
       * @param index The index of the element to return.
       * @return The x5c at the given index.
       */
      java.lang.String getX5C(int index);
      /**
       * <pre>
       * Цепочка сертификатов X.509.
       * # Диапазон: 0..100
       * </pre>
       *
       * <code>repeated string x5c = 7;</code>
       * @param index The index of the value to return.
       * @return The bytes of the x5c at the given index.
       */
      com.google.protobuf.ByteString
          getX5CBytes(int index);
    }
    /**
     * <pre>
     * Публичный ключ
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.KeyInfo.PublicKey}
     */
    public static final class PublicKey extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.KeyInfo.PublicKey)
        PublicKeyOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use PublicKey.newBuilder() to construct.
      private PublicKey(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private PublicKey() {
        use_ = "";
        kty_ = "";
        kid_ = "";
        alg_ = "";
        n_ = "";
        e_ = "";
        x5C_ =
            com.google.protobuf.LazyStringArrayList.emptyList();
      }

      @java.lang.Override
      @SuppressWarnings({"unused"})
      protected java.lang.Object newInstance(
          UnusedPrivateParameter unused) {
        return new PublicKey();
      }

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_PublicKey_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_PublicKey_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder.class);
      }

      public static final int USE_FIELD_NUMBER = 1;
      @SuppressWarnings("serial")
      private volatile java.lang.Object use_ = "";
      /**
       * <pre>
       * Вид использования.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string use = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The use.
       */
      @java.lang.Override
      public java.lang.String getUse() {
        java.lang.Object ref = use_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          use_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Вид использования.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string use = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for use.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getUseBytes() {
        java.lang.Object ref = use_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          use_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int KTY_FIELD_NUMBER = 2;
      @SuppressWarnings("serial")
      private volatile java.lang.Object kty_ = "";
      /**
       * <pre>
       * Тип ключа.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string kty = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The kty.
       */
      @java.lang.Override
      public java.lang.String getKty() {
        java.lang.Object ref = kty_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          kty_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Тип ключа.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string kty = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for kty.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getKtyBytes() {
        java.lang.Object ref = kty_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          kty_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int KID_FIELD_NUMBER = 3;
      @SuppressWarnings("serial")
      private volatile java.lang.Object kid_ = "";
      /**
       * <pre>
       * Идентификатор.
       * # Тип: Guid
       * </pre>
       *
       * <code>string kid = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The kid.
       */
      @java.lang.Override
      public java.lang.String getKid() {
        java.lang.Object ref = kid_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          kid_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Идентификатор.
       * # Тип: Guid
       * </pre>
       *
       * <code>string kid = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for kid.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getKidBytes() {
        java.lang.Object ref = kid_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          kid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int ALG_FIELD_NUMBER = 4;
      @SuppressWarnings("serial")
      private volatile java.lang.Object alg_ = "";
      /**
       * <pre>
       * Алгоритм шифрования.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string alg = 4;</code>
       * @return The alg.
       */
      @java.lang.Override
      public java.lang.String getAlg() {
        java.lang.Object ref = alg_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          alg_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Алгоритм шифрования.
       * # Диапазон: 2..32
       * </pre>
       *
       * <code>string alg = 4;</code>
       * @return The bytes for alg.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getAlgBytes() {
        java.lang.Object ref = alg_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          alg_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int N_FIELD_NUMBER = 5;
      @SuppressWarnings("serial")
      private volatile java.lang.Object n_ = "";
      /**
       * <pre>
       * Параметр Modulus
       * </pre>
       *
       * <code>string n = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The n.
       */
      @java.lang.Override
      public java.lang.String getN() {
        java.lang.Object ref = n_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          n_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Параметр Modulus
       * </pre>
       *
       * <code>string n = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for n.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getNBytes() {
        java.lang.Object ref = n_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          n_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int E_FIELD_NUMBER = 6;
      @SuppressWarnings("serial")
      private volatile java.lang.Object e_ = "";
      /**
       * <pre>
       * Параметр Exponent
       * </pre>
       *
       * <code>string e = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The e.
       */
      @java.lang.Override
      public java.lang.String getE() {
        java.lang.Object ref = e_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          e_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Параметр Exponent
       * </pre>
       *
       * <code>string e = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for e.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getEBytes() {
        java.lang.Object ref = e_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          e_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int X5C_FIELD_NUMBER = 7;
      @SuppressWarnings("serial")
      private com.google.protobuf.LazyStringArrayList x5C_ =
          com.google.protobuf.LazyStringArrayList.emptyList();
      /**
       * <pre>
       * Цепочка сертификатов X.509.
       * # Диапазон: 0..100
       * </pre>
       *
       * <code>repeated string x5c = 7;</code>
       * @return A list containing the x5c.
       */
      public com.google.protobuf.ProtocolStringList
          getX5CList() {
        return x5C_;
      }
      /**
       * <pre>
       * Цепочка сертификатов X.509.
       * # Диапазон: 0..100
       * </pre>
       *
       * <code>repeated string x5c = 7;</code>
       * @return The count of x5c.
       */
      public int getX5CCount() {
        return x5C_.size();
      }
      /**
       * <pre>
       * Цепочка сертификатов X.509.
       * # Диапазон: 0..100
       * </pre>
       *
       * <code>repeated string x5c = 7;</code>
       * @param index The index of the element to return.
       * @return The x5c at the given index.
       */
      public java.lang.String getX5C(int index) {
        return x5C_.get(index);
      }
      /**
       * <pre>
       * Цепочка сертификатов X.509.
       * # Диапазон: 0..100
       * </pre>
       *
       * <code>repeated string x5c = 7;</code>
       * @param index The index of the value to return.
       * @return The bytes of the x5c at the given index.
       */
      public com.google.protobuf.ByteString
          getX5CBytes(int index) {
        return x5C_.getByteString(index);
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(use_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, use_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kty_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kty_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kid_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 3, kid_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(alg_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 4, alg_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(n_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 5, n_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(e_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 6, e_);
        }
        for (int i = 0; i < x5C_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 7, x5C_.getRaw(i));
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(use_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, use_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kty_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kty_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kid_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, kid_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(alg_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, alg_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(n_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, n_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(e_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, e_);
        }
        {
          int dataSize = 0;
          for (int i = 0; i < x5C_.size(); i++) {
            dataSize += computeStringSizeNoTag(x5C_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getX5CList().size();
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey)) {
          return super.equals(obj);
        }
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey) obj;

        if (!getUse()
            .equals(other.getUse())) return false;
        if (!getKty()
            .equals(other.getKty())) return false;
        if (!getKid()
            .equals(other.getKid())) return false;
        if (!getAlg()
            .equals(other.getAlg())) return false;
        if (!getN()
            .equals(other.getN())) return false;
        if (!getE()
            .equals(other.getE())) return false;
        if (!getX5CList()
            .equals(other.getX5CList())) return false;
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + USE_FIELD_NUMBER;
        hash = (53 * hash) + getUse().hashCode();
        hash = (37 * hash) + KTY_FIELD_NUMBER;
        hash = (53 * hash) + getKty().hashCode();
        hash = (37 * hash) + KID_FIELD_NUMBER;
        hash = (53 * hash) + getKid().hashCode();
        hash = (37 * hash) + ALG_FIELD_NUMBER;
        hash = (53 * hash) + getAlg().hashCode();
        hash = (37 * hash) + N_FIELD_NUMBER;
        hash = (53 * hash) + getN().hashCode();
        hash = (37 * hash) + E_FIELD_NUMBER;
        hash = (53 * hash) + getE().hashCode();
        if (getX5CCount() > 0) {
          hash = (37 * hash) + X5C_FIELD_NUMBER;
          hash = (53 * hash) + getX5CList().hashCode();
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * Публичный ключ
       * </pre>
       *
       * Protobuf type {@code keyapis.jwks.v1.KeyInfo.PublicKey}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.KeyInfo.PublicKey)
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_PublicKey_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_PublicKey_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder.class);
        }

        // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          use_ = "";
          kty_ = "";
          kid_ = "";
          alg_ = "";
          n_ = "";
          e_ = "";
          x5C_ =
              com.google.protobuf.LazyStringArrayList.emptyList();
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_PublicKey_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getDefaultInstanceForType() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey build() {
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey buildPartial() {
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey result) {
          int from_bitField0_ = bitField0_;
          if (((from_bitField0_ & 0x00000001) != 0)) {
            result.use_ = use_;
          }
          if (((from_bitField0_ & 0x00000002) != 0)) {
            result.kty_ = kty_;
          }
          if (((from_bitField0_ & 0x00000004) != 0)) {
            result.kid_ = kid_;
          }
          if (((from_bitField0_ & 0x00000008) != 0)) {
            result.alg_ = alg_;
          }
          if (((from_bitField0_ & 0x00000010) != 0)) {
            result.n_ = n_;
          }
          if (((from_bitField0_ & 0x00000020) != 0)) {
            result.e_ = e_;
          }
          if (((from_bitField0_ & 0x00000040) != 0)) {
            x5C_.makeImmutable();
            result.x5C_ = x5C_;
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey) {
            return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey other) {
          if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance()) return this;
          if (!other.getUse().isEmpty()) {
            use_ = other.use_;
            bitField0_ |= 0x00000001;
            onChanged();
          }
          if (!other.getKty().isEmpty()) {
            kty_ = other.kty_;
            bitField0_ |= 0x00000002;
            onChanged();
          }
          if (!other.getKid().isEmpty()) {
            kid_ = other.kid_;
            bitField0_ |= 0x00000004;
            onChanged();
          }
          if (!other.getAlg().isEmpty()) {
            alg_ = other.alg_;
            bitField0_ |= 0x00000008;
            onChanged();
          }
          if (!other.getN().isEmpty()) {
            n_ = other.n_;
            bitField0_ |= 0x00000010;
            onChanged();
          }
          if (!other.getE().isEmpty()) {
            e_ = other.e_;
            bitField0_ |= 0x00000020;
            onChanged();
          }
          if (!other.x5C_.isEmpty()) {
            if (x5C_.isEmpty()) {
              x5C_ = other.x5C_;
              bitField0_ |= 0x00000040;
            } else {
              ensureX5CIsMutable();
              x5C_.addAll(other.x5C_);
            }
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

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

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 10: {
                  use_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000001;
                  break;
                } // case 10
                case 18: {
                  kty_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000002;
                  break;
                } // case 18
                case 26: {
                  kid_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000004;
                  break;
                } // case 26
                case 34: {
                  alg_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000008;
                  break;
                } // case 34
                case 42: {
                  n_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000010;
                  break;
                } // case 42
                case 50: {
                  e_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000020;
                  break;
                } // case 50
                case 58: {
                  java.lang.String s = input.readStringRequireUtf8();
                  ensureX5CIsMutable();
                  x5C_.add(s);
                  break;
                } // case 58
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int bitField0_;

        private java.lang.Object use_ = "";
        /**
         * <pre>
         * Вид использования.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string use = 1 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The use.
         */
        public java.lang.String getUse() {
          java.lang.Object ref = use_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            use_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Вид использования.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string use = 1 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The bytes for use.
         */
        public com.google.protobuf.ByteString
            getUseBytes() {
          java.lang.Object ref = use_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            use_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Вид использования.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string use = 1 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The use to set.
         * @return This builder for chaining.
         */
        public Builder setUse(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          use_ = value;
          bitField0_ |= 0x00000001;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Вид использования.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string use = 1 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearUse() {
          use_ = getDefaultInstance().getUse();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Вид использования.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string use = 1 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The bytes for use to set.
         * @return This builder for chaining.
         */
        public Builder setUseBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          use_ = value;
          bitField0_ |= 0x00000001;
          onChanged();
          return this;
        }

        private java.lang.Object kty_ = "";
        /**
         * <pre>
         * Тип ключа.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string kty = 2 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The kty.
         */
        public java.lang.String getKty() {
          java.lang.Object ref = kty_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            kty_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Тип ключа.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string kty = 2 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The bytes for kty.
         */
        public com.google.protobuf.ByteString
            getKtyBytes() {
          java.lang.Object ref = kty_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            kty_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Тип ключа.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string kty = 2 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The kty to set.
         * @return This builder for chaining.
         */
        public Builder setKty(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          kty_ = value;
          bitField0_ |= 0x00000002;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Тип ключа.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string kty = 2 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearKty() {
          kty_ = getDefaultInstance().getKty();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Тип ключа.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string kty = 2 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The bytes for kty to set.
         * @return This builder for chaining.
         */
        public Builder setKtyBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          kty_ = value;
          bitField0_ |= 0x00000002;
          onChanged();
          return this;
        }

        private java.lang.Object kid_ = "";
        /**
         * <pre>
         * Идентификатор.
         * # Тип: Guid
         * </pre>
         *
         * <code>string kid = 3 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The kid.
         */
        public java.lang.String getKid() {
          java.lang.Object ref = kid_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            kid_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Идентификатор.
         * # Тип: Guid
         * </pre>
         *
         * <code>string kid = 3 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The bytes for kid.
         */
        public com.google.protobuf.ByteString
            getKidBytes() {
          java.lang.Object ref = kid_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            kid_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Идентификатор.
         * # Тип: Guid
         * </pre>
         *
         * <code>string kid = 3 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The kid to set.
         * @return This builder for chaining.
         */
        public Builder setKid(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          kid_ = value;
          bitField0_ |= 0x00000004;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор.
         * # Тип: Guid
         * </pre>
         *
         * <code>string kid = 3 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearKid() {
          kid_ = getDefaultInstance().getKid();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор.
         * # Тип: Guid
         * </pre>
         *
         * <code>string kid = 3 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The bytes for kid to set.
         * @return This builder for chaining.
         */
        public Builder setKidBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          kid_ = value;
          bitField0_ |= 0x00000004;
          onChanged();
          return this;
        }

        private java.lang.Object alg_ = "";
        /**
         * <pre>
         * Алгоритм шифрования.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string alg = 4;</code>
         * @return The alg.
         */
        public java.lang.String getAlg() {
          java.lang.Object ref = alg_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            alg_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Алгоритм шифрования.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string alg = 4;</code>
         * @return The bytes for alg.
         */
        public com.google.protobuf.ByteString
            getAlgBytes() {
          java.lang.Object ref = alg_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            alg_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Алгоритм шифрования.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string alg = 4;</code>
         * @param value The alg to set.
         * @return This builder for chaining.
         */
        public Builder setAlg(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          alg_ = value;
          bitField0_ |= 0x00000008;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Алгоритм шифрования.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string alg = 4;</code>
         * @return This builder for chaining.
         */
        public Builder clearAlg() {
          alg_ = getDefaultInstance().getAlg();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Алгоритм шифрования.
         * # Диапазон: 2..32
         * </pre>
         *
         * <code>string alg = 4;</code>
         * @param value The bytes for alg to set.
         * @return This builder for chaining.
         */
        public Builder setAlgBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          alg_ = value;
          bitField0_ |= 0x00000008;
          onChanged();
          return this;
        }

        private java.lang.Object n_ = "";
        /**
         * <pre>
         * Параметр Modulus
         * </pre>
         *
         * <code>string n = 5 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The n.
         */
        public java.lang.String getN() {
          java.lang.Object ref = n_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            n_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Параметр Modulus
         * </pre>
         *
         * <code>string n = 5 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The bytes for n.
         */
        public com.google.protobuf.ByteString
            getNBytes() {
          java.lang.Object ref = n_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            n_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Параметр Modulus
         * </pre>
         *
         * <code>string n = 5 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The n to set.
         * @return This builder for chaining.
         */
        public Builder setN(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          n_ = value;
          bitField0_ |= 0x00000010;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Параметр Modulus
         * </pre>
         *
         * <code>string n = 5 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearN() {
          n_ = getDefaultInstance().getN();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Параметр Modulus
         * </pre>
         *
         * <code>string n = 5 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The bytes for n to set.
         * @return This builder for chaining.
         */
        public Builder setNBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          n_ = value;
          bitField0_ |= 0x00000010;
          onChanged();
          return this;
        }

        private java.lang.Object e_ = "";
        /**
         * <pre>
         * Параметр Exponent
         * </pre>
         *
         * <code>string e = 6 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The e.
         */
        public java.lang.String getE() {
          java.lang.Object ref = e_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            e_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Параметр Exponent
         * </pre>
         *
         * <code>string e = 6 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The bytes for e.
         */
        public com.google.protobuf.ByteString
            getEBytes() {
          java.lang.Object ref = e_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            e_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Параметр Exponent
         * </pre>
         *
         * <code>string e = 6 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The e to set.
         * @return This builder for chaining.
         */
        public Builder setE(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          e_ = value;
          bitField0_ |= 0x00000020;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Параметр Exponent
         * </pre>
         *
         * <code>string e = 6 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearE() {
          e_ = getDefaultInstance().getE();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Параметр Exponent
         * </pre>
         *
         * <code>string e = 6 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The bytes for e to set.
         * @return This builder for chaining.
         */
        public Builder setEBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          e_ = value;
          bitField0_ |= 0x00000020;
          onChanged();
          return this;
        }

        private com.google.protobuf.LazyStringArrayList x5C_ =
            com.google.protobuf.LazyStringArrayList.emptyList();
        private void ensureX5CIsMutable() {
          if (!x5C_.isModifiable()) {
            x5C_ = new com.google.protobuf.LazyStringArrayList(x5C_);
          }
          bitField0_ |= 0x00000040;
        }
        /**
         * <pre>
         * Цепочка сертификатов X.509.
         * # Диапазон: 0..100
         * </pre>
         *
         * <code>repeated string x5c = 7;</code>
         * @return A list containing the x5c.
         */
        public com.google.protobuf.ProtocolStringList
            getX5CList() {
          x5C_.makeImmutable();
          return x5C_;
        }
        /**
         * <pre>
         * Цепочка сертификатов X.509.
         * # Диапазон: 0..100
         * </pre>
         *
         * <code>repeated string x5c = 7;</code>
         * @return The count of x5c.
         */
        public int getX5CCount() {
          return x5C_.size();
        }
        /**
         * <pre>
         * Цепочка сертификатов X.509.
         * # Диапазон: 0..100
         * </pre>
         *
         * <code>repeated string x5c = 7;</code>
         * @param index The index of the element to return.
         * @return The x5c at the given index.
         */
        public java.lang.String getX5C(int index) {
          return x5C_.get(index);
        }
        /**
         * <pre>
         * Цепочка сертификатов X.509.
         * # Диапазон: 0..100
         * </pre>
         *
         * <code>repeated string x5c = 7;</code>
         * @param index The index of the value to return.
         * @return The bytes of the x5c at the given index.
         */
        public com.google.protobuf.ByteString
            getX5CBytes(int index) {
          return x5C_.getByteString(index);
        }
        /**
         * <pre>
         * Цепочка сертификатов X.509.
         * # Диапазон: 0..100
         * </pre>
         *
         * <code>repeated string x5c = 7;</code>
         * @param index The index to set the value at.
         * @param value The x5c to set.
         * @return This builder for chaining.
         */
        public Builder setX5C(
            int index, java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          ensureX5CIsMutable();
          x5C_.set(index, value);
          bitField0_ |= 0x00000040;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Цепочка сертификатов X.509.
         * # Диапазон: 0..100
         * </pre>
         *
         * <code>repeated string x5c = 7;</code>
         * @param value The x5c to add.
         * @return This builder for chaining.
         */
        public Builder addX5C(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          ensureX5CIsMutable();
          x5C_.add(value);
          bitField0_ |= 0x00000040;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Цепочка сертификатов X.509.
         * # Диапазон: 0..100
         * </pre>
         *
         * <code>repeated string x5c = 7;</code>
         * @param values The x5c to add.
         * @return This builder for chaining.
         */
        public Builder addAllX5C(
            java.lang.Iterable<java.lang.String> values) {
          ensureX5CIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, x5C_);
          bitField0_ |= 0x00000040;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Цепочка сертификатов X.509.
         * # Диапазон: 0..100
         * </pre>
         *
         * <code>repeated string x5c = 7;</code>
         * @return This builder for chaining.
         */
        public Builder clearX5C() {
          x5C_ =
            com.google.protobuf.LazyStringArrayList.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Цепочка сертификатов X.509.
         * # Диапазон: 0..100
         * </pre>
         *
         * <code>repeated string x5c = 7;</code>
         * @param value The bytes of the x5c to add.
         * @return This builder for chaining.
         */
        public Builder addX5CBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          ensureX5CIsMutable();
          x5C_.add(value);
          bitField0_ |= 0x00000040;
          onChanged();
          return this;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.KeyInfo.PublicKey)
      }

      // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.KeyInfo.PublicKey)
      private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey();
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<PublicKey>
          PARSER = new com.google.protobuf.AbstractParser<PublicKey>() {
        @java.lang.Override
        public PublicKey parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          Builder builder = newBuilder();
          try {
            builder.mergeFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(builder.buildPartial());
          } catch (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface SavingErrorOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.KeyInfo.SavingError)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Ключ с таким идентификатором уже существует
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
       * @return Whether the keyAlreadyExists field is set.
       */
      boolean hasKeyAlreadyExists();
      /**
       * <pre>
       * Ключ с таким идентификатором уже существует
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
       * @return The keyAlreadyExists.
       */
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists getKeyAlreadyExists();
      /**
       * <pre>
       * Ключ с таким идентификатором уже существует
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
       */
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExistsOrBuilder getKeyAlreadyExistsOrBuilder();

      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.ReasonCase getReasonCase();
    }
    /**
     * <pre>
     * Ошибка сохранения.
     * Эти проверки выполняются при работе с базой данных и сторонними сервисами
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.KeyInfo.SavingError}
     */
    public static final class SavingError extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.KeyInfo.SavingError)
        SavingErrorOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use SavingError.newBuilder() to construct.
      private SavingError(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private SavingError() {
      }

      @java.lang.Override
      @SuppressWarnings({"unused"})
      protected java.lang.Object newInstance(
          UnusedPrivateParameter unused) {
        return new SavingError();
      }

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_SavingError_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_SavingError_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.Builder.class);
      }

      public interface KeyAlreadyExistsOrBuilder extends
          // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists)
          com.google.protobuf.MessageOrBuilder {
      }
      /**
       * <pre>
       * Ключ с таким идентификатором уже существует.
       * Причины:
       * - В базе хранится запись с переданнм kid
       * </pre>
       *
       * Protobuf type {@code keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists}
       */
      public static final class KeyAlreadyExists extends
          com.google.protobuf.GeneratedMessageV3 implements
          // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists)
          KeyAlreadyExistsOrBuilder {
      private static final long serialVersionUID = 0L;
        // Use KeyAlreadyExists.newBuilder() to construct.
        private KeyAlreadyExists(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
          super(builder);
        }
        private KeyAlreadyExists() {
        }

        @java.lang.Override
        @SuppressWarnings({"unused"})
        protected java.lang.Object newInstance(
            UnusedPrivateParameter unused) {
          return new KeyAlreadyExists();
        }

        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_SavingError_KeyAlreadyExists_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_SavingError_KeyAlreadyExists_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.Builder.class);
        }

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

          memoizedIsInitialized = 1;
          return true;
        }

        @java.lang.Override
        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          size += getUnknownFields().getSerializedSize();
          memoizedSize = size;
          return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj) {
          if (obj == this) {
           return true;
          }
          if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists)) {
            return super.equals(obj);
          }
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists) obj;

          if (!getUnknownFields().equals(other.getUnknownFields())) return false;
          return true;
        }

        @java.lang.Override
        public int hashCode() {
          if (memoizedHashCode != 0) {
            return memoizedHashCode;
          }
          int hash = 41;
          hash = (19 * hash) + getDescriptor().hashCode();
          hash = (29 * hash) + getUnknownFields().hashCode();
          memoizedHashCode = hash;
          return hash;
        }

        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseFrom(
            java.nio.ByteBuffer data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseFrom(
            java.nio.ByteBuffer data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseDelimitedWithIOException(PARSER, input);
        }

        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }
        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder() {
          return DEFAULT_INSTANCE.toBuilder();
        }
        public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists prototype) {
          return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        @java.lang.Override
        public Builder toBuilder() {
          return this == DEFAULT_INSTANCE
              ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        /**
         * <pre>
         * Ключ с таким идентификатором уже существует.
         * Причины:
         * - В базе хранится запись с переданнм kid
         * </pre>
         *
         * Protobuf type {@code keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
            // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists)
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExistsOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_SavingError_KeyAlreadyExists_descriptor;
          }

          @java.lang.Override
          protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_SavingError_KeyAlreadyExists_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.Builder.class);
          }

          // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.newBuilder()
          private Builder() {

          }

          private Builder(
              com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
            super(parent);

          }
          @java.lang.Override
          public Builder clear() {
            super.clear();
            return this;
          }

          @java.lang.Override
          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_SavingError_KeyAlreadyExists_descriptor;
          }

          @java.lang.Override
          public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists getDefaultInstanceForType() {
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.getDefaultInstance();
          }

          @java.lang.Override
          public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists build() {
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          @java.lang.Override
          public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists buildPartial() {
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists(this);
            onBuilt();
            return result;
          }

          @java.lang.Override
          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists) {
              return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists other) {
            if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.getDefaultInstance()) return this;
            this.mergeUnknownFields(other.getUnknownFields());
            onChanged();
            return this;
          }

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

          @java.lang.Override
          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            if (extensionRegistry == null) {
              throw new java.lang.NullPointerException();
            }
            try {
              boolean done = false;
              while (!done) {
                int tag = input.readTag();
                switch (tag) {
                  case 0:
                    done = true;
                    break;
                  default: {
                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                      done = true; // was an endgroup tag
                    }
                    break;
                  } // default:
                } // switch (tag)
              } // while (!done)
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.unwrapIOException();
            } finally {
              onChanged();
            } // finally
            return this;
          }
          @java.lang.Override
          public final Builder setUnknownFields(
              final com.google.protobuf.UnknownFieldSet unknownFields) {
            return super.setUnknownFields(unknownFields);
          }

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


          // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists)
        }

        // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists)
        private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists DEFAULT_INSTANCE;
        static {
          DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists();
        }

        public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists getDefaultInstance() {
          return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<KeyAlreadyExists>
            PARSER = new com.google.protobuf.AbstractParser<KeyAlreadyExists>() {
          @java.lang.Override
          public KeyAlreadyExists parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            Builder builder = newBuilder();
            try {
              builder.mergeFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.setUnfinishedMessage(builder.buildPartial());
            } catch (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists getDefaultInstanceForType() {
          return DEFAULT_INSTANCE;
        }

      }

      private int reasonCase_ = 0;
      @SuppressWarnings("serial")
      private java.lang.Object reason_;
      public enum ReasonCase
          implements com.google.protobuf.Internal.EnumLite,
              com.google.protobuf.AbstractMessage.InternalOneOfEnum {
        KEY_ALREADY_EXISTS(1),
        REASON_NOT_SET(0);
        private final int value;
        private ReasonCase(int value) {
          this.value = value;
        }
        /**
         * @param value The number of the enum to look for.
         * @return The enum associated with the given number.
         * @deprecated Use {@link #forNumber(int)} instead.
         */
        @java.lang.Deprecated
        public static ReasonCase valueOf(int value) {
          return forNumber(value);
        }

        public static ReasonCase forNumber(int value) {
          switch (value) {
            case 1: return KEY_ALREADY_EXISTS;
            case 0: return REASON_NOT_SET;
            default: return null;
          }
        }
        public int getNumber() {
          return this.value;
        }
      };

      public ReasonCase
      getReasonCase() {
        return ReasonCase.forNumber(
            reasonCase_);
      }

      public static final int KEY_ALREADY_EXISTS_FIELD_NUMBER = 1;
      /**
       * <pre>
       * Ключ с таким идентификатором уже существует
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
       * @return Whether the keyAlreadyExists field is set.
       */
      @java.lang.Override
      public boolean hasKeyAlreadyExists() {
        return reasonCase_ == 1;
      }
      /**
       * <pre>
       * Ключ с таким идентификатором уже существует
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
       * @return The keyAlreadyExists.
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists getKeyAlreadyExists() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists) reason_;
        }
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.getDefaultInstance();
      }
      /**
       * <pre>
       * Ключ с таким идентификатором уже существует
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExistsOrBuilder getKeyAlreadyExistsOrBuilder() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists) reason_;
        }
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.getDefaultInstance();
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (reasonCase_ == 1) {
          output.writeMessage(1, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists) reason_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (reasonCase_ == 1) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists) reason_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError)) {
          return super.equals(obj);
        }
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError) obj;

        if (!getReasonCase().equals(other.getReasonCase())) return false;
        switch (reasonCase_) {
          case 1:
            if (!getKeyAlreadyExists()
                .equals(other.getKeyAlreadyExists())) return false;
            break;
          case 0:
          default:
        }
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        switch (reasonCase_) {
          case 1:
            hash = (37 * hash) + KEY_ALREADY_EXISTS_FIELD_NUMBER;
            hash = (53 * hash) + getKeyAlreadyExists().hashCode();
            break;
          case 0:
          default:
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * Ошибка сохранения.
       * Эти проверки выполняются при работе с базой данных и сторонними сервисами
       * </pre>
       *
       * Protobuf type {@code keyapis.jwks.v1.KeyInfo.SavingError}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.KeyInfo.SavingError)
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingErrorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_SavingError_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_SavingError_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.Builder.class);
        }

        // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          if (keyAlreadyExistsBuilder_ != null) {
            keyAlreadyExistsBuilder_.clear();
          }
          reasonCase_ = 0;
          reason_ = null;
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_SavingError_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError getDefaultInstanceForType() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError build() {
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError buildPartial() {
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          buildPartialOneofs(result);
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError result) {
          int from_bitField0_ = bitField0_;
        }

        private void buildPartialOneofs(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError result) {
          result.reasonCase_ = reasonCase_;
          result.reason_ = this.reason_;
          if (reasonCase_ == 1 &&
              keyAlreadyExistsBuilder_ != null) {
            result.reason_ = keyAlreadyExistsBuilder_.build();
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError) {
            return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError other) {
          if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.getDefaultInstance()) return this;
          switch (other.getReasonCase()) {
            case KEY_ALREADY_EXISTS: {
              mergeKeyAlreadyExists(other.getKeyAlreadyExists());
              break;
            }
            case REASON_NOT_SET: {
              break;
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

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

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 10: {
                  input.readMessage(
                      getKeyAlreadyExistsFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 1;
                  break;
                } // case 10
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int reasonCase_ = 0;
        private java.lang.Object reason_;
        public ReasonCase
            getReasonCase() {
          return ReasonCase.forNumber(
              reasonCase_);
        }

        public Builder clearReason() {
          reasonCase_ = 0;
          reason_ = null;
          onChanged();
          return this;
        }

        private int bitField0_;

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExistsOrBuilder> keyAlreadyExistsBuilder_;
        /**
         * <pre>
         * Ключ с таким идентификатором уже существует
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
         * @return Whether the keyAlreadyExists field is set.
         */
        @java.lang.Override
        public boolean hasKeyAlreadyExists() {
          return reasonCase_ == 1;
        }
        /**
         * <pre>
         * Ключ с таким идентификатором уже существует
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
         * @return The keyAlreadyExists.
         */
        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists getKeyAlreadyExists() {
          if (keyAlreadyExistsBuilder_ == null) {
            if (reasonCase_ == 1) {
              return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists) reason_;
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.getDefaultInstance();
          } else {
            if (reasonCase_ == 1) {
              return keyAlreadyExistsBuilder_.getMessage();
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ключ с таким идентификатором уже существует
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
         */
        public Builder setKeyAlreadyExists(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists value) {
          if (keyAlreadyExistsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            keyAlreadyExistsBuilder_.setMessage(value);
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ключ с таким идентификатором уже существует
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
         */
        public Builder setKeyAlreadyExists(
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.Builder builderForValue) {
          if (keyAlreadyExistsBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            keyAlreadyExistsBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ключ с таким идентификатором уже существует
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
         */
        public Builder mergeKeyAlreadyExists(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists value) {
          if (keyAlreadyExistsBuilder_ == null) {
            if (reasonCase_ == 1 &&
                reason_ != ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.getDefaultInstance()) {
              reason_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.newBuilder((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 1) {
              keyAlreadyExistsBuilder_.mergeFrom(value);
            } else {
              keyAlreadyExistsBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ключ с таким идентификатором уже существует
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
         */
        public Builder clearKeyAlreadyExists() {
          if (keyAlreadyExistsBuilder_ == null) {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
            }
            keyAlreadyExistsBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Ключ с таким идентификатором уже существует
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
         */
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.Builder getKeyAlreadyExistsBuilder() {
          return getKeyAlreadyExistsFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Ключ с таким идентификатором уже существует
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
         */
        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExistsOrBuilder getKeyAlreadyExistsOrBuilder() {
          if ((reasonCase_ == 1) && (keyAlreadyExistsBuilder_ != null)) {
            return keyAlreadyExistsBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 1) {
              return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists) reason_;
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ключ с таким идентификатором уже существует
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError.KeyAlreadyExists key_already_exists = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExistsOrBuilder> 
            getKeyAlreadyExistsFieldBuilder() {
          if (keyAlreadyExistsBuilder_ == null) {
            if (!(reasonCase_ == 1)) {
              reason_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.getDefaultInstance();
            }
            keyAlreadyExistsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExistsOrBuilder>(
                    (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.KeyAlreadyExists) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 1;
          onChanged();
          return keyAlreadyExistsBuilder_;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.KeyInfo.SavingError)
      }

      // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.KeyInfo.SavingError)
      private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError();
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<SavingError>
          PARSER = new com.google.protobuf.AbstractParser<SavingError>() {
        @java.lang.Override
        public SavingError parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          Builder builder = newBuilder();
          try {
            builder.mergeFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(builder.buildPartial());
          } catch (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public static final int ID_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private volatile java.lang.Object id_ = "";
    /**
     * <pre>
     * Идентификатор ключа, соответсвует kid.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The id.
     */
    @java.lang.Override
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        id_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Идентификатор ключа, соответсвует kid.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for id.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PUBLIC_KEY_FIELD_NUMBER = 2;
    private ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey publicKey_;
    /**
     * <pre>
     * Публичный ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return Whether the publicKey field is set.
     */
    @java.lang.Override
    public boolean hasPublicKey() {
      return publicKey_ != null;
    }
    /**
     * <pre>
     * Публичный ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The publicKey.
     */
    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getPublicKey() {
      return publicKey_ == null ? ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance() : publicKey_;
    }
    /**
     * <pre>
     * Публичный ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder getPublicKeyOrBuilder() {
      return publicKey_ == null ? ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance() : publicKey_;
    }

    public static final int CREATED_AT_FIELD_NUMBER = 3;
    private com.google.protobuf.Timestamp createdAt_;
    /**
     * <pre>
     * Дата создания.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return Whether the createdAt field is set.
     */
    @java.lang.Override
    public boolean hasCreatedAt() {
      return createdAt_ != null;
    }
    /**
     * <pre>
     * Дата создания.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return The createdAt.
     */
    @java.lang.Override
    public com.google.protobuf.Timestamp getCreatedAt() {
      return createdAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
    }
    /**
     * <pre>
     * Дата создания.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    @java.lang.Override
    public com.google.protobuf.TimestampOrBuilder getCreatedAtOrBuilder() {
      return createdAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
      }
      if (publicKey_ != null) {
        output.writeMessage(2, getPublicKey());
      }
      if (createdAt_ != null) {
        output.writeMessage(3, getCreatedAt());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
      }
      if (publicKey_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getPublicKey());
      }
      if (createdAt_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getCreatedAt());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo)) {
        return super.equals(obj);
      }
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo) obj;

      if (!getId()
          .equals(other.getId())) return false;
      if (hasPublicKey() != other.hasPublicKey()) return false;
      if (hasPublicKey()) {
        if (!getPublicKey()
            .equals(other.getPublicKey())) return false;
      }
      if (hasCreatedAt() != other.hasCreatedAt()) return false;
      if (hasCreatedAt()) {
        if (!getCreatedAt()
            .equals(other.getCreatedAt())) return false;
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + ID_FIELD_NUMBER;
      hash = (53 * hash) + getId().hashCode();
      if (hasPublicKey()) {
        hash = (37 * hash) + PUBLIC_KEY_FIELD_NUMBER;
        hash = (53 * hash) + getPublicKey().hashCode();
      }
      if (hasCreatedAt()) {
        hash = (37 * hash) + CREATED_AT_FIELD_NUMBER;
        hash = (53 * hash) + getCreatedAt().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Ключ.
     * # Описание модели
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.KeyInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.KeyInfo)
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.Builder.class);
      }

      // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        id_ = "";
        publicKey_ = null;
        if (publicKeyBuilder_ != null) {
          publicKeyBuilder_.dispose();
          publicKeyBuilder_ = null;
        }
        createdAt_ = null;
        if (createdAtBuilder_ != null) {
          createdAtBuilder_.dispose();
          createdAtBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_KeyInfo_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo getDefaultInstanceForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo build() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo buildPartial() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.id_ = id_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.publicKey_ = publicKeyBuilder_ == null
              ? publicKey_
              : publicKeyBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.createdAt_ = createdAtBuilder_ == null
              ? createdAt_
              : createdAtBuilder_.build();
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo) {
          return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo other) {
        if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.getDefaultInstance()) return this;
        if (!other.getId().isEmpty()) {
          id_ = other.id_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        if (other.hasPublicKey()) {
          mergePublicKey(other.getPublicKey());
        }
        if (other.hasCreatedAt()) {
          mergeCreatedAt(other.getCreatedAt());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                id_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              case 18: {
                input.readMessage(
                    getPublicKeyFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000002;
                break;
              } // case 18
              case 26: {
                input.readMessage(
                    getCreatedAtFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000004;
                break;
              } // case 26
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object id_ = "";
      /**
       * <pre>
       * Идентификатор ключа, соответсвует kid.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The id.
       */
      public java.lang.String getId() {
        java.lang.Object ref = id_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          id_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор ключа, соответсвует kid.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for id.
       */
      public com.google.protobuf.ByteString
          getIdBytes() {
        java.lang.Object ref = id_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор ключа, соответсвует kid.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The id to set.
       * @return This builder for chaining.
       */
      public Builder setId(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        id_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор ключа, соответсвует kid.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearId() {
        id_ = getDefaultInstance().getId();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор ключа, соответсвует kid.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The bytes for id to set.
       * @return This builder for chaining.
       */
      public Builder setIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        id_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }

      private ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey publicKey_;
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder> publicKeyBuilder_;
      /**
       * <pre>
       * Публичный ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return Whether the publicKey field is set.
       */
      public boolean hasPublicKey() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * Публичный ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The publicKey.
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getPublicKey() {
        if (publicKeyBuilder_ == null) {
          return publicKey_ == null ? ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance() : publicKey_;
        } else {
          return publicKeyBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Публичный ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setPublicKey(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey value) {
        if (publicKeyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          publicKey_ = value;
        } else {
          publicKeyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Публичный ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setPublicKey(
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder builderForValue) {
        if (publicKeyBuilder_ == null) {
          publicKey_ = builderForValue.build();
        } else {
          publicKeyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Публичный ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder mergePublicKey(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey value) {
        if (publicKeyBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
            publicKey_ != null &&
            publicKey_ != ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance()) {
            getPublicKeyBuilder().mergeFrom(value);
          } else {
            publicKey_ = value;
          }
        } else {
          publicKeyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Публичный ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder clearPublicKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        publicKey_ = null;
        if (publicKeyBuilder_ != null) {
          publicKeyBuilder_.dispose();
          publicKeyBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Публичный ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder getPublicKeyBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getPublicKeyFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Публичный ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder getPublicKeyOrBuilder() {
        if (publicKeyBuilder_ != null) {
          return publicKeyBuilder_.getMessageOrBuilder();
        } else {
          return publicKey_ == null ?
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance() : publicKey_;
        }
      }
      /**
       * <pre>
       * Публичный ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey public_key = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder> 
          getPublicKeyFieldBuilder() {
        if (publicKeyBuilder_ == null) {
          publicKeyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder>(
                  getPublicKey(),
                  getParentForChildren(),
                  isClean());
          publicKey_ = null;
        }
        return publicKeyBuilder_;
      }

      private com.google.protobuf.Timestamp createdAt_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createdAtBuilder_;
      /**
       * <pre>
       * Дата создания.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       * @return Whether the createdAt field is set.
       */
      public boolean hasCreatedAt() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <pre>
       * Дата создания.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       * @return The createdAt.
       */
      public com.google.protobuf.Timestamp getCreatedAt() {
        if (createdAtBuilder_ == null) {
          return createdAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
        } else {
          return createdAtBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Дата создания.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      public Builder setCreatedAt(com.google.protobuf.Timestamp value) {
        if (createdAtBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          createdAt_ = value;
        } else {
          createdAtBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата создания.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      public Builder setCreatedAt(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (createdAtBuilder_ == null) {
          createdAt_ = builderForValue.build();
        } else {
          createdAtBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата создания.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      public Builder mergeCreatedAt(com.google.protobuf.Timestamp value) {
        if (createdAtBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0) &&
            createdAt_ != null &&
            createdAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
            getCreatedAtBuilder().mergeFrom(value);
          } else {
            createdAt_ = value;
          }
        } else {
          createdAtBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата создания.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      public Builder clearCreatedAt() {
        bitField0_ = (bitField0_ & ~0x00000004);
        createdAt_ = null;
        if (createdAtBuilder_ != null) {
          createdAtBuilder_.dispose();
          createdAtBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата создания.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      public com.google.protobuf.Timestamp.Builder getCreatedAtBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getCreatedAtFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Дата создания.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      public com.google.protobuf.TimestampOrBuilder getCreatedAtOrBuilder() {
        if (createdAtBuilder_ != null) {
          return createdAtBuilder_.getMessageOrBuilder();
        } else {
          return createdAt_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
        }
      }
      /**
       * <pre>
       * Дата создания.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 3 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getCreatedAtFieldBuilder() {
        if (createdAtBuilder_ == null) {
          createdAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getCreatedAt(),
                  getParentForChildren(),
                  isClean());
          createdAt_ = null;
        }
        return createdAtBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.KeyInfo)
    }

    // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.KeyInfo)
    private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo();
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<KeyInfo>
        PARSER = new com.google.protobuf.AbstractParser<KeyInfo>() {
      @java.lang.Override
      public KeyInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PostKeyRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.PostKeyRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return Whether the data field is set.
     */
    boolean hasData();
    /**
     * <pre>
     * Ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The data.
     */
    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getData();
    /**
     * <pre>
     * Ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder getDataOrBuilder();
  }
  /**
   * <pre>
   * Запрос на сохранение публичного ключа
   * </pre>
   *
   * Protobuf type {@code keyapis.jwks.v1.PostKeyRequest}
   */
  public static final class PostKeyRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.PostKeyRequest)
      PostKeyRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PostKeyRequest.newBuilder() to construct.
    private PostKeyRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PostKeyRequest() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new PostKeyRequest();
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest.Builder.class);
    }

    public static final int DATA_FIELD_NUMBER = 1;
    private ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey data_;
    /**
     * <pre>
     * Ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return Whether the data field is set.
     */
    @java.lang.Override
    public boolean hasData() {
      return data_ != null;
    }
    /**
     * <pre>
     * Ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The data.
     */
    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getData() {
      return data_ == null ? ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance() : data_;
    }
    /**
     * <pre>
     * Ключ
     * </pre>
     *
     * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder getDataOrBuilder() {
      return data_ == null ? ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance() : data_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (data_ != null) {
        output.writeMessage(1, getData());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (data_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getData());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest)) {
        return super.equals(obj);
      }
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest) obj;

      if (hasData() != other.hasData()) return false;
      if (hasData()) {
        if (!getData()
            .equals(other.getData())) return false;
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasData()) {
        hash = (37 * hash) + DATA_FIELD_NUMBER;
        hash = (53 * hash) + getData().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Запрос на сохранение публичного ключа
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.PostKeyRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.PostKeyRequest)
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest.Builder.class);
      }

      // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        data_ = null;
        if (dataBuilder_ != null) {
          dataBuilder_.dispose();
          dataBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyRequest_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest getDefaultInstanceForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest build() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest buildPartial() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.data_ = dataBuilder_ == null
              ? data_
              : dataBuilder_.build();
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest) {
          return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest other) {
        if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest.getDefaultInstance()) return this;
        if (other.hasData()) {
          mergeData(other.getData());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getDataFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey data_;
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder> dataBuilder_;
      /**
       * <pre>
       * Ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return Whether the data field is set.
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * Ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The data.
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getData() {
        if (dataBuilder_ == null) {
          return data_ == null ? ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance() : data_;
        } else {
          return dataBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setData(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
        } else {
          dataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setData(
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder builderForValue) {
        if (dataBuilder_ == null) {
          data_ = builderForValue.build();
        } else {
          dataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder mergeData(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey value) {
        if (dataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
            data_ != null &&
            data_ != ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance()) {
            getDataBuilder().mergeFrom(value);
          } else {
            data_ = value;
          }
        } else {
          dataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder clearData() {
        bitField0_ = (bitField0_ & ~0x00000001);
        data_ = null;
        if (dataBuilder_ != null) {
          dataBuilder_.dispose();
          dataBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder getDataBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder getDataOrBuilder() {
        if (dataBuilder_ != null) {
          return dataBuilder_.getMessageOrBuilder();
        } else {
          return data_ == null ?
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance() : data_;
        }
      }
      /**
       * <pre>
       * Ключ
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          dataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder>(
                  getData(),
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        return dataBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.PostKeyRequest)
    }

    // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.PostKeyRequest)
    private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest();
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<PostKeyRequest>
        PARSER = new com.google.protobuf.AbstractParser<PostKeyRequest>() {
      @java.lang.Override
      public PostKeyRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PostKeyResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.PostKeyResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
     * @return Whether the error field is set.
     */
    boolean hasError();
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
     * @return The error.
     */
    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error getError();
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
     */
    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.ErrorOrBuilder getErrorOrBuilder();

    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.TypeCase getTypeCase();
  }
  /**
   * <pre>
   * Ответ на запрос на сохранение публичного ключа
   * </pre>
   *
   * Protobuf type {@code keyapis.jwks.v1.PostKeyResponse}
   */
  public static final class PostKeyResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.PostKeyResponse)
      PostKeyResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PostKeyResponse.newBuilder() to construct.
    private PostKeyResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PostKeyResponse() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new PostKeyResponse();
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Builder.class);
    }

    public interface ErrorOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.PostKeyResponse.Error)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Ошибки валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       * @return Whether the validation field is set.
       */
      boolean hasValidation();
      /**
       * <pre>
       * Ошибки валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       * @return The validation.
       */
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError getValidation();
      /**
       * <pre>
       * Ошибки валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       */
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder getValidationOrBuilder();

      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
       * @return Whether the saving field is set.
       */
      boolean hasSaving();
      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
       * @return The saving.
       */
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError getSaving();
      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
       */
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingErrorOrBuilder getSavingOrBuilder();

      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.ReasonCase getReasonCase();
    }
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.PostKeyResponse.Error}
     */
    public static final class Error extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.PostKeyResponse.Error)
        ErrorOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Error.newBuilder() to construct.
      private Error(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Error() {
      }

      @java.lang.Override
      @SuppressWarnings({"unused"})
      protected java.lang.Object newInstance(
          UnusedPrivateParameter unused) {
        return new Error();
      }

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyResponse_Error_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyResponse_Error_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.Builder.class);
      }

      private int reasonCase_ = 0;
      @SuppressWarnings("serial")
      private java.lang.Object reason_;
      public enum ReasonCase
          implements com.google.protobuf.Internal.EnumLite,
              com.google.protobuf.AbstractMessage.InternalOneOfEnum {
        VALIDATION(1),
        SAVING(2),
        REASON_NOT_SET(0);
        private final int value;
        private ReasonCase(int value) {
          this.value = value;
        }
        /**
         * @param value The number of the enum to look for.
         * @return The enum associated with the given number.
         * @deprecated Use {@link #forNumber(int)} instead.
         */
        @java.lang.Deprecated
        public static ReasonCase valueOf(int value) {
          return forNumber(value);
        }

        public static ReasonCase forNumber(int value) {
          switch (value) {
            case 1: return VALIDATION;
            case 2: return SAVING;
            case 0: return REASON_NOT_SET;
            default: return null;
          }
        }
        public int getNumber() {
          return this.value;
        }
      };

      public ReasonCase
      getReasonCase() {
        return ReasonCase.forNumber(
            reasonCase_);
      }

      public static final int VALIDATION_FIELD_NUMBER = 1;
      /**
       * <pre>
       * Ошибки валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       * @return Whether the validation field is set.
       */
      @java.lang.Override
      public boolean hasValidation() {
        return reasonCase_ == 1;
      }
      /**
       * <pre>
       * Ошибки валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       * @return The validation.
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError getValidation() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_;
        }
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
      }
      /**
       * <pre>
       * Ошибки валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder getValidationOrBuilder() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_;
        }
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
      }

      public static final int SAVING_FIELD_NUMBER = 2;
      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
       * @return Whether the saving field is set.
       */
      @java.lang.Override
      public boolean hasSaving() {
        return reasonCase_ == 2;
      }
      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
       * @return The saving.
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError getSaving() {
        if (reasonCase_ == 2) {
           return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError) reason_;
        }
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.getDefaultInstance();
      }
      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingErrorOrBuilder getSavingOrBuilder() {
        if (reasonCase_ == 2) {
           return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError) reason_;
        }
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.getDefaultInstance();
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (reasonCase_ == 1) {
          output.writeMessage(1, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_);
        }
        if (reasonCase_ == 2) {
          output.writeMessage(2, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError) reason_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (reasonCase_ == 1) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_);
        }
        if (reasonCase_ == 2) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError) reason_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error)) {
          return super.equals(obj);
        }
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error) obj;

        if (!getReasonCase().equals(other.getReasonCase())) return false;
        switch (reasonCase_) {
          case 1:
            if (!getValidation()
                .equals(other.getValidation())) return false;
            break;
          case 2:
            if (!getSaving()
                .equals(other.getSaving())) return false;
            break;
          case 0:
          default:
        }
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        switch (reasonCase_) {
          case 1:
            hash = (37 * hash) + VALIDATION_FIELD_NUMBER;
            hash = (53 * hash) + getValidation().hashCode();
            break;
          case 2:
            hash = (37 * hash) + SAVING_FIELD_NUMBER;
            hash = (53 * hash) + getSaving().hashCode();
            break;
          case 0:
          default:
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * Protobuf type {@code keyapis.jwks.v1.PostKeyResponse.Error}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.PostKeyResponse.Error)
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.ErrorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyResponse_Error_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyResponse_Error_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.Builder.class);
        }

        // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          if (validationBuilder_ != null) {
            validationBuilder_.clear();
          }
          if (savingBuilder_ != null) {
            savingBuilder_.clear();
          }
          reasonCase_ = 0;
          reason_ = null;
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyResponse_Error_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error getDefaultInstanceForType() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error build() {
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error buildPartial() {
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          buildPartialOneofs(result);
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error result) {
          int from_bitField0_ = bitField0_;
        }

        private void buildPartialOneofs(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error result) {
          result.reasonCase_ = reasonCase_;
          result.reason_ = this.reason_;
          if (reasonCase_ == 1 &&
              validationBuilder_ != null) {
            result.reason_ = validationBuilder_.build();
          }
          if (reasonCase_ == 2 &&
              savingBuilder_ != null) {
            result.reason_ = savingBuilder_.build();
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error) {
            return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error other) {
          if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.getDefaultInstance()) return this;
          switch (other.getReasonCase()) {
            case VALIDATION: {
              mergeValidation(other.getValidation());
              break;
            }
            case SAVING: {
              mergeSaving(other.getSaving());
              break;
            }
            case REASON_NOT_SET: {
              break;
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

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

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 10: {
                  input.readMessage(
                      getValidationFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 1;
                  break;
                } // case 10
                case 18: {
                  input.readMessage(
                      getSavingFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 2;
                  break;
                } // case 18
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int reasonCase_ = 0;
        private java.lang.Object reason_;
        public ReasonCase
            getReasonCase() {
          return ReasonCase.forNumber(
              reasonCase_);
        }

        public Builder clearReason() {
          reasonCase_ = 0;
          reason_ = null;
          onChanged();
          return this;
        }

        private int bitField0_;

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder> validationBuilder_;
        /**
         * <pre>
         * Ошибки валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         * @return Whether the validation field is set.
         */
        @java.lang.Override
        public boolean hasValidation() {
          return reasonCase_ == 1;
        }
        /**
         * <pre>
         * Ошибки валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         * @return The validation.
         */
        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError getValidation() {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1) {
              return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_;
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
          } else {
            if (reasonCase_ == 1) {
              return validationBuilder_.getMessage();
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибки валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        public Builder setValidation(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError value) {
          if (validationBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            validationBuilder_.setMessage(value);
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибки валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        public Builder setValidation(
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder builderForValue) {
          if (validationBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            validationBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибки валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        public Builder mergeValidation(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError value) {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1 &&
                reason_ != ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance()) {
              reason_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.newBuilder((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 1) {
              validationBuilder_.mergeFrom(value);
            } else {
              validationBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибки валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        public Builder clearValidation() {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
            }
            validationBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Ошибки валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder getValidationBuilder() {
          return getValidationFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Ошибки валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder getValidationOrBuilder() {
          if ((reasonCase_ == 1) && (validationBuilder_ != null)) {
            return validationBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 1) {
              return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_;
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибки валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder> 
            getValidationFieldBuilder() {
          if (validationBuilder_ == null) {
            if (!(reasonCase_ == 1)) {
              reason_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
            }
            validationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder>(
                    (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 1;
          onChanged();
          return validationBuilder_;
        }

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingErrorOrBuilder> savingBuilder_;
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
         * @return Whether the saving field is set.
         */
        @java.lang.Override
        public boolean hasSaving() {
          return reasonCase_ == 2;
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
         * @return The saving.
         */
        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError getSaving() {
          if (savingBuilder_ == null) {
            if (reasonCase_ == 2) {
              return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError) reason_;
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.getDefaultInstance();
          } else {
            if (reasonCase_ == 2) {
              return savingBuilder_.getMessage();
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
         */
        public Builder setSaving(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError value) {
          if (savingBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            savingBuilder_.setMessage(value);
          }
          reasonCase_ = 2;
          return this;
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
         */
        public Builder setSaving(
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.Builder builderForValue) {
          if (savingBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            savingBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 2;
          return this;
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
         */
        public Builder mergeSaving(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError value) {
          if (savingBuilder_ == null) {
            if (reasonCase_ == 2 &&
                reason_ != ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.getDefaultInstance()) {
              reason_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.newBuilder((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 2) {
              savingBuilder_.mergeFrom(value);
            } else {
              savingBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 2;
          return this;
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
         */
        public Builder clearSaving() {
          if (savingBuilder_ == null) {
            if (reasonCase_ == 2) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 2) {
              reasonCase_ = 0;
              reason_ = null;
            }
            savingBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
         */
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.Builder getSavingBuilder() {
          return getSavingFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
         */
        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingErrorOrBuilder getSavingOrBuilder() {
          if ((reasonCase_ == 2) && (savingBuilder_ != null)) {
            return savingBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 2) {
              return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError) reason_;
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.jwks.v1.KeyInfo.SavingError saving = 2;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingErrorOrBuilder> 
            getSavingFieldBuilder() {
          if (savingBuilder_ == null) {
            if (!(reasonCase_ == 2)) {
              reason_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.getDefaultInstance();
            }
            savingBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingErrorOrBuilder>(
                    (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.SavingError) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 2;
          onChanged();
          return savingBuilder_;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.PostKeyResponse.Error)
      }

      // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.PostKeyResponse.Error)
      private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error();
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Error>
          PARSER = new com.google.protobuf.AbstractParser<Error>() {
        @java.lang.Override
        public Error parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          Builder builder = newBuilder();
          try {
            builder.mergeFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(builder.buildPartial());
          } catch (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int typeCase_ = 0;
    @SuppressWarnings("serial")
    private java.lang.Object type_;
    public enum TypeCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      ERROR(1),
      TYPE_NOT_SET(0);
      private final int value;
      private TypeCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static TypeCase valueOf(int value) {
        return forNumber(value);
      }

      public static TypeCase forNumber(int value) {
        switch (value) {
          case 1: return ERROR;
          case 0: return TYPE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public TypeCase
    getTypeCase() {
      return TypeCase.forNumber(
          typeCase_);
    }

    public static final int ERROR_FIELD_NUMBER = 1;
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
     * @return Whether the error field is set.
     */
    @java.lang.Override
    public boolean hasError() {
      return typeCase_ == 1;
    }
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
     * @return The error.
     */
    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error getError() {
      if (typeCase_ == 1) {
         return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error) type_;
      }
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.getDefaultInstance();
    }
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
     */
    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.ErrorOrBuilder getErrorOrBuilder() {
      if (typeCase_ == 1) {
         return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error) type_;
      }
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.getDefaultInstance();
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (typeCase_ == 1) {
        output.writeMessage(1, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error) type_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (typeCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error) type_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse)) {
        return super.equals(obj);
      }
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse) obj;

      if (!getTypeCase().equals(other.getTypeCase())) return false;
      switch (typeCase_) {
        case 1:
          if (!getError()
              .equals(other.getError())) return false;
          break;
        case 0:
        default:
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (typeCase_) {
        case 1:
          hash = (37 * hash) + ERROR_FIELD_NUMBER;
          hash = (53 * hash) + getError().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Ответ на запрос на сохранение публичного ключа
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.PostKeyResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.PostKeyResponse)
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Builder.class);
      }

      // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        if (errorBuilder_ != null) {
          errorBuilder_.clear();
        }
        typeCase_ = 0;
        type_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_PostKeyResponse_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse getDefaultInstanceForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse build() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse buildPartial() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        buildPartialOneofs(result);
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse result) {
        int from_bitField0_ = bitField0_;
      }

      private void buildPartialOneofs(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse result) {
        result.typeCase_ = typeCase_;
        result.type_ = this.type_;
        if (typeCase_ == 1 &&
            errorBuilder_ != null) {
          result.type_ = errorBuilder_.build();
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse) {
          return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse other) {
        if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.getDefaultInstance()) return this;
        switch (other.getTypeCase()) {
          case ERROR: {
            mergeError(other.getError());
            break;
          }
          case TYPE_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getErrorFieldBuilder().getBuilder(),
                    extensionRegistry);
                typeCase_ = 1;
                break;
              } // case 10
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int typeCase_ = 0;
      private java.lang.Object type_;
      public TypeCase
          getTypeCase() {
        return TypeCase.forNumber(
            typeCase_);
      }

      public Builder clearType() {
        typeCase_ = 0;
        type_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.ErrorOrBuilder> errorBuilder_;
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
       * @return Whether the error field is set.
       */
      @java.lang.Override
      public boolean hasError() {
        return typeCase_ == 1;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
       * @return The error.
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error getError() {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1) {
            return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error) type_;
          }
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.getDefaultInstance();
        } else {
          if (typeCase_ == 1) {
            return errorBuilder_.getMessage();
          }
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
       */
      public Builder setError(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error value) {
        if (errorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          type_ = value;
          onChanged();
        } else {
          errorBuilder_.setMessage(value);
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
       */
      public Builder setError(
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.Builder builderForValue) {
        if (errorBuilder_ == null) {
          type_ = builderForValue.build();
          onChanged();
        } else {
          errorBuilder_.setMessage(builderForValue.build());
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
       */
      public Builder mergeError(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error value) {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1 &&
              type_ != ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.getDefaultInstance()) {
            type_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.newBuilder((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error) type_)
                .mergeFrom(value).buildPartial();
          } else {
            type_ = value;
          }
          onChanged();
        } else {
          if (typeCase_ == 1) {
            errorBuilder_.mergeFrom(value);
          } else {
            errorBuilder_.setMessage(value);
          }
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
       */
      public Builder clearError() {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1) {
            typeCase_ = 0;
            type_ = null;
            onChanged();
          }
        } else {
          if (typeCase_ == 1) {
            typeCase_ = 0;
            type_ = null;
          }
          errorBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.Builder getErrorBuilder() {
        return getErrorFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.ErrorOrBuilder getErrorOrBuilder() {
        if ((typeCase_ == 1) && (errorBuilder_ != null)) {
          return errorBuilder_.getMessageOrBuilder();
        } else {
          if (typeCase_ == 1) {
            return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error) type_;
          }
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.PostKeyResponse.Error error = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.ErrorOrBuilder> 
          getErrorFieldBuilder() {
        if (errorBuilder_ == null) {
          if (!(typeCase_ == 1)) {
            type_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.getDefaultInstance();
          }
          errorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.ErrorOrBuilder>(
                  (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse.Error) type_,
                  getParentForChildren(),
                  isClean());
          type_ = null;
        }
        typeCase_ = 1;
        onChanged();
        return errorBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.PostKeyResponse)
    }

    // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.PostKeyResponse)
    private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse();
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<PostKeyResponse>
        PARSER = new com.google.protobuf.AbstractParser<PostKeyResponse>() {
      @java.lang.Override
      public PostKeyResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.PostKeyResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeleteKeyRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.DeleteKeyRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Идентификатор ключа, соответсвует kid.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The id.
     */
    java.lang.String getId();
    /**
     * <pre>
     * Идентификатор ключа, соответсвует kid.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for id.
     */
    com.google.protobuf.ByteString
        getIdBytes();
  }
  /**
   * <pre>
   * Запрос удаления публичного ключа
   * </pre>
   *
   * Protobuf type {@code keyapis.jwks.v1.DeleteKeyRequest}
   */
  public static final class DeleteKeyRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.DeleteKeyRequest)
      DeleteKeyRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DeleteKeyRequest.newBuilder() to construct.
    private DeleteKeyRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DeleteKeyRequest() {
      id_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new DeleteKeyRequest();
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest.Builder.class);
    }

    public static final int ID_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private volatile java.lang.Object id_ = "";
    /**
     * <pre>
     * Идентификатор ключа, соответсвует kid.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The id.
     */
    @java.lang.Override
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        id_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Идентификатор ключа, соответсвует kid.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for id.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest)) {
        return super.equals(obj);
      }
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest) obj;

      if (!getId()
          .equals(other.getId())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + ID_FIELD_NUMBER;
      hash = (53 * hash) + getId().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Запрос удаления публичного ключа
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.DeleteKeyRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.DeleteKeyRequest)
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest.Builder.class);
      }

      // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        id_ = "";
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyRequest_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest getDefaultInstanceForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest build() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest buildPartial() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.id_ = id_;
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest) {
          return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest other) {
        if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest.getDefaultInstance()) return this;
        if (!other.getId().isEmpty()) {
          id_ = other.id_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                id_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object id_ = "";
      /**
       * <pre>
       * Идентификатор ключа, соответсвует kid.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The id.
       */
      public java.lang.String getId() {
        java.lang.Object ref = id_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          id_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор ключа, соответсвует kid.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for id.
       */
      public com.google.protobuf.ByteString
          getIdBytes() {
        java.lang.Object ref = id_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор ключа, соответсвует kid.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The id to set.
       * @return This builder for chaining.
       */
      public Builder setId(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        id_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор ключа, соответсвует kid.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearId() {
        id_ = getDefaultInstance().getId();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор ключа, соответсвует kid.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The bytes for id to set.
       * @return This builder for chaining.
       */
      public Builder setIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        id_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.DeleteKeyRequest)
    }

    // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.DeleteKeyRequest)
    private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest();
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<DeleteKeyRequest>
        PARSER = new com.google.protobuf.AbstractParser<DeleteKeyRequest>() {
      @java.lang.Override
      public DeleteKeyRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeleteKeyResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.DeleteKeyResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
     * @return Whether the error field is set.
     */
    boolean hasError();
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
     * @return The error.
     */
    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error getError();
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
     */
    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.ErrorOrBuilder getErrorOrBuilder();

    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.TypeCase getTypeCase();
  }
  /**
   * <pre>
   * Ответ на запрос удаления публичного ключа
   * </pre>
   *
   * Protobuf type {@code keyapis.jwks.v1.DeleteKeyResponse}
   */
  public static final class DeleteKeyResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.DeleteKeyResponse)
      DeleteKeyResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DeleteKeyResponse.newBuilder() to construct.
    private DeleteKeyResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DeleteKeyResponse() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new DeleteKeyResponse();
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Builder.class);
    }

    public interface ErrorOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.DeleteKeyResponse.Error)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       * @return Whether the validation field is set.
       */
      boolean hasValidation();
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       * @return The validation.
       */
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError getValidation();
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       */
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder getValidationOrBuilder();

      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.ReasonCase getReasonCase();
    }
    /**
     * <pre>
     * Ошибка запроса удаления публичного ключа
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.DeleteKeyResponse.Error}
     */
    public static final class Error extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.DeleteKeyResponse.Error)
        ErrorOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Error.newBuilder() to construct.
      private Error(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Error() {
      }

      @java.lang.Override
      @SuppressWarnings({"unused"})
      protected java.lang.Object newInstance(
          UnusedPrivateParameter unused) {
        return new Error();
      }

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyResponse_Error_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyResponse_Error_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.Builder.class);
      }

      private int reasonCase_ = 0;
      @SuppressWarnings("serial")
      private java.lang.Object reason_;
      public enum ReasonCase
          implements com.google.protobuf.Internal.EnumLite,
              com.google.protobuf.AbstractMessage.InternalOneOfEnum {
        VALIDATION(1),
        REASON_NOT_SET(0);
        private final int value;
        private ReasonCase(int value) {
          this.value = value;
        }
        /**
         * @param value The number of the enum to look for.
         * @return The enum associated with the given number.
         * @deprecated Use {@link #forNumber(int)} instead.
         */
        @java.lang.Deprecated
        public static ReasonCase valueOf(int value) {
          return forNumber(value);
        }

        public static ReasonCase forNumber(int value) {
          switch (value) {
            case 1: return VALIDATION;
            case 0: return REASON_NOT_SET;
            default: return null;
          }
        }
        public int getNumber() {
          return this.value;
        }
      };

      public ReasonCase
      getReasonCase() {
        return ReasonCase.forNumber(
            reasonCase_);
      }

      public static final int VALIDATION_FIELD_NUMBER = 1;
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       * @return Whether the validation field is set.
       */
      @java.lang.Override
      public boolean hasValidation() {
        return reasonCase_ == 1;
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       * @return The validation.
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError getValidation() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_;
        }
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder getValidationOrBuilder() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_;
        }
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (reasonCase_ == 1) {
          output.writeMessage(1, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (reasonCase_ == 1) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error)) {
          return super.equals(obj);
        }
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error) obj;

        if (!getReasonCase().equals(other.getReasonCase())) return false;
        switch (reasonCase_) {
          case 1:
            if (!getValidation()
                .equals(other.getValidation())) return false;
            break;
          case 0:
          default:
        }
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        switch (reasonCase_) {
          case 1:
            hash = (37 * hash) + VALIDATION_FIELD_NUMBER;
            hash = (53 * hash) + getValidation().hashCode();
            break;
          case 0:
          default:
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * Ошибка запроса удаления публичного ключа
       * </pre>
       *
       * Protobuf type {@code keyapis.jwks.v1.DeleteKeyResponse.Error}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.DeleteKeyResponse.Error)
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.ErrorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyResponse_Error_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyResponse_Error_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.Builder.class);
        }

        // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          if (validationBuilder_ != null) {
            validationBuilder_.clear();
          }
          reasonCase_ = 0;
          reason_ = null;
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyResponse_Error_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error getDefaultInstanceForType() {
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error build() {
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error buildPartial() {
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          buildPartialOneofs(result);
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error result) {
          int from_bitField0_ = bitField0_;
        }

        private void buildPartialOneofs(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error result) {
          result.reasonCase_ = reasonCase_;
          result.reason_ = this.reason_;
          if (reasonCase_ == 1 &&
              validationBuilder_ != null) {
            result.reason_ = validationBuilder_.build();
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error) {
            return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error other) {
          if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.getDefaultInstance()) return this;
          switch (other.getReasonCase()) {
            case VALIDATION: {
              mergeValidation(other.getValidation());
              break;
            }
            case REASON_NOT_SET: {
              break;
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

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

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 10: {
                  input.readMessage(
                      getValidationFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 1;
                  break;
                } // case 10
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int reasonCase_ = 0;
        private java.lang.Object reason_;
        public ReasonCase
            getReasonCase() {
          return ReasonCase.forNumber(
              reasonCase_);
        }

        public Builder clearReason() {
          reasonCase_ = 0;
          reason_ = null;
          onChanged();
          return this;
        }

        private int bitField0_;

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder> validationBuilder_;
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         * @return Whether the validation field is set.
         */
        @java.lang.Override
        public boolean hasValidation() {
          return reasonCase_ == 1;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         * @return The validation.
         */
        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError getValidation() {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1) {
              return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_;
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
          } else {
            if (reasonCase_ == 1) {
              return validationBuilder_.getMessage();
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        public Builder setValidation(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError value) {
          if (validationBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            validationBuilder_.setMessage(value);
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        public Builder setValidation(
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder builderForValue) {
          if (validationBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            validationBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        public Builder mergeValidation(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError value) {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1 &&
                reason_ != ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance()) {
              reason_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.newBuilder((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 1) {
              validationBuilder_.mergeFrom(value);
            } else {
              validationBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        public Builder clearValidation() {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
            }
            validationBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder getValidationBuilder() {
          return getValidationFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        @java.lang.Override
        public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder getValidationOrBuilder() {
          if ((reasonCase_ == 1) && (validationBuilder_ != null)) {
            return validationBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 1) {
              return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_;
            }
            return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.jwks.v1.ValidationError validation = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder> 
            getValidationFieldBuilder() {
          if (validationBuilder_ == null) {
            if (!(reasonCase_ == 1)) {
              reason_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
            }
            validationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder>(
                    (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 1;
          onChanged();
          return validationBuilder_;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.DeleteKeyResponse.Error)
      }

      // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.DeleteKeyResponse.Error)
      private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error();
      }

      public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Error>
          PARSER = new com.google.protobuf.AbstractParser<Error>() {
        @java.lang.Override
        public Error parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          Builder builder = newBuilder();
          try {
            builder.mergeFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(builder.buildPartial());
          } catch (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int typeCase_ = 0;
    @SuppressWarnings("serial")
    private java.lang.Object type_;
    public enum TypeCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      ERROR(1),
      TYPE_NOT_SET(0);
      private final int value;
      private TypeCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static TypeCase valueOf(int value) {
        return forNumber(value);
      }

      public static TypeCase forNumber(int value) {
        switch (value) {
          case 1: return ERROR;
          case 0: return TYPE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public TypeCase
    getTypeCase() {
      return TypeCase.forNumber(
          typeCase_);
    }

    public static final int ERROR_FIELD_NUMBER = 1;
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
     * @return Whether the error field is set.
     */
    @java.lang.Override
    public boolean hasError() {
      return typeCase_ == 1;
    }
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
     * @return The error.
     */
    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error getError() {
      if (typeCase_ == 1) {
         return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error) type_;
      }
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.getDefaultInstance();
    }
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
     */
    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.ErrorOrBuilder getErrorOrBuilder() {
      if (typeCase_ == 1) {
         return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error) type_;
      }
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.getDefaultInstance();
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (typeCase_ == 1) {
        output.writeMessage(1, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error) type_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (typeCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error) type_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse)) {
        return super.equals(obj);
      }
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse) obj;

      if (!getTypeCase().equals(other.getTypeCase())) return false;
      switch (typeCase_) {
        case 1:
          if (!getError()
              .equals(other.getError())) return false;
          break;
        case 0:
        default:
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (typeCase_) {
        case 1:
          hash = (37 * hash) + ERROR_FIELD_NUMBER;
          hash = (53 * hash) + getError().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Ответ на запрос удаления публичного ключа
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.DeleteKeyResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.DeleteKeyResponse)
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Builder.class);
      }

      // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        if (errorBuilder_ != null) {
          errorBuilder_.clear();
        }
        typeCase_ = 0;
        type_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_DeleteKeyResponse_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse getDefaultInstanceForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse build() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse buildPartial() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        buildPartialOneofs(result);
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse result) {
        int from_bitField0_ = bitField0_;
      }

      private void buildPartialOneofs(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse result) {
        result.typeCase_ = typeCase_;
        result.type_ = this.type_;
        if (typeCase_ == 1 &&
            errorBuilder_ != null) {
          result.type_ = errorBuilder_.build();
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse) {
          return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse other) {
        if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.getDefaultInstance()) return this;
        switch (other.getTypeCase()) {
          case ERROR: {
            mergeError(other.getError());
            break;
          }
          case TYPE_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getErrorFieldBuilder().getBuilder(),
                    extensionRegistry);
                typeCase_ = 1;
                break;
              } // case 10
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int typeCase_ = 0;
      private java.lang.Object type_;
      public TypeCase
          getTypeCase() {
        return TypeCase.forNumber(
            typeCase_);
      }

      public Builder clearType() {
        typeCase_ = 0;
        type_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.ErrorOrBuilder> errorBuilder_;
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
       * @return Whether the error field is set.
       */
      @java.lang.Override
      public boolean hasError() {
        return typeCase_ == 1;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
       * @return The error.
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error getError() {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1) {
            return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error) type_;
          }
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.getDefaultInstance();
        } else {
          if (typeCase_ == 1) {
            return errorBuilder_.getMessage();
          }
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
       */
      public Builder setError(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error value) {
        if (errorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          type_ = value;
          onChanged();
        } else {
          errorBuilder_.setMessage(value);
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
       */
      public Builder setError(
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.Builder builderForValue) {
        if (errorBuilder_ == null) {
          type_ = builderForValue.build();
          onChanged();
        } else {
          errorBuilder_.setMessage(builderForValue.build());
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
       */
      public Builder mergeError(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error value) {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1 &&
              type_ != ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.getDefaultInstance()) {
            type_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.newBuilder((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error) type_)
                .mergeFrom(value).buildPartial();
          } else {
            type_ = value;
          }
          onChanged();
        } else {
          if (typeCase_ == 1) {
            errorBuilder_.mergeFrom(value);
          } else {
            errorBuilder_.setMessage(value);
          }
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
       */
      public Builder clearError() {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1) {
            typeCase_ = 0;
            type_ = null;
            onChanged();
          }
        } else {
          if (typeCase_ == 1) {
            typeCase_ = 0;
            type_ = null;
          }
          errorBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.Builder getErrorBuilder() {
        return getErrorFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.ErrorOrBuilder getErrorOrBuilder() {
        if ((typeCase_ == 1) && (errorBuilder_ != null)) {
          return errorBuilder_.getMessageOrBuilder();
        } else {
          if (typeCase_ == 1) {
            return (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error) type_;
          }
          return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.jwks.v1.DeleteKeyResponse.Error error = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.ErrorOrBuilder> 
          getErrorFieldBuilder() {
        if (errorBuilder_ == null) {
          if (!(typeCase_ == 1)) {
            type_ = ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.getDefaultInstance();
          }
          errorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.ErrorOrBuilder>(
                  (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse.Error) type_,
                  getParentForChildren(),
                  isClean());
          type_ = null;
        }
        typeCase_ = 1;
        onChanged();
        return errorBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.DeleteKeyResponse)
    }

    // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.DeleteKeyResponse)
    private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse();
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<DeleteKeyResponse>
        PARSER = new com.google.protobuf.AbstractParser<DeleteKeyResponse>() {
      @java.lang.Override
      public DeleteKeyResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.DeleteKeyResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetKeyWellKnownJwksJsonRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.GetKeyWellKnownJwksJsonRequest)
      com.google.protobuf.MessageOrBuilder {
  }
  /**
   * <pre>
   * Запрос на получение публичных ключей
   * </pre>
   *
   * Protobuf type {@code keyapis.jwks.v1.GetKeyWellKnownJwksJsonRequest}
   */
  public static final class GetKeyWellKnownJwksJsonRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.GetKeyWellKnownJwksJsonRequest)
      GetKeyWellKnownJwksJsonRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetKeyWellKnownJwksJsonRequest.newBuilder() to construct.
    private GetKeyWellKnownJwksJsonRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetKeyWellKnownJwksJsonRequest() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new GetKeyWellKnownJwksJsonRequest();
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest.Builder.class);
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest)) {
        return super.equals(obj);
      }
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest) obj;

      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Запрос на получение публичных ключей
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.GetKeyWellKnownJwksJsonRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.GetKeyWellKnownJwksJsonRequest)
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest.Builder.class);
      }

      // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonRequest_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest getDefaultInstanceForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest build() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest buildPartial() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest(this);
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest) {
          return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest other) {
        if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest.getDefaultInstance()) return this;
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.GetKeyWellKnownJwksJsonRequest)
    }

    // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.GetKeyWellKnownJwksJsonRequest)
    private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest();
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<GetKeyWellKnownJwksJsonRequest>
        PARSER = new com.google.protobuf.AbstractParser<GetKeyWellKnownJwksJsonRequest>() {
      @java.lang.Override
      public GetKeyWellKnownJwksJsonRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetKeyWellKnownJwksJsonResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.GetKeyWellKnownJwksJsonResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Список ключей
     * </pre>
     *
     * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
     */
    java.util.List<ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey> 
        getDataList();
    /**
     * <pre>
     * Список ключей
     * </pre>
     *
     * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
     */
    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getData(int index);
    /**
     * <pre>
     * Список ключей
     * </pre>
     *
     * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
     */
    int getDataCount();
    /**
     * <pre>
     * Список ключей
     * </pre>
     *
     * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
     */
    java.util.List<? extends ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder> 
        getDataOrBuilderList();
    /**
     * <pre>
     * Список ключей
     * </pre>
     *
     * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
     */
    ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder getDataOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Ответ на запрос на получение публичных ключей
   * </pre>
   *
   * Protobuf type {@code keyapis.jwks.v1.GetKeyWellKnownJwksJsonResponse}
   */
  public static final class GetKeyWellKnownJwksJsonResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.GetKeyWellKnownJwksJsonResponse)
      GetKeyWellKnownJwksJsonResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetKeyWellKnownJwksJsonResponse.newBuilder() to construct.
    private GetKeyWellKnownJwksJsonResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetKeyWellKnownJwksJsonResponse() {
      data_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new GetKeyWellKnownJwksJsonResponse();
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse.Builder.class);
    }

    public static final int DATA_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private java.util.List<ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey> data_;
    /**
     * <pre>
     * Список ключей
     * </pre>
     *
     * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
     */
    @java.lang.Override
    public java.util.List<ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey> getDataList() {
      return data_;
    }
    /**
     * <pre>
     * Список ключей
     * </pre>
     *
     * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
     */
    @java.lang.Override
    public java.util.List<? extends ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder> 
        getDataOrBuilderList() {
      return data_;
    }
    /**
     * <pre>
     * Список ключей
     * </pre>
     *
     * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
     */
    @java.lang.Override
    public int getDataCount() {
      return data_.size();
    }
    /**
     * <pre>
     * Список ключей
     * </pre>
     *
     * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
     */
    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getData(int index) {
      return data_.get(index);
    }
    /**
     * <pre>
     * Список ключей
     * </pre>
     *
     * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
     */
    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder getDataOrBuilder(
        int index) {
      return data_.get(index);
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < data_.size(); i++) {
        output.writeMessage(1, data_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < data_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, data_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse)) {
        return super.equals(obj);
      }
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse) obj;

      if (!getDataList()
          .equals(other.getDataList())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getDataCount() > 0) {
        hash = (37 * hash) + DATA_FIELD_NUMBER;
        hash = (53 * hash) + getDataList().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Ответ на запрос на получение публичных ключей
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.GetKeyWellKnownJwksJsonResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.GetKeyWellKnownJwksJsonResponse)
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse.Builder.class);
      }

      // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        if (dataBuilder_ == null) {
          data_ = java.util.Collections.emptyList();
        } else {
          data_ = null;
          dataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonResponse_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse getDefaultInstanceForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse build() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse buildPartial() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse(this);
        buildPartialRepeatedFields(result);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartialRepeatedFields(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse result) {
        if (dataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            data_ = java.util.Collections.unmodifiableList(data_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.data_ = data_;
        } else {
          result.data_ = dataBuilder_.build();
        }
      }

      private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse result) {
        int from_bitField0_ = bitField0_;
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse) {
          return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse other) {
        if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse.getDefaultInstance()) return this;
        if (dataBuilder_ == null) {
          if (!other.data_.isEmpty()) {
            if (data_.isEmpty()) {
              data_ = other.data_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureDataIsMutable();
              data_.addAll(other.data_);
            }
            onChanged();
          }
        } else {
          if (!other.data_.isEmpty()) {
            if (dataBuilder_.isEmpty()) {
              dataBuilder_.dispose();
              dataBuilder_ = null;
              data_ = other.data_;
              bitField0_ = (bitField0_ & ~0x00000001);
              dataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDataFieldBuilder() : null;
            } else {
              dataBuilder_.addAllMessages(other.data_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey m =
                    input.readMessage(
                        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.parser(),
                        extensionRegistry);
                if (dataBuilder_ == null) {
                  ensureDataIsMutable();
                  data_.add(m);
                } else {
                  dataBuilder_.addMessage(m);
                }
                break;
              } // case 10
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.util.List<ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey> data_ =
        java.util.Collections.emptyList();
      private void ensureDataIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          data_ = new java.util.ArrayList<ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey>(data_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder> dataBuilder_;

      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public java.util.List<ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey> getDataList() {
        if (dataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(data_);
        } else {
          return dataBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public int getDataCount() {
        if (dataBuilder_ == null) {
          return data_.size();
        } else {
          return dataBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey getData(int index) {
        if (dataBuilder_ == null) {
          return data_.get(index);
        } else {
          return dataBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public Builder setData(
          int index, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDataIsMutable();
          data_.set(index, value);
          onChanged();
        } else {
          dataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public Builder setData(
          int index, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder builderForValue) {
        if (dataBuilder_ == null) {
          ensureDataIsMutable();
          data_.set(index, builderForValue.build());
          onChanged();
        } else {
          dataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public Builder addData(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDataIsMutable();
          data_.add(value);
          onChanged();
        } else {
          dataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public Builder addData(
          int index, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDataIsMutable();
          data_.add(index, value);
          onChanged();
        } else {
          dataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public Builder addData(
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder builderForValue) {
        if (dataBuilder_ == null) {
          ensureDataIsMutable();
          data_.add(builderForValue.build());
          onChanged();
        } else {
          dataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public Builder addData(
          int index, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder builderForValue) {
        if (dataBuilder_ == null) {
          ensureDataIsMutable();
          data_.add(index, builderForValue.build());
          onChanged();
        } else {
          dataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public Builder addAllData(
          java.lang.Iterable<? extends ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey> values) {
        if (dataBuilder_ == null) {
          ensureDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, data_);
          onChanged();
        } else {
          dataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public Builder clearData() {
        if (dataBuilder_ == null) {
          data_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          dataBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public Builder removeData(int index) {
        if (dataBuilder_ == null) {
          ensureDataIsMutable();
          data_.remove(index);
          onChanged();
        } else {
          dataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder getDataBuilder(
          int index) {
        return getDataFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder getDataOrBuilder(
          int index) {
        if (dataBuilder_ == null) {
          return data_.get(index);  } else {
          return dataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public java.util.List<? extends ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder> 
           getDataOrBuilderList() {
        if (dataBuilder_ != null) {
          return dataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(data_);
        }
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder addDataBuilder() {
        return getDataFieldBuilder().addBuilder(
            ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance());
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder addDataBuilder(
          int index) {
        return getDataFieldBuilder().addBuilder(
            index, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.getDefaultInstance());
      }
      /**
       * <pre>
       * Список ключей
       * </pre>
       *
       * <code>repeated .keyapis.jwks.v1.KeyInfo.PublicKey data = 1 [json_name = "keys"];</code>
       */
      public java.util.List<ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder> 
           getDataBuilderList() {
        return getDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          dataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKey.Builder, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.KeyInfo.PublicKeyOrBuilder>(
                  data_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        return dataBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.GetKeyWellKnownJwksJsonResponse)
    }

    // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.GetKeyWellKnownJwksJsonResponse)
    private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse();
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<GetKeyWellKnownJwksJsonResponse>
        PARSER = new com.google.protobuf.AbstractParser<GetKeyWellKnownJwksJsonResponse>() {
      @java.lang.Override
      public GetKeyWellKnownJwksJsonResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.GetKeyWellKnownJwksJsonResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ValidationErrorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.jwks.v1.ValidationError)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Путь к полю в формате наименования прото
     * </pre>
     *
     * <code>string path = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The path.
     */
    java.lang.String getPath();
    /**
     * <pre>
     * Путь к полю в формате наименования прото
     * </pre>
     *
     * <code>string path = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for path.
     */
    com.google.protobuf.ByteString
        getPathBytes();

    /**
     * <pre>
     * Валидационное сообщение
     * </pre>
     *
     * <code>string message = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The message.
     */
    java.lang.String getMessage();
    /**
     * <pre>
     * Валидационное сообщение
     * </pre>
     *
     * <code>string message = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for message.
     */
    com.google.protobuf.ByteString
        getMessageBytes();
  }
  /**
   * <pre>
   * Ошибки валидации.
   * Эти проверки выполняются до обращения в базу данных
   * </pre>
   *
   * Protobuf type {@code keyapis.jwks.v1.ValidationError}
   */
  public static final class ValidationError extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.jwks.v1.ValidationError)
      ValidationErrorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ValidationError.newBuilder() to construct.
    private ValidationError(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ValidationError() {
      path_ = "";
      message_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ValidationError();
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_ValidationError_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_ValidationError_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder.class);
    }

    public static final int PATH_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private volatile java.lang.Object path_ = "";
    /**
     * <pre>
     * Путь к полю в формате наименования прото
     * </pre>
     *
     * <code>string path = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The path.
     */
    @java.lang.Override
    public java.lang.String getPath() {
      java.lang.Object ref = path_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        path_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Путь к полю в формате наименования прото
     * </pre>
     *
     * <code>string path = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for path.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPathBytes() {
      java.lang.Object ref = path_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        path_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MESSAGE_FIELD_NUMBER = 2;
    @SuppressWarnings("serial")
    private volatile java.lang.Object message_ = "";
    /**
     * <pre>
     * Валидационное сообщение
     * </pre>
     *
     * <code>string message = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The message.
     */
    @java.lang.Override
    public java.lang.String getMessage() {
      java.lang.Object ref = message_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        message_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Валидационное сообщение
     * </pre>
     *
     * <code>string message = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for message.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getMessageBytes() {
      java.lang.Object ref = message_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        message_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(path_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, path_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, message_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(path_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, path_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, message_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError)) {
        return super.equals(obj);
      }
      ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError other = (ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) obj;

      if (!getPath()
          .equals(other.getPath())) return false;
      if (!getMessage()
          .equals(other.getMessage())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + PATH_FIELD_NUMBER;
      hash = (53 * hash) + getPath().hashCode();
      hash = (37 * hash) + MESSAGE_FIELD_NUMBER;
      hash = (53 * hash) + getMessage().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Ошибки валидации.
     * Эти проверки выполняются до обращения в базу данных
     * </pre>
     *
     * Protobuf type {@code keyapis.jwks.v1.ValidationError}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.jwks.v1.ValidationError)
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationErrorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_ValidationError_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_ValidationError_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.class, ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.Builder.class);
      }

      // Construct using ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        path_ = "";
        message_ = "";
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.internal_static_keyapis_jwks_v1_ValidationError_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError getDefaultInstanceForType() {
        return ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError build() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError buildPartial() {
        ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError result = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.path_ = path_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.message_ = message_;
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError) {
          return mergeFrom((ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError other) {
        if (other == ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError.getDefaultInstance()) return this;
        if (!other.getPath().isEmpty()) {
          path_ = other.path_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        if (!other.getMessage().isEmpty()) {
          message_ = other.message_;
          bitField0_ |= 0x00000002;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                path_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              case 18: {
                message_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000002;
                break;
              } // case 18
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object path_ = "";
      /**
       * <pre>
       * Путь к полю в формате наименования прото
       * </pre>
       *
       * <code>string path = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The path.
       */
      public java.lang.String getPath() {
        java.lang.Object ref = path_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          path_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Путь к полю в формате наименования прото
       * </pre>
       *
       * <code>string path = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for path.
       */
      public com.google.protobuf.ByteString
          getPathBytes() {
        java.lang.Object ref = path_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          path_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Путь к полю в формате наименования прото
       * </pre>
       *
       * <code>string path = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The path to set.
       * @return This builder for chaining.
       */
      public Builder setPath(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        path_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Путь к полю в формате наименования прото
       * </pre>
       *
       * <code>string path = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearPath() {
        path_ = getDefaultInstance().getPath();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Путь к полю в формате наименования прото
       * </pre>
       *
       * <code>string path = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The bytes for path to set.
       * @return This builder for chaining.
       */
      public Builder setPathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        path_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }

      private java.lang.Object message_ = "";
      /**
       * <pre>
       * Валидационное сообщение
       * </pre>
       *
       * <code>string message = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The message.
       */
      public java.lang.String getMessage() {
        java.lang.Object ref = message_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          message_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Валидационное сообщение
       * </pre>
       *
       * <code>string message = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for message.
       */
      public com.google.protobuf.ByteString
          getMessageBytes() {
        java.lang.Object ref = message_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          message_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Валидационное сообщение
       * </pre>
       *
       * <code>string message = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The message to set.
       * @return This builder for chaining.
       */
      public Builder setMessage(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        message_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Валидационное сообщение
       * </pre>
       *
       * <code>string message = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearMessage() {
        message_ = getDefaultInstance().getMessage();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Валидационное сообщение
       * </pre>
       *
       * <code>string message = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The bytes for message to set.
       * @return This builder for chaining.
       */
      public Builder setMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        message_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:keyapis.jwks.v1.ValidationError)
    }

    // @@protoc_insertion_point(class_scope:keyapis.jwks.v1.ValidationError)
    private static final ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError();
    }

    public static ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ValidationError>
        PARSER = new com.google.protobuf.AbstractParser<ValidationError>() {
      @java.lang.Override
      public ValidationError parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.jwks.v1.KeyapisJwksV1Proto.ValidationError getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_KeyInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_KeyInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_KeyInfo_PublicKey_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_KeyInfo_PublicKey_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_KeyInfo_SavingError_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_KeyInfo_SavingError_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_KeyInfo_SavingError_KeyAlreadyExists_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_KeyInfo_SavingError_KeyAlreadyExists_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_PostKeyRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_PostKeyRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_PostKeyResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_PostKeyResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_PostKeyResponse_Error_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_PostKeyResponse_Error_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_DeleteKeyRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_DeleteKeyRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_DeleteKeyResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_DeleteKeyResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_DeleteKeyResponse_Error_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_DeleteKeyResponse_Error_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_jwks_v1_ValidationError_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_jwks_v1_ValidationError_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n)keyapis/jwks/v1/keyapis_jwks_key_v1.pr" +
      "oto\022\017keyapis.jwks.v1\032\034google/api/annotat" +
      "ions.proto\032\037google/api/field_behavior.pr" +
      "oto\032 google/protobuf/descriptor.proto\032\037g" +
      "oogle/protobuf/timestamp.proto\032\036google/p" +
      "rotobuf/wrappers.proto\"\214\003\n\007KeyInfo\022\017\n\002id" +
      "\030\001 \001(\tB\003\340A\002\022;\n\npublic_key\030\002 \001(\0132\".keyapi" +
      "s.jwks.v1.KeyInfo.PublicKeyB\003\340A\002\0223\n\ncrea" +
      "ted_at\030\003 \001(\0132\032.google.protobuf.Timestamp" +
      "B\003\340A\003\032{\n\tPublicKey\022\020\n\003use\030\001 \001(\tB\003\340A\002\022\020\n\003" +
      "kty\030\002 \001(\tB\003\340A\002\022\020\n\003kid\030\003 \001(\tB\003\340A\002\022\013\n\003alg\030" +
      "\004 \001(\t\022\016\n\001n\030\005 \001(\tB\003\340A\002\022\016\n\001e\030\006 \001(\tB\003\340A\002\022\013\n" +
      "\003x5c\030\007 \003(\t\032\200\001\n\013SavingError\022S\n\022key_alread" +
      "y_exists\030\001 \001(\01325.keyapis.jwks.v1.KeyInfo" +
      ".SavingError.KeyAlreadyExistsH\000\032\022\n\020KeyAl" +
      "readyExistsB\010\n\006reason\"G\n\016PostKeyRequest\022" +
      "5\n\004data\030\001 \001(\0132\".keyapis.jwks.v1.KeyInfo." +
      "PublicKeyB\003\340A\002\"\326\001\n\017PostKeyResponse\0227\n\005er" +
      "ror\030\001 \001(\0132&.keyapis.jwks.v1.PostKeyRespo" +
      "nse.ErrorH\000\032\201\001\n\005Error\0226\n\nvalidation\030\001 \001(" +
      "\0132 .keyapis.jwks.v1.ValidationErrorH\000\0226\n" +
      "\006saving\030\002 \001(\0132$.keyapis.jwks.v1.KeyInfo." +
      "SavingErrorH\000B\010\n\006reasonB\006\n\004type\"#\n\020Delet" +
      "eKeyRequest\022\017\n\002id\030\001 \001(\tB\003\340A\002\"\241\001\n\021DeleteK" +
      "eyResponse\0229\n\005error\030\001 \001(\0132(.keyapis.jwks" +
      ".v1.DeleteKeyResponse.ErrorH\000\032I\n\005Error\0226" +
      "\n\nvalidation\030\001 \001(\0132 .keyapis.jwks.v1.Val" +
      "idationErrorH\000B\010\n\006reasonB\006\n\004type\" \n\036GetK" +
      "eyWellKnownJwksJsonRequest\"Y\n\037GetKeyWell" +
      "KnownJwksJsonResponse\0226\n\004data\030\001 \003(\0132\".ke" +
      "yapis.jwks.v1.KeyInfo.PublicKeyR\004keys\":\n" +
      "\017ValidationError\022\021\n\004path\030\001 \001(\tB\003\340A\002\022\024\n\007m" +
      "essage\030\002 \001(\tB\003\340A\0022\253\003\n\nKeyService\022r\n\007Post" +
      "Key\022\037.keyapis.jwks.v1.PostKeyRequest\032 .k" +
      "eyapis.jwks.v1.PostKeyResponse\"$\202\323\344\223\002\036\"\031" +
      "/jwks/internal/api/v1/key:\001*\022z\n\tDeleteKe" +
      "y\022!.keyapis.jwks.v1.DeleteKeyRequest\032\".k" +
      "eyapis.jwks.v1.DeleteKeyResponse\"&\202\323\344\223\002 " +
      "*\036/jwks/internal/api/v1/key/{id}\022\254\001\n\027Get" +
      "KeyWellKnownJwksJson\022/.keyapis.jwks.v1.G" +
      "etKeyWellKnownJwksJsonRequest\0320.keyapis." +
      "jwks.v1.GetKeyWellKnownJwksJsonResponse\"" +
      ".\202\323\344\223\002(\022&/jwks/api/v1/key/.well-known/jw" +
      "ks.jsonB\214\001\n\022ru.keyapis.jwks.v1B\022KeyapisJ" +
      "wksV1ProtoH\003P\000Z\020/keyapis_jwks_v1\330\001\001\370\001\001\242\002" +
      "\rKEYAPISJWKSV1\252\002\017Keyapis.Jwks.V1\312\002\017Keyap" +
      "is\\Jwks\\V1\352\002\021Keyapis::Jwks::V1b\006proto3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          com.google.api.AnnotationsProto.getDescriptor(),
          com.google.api.FieldBehaviorProto.getDescriptor(),
          com.google.protobuf.DescriptorProtos.getDescriptor(),
          com.google.protobuf.TimestampProto.getDescriptor(),
          com.google.protobuf.WrappersProto.getDescriptor(),
        });
    internal_static_keyapis_jwks_v1_KeyInfo_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_keyapis_jwks_v1_KeyInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_KeyInfo_descriptor,
        new java.lang.String[] { "Id", "PublicKey", "CreatedAt", });
    internal_static_keyapis_jwks_v1_KeyInfo_PublicKey_descriptor =
      internal_static_keyapis_jwks_v1_KeyInfo_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_jwks_v1_KeyInfo_PublicKey_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_KeyInfo_PublicKey_descriptor,
        new java.lang.String[] { "Use", "Kty", "Kid", "Alg", "N", "E", "X5C", });
    internal_static_keyapis_jwks_v1_KeyInfo_SavingError_descriptor =
      internal_static_keyapis_jwks_v1_KeyInfo_descriptor.getNestedTypes().get(1);
    internal_static_keyapis_jwks_v1_KeyInfo_SavingError_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_KeyInfo_SavingError_descriptor,
        new java.lang.String[] { "KeyAlreadyExists", "Reason", });
    internal_static_keyapis_jwks_v1_KeyInfo_SavingError_KeyAlreadyExists_descriptor =
      internal_static_keyapis_jwks_v1_KeyInfo_SavingError_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_jwks_v1_KeyInfo_SavingError_KeyAlreadyExists_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_KeyInfo_SavingError_KeyAlreadyExists_descriptor,
        new java.lang.String[] { });
    internal_static_keyapis_jwks_v1_PostKeyRequest_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_keyapis_jwks_v1_PostKeyRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_PostKeyRequest_descriptor,
        new java.lang.String[] { "Data", });
    internal_static_keyapis_jwks_v1_PostKeyResponse_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_keyapis_jwks_v1_PostKeyResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_PostKeyResponse_descriptor,
        new java.lang.String[] { "Error", "Type", });
    internal_static_keyapis_jwks_v1_PostKeyResponse_Error_descriptor =
      internal_static_keyapis_jwks_v1_PostKeyResponse_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_jwks_v1_PostKeyResponse_Error_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_PostKeyResponse_Error_descriptor,
        new java.lang.String[] { "Validation", "Saving", "Reason", });
    internal_static_keyapis_jwks_v1_DeleteKeyRequest_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_keyapis_jwks_v1_DeleteKeyRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_DeleteKeyRequest_descriptor,
        new java.lang.String[] { "Id", });
    internal_static_keyapis_jwks_v1_DeleteKeyResponse_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_keyapis_jwks_v1_DeleteKeyResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_DeleteKeyResponse_descriptor,
        new java.lang.String[] { "Error", "Type", });
    internal_static_keyapis_jwks_v1_DeleteKeyResponse_Error_descriptor =
      internal_static_keyapis_jwks_v1_DeleteKeyResponse_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_jwks_v1_DeleteKeyResponse_Error_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_DeleteKeyResponse_Error_descriptor,
        new java.lang.String[] { "Validation", "Reason", });
    internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonRequest_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonRequest_descriptor,
        new java.lang.String[] { });
    internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonResponse_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_GetKeyWellKnownJwksJsonResponse_descriptor,
        new java.lang.String[] { "Data", });
    internal_static_keyapis_jwks_v1_ValidationError_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_keyapis_jwks_v1_ValidationError_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_jwks_v1_ValidationError_descriptor,
        new java.lang.String[] { "Path", "Message", });
    com.google.protobuf.ExtensionRegistry registry =
        com.google.protobuf.ExtensionRegistry.newInstance();
    registry.add(com.google.api.FieldBehaviorProto.fieldBehavior);
    registry.add(com.google.api.AnnotationsProto.http);
    com.google.protobuf.Descriptors.FileDescriptor
        .internalUpdateFileDescriptor(descriptor, registry);
    com.google.api.AnnotationsProto.getDescriptor();
    com.google.api.FieldBehaviorProto.getDescriptor();
    com.google.protobuf.DescriptorProtos.getDescriptor();
    com.google.protobuf.TimestampProto.getDescriptor();
    com.google.protobuf.WrappersProto.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
