All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yoti.api.client.spi.remote.proto.AttrProto Maven / Gradle / Ivy

The newest version!
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: Attribute.proto

package com.yoti.api.client.spi.remote.proto;

public final class AttrProto {
  private AttrProto() {}
  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 AttributeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:attrpubapi_v1.Attribute)
      com.google.protobuf.MessageOrBuilder {

    /**
     * string name = 1;
     * @return The name.
     */
    java.lang.String getName();
    /**
     * string name = 1;
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * bytes value = 2;
     * @return The value.
     */
    com.google.protobuf.ByteString getValue();

    /**
     * .attrpubapi_v1.ContentType content_type = 3;
     * @return The enum numeric value on the wire for contentType.
     */
    int getContentTypeValue();
    /**
     * .attrpubapi_v1.ContentType content_type = 3;
     * @return The contentType.
     */
    com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType getContentType();

    /**
     * repeated .attrpubapi_v1.Anchor anchors = 4;
     */
    java.util.List 
        getAnchorsList();
    /**
     * repeated .attrpubapi_v1.Anchor anchors = 4;
     */
    com.yoti.api.client.spi.remote.proto.AttrProto.Anchor getAnchors(int index);
    /**
     * repeated .attrpubapi_v1.Anchor anchors = 4;
     */
    int getAnchorsCount();
    /**
     * repeated .attrpubapi_v1.Anchor anchors = 4;
     */
    java.util.List 
        getAnchorsOrBuilderList();
    /**
     * repeated .attrpubapi_v1.Anchor anchors = 4;
     */
    com.yoti.api.client.spi.remote.proto.AttrProto.AnchorOrBuilder getAnchorsOrBuilder(
        int index);

    /**
     * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
     */
    java.util.List 
        getUserMetadataList();
    /**
     * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
     */
    com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata getUserMetadata(int index);
    /**
     * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
     */
    int getUserMetadataCount();
    /**
     * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
     */
    java.util.List 
        getUserMetadataOrBuilderList();
    /**
     * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
     */
    com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadataOrBuilder getUserMetadataOrBuilder(
        int index);

    /**
     * .attrpubapi_v1.Metadata metadata = 6;
     * @return Whether the metadata field is set.
     */
    boolean hasMetadata();
    /**
     * .attrpubapi_v1.Metadata metadata = 6;
     * @return The metadata.
     */
    com.yoti.api.client.spi.remote.proto.AttrProto.Metadata getMetadata();
    /**
     * .attrpubapi_v1.Metadata metadata = 6;
     */
    com.yoti.api.client.spi.remote.proto.AttrProto.MetadataOrBuilder getMetadataOrBuilder();

    /**
     * string ephemeral_id = 7;
     * @return The ephemeralId.
     */
    java.lang.String getEphemeralId();
    /**
     * string ephemeral_id = 7;
     * @return The bytes for ephemeralId.
     */
    com.google.protobuf.ByteString
        getEphemeralIdBytes();
  }
  /**
   * Protobuf type {@code attrpubapi_v1.Attribute}
   */
  public static final class Attribute extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:attrpubapi_v1.Attribute)
      AttributeOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Attribute.newBuilder() to construct.
    private Attribute(com.google.protobuf.GeneratedMessageV3.Builder builder) {
      super(builder);
    }
    private Attribute() {
      name_ = "";
      value_ = com.google.protobuf.ByteString.EMPTY;
      contentType_ = 0;
      anchors_ = java.util.Collections.emptyList();
      userMetadata_ = java.util.Collections.emptyList();
      ephemeralId_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Attribute(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              name_ = s;
              break;
            }
            case 18: {

              value_ = input.readBytes();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();

              contentType_ = rawValue;
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                anchors_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              anchors_.add(
                  input.readMessage(com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.parser(), extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                userMetadata_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              userMetadata_.add(
                  input.readMessage(com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.parser(), extensionRegistry));
              break;
            }
            case 50: {
              com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.Builder subBuilder = null;
              if (metadata_ != null) {
                subBuilder = metadata_.toBuilder();
              }
              metadata_ = input.readMessage(com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(metadata_);
                metadata_ = subBuilder.buildPartial();
              }

              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();

              ephemeralId_ = s;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          anchors_ = java.util.Collections.unmodifiableList(anchors_);
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          userMetadata_ = java.util.Collections.unmodifiableList(userMetadata_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Attribute_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Attribute_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.yoti.api.client.spi.remote.proto.AttrProto.Attribute.class, com.yoti.api.client.spi.remote.proto.AttrProto.Attribute.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * string name = 1;
     * @return The name.
     */
    @java.lang.Override
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      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();
        name_ = s;
        return s;
      }
    }
    /**
     * string name = 1;
     * @return The bytes for name.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString value_;
    /**
     * bytes value = 2;
     * @return The value.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getValue() {
      return value_;
    }

    public static final int CONTENT_TYPE_FIELD_NUMBER = 3;
    private int contentType_;
    /**
     * .attrpubapi_v1.ContentType content_type = 3;
     * @return The enum numeric value on the wire for contentType.
     */
    @java.lang.Override public int getContentTypeValue() {
      return contentType_;
    }
    /**
     * .attrpubapi_v1.ContentType content_type = 3;
     * @return The contentType.
     */
    @java.lang.Override public com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType getContentType() {
      @SuppressWarnings("deprecation")
      com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType result = com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.valueOf(contentType_);
      return result == null ? com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.UNRECOGNIZED : result;
    }

    public static final int ANCHORS_FIELD_NUMBER = 4;
    private java.util.List anchors_;
    /**
     * repeated .attrpubapi_v1.Anchor anchors = 4;
     */
    @java.lang.Override
    public java.util.List getAnchorsList() {
      return anchors_;
    }
    /**
     * repeated .attrpubapi_v1.Anchor anchors = 4;
     */
    @java.lang.Override
    public java.util.List 
        getAnchorsOrBuilderList() {
      return anchors_;
    }
    /**
     * repeated .attrpubapi_v1.Anchor anchors = 4;
     */
    @java.lang.Override
    public int getAnchorsCount() {
      return anchors_.size();
    }
    /**
     * repeated .attrpubapi_v1.Anchor anchors = 4;
     */
    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.Anchor getAnchors(int index) {
      return anchors_.get(index);
    }
    /**
     * repeated .attrpubapi_v1.Anchor anchors = 4;
     */
    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.AnchorOrBuilder getAnchorsOrBuilder(
        int index) {
      return anchors_.get(index);
    }

    public static final int USER_METADATA_FIELD_NUMBER = 5;
    private java.util.List userMetadata_;
    /**
     * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
     */
    @java.lang.Override
    public java.util.List getUserMetadataList() {
      return userMetadata_;
    }
    /**
     * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
     */
    @java.lang.Override
    public java.util.List 
        getUserMetadataOrBuilderList() {
      return userMetadata_;
    }
    /**
     * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
     */
    @java.lang.Override
    public int getUserMetadataCount() {
      return userMetadata_.size();
    }
    /**
     * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
     */
    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata getUserMetadata(int index) {
      return userMetadata_.get(index);
    }
    /**
     * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
     */
    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadataOrBuilder getUserMetadataOrBuilder(
        int index) {
      return userMetadata_.get(index);
    }

    public static final int METADATA_FIELD_NUMBER = 6;
    private com.yoti.api.client.spi.remote.proto.AttrProto.Metadata metadata_;
    /**
     * .attrpubapi_v1.Metadata metadata = 6;
     * @return Whether the metadata field is set.
     */
    @java.lang.Override
    public boolean hasMetadata() {
      return metadata_ != null;
    }
    /**
     * .attrpubapi_v1.Metadata metadata = 6;
     * @return The metadata.
     */
    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.Metadata getMetadata() {
      return metadata_ == null ? com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.getDefaultInstance() : metadata_;
    }
    /**
     * .attrpubapi_v1.Metadata metadata = 6;
     */
    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.MetadataOrBuilder getMetadataOrBuilder() {
      return getMetadata();
    }

    public static final int EPHEMERAL_ID_FIELD_NUMBER = 7;
    private volatile java.lang.Object ephemeralId_;
    /**
     * string ephemeral_id = 7;
     * @return The ephemeralId.
     */
    @java.lang.Override
    public java.lang.String getEphemeralId() {
      java.lang.Object ref = ephemeralId_;
      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();
        ephemeralId_ = s;
        return s;
      }
    }
    /**
     * string ephemeral_id = 7;
     * @return The bytes for ephemeralId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getEphemeralIdBytes() {
      java.lang.Object ref = ephemeralId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        ephemeralId_ = 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(name_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (!value_.isEmpty()) {
        output.writeBytes(2, value_);
      }
      if (contentType_ != com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.UNDEFINED.getNumber()) {
        output.writeEnum(3, contentType_);
      }
      for (int i = 0; i < anchors_.size(); i++) {
        output.writeMessage(4, anchors_.get(i));
      }
      for (int i = 0; i < userMetadata_.size(); i++) {
        output.writeMessage(5, userMetadata_.get(i));
      }
      if (metadata_ != null) {
        output.writeMessage(6, getMetadata());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ephemeralId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, ephemeralId_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (!value_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, value_);
      }
      if (contentType_ != com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.UNDEFINED.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, contentType_);
      }
      for (int i = 0; i < anchors_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, anchors_.get(i));
      }
      for (int i = 0; i < userMetadata_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, userMetadata_.get(i));
      }
      if (metadata_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getMetadata());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ephemeralId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, ephemeralId_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.yoti.api.client.spi.remote.proto.AttrProto.Attribute)) {
        return super.equals(obj);
      }
      com.yoti.api.client.spi.remote.proto.AttrProto.Attribute other = (com.yoti.api.client.spi.remote.proto.AttrProto.Attribute) obj;

      if (!getName()
          .equals(other.getName())) return false;
      if (!getValue()
          .equals(other.getValue())) return false;
      if (contentType_ != other.contentType_) return false;
      if (!getAnchorsList()
          .equals(other.getAnchorsList())) return false;
      if (!getUserMetadataList()
          .equals(other.getUserMetadataList())) return false;
      if (hasMetadata() != other.hasMetadata()) return false;
      if (hasMetadata()) {
        if (!getMetadata()
            .equals(other.getMetadata())) return false;
      }
      if (!getEphemeralId()
          .equals(other.getEphemeralId())) return false;
      if (!unknownFields.equals(other.unknownFields)) 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) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + VALUE_FIELD_NUMBER;
      hash = (53 * hash) + getValue().hashCode();
      hash = (37 * hash) + CONTENT_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + contentType_;
      if (getAnchorsCount() > 0) {
        hash = (37 * hash) + ANCHORS_FIELD_NUMBER;
        hash = (53 * hash) + getAnchorsList().hashCode();
      }
      if (getUserMetadataCount() > 0) {
        hash = (37 * hash) + USER_METADATA_FIELD_NUMBER;
        hash = (53 * hash) + getUserMetadataList().hashCode();
      }
      if (hasMetadata()) {
        hash = (37 * hash) + METADATA_FIELD_NUMBER;
        hash = (53 * hash) + getMetadata().hashCode();
      }
      hash = (37 * hash) + EPHEMERAL_ID_FIELD_NUMBER;
      hash = (53 * hash) + getEphemeralId().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute 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 com.yoti.api.client.spi.remote.proto.AttrProto.Attribute parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute 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 com.yoti.api.client.spi.remote.proto.AttrProto.Attribute parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute 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(com.yoti.api.client.spi.remote.proto.AttrProto.Attribute 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;
    }
    /**
     * Protobuf type {@code attrpubapi_v1.Attribute}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:attrpubapi_v1.Attribute)
        com.yoti.api.client.spi.remote.proto.AttrProto.AttributeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Attribute_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Attribute_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.yoti.api.client.spi.remote.proto.AttrProto.Attribute.class, com.yoti.api.client.spi.remote.proto.AttrProto.Attribute.Builder.class);
      }

      // Construct using com.yoti.api.client.spi.remote.proto.AttrProto.Attribute.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAnchorsFieldBuilder();
          getUserMetadataFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        value_ = com.google.protobuf.ByteString.EMPTY;

        contentType_ = 0;

        if (anchorsBuilder_ == null) {
          anchors_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          anchorsBuilder_.clear();
        }
        if (userMetadataBuilder_ == null) {
          userMetadata_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          userMetadataBuilder_.clear();
        }
        if (metadataBuilder_ == null) {
          metadata_ = null;
        } else {
          metadata_ = null;
          metadataBuilder_ = null;
        }
        ephemeralId_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Attribute_descriptor;
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.Attribute getDefaultInstanceForType() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.Attribute.getDefaultInstance();
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.Attribute build() {
        com.yoti.api.client.spi.remote.proto.AttrProto.Attribute result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.Attribute buildPartial() {
        com.yoti.api.client.spi.remote.proto.AttrProto.Attribute result = new com.yoti.api.client.spi.remote.proto.AttrProto.Attribute(this);
        int from_bitField0_ = bitField0_;
        result.name_ = name_;
        result.value_ = value_;
        result.contentType_ = contentType_;
        if (anchorsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            anchors_ = java.util.Collections.unmodifiableList(anchors_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.anchors_ = anchors_;
        } else {
          result.anchors_ = anchorsBuilder_.build();
        }
        if (userMetadataBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            userMetadata_ = java.util.Collections.unmodifiableList(userMetadata_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.userMetadata_ = userMetadata_;
        } else {
          result.userMetadata_ = userMetadataBuilder_.build();
        }
        if (metadataBuilder_ == null) {
          result.metadata_ = metadata_;
        } else {
          result.metadata_ = metadataBuilder_.build();
        }
        result.ephemeralId_ = ephemeralId_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.yoti.api.client.spi.remote.proto.AttrProto.Attribute) {
          return mergeFrom((com.yoti.api.client.spi.remote.proto.AttrProto.Attribute)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.yoti.api.client.spi.remote.proto.AttrProto.Attribute other) {
        if (other == com.yoti.api.client.spi.remote.proto.AttrProto.Attribute.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (other.getValue() != com.google.protobuf.ByteString.EMPTY) {
          setValue(other.getValue());
        }
        if (other.contentType_ != 0) {
          setContentTypeValue(other.getContentTypeValue());
        }
        if (anchorsBuilder_ == null) {
          if (!other.anchors_.isEmpty()) {
            if (anchors_.isEmpty()) {
              anchors_ = other.anchors_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureAnchorsIsMutable();
              anchors_.addAll(other.anchors_);
            }
            onChanged();
          }
        } else {
          if (!other.anchors_.isEmpty()) {
            if (anchorsBuilder_.isEmpty()) {
              anchorsBuilder_.dispose();
              anchorsBuilder_ = null;
              anchors_ = other.anchors_;
              bitField0_ = (bitField0_ & ~0x00000001);
              anchorsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAnchorsFieldBuilder() : null;
            } else {
              anchorsBuilder_.addAllMessages(other.anchors_);
            }
          }
        }
        if (userMetadataBuilder_ == null) {
          if (!other.userMetadata_.isEmpty()) {
            if (userMetadata_.isEmpty()) {
              userMetadata_ = other.userMetadata_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureUserMetadataIsMutable();
              userMetadata_.addAll(other.userMetadata_);
            }
            onChanged();
          }
        } else {
          if (!other.userMetadata_.isEmpty()) {
            if (userMetadataBuilder_.isEmpty()) {
              userMetadataBuilder_.dispose();
              userMetadataBuilder_ = null;
              userMetadata_ = other.userMetadata_;
              bitField0_ = (bitField0_ & ~0x00000002);
              userMetadataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getUserMetadataFieldBuilder() : null;
            } else {
              userMetadataBuilder_.addAllMessages(other.userMetadata_);
            }
          }
        }
        if (other.hasMetadata()) {
          mergeMetadata(other.getMetadata());
        }
        if (!other.getEphemeralId().isEmpty()) {
          ephemeralId_ = other.ephemeralId_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        com.yoti.api.client.spi.remote.proto.AttrProto.Attribute parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.yoti.api.client.spi.remote.proto.AttrProto.Attribute) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * string name = 1;
       * @return The name.
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string name = 1;
       * @return The bytes for name.
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string name = 1;
       * @param value The name to set.
       * @return This builder for chaining.
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * string name = 1;
       * @return This builder for chaining.
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * string name = 1;
       * @param value The bytes for name to set.
       * @return This builder for chaining.
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString value_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * bytes value = 2;
       * @return The value.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getValue() {
        return value_;
      }
      /**
       * bytes value = 2;
       * @param value The value to set.
       * @return This builder for chaining.
       */
      public Builder setValue(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * bytes value = 2;
       * @return This builder for chaining.
       */
      public Builder clearValue() {
        
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }

      private int contentType_ = 0;
      /**
       * .attrpubapi_v1.ContentType content_type = 3;
       * @return The enum numeric value on the wire for contentType.
       */
      @java.lang.Override public int getContentTypeValue() {
        return contentType_;
      }
      /**
       * .attrpubapi_v1.ContentType content_type = 3;
       * @param value The enum numeric value on the wire for contentType to set.
       * @return This builder for chaining.
       */
      public Builder setContentTypeValue(int value) {
        
        contentType_ = value;
        onChanged();
        return this;
      }
      /**
       * .attrpubapi_v1.ContentType content_type = 3;
       * @return The contentType.
       */
      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType getContentType() {
        @SuppressWarnings("deprecation")
        com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType result = com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.valueOf(contentType_);
        return result == null ? com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.UNRECOGNIZED : result;
      }
      /**
       * .attrpubapi_v1.ContentType content_type = 3;
       * @param value The contentType to set.
       * @return This builder for chaining.
       */
      public Builder setContentType(com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        contentType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * .attrpubapi_v1.ContentType content_type = 3;
       * @return This builder for chaining.
       */
      public Builder clearContentType() {
        
        contentType_ = 0;
        onChanged();
        return this;
      }

      private java.util.List anchors_ =
        java.util.Collections.emptyList();
      private void ensureAnchorsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          anchors_ = new java.util.ArrayList(anchors_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.yoti.api.client.spi.remote.proto.AttrProto.Anchor, com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.AnchorOrBuilder> anchorsBuilder_;

      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public java.util.List getAnchorsList() {
        if (anchorsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(anchors_);
        } else {
          return anchorsBuilder_.getMessageList();
        }
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public int getAnchorsCount() {
        if (anchorsBuilder_ == null) {
          return anchors_.size();
        } else {
          return anchorsBuilder_.getCount();
        }
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.Anchor getAnchors(int index) {
        if (anchorsBuilder_ == null) {
          return anchors_.get(index);
        } else {
          return anchorsBuilder_.getMessage(index);
        }
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public Builder setAnchors(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.Anchor value) {
        if (anchorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAnchorsIsMutable();
          anchors_.set(index, value);
          onChanged();
        } else {
          anchorsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public Builder setAnchors(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder builderForValue) {
        if (anchorsBuilder_ == null) {
          ensureAnchorsIsMutable();
          anchors_.set(index, builderForValue.build());
          onChanged();
        } else {
          anchorsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public Builder addAnchors(com.yoti.api.client.spi.remote.proto.AttrProto.Anchor value) {
        if (anchorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAnchorsIsMutable();
          anchors_.add(value);
          onChanged();
        } else {
          anchorsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public Builder addAnchors(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.Anchor value) {
        if (anchorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAnchorsIsMutable();
          anchors_.add(index, value);
          onChanged();
        } else {
          anchorsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public Builder addAnchors(
          com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder builderForValue) {
        if (anchorsBuilder_ == null) {
          ensureAnchorsIsMutable();
          anchors_.add(builderForValue.build());
          onChanged();
        } else {
          anchorsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public Builder addAnchors(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder builderForValue) {
        if (anchorsBuilder_ == null) {
          ensureAnchorsIsMutable();
          anchors_.add(index, builderForValue.build());
          onChanged();
        } else {
          anchorsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public Builder addAllAnchors(
          java.lang.Iterable values) {
        if (anchorsBuilder_ == null) {
          ensureAnchorsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, anchors_);
          onChanged();
        } else {
          anchorsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public Builder clearAnchors() {
        if (anchorsBuilder_ == null) {
          anchors_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          anchorsBuilder_.clear();
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public Builder removeAnchors(int index) {
        if (anchorsBuilder_ == null) {
          ensureAnchorsIsMutable();
          anchors_.remove(index);
          onChanged();
        } else {
          anchorsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder getAnchorsBuilder(
          int index) {
        return getAnchorsFieldBuilder().getBuilder(index);
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.AnchorOrBuilder getAnchorsOrBuilder(
          int index) {
        if (anchorsBuilder_ == null) {
          return anchors_.get(index);  } else {
          return anchorsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public java.util.List 
           getAnchorsOrBuilderList() {
        if (anchorsBuilder_ != null) {
          return anchorsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(anchors_);
        }
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder addAnchorsBuilder() {
        return getAnchorsFieldBuilder().addBuilder(
            com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.getDefaultInstance());
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder addAnchorsBuilder(
          int index) {
        return getAnchorsFieldBuilder().addBuilder(
            index, com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.getDefaultInstance());
      }
      /**
       * repeated .attrpubapi_v1.Anchor anchors = 4;
       */
      public java.util.List 
           getAnchorsBuilderList() {
        return getAnchorsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.yoti.api.client.spi.remote.proto.AttrProto.Anchor, com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.AnchorOrBuilder> 
          getAnchorsFieldBuilder() {
        if (anchorsBuilder_ == null) {
          anchorsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.yoti.api.client.spi.remote.proto.AttrProto.Anchor, com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.AnchorOrBuilder>(
                  anchors_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          anchors_ = null;
        }
        return anchorsBuilder_;
      }

      private java.util.List userMetadata_ =
        java.util.Collections.emptyList();
      private void ensureUserMetadataIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          userMetadata_ = new java.util.ArrayList(userMetadata_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadataOrBuilder> userMetadataBuilder_;

      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public java.util.List getUserMetadataList() {
        if (userMetadataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(userMetadata_);
        } else {
          return userMetadataBuilder_.getMessageList();
        }
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public int getUserMetadataCount() {
        if (userMetadataBuilder_ == null) {
          return userMetadata_.size();
        } else {
          return userMetadataBuilder_.getCount();
        }
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata getUserMetadata(int index) {
        if (userMetadataBuilder_ == null) {
          return userMetadata_.get(index);
        } else {
          return userMetadataBuilder_.getMessage(index);
        }
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public Builder setUserMetadata(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata value) {
        if (userMetadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUserMetadataIsMutable();
          userMetadata_.set(index, value);
          onChanged();
        } else {
          userMetadataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public Builder setUserMetadata(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder builderForValue) {
        if (userMetadataBuilder_ == null) {
          ensureUserMetadataIsMutable();
          userMetadata_.set(index, builderForValue.build());
          onChanged();
        } else {
          userMetadataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public Builder addUserMetadata(com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata value) {
        if (userMetadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUserMetadataIsMutable();
          userMetadata_.add(value);
          onChanged();
        } else {
          userMetadataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public Builder addUserMetadata(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata value) {
        if (userMetadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUserMetadataIsMutable();
          userMetadata_.add(index, value);
          onChanged();
        } else {
          userMetadataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public Builder addUserMetadata(
          com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder builderForValue) {
        if (userMetadataBuilder_ == null) {
          ensureUserMetadataIsMutable();
          userMetadata_.add(builderForValue.build());
          onChanged();
        } else {
          userMetadataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public Builder addUserMetadata(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder builderForValue) {
        if (userMetadataBuilder_ == null) {
          ensureUserMetadataIsMutable();
          userMetadata_.add(index, builderForValue.build());
          onChanged();
        } else {
          userMetadataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public Builder addAllUserMetadata(
          java.lang.Iterable values) {
        if (userMetadataBuilder_ == null) {
          ensureUserMetadataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, userMetadata_);
          onChanged();
        } else {
          userMetadataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public Builder clearUserMetadata() {
        if (userMetadataBuilder_ == null) {
          userMetadata_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          userMetadataBuilder_.clear();
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public Builder removeUserMetadata(int index) {
        if (userMetadataBuilder_ == null) {
          ensureUserMetadataIsMutable();
          userMetadata_.remove(index);
          onChanged();
        } else {
          userMetadataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder getUserMetadataBuilder(
          int index) {
        return getUserMetadataFieldBuilder().getBuilder(index);
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadataOrBuilder getUserMetadataOrBuilder(
          int index) {
        if (userMetadataBuilder_ == null) {
          return userMetadata_.get(index);  } else {
          return userMetadataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public java.util.List 
           getUserMetadataOrBuilderList() {
        if (userMetadataBuilder_ != null) {
          return userMetadataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(userMetadata_);
        }
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder addUserMetadataBuilder() {
        return getUserMetadataFieldBuilder().addBuilder(
            com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.getDefaultInstance());
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder addUserMetadataBuilder(
          int index) {
        return getUserMetadataFieldBuilder().addBuilder(
            index, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.getDefaultInstance());
      }
      /**
       * repeated .attrpubapi_v1.UserMetadata user_metadata = 5;
       */
      public java.util.List 
           getUserMetadataBuilderList() {
        return getUserMetadataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadataOrBuilder> 
          getUserMetadataFieldBuilder() {
        if (userMetadataBuilder_ == null) {
          userMetadataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadataOrBuilder>(
                  userMetadata_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          userMetadata_ = null;
        }
        return userMetadataBuilder_;
      }

      private com.yoti.api.client.spi.remote.proto.AttrProto.Metadata metadata_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.yoti.api.client.spi.remote.proto.AttrProto.Metadata, com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.MetadataOrBuilder> metadataBuilder_;
      /**
       * .attrpubapi_v1.Metadata metadata = 6;
       * @return Whether the metadata field is set.
       */
      public boolean hasMetadata() {
        return metadataBuilder_ != null || metadata_ != null;
      }
      /**
       * .attrpubapi_v1.Metadata metadata = 6;
       * @return The metadata.
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.Metadata getMetadata() {
        if (metadataBuilder_ == null) {
          return metadata_ == null ? com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.getDefaultInstance() : metadata_;
        } else {
          return metadataBuilder_.getMessage();
        }
      }
      /**
       * .attrpubapi_v1.Metadata metadata = 6;
       */
      public Builder setMetadata(com.yoti.api.client.spi.remote.proto.AttrProto.Metadata value) {
        if (metadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          metadata_ = value;
          onChanged();
        } else {
          metadataBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * .attrpubapi_v1.Metadata metadata = 6;
       */
      public Builder setMetadata(
          com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.Builder builderForValue) {
        if (metadataBuilder_ == null) {
          metadata_ = builderForValue.build();
          onChanged();
        } else {
          metadataBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * .attrpubapi_v1.Metadata metadata = 6;
       */
      public Builder mergeMetadata(com.yoti.api.client.spi.remote.proto.AttrProto.Metadata value) {
        if (metadataBuilder_ == null) {
          if (metadata_ != null) {
            metadata_ =
              com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.newBuilder(metadata_).mergeFrom(value).buildPartial();
          } else {
            metadata_ = value;
          }
          onChanged();
        } else {
          metadataBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * .attrpubapi_v1.Metadata metadata = 6;
       */
      public Builder clearMetadata() {
        if (metadataBuilder_ == null) {
          metadata_ = null;
          onChanged();
        } else {
          metadata_ = null;
          metadataBuilder_ = null;
        }

        return this;
      }
      /**
       * .attrpubapi_v1.Metadata metadata = 6;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.Builder getMetadataBuilder() {
        
        onChanged();
        return getMetadataFieldBuilder().getBuilder();
      }
      /**
       * .attrpubapi_v1.Metadata metadata = 6;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.MetadataOrBuilder getMetadataOrBuilder() {
        if (metadataBuilder_ != null) {
          return metadataBuilder_.getMessageOrBuilder();
        } else {
          return metadata_ == null ?
              com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.getDefaultInstance() : metadata_;
        }
      }
      /**
       * .attrpubapi_v1.Metadata metadata = 6;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.yoti.api.client.spi.remote.proto.AttrProto.Metadata, com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.MetadataOrBuilder> 
          getMetadataFieldBuilder() {
        if (metadataBuilder_ == null) {
          metadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.yoti.api.client.spi.remote.proto.AttrProto.Metadata, com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.MetadataOrBuilder>(
                  getMetadata(),
                  getParentForChildren(),
                  isClean());
          metadata_ = null;
        }
        return metadataBuilder_;
      }

      private java.lang.Object ephemeralId_ = "";
      /**
       * string ephemeral_id = 7;
       * @return The ephemeralId.
       */
      public java.lang.String getEphemeralId() {
        java.lang.Object ref = ephemeralId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          ephemeralId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string ephemeral_id = 7;
       * @return The bytes for ephemeralId.
       */
      public com.google.protobuf.ByteString
          getEphemeralIdBytes() {
        java.lang.Object ref = ephemeralId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          ephemeralId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string ephemeral_id = 7;
       * @param value The ephemeralId to set.
       * @return This builder for chaining.
       */
      public Builder setEphemeralId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        ephemeralId_ = value;
        onChanged();
        return this;
      }
      /**
       * string ephemeral_id = 7;
       * @return This builder for chaining.
       */
      public Builder clearEphemeralId() {
        
        ephemeralId_ = getDefaultInstance().getEphemeralId();
        onChanged();
        return this;
      }
      /**
       * string ephemeral_id = 7;
       * @param value The bytes for ephemeralId to set.
       * @return This builder for chaining.
       */
      public Builder setEphemeralIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        ephemeralId_ = value;
        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:attrpubapi_v1.Attribute)
    }

    // @@protoc_insertion_point(class_scope:attrpubapi_v1.Attribute)
    private static final com.yoti.api.client.spi.remote.proto.AttrProto.Attribute DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.yoti.api.client.spi.remote.proto.AttrProto.Attribute();
    }

    public static com.yoti.api.client.spi.remote.proto.AttrProto.Attribute getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public Attribute parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Attribute(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.Attribute getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MetadataOrBuilder extends
      // @@protoc_insertion_point(interface_extends:attrpubapi_v1.Metadata)
      com.google.protobuf.MessageOrBuilder {

    /**
     * string superseded_time_stamp = 1;
     * @return The supersededTimeStamp.
     */
    java.lang.String getSupersededTimeStamp();
    /**
     * string superseded_time_stamp = 1;
     * @return The bytes for supersededTimeStamp.
     */
    com.google.protobuf.ByteString
        getSupersededTimeStampBytes();

    /**
     * bool deletable = 2;
     * @return The deletable.
     */
    boolean getDeletable();

    /**
     * bytes receipt_id = 3;
     * @return The receiptId.
     */
    com.google.protobuf.ByteString getReceiptId();

    /**
     * bool revoked = 4;
     * @return The revoked.
     */
    boolean getRevoked();

    /**
     * bool locked = 5;
     * @return The locked.
     */
    boolean getLocked();
  }
  /**
   * Protobuf type {@code attrpubapi_v1.Metadata}
   */
  public static final class Metadata extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:attrpubapi_v1.Metadata)
      MetadataOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Metadata.newBuilder() to construct.
    private Metadata(com.google.protobuf.GeneratedMessageV3.Builder builder) {
      super(builder);
    }
    private Metadata() {
      supersededTimeStamp_ = "";
      receiptId_ = com.google.protobuf.ByteString.EMPTY;
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Metadata(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              supersededTimeStamp_ = s;
              break;
            }
            case 16: {

              deletable_ = input.readBool();
              break;
            }
            case 26: {

              receiptId_ = input.readBytes();
              break;
            }
            case 32: {

              revoked_ = input.readBool();
              break;
            }
            case 40: {

              locked_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Metadata_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Metadata_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.class, com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.Builder.class);
    }

    public static final int SUPERSEDED_TIME_STAMP_FIELD_NUMBER = 1;
    private volatile java.lang.Object supersededTimeStamp_;
    /**
     * string superseded_time_stamp = 1;
     * @return The supersededTimeStamp.
     */
    @java.lang.Override
    public java.lang.String getSupersededTimeStamp() {
      java.lang.Object ref = supersededTimeStamp_;
      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();
        supersededTimeStamp_ = s;
        return s;
      }
    }
    /**
     * string superseded_time_stamp = 1;
     * @return The bytes for supersededTimeStamp.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSupersededTimeStampBytes() {
      java.lang.Object ref = supersededTimeStamp_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        supersededTimeStamp_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DELETABLE_FIELD_NUMBER = 2;
    private boolean deletable_;
    /**
     * bool deletable = 2;
     * @return The deletable.
     */
    @java.lang.Override
    public boolean getDeletable() {
      return deletable_;
    }

    public static final int RECEIPT_ID_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString receiptId_;
    /**
     * bytes receipt_id = 3;
     * @return The receiptId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getReceiptId() {
      return receiptId_;
    }

    public static final int REVOKED_FIELD_NUMBER = 4;
    private boolean revoked_;
    /**
     * bool revoked = 4;
     * @return The revoked.
     */
    @java.lang.Override
    public boolean getRevoked() {
      return revoked_;
    }

    public static final int LOCKED_FIELD_NUMBER = 5;
    private boolean locked_;
    /**
     * bool locked = 5;
     * @return The locked.
     */
    @java.lang.Override
    public boolean getLocked() {
      return locked_;
    }

    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(supersededTimeStamp_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, supersededTimeStamp_);
      }
      if (deletable_ != false) {
        output.writeBool(2, deletable_);
      }
      if (!receiptId_.isEmpty()) {
        output.writeBytes(3, receiptId_);
      }
      if (revoked_ != false) {
        output.writeBool(4, revoked_);
      }
      if (locked_ != false) {
        output.writeBool(5, locked_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(supersededTimeStamp_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, supersededTimeStamp_);
      }
      if (deletable_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, deletable_);
      }
      if (!receiptId_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, receiptId_);
      }
      if (revoked_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, revoked_);
      }
      if (locked_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, locked_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.yoti.api.client.spi.remote.proto.AttrProto.Metadata)) {
        return super.equals(obj);
      }
      com.yoti.api.client.spi.remote.proto.AttrProto.Metadata other = (com.yoti.api.client.spi.remote.proto.AttrProto.Metadata) obj;

      if (!getSupersededTimeStamp()
          .equals(other.getSupersededTimeStamp())) return false;
      if (getDeletable()
          != other.getDeletable()) return false;
      if (!getReceiptId()
          .equals(other.getReceiptId())) return false;
      if (getRevoked()
          != other.getRevoked()) return false;
      if (getLocked()
          != other.getLocked()) return false;
      if (!unknownFields.equals(other.unknownFields)) 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) + SUPERSEDED_TIME_STAMP_FIELD_NUMBER;
      hash = (53 * hash) + getSupersededTimeStamp().hashCode();
      hash = (37 * hash) + DELETABLE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getDeletable());
      hash = (37 * hash) + RECEIPT_ID_FIELD_NUMBER;
      hash = (53 * hash) + getReceiptId().hashCode();
      hash = (37 * hash) + REVOKED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getRevoked());
      hash = (37 * hash) + LOCKED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getLocked());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata 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 com.yoti.api.client.spi.remote.proto.AttrProto.Metadata parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata 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 com.yoti.api.client.spi.remote.proto.AttrProto.Metadata parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata 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(com.yoti.api.client.spi.remote.proto.AttrProto.Metadata 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;
    }
    /**
     * Protobuf type {@code attrpubapi_v1.Metadata}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:attrpubapi_v1.Metadata)
        com.yoti.api.client.spi.remote.proto.AttrProto.MetadataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Metadata_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Metadata_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.class, com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.Builder.class);
      }

      // Construct using com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        supersededTimeStamp_ = "";

        deletable_ = false;

        receiptId_ = com.google.protobuf.ByteString.EMPTY;

        revoked_ = false;

        locked_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Metadata_descriptor;
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.Metadata getDefaultInstanceForType() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.getDefaultInstance();
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.Metadata build() {
        com.yoti.api.client.spi.remote.proto.AttrProto.Metadata result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.Metadata buildPartial() {
        com.yoti.api.client.spi.remote.proto.AttrProto.Metadata result = new com.yoti.api.client.spi.remote.proto.AttrProto.Metadata(this);
        result.supersededTimeStamp_ = supersededTimeStamp_;
        result.deletable_ = deletable_;
        result.receiptId_ = receiptId_;
        result.revoked_ = revoked_;
        result.locked_ = locked_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.yoti.api.client.spi.remote.proto.AttrProto.Metadata) {
          return mergeFrom((com.yoti.api.client.spi.remote.proto.AttrProto.Metadata)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.yoti.api.client.spi.remote.proto.AttrProto.Metadata other) {
        if (other == com.yoti.api.client.spi.remote.proto.AttrProto.Metadata.getDefaultInstance()) return this;
        if (!other.getSupersededTimeStamp().isEmpty()) {
          supersededTimeStamp_ = other.supersededTimeStamp_;
          onChanged();
        }
        if (other.getDeletable() != false) {
          setDeletable(other.getDeletable());
        }
        if (other.getReceiptId() != com.google.protobuf.ByteString.EMPTY) {
          setReceiptId(other.getReceiptId());
        }
        if (other.getRevoked() != false) {
          setRevoked(other.getRevoked());
        }
        if (other.getLocked() != false) {
          setLocked(other.getLocked());
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        com.yoti.api.client.spi.remote.proto.AttrProto.Metadata parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.yoti.api.client.spi.remote.proto.AttrProto.Metadata) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object supersededTimeStamp_ = "";
      /**
       * string superseded_time_stamp = 1;
       * @return The supersededTimeStamp.
       */
      public java.lang.String getSupersededTimeStamp() {
        java.lang.Object ref = supersededTimeStamp_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          supersededTimeStamp_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string superseded_time_stamp = 1;
       * @return The bytes for supersededTimeStamp.
       */
      public com.google.protobuf.ByteString
          getSupersededTimeStampBytes() {
        java.lang.Object ref = supersededTimeStamp_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          supersededTimeStamp_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string superseded_time_stamp = 1;
       * @param value The supersededTimeStamp to set.
       * @return This builder for chaining.
       */
      public Builder setSupersededTimeStamp(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        supersededTimeStamp_ = value;
        onChanged();
        return this;
      }
      /**
       * string superseded_time_stamp = 1;
       * @return This builder for chaining.
       */
      public Builder clearSupersededTimeStamp() {
        
        supersededTimeStamp_ = getDefaultInstance().getSupersededTimeStamp();
        onChanged();
        return this;
      }
      /**
       * string superseded_time_stamp = 1;
       * @param value The bytes for supersededTimeStamp to set.
       * @return This builder for chaining.
       */
      public Builder setSupersededTimeStampBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        supersededTimeStamp_ = value;
        onChanged();
        return this;
      }

      private boolean deletable_ ;
      /**
       * bool deletable = 2;
       * @return The deletable.
       */
      @java.lang.Override
      public boolean getDeletable() {
        return deletable_;
      }
      /**
       * bool deletable = 2;
       * @param value The deletable to set.
       * @return This builder for chaining.
       */
      public Builder setDeletable(boolean value) {
        
        deletable_ = value;
        onChanged();
        return this;
      }
      /**
       * bool deletable = 2;
       * @return This builder for chaining.
       */
      public Builder clearDeletable() {
        
        deletable_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString receiptId_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * bytes receipt_id = 3;
       * @return The receiptId.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getReceiptId() {
        return receiptId_;
      }
      /**
       * bytes receipt_id = 3;
       * @param value The receiptId to set.
       * @return This builder for chaining.
       */
      public Builder setReceiptId(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        receiptId_ = value;
        onChanged();
        return this;
      }
      /**
       * bytes receipt_id = 3;
       * @return This builder for chaining.
       */
      public Builder clearReceiptId() {
        
        receiptId_ = getDefaultInstance().getReceiptId();
        onChanged();
        return this;
      }

      private boolean revoked_ ;
      /**
       * bool revoked = 4;
       * @return The revoked.
       */
      @java.lang.Override
      public boolean getRevoked() {
        return revoked_;
      }
      /**
       * bool revoked = 4;
       * @param value The revoked to set.
       * @return This builder for chaining.
       */
      public Builder setRevoked(boolean value) {
        
        revoked_ = value;
        onChanged();
        return this;
      }
      /**
       * bool revoked = 4;
       * @return This builder for chaining.
       */
      public Builder clearRevoked() {
        
        revoked_ = false;
        onChanged();
        return this;
      }

      private boolean locked_ ;
      /**
       * bool locked = 5;
       * @return The locked.
       */
      @java.lang.Override
      public boolean getLocked() {
        return locked_;
      }
      /**
       * bool locked = 5;
       * @param value The locked to set.
       * @return This builder for chaining.
       */
      public Builder setLocked(boolean value) {
        
        locked_ = value;
        onChanged();
        return this;
      }
      /**
       * bool locked = 5;
       * @return This builder for chaining.
       */
      public Builder clearLocked() {
        
        locked_ = false;
        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:attrpubapi_v1.Metadata)
    }

    // @@protoc_insertion_point(class_scope:attrpubapi_v1.Metadata)
    private static final com.yoti.api.client.spi.remote.proto.AttrProto.Metadata DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.yoti.api.client.spi.remote.proto.AttrProto.Metadata();
    }

    public static com.yoti.api.client.spi.remote.proto.AttrProto.Metadata getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public Metadata parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Metadata(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.Metadata getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AnchorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:attrpubapi_v1.Anchor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * bytes artifact_link = 1;
     * @return The artifactLink.
     */
    com.google.protobuf.ByteString getArtifactLink();

    /**
     * repeated bytes origin_server_certs = 2;
     * @return A list containing the originServerCerts.
     */
    java.util.List getOriginServerCertsList();
    /**
     * repeated bytes origin_server_certs = 2;
     * @return The count of originServerCerts.
     */
    int getOriginServerCertsCount();
    /**
     * repeated bytes origin_server_certs = 2;
     * @param index The index of the element to return.
     * @return The originServerCerts at the given index.
     */
    com.google.protobuf.ByteString getOriginServerCerts(int index);

    /**
     * bytes artifact_signature = 3;
     * @return The artifactSignature.
     */
    com.google.protobuf.ByteString getArtifactSignature();

    /**
     * string sub_type = 4;
     * @return The subType.
     */
    java.lang.String getSubType();
    /**
     * string sub_type = 4;
     * @return The bytes for subType.
     */
    com.google.protobuf.ByteString
        getSubTypeBytes();

    /**
     * bytes signature = 5;
     * @return The signature.
     */
    com.google.protobuf.ByteString getSignature();

    /**
     * bytes signed_time_stamp = 6;
     * @return The signedTimeStamp.
     */
    com.google.protobuf.ByteString getSignedTimeStamp();

    /**
     * string associated_source = 7;
     * @return The associatedSource.
     */
    java.lang.String getAssociatedSource();
    /**
     * string associated_source = 7;
     * @return The bytes for associatedSource.
     */
    com.google.protobuf.ByteString
        getAssociatedSourceBytes();
  }
  /**
   * Protobuf type {@code attrpubapi_v1.Anchor}
   */
  public static final class Anchor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:attrpubapi_v1.Anchor)
      AnchorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Anchor.newBuilder() to construct.
    private Anchor(com.google.protobuf.GeneratedMessageV3.Builder builder) {
      super(builder);
    }
    private Anchor() {
      artifactLink_ = com.google.protobuf.ByteString.EMPTY;
      originServerCerts_ = java.util.Collections.emptyList();
      artifactSignature_ = com.google.protobuf.ByteString.EMPTY;
      subType_ = "";
      signature_ = com.google.protobuf.ByteString.EMPTY;
      signedTimeStamp_ = com.google.protobuf.ByteString.EMPTY;
      associatedSource_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Anchor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {

              artifactLink_ = input.readBytes();
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                originServerCerts_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              originServerCerts_.add(input.readBytes());
              break;
            }
            case 26: {

              artifactSignature_ = input.readBytes();
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              subType_ = s;
              break;
            }
            case 42: {

              signature_ = input.readBytes();
              break;
            }
            case 50: {

              signedTimeStamp_ = input.readBytes();
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();

              associatedSource_ = s;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          originServerCerts_ = java.util.Collections.unmodifiableList(originServerCerts_); // C
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Anchor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Anchor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.class, com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder.class);
    }

    public static final int ARTIFACT_LINK_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString artifactLink_;
    /**
     * bytes artifact_link = 1;
     * @return The artifactLink.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getArtifactLink() {
      return artifactLink_;
    }

    public static final int ORIGIN_SERVER_CERTS_FIELD_NUMBER = 2;
    private java.util.List originServerCerts_;
    /**
     * repeated bytes origin_server_certs = 2;
     * @return A list containing the originServerCerts.
     */
    @java.lang.Override
    public java.util.List
        getOriginServerCertsList() {
      return originServerCerts_;
    }
    /**
     * repeated bytes origin_server_certs = 2;
     * @return The count of originServerCerts.
     */
    public int getOriginServerCertsCount() {
      return originServerCerts_.size();
    }
    /**
     * repeated bytes origin_server_certs = 2;
     * @param index The index of the element to return.
     * @return The originServerCerts at the given index.
     */
    public com.google.protobuf.ByteString getOriginServerCerts(int index) {
      return originServerCerts_.get(index);
    }

    public static final int ARTIFACT_SIGNATURE_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString artifactSignature_;
    /**
     * bytes artifact_signature = 3;
     * @return The artifactSignature.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getArtifactSignature() {
      return artifactSignature_;
    }

    public static final int SUB_TYPE_FIELD_NUMBER = 4;
    private volatile java.lang.Object subType_;
    /**
     * string sub_type = 4;
     * @return The subType.
     */
    @java.lang.Override
    public java.lang.String getSubType() {
      java.lang.Object ref = subType_;
      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();
        subType_ = s;
        return s;
      }
    }
    /**
     * string sub_type = 4;
     * @return The bytes for subType.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSubTypeBytes() {
      java.lang.Object ref = subType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        subType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SIGNATURE_FIELD_NUMBER = 5;
    private com.google.protobuf.ByteString signature_;
    /**
     * bytes signature = 5;
     * @return The signature.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getSignature() {
      return signature_;
    }

    public static final int SIGNED_TIME_STAMP_FIELD_NUMBER = 6;
    private com.google.protobuf.ByteString signedTimeStamp_;
    /**
     * bytes signed_time_stamp = 6;
     * @return The signedTimeStamp.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getSignedTimeStamp() {
      return signedTimeStamp_;
    }

    public static final int ASSOCIATED_SOURCE_FIELD_NUMBER = 7;
    private volatile java.lang.Object associatedSource_;
    /**
     * string associated_source = 7;
     * @return The associatedSource.
     */
    @java.lang.Override
    public java.lang.String getAssociatedSource() {
      java.lang.Object ref = associatedSource_;
      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();
        associatedSource_ = s;
        return s;
      }
    }
    /**
     * string associated_source = 7;
     * @return The bytes for associatedSource.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getAssociatedSourceBytes() {
      java.lang.Object ref = associatedSource_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        associatedSource_ = 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 (!artifactLink_.isEmpty()) {
        output.writeBytes(1, artifactLink_);
      }
      for (int i = 0; i < originServerCerts_.size(); i++) {
        output.writeBytes(2, originServerCerts_.get(i));
      }
      if (!artifactSignature_.isEmpty()) {
        output.writeBytes(3, artifactSignature_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(subType_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, subType_);
      }
      if (!signature_.isEmpty()) {
        output.writeBytes(5, signature_);
      }
      if (!signedTimeStamp_.isEmpty()) {
        output.writeBytes(6, signedTimeStamp_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(associatedSource_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, associatedSource_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!artifactLink_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, artifactLink_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < originServerCerts_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(originServerCerts_.get(i));
        }
        size += dataSize;
        size += 1 * getOriginServerCertsList().size();
      }
      if (!artifactSignature_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, artifactSignature_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(subType_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, subType_);
      }
      if (!signature_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, signature_);
      }
      if (!signedTimeStamp_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, signedTimeStamp_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(associatedSource_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, associatedSource_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.yoti.api.client.spi.remote.proto.AttrProto.Anchor)) {
        return super.equals(obj);
      }
      com.yoti.api.client.spi.remote.proto.AttrProto.Anchor other = (com.yoti.api.client.spi.remote.proto.AttrProto.Anchor) obj;

      if (!getArtifactLink()
          .equals(other.getArtifactLink())) return false;
      if (!getOriginServerCertsList()
          .equals(other.getOriginServerCertsList())) return false;
      if (!getArtifactSignature()
          .equals(other.getArtifactSignature())) return false;
      if (!getSubType()
          .equals(other.getSubType())) return false;
      if (!getSignature()
          .equals(other.getSignature())) return false;
      if (!getSignedTimeStamp()
          .equals(other.getSignedTimeStamp())) return false;
      if (!getAssociatedSource()
          .equals(other.getAssociatedSource())) return false;
      if (!unknownFields.equals(other.unknownFields)) 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) + ARTIFACT_LINK_FIELD_NUMBER;
      hash = (53 * hash) + getArtifactLink().hashCode();
      if (getOriginServerCertsCount() > 0) {
        hash = (37 * hash) + ORIGIN_SERVER_CERTS_FIELD_NUMBER;
        hash = (53 * hash) + getOriginServerCertsList().hashCode();
      }
      hash = (37 * hash) + ARTIFACT_SIGNATURE_FIELD_NUMBER;
      hash = (53 * hash) + getArtifactSignature().hashCode();
      hash = (37 * hash) + SUB_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getSubType().hashCode();
      hash = (37 * hash) + SIGNATURE_FIELD_NUMBER;
      hash = (53 * hash) + getSignature().hashCode();
      hash = (37 * hash) + SIGNED_TIME_STAMP_FIELD_NUMBER;
      hash = (53 * hash) + getSignedTimeStamp().hashCode();
      hash = (37 * hash) + ASSOCIATED_SOURCE_FIELD_NUMBER;
      hash = (53 * hash) + getAssociatedSource().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor 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 com.yoti.api.client.spi.remote.proto.AttrProto.Anchor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor 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 com.yoti.api.client.spi.remote.proto.AttrProto.Anchor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor 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(com.yoti.api.client.spi.remote.proto.AttrProto.Anchor 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;
    }
    /**
     * Protobuf type {@code attrpubapi_v1.Anchor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:attrpubapi_v1.Anchor)
        com.yoti.api.client.spi.remote.proto.AttrProto.AnchorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Anchor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Anchor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.class, com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.Builder.class);
      }

      // Construct using com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        artifactLink_ = com.google.protobuf.ByteString.EMPTY;

        originServerCerts_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        artifactSignature_ = com.google.protobuf.ByteString.EMPTY;

        subType_ = "";

        signature_ = com.google.protobuf.ByteString.EMPTY;

        signedTimeStamp_ = com.google.protobuf.ByteString.EMPTY;

        associatedSource_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_Anchor_descriptor;
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.Anchor getDefaultInstanceForType() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.getDefaultInstance();
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.Anchor build() {
        com.yoti.api.client.spi.remote.proto.AttrProto.Anchor result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.Anchor buildPartial() {
        com.yoti.api.client.spi.remote.proto.AttrProto.Anchor result = new com.yoti.api.client.spi.remote.proto.AttrProto.Anchor(this);
        int from_bitField0_ = bitField0_;
        result.artifactLink_ = artifactLink_;
        if (((bitField0_ & 0x00000001) != 0)) {
          originServerCerts_ = java.util.Collections.unmodifiableList(originServerCerts_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.originServerCerts_ = originServerCerts_;
        result.artifactSignature_ = artifactSignature_;
        result.subType_ = subType_;
        result.signature_ = signature_;
        result.signedTimeStamp_ = signedTimeStamp_;
        result.associatedSource_ = associatedSource_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.yoti.api.client.spi.remote.proto.AttrProto.Anchor) {
          return mergeFrom((com.yoti.api.client.spi.remote.proto.AttrProto.Anchor)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.yoti.api.client.spi.remote.proto.AttrProto.Anchor other) {
        if (other == com.yoti.api.client.spi.remote.proto.AttrProto.Anchor.getDefaultInstance()) return this;
        if (other.getArtifactLink() != com.google.protobuf.ByteString.EMPTY) {
          setArtifactLink(other.getArtifactLink());
        }
        if (!other.originServerCerts_.isEmpty()) {
          if (originServerCerts_.isEmpty()) {
            originServerCerts_ = other.originServerCerts_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureOriginServerCertsIsMutable();
            originServerCerts_.addAll(other.originServerCerts_);
          }
          onChanged();
        }
        if (other.getArtifactSignature() != com.google.protobuf.ByteString.EMPTY) {
          setArtifactSignature(other.getArtifactSignature());
        }
        if (!other.getSubType().isEmpty()) {
          subType_ = other.subType_;
          onChanged();
        }
        if (other.getSignature() != com.google.protobuf.ByteString.EMPTY) {
          setSignature(other.getSignature());
        }
        if (other.getSignedTimeStamp() != com.google.protobuf.ByteString.EMPTY) {
          setSignedTimeStamp(other.getSignedTimeStamp());
        }
        if (!other.getAssociatedSource().isEmpty()) {
          associatedSource_ = other.associatedSource_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        com.yoti.api.client.spi.remote.proto.AttrProto.Anchor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.yoti.api.client.spi.remote.proto.AttrProto.Anchor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.ByteString artifactLink_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * bytes artifact_link = 1;
       * @return The artifactLink.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getArtifactLink() {
        return artifactLink_;
      }
      /**
       * bytes artifact_link = 1;
       * @param value The artifactLink to set.
       * @return This builder for chaining.
       */
      public Builder setArtifactLink(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        artifactLink_ = value;
        onChanged();
        return this;
      }
      /**
       * bytes artifact_link = 1;
       * @return This builder for chaining.
       */
      public Builder clearArtifactLink() {
        
        artifactLink_ = getDefaultInstance().getArtifactLink();
        onChanged();
        return this;
      }

      private java.util.List originServerCerts_ = java.util.Collections.emptyList();
      private void ensureOriginServerCertsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          originServerCerts_ = new java.util.ArrayList(originServerCerts_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * repeated bytes origin_server_certs = 2;
       * @return A list containing the originServerCerts.
       */
      public java.util.List
          getOriginServerCertsList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(originServerCerts_) : originServerCerts_;
      }
      /**
       * repeated bytes origin_server_certs = 2;
       * @return The count of originServerCerts.
       */
      public int getOriginServerCertsCount() {
        return originServerCerts_.size();
      }
      /**
       * repeated bytes origin_server_certs = 2;
       * @param index The index of the element to return.
       * @return The originServerCerts at the given index.
       */
      public com.google.protobuf.ByteString getOriginServerCerts(int index) {
        return originServerCerts_.get(index);
      }
      /**
       * repeated bytes origin_server_certs = 2;
       * @param index The index to set the value at.
       * @param value The originServerCerts to set.
       * @return This builder for chaining.
       */
      public Builder setOriginServerCerts(
          int index, com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOriginServerCertsIsMutable();
        originServerCerts_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * repeated bytes origin_server_certs = 2;
       * @param value The originServerCerts to add.
       * @return This builder for chaining.
       */
      public Builder addOriginServerCerts(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOriginServerCertsIsMutable();
        originServerCerts_.add(value);
        onChanged();
        return this;
      }
      /**
       * repeated bytes origin_server_certs = 2;
       * @param values The originServerCerts to add.
       * @return This builder for chaining.
       */
      public Builder addAllOriginServerCerts(
          java.lang.Iterable values) {
        ensureOriginServerCertsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, originServerCerts_);
        onChanged();
        return this;
      }
      /**
       * repeated bytes origin_server_certs = 2;
       * @return This builder for chaining.
       */
      public Builder clearOriginServerCerts() {
        originServerCerts_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString artifactSignature_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * bytes artifact_signature = 3;
       * @return The artifactSignature.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getArtifactSignature() {
        return artifactSignature_;
      }
      /**
       * bytes artifact_signature = 3;
       * @param value The artifactSignature to set.
       * @return This builder for chaining.
       */
      public Builder setArtifactSignature(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        artifactSignature_ = value;
        onChanged();
        return this;
      }
      /**
       * bytes artifact_signature = 3;
       * @return This builder for chaining.
       */
      public Builder clearArtifactSignature() {
        
        artifactSignature_ = getDefaultInstance().getArtifactSignature();
        onChanged();
        return this;
      }

      private java.lang.Object subType_ = "";
      /**
       * string sub_type = 4;
       * @return The subType.
       */
      public java.lang.String getSubType() {
        java.lang.Object ref = subType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          subType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string sub_type = 4;
       * @return The bytes for subType.
       */
      public com.google.protobuf.ByteString
          getSubTypeBytes() {
        java.lang.Object ref = subType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          subType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string sub_type = 4;
       * @param value The subType to set.
       * @return This builder for chaining.
       */
      public Builder setSubType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        subType_ = value;
        onChanged();
        return this;
      }
      /**
       * string sub_type = 4;
       * @return This builder for chaining.
       */
      public Builder clearSubType() {
        
        subType_ = getDefaultInstance().getSubType();
        onChanged();
        return this;
      }
      /**
       * string sub_type = 4;
       * @param value The bytes for subType to set.
       * @return This builder for chaining.
       */
      public Builder setSubTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        subType_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString signature_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * bytes signature = 5;
       * @return The signature.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getSignature() {
        return signature_;
      }
      /**
       * bytes signature = 5;
       * @param value The signature to set.
       * @return This builder for chaining.
       */
      public Builder setSignature(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        signature_ = value;
        onChanged();
        return this;
      }
      /**
       * bytes signature = 5;
       * @return This builder for chaining.
       */
      public Builder clearSignature() {
        
        signature_ = getDefaultInstance().getSignature();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString signedTimeStamp_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * bytes signed_time_stamp = 6;
       * @return The signedTimeStamp.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getSignedTimeStamp() {
        return signedTimeStamp_;
      }
      /**
       * bytes signed_time_stamp = 6;
       * @param value The signedTimeStamp to set.
       * @return This builder for chaining.
       */
      public Builder setSignedTimeStamp(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        signedTimeStamp_ = value;
        onChanged();
        return this;
      }
      /**
       * bytes signed_time_stamp = 6;
       * @return This builder for chaining.
       */
      public Builder clearSignedTimeStamp() {
        
        signedTimeStamp_ = getDefaultInstance().getSignedTimeStamp();
        onChanged();
        return this;
      }

      private java.lang.Object associatedSource_ = "";
      /**
       * string associated_source = 7;
       * @return The associatedSource.
       */
      public java.lang.String getAssociatedSource() {
        java.lang.Object ref = associatedSource_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          associatedSource_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string associated_source = 7;
       * @return The bytes for associatedSource.
       */
      public com.google.protobuf.ByteString
          getAssociatedSourceBytes() {
        java.lang.Object ref = associatedSource_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          associatedSource_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string associated_source = 7;
       * @param value The associatedSource to set.
       * @return This builder for chaining.
       */
      public Builder setAssociatedSource(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        associatedSource_ = value;
        onChanged();
        return this;
      }
      /**
       * string associated_source = 7;
       * @return This builder for chaining.
       */
      public Builder clearAssociatedSource() {
        
        associatedSource_ = getDefaultInstance().getAssociatedSource();
        onChanged();
        return this;
      }
      /**
       * string associated_source = 7;
       * @param value The bytes for associatedSource to set.
       * @return This builder for chaining.
       */
      public Builder setAssociatedSourceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        associatedSource_ = value;
        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:attrpubapi_v1.Anchor)
    }

    // @@protoc_insertion_point(class_scope:attrpubapi_v1.Anchor)
    private static final com.yoti.api.client.spi.remote.proto.AttrProto.Anchor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.yoti.api.client.spi.remote.proto.AttrProto.Anchor();
    }

    public static com.yoti.api.client.spi.remote.proto.AttrProto.Anchor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public Anchor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Anchor(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.Anchor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface UserMetadataOrBuilder extends
      // @@protoc_insertion_point(interface_extends:attrpubapi_v1.UserMetadata)
      com.google.protobuf.MessageOrBuilder {

    /**
     * string key = 1;
     * @return The key.
     */
    java.lang.String getKey();
    /**
     * string key = 1;
     * @return The bytes for key.
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * string value = 2;
     * @return The value.
     */
    java.lang.String getValue();
    /**
     * string value = 2;
     * @return The bytes for value.
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * Protobuf type {@code attrpubapi_v1.UserMetadata}
   */
  public static final class UserMetadata extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:attrpubapi_v1.UserMetadata)
      UserMetadataOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use UserMetadata.newBuilder() to construct.
    private UserMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) {
      super(builder);
    }
    private UserMetadata() {
      key_ = "";
      value_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private UserMetadata(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              key_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              value_ = s;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_UserMetadata_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_UserMetadata_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.class, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder.class);
    }

    public static final int KEY_FIELD_NUMBER = 1;
    private volatile java.lang.Object key_;
    /**
     * string key = 1;
     * @return The key.
     */
    @java.lang.Override
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      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();
        key_ = s;
        return s;
      }
    }
    /**
     * string key = 1;
     * @return The bytes for key.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private volatile java.lang.Object value_;
    /**
     * string value = 2;
     * @return The value.
     */
    @java.lang.Override
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      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();
        value_ = s;
        return s;
      }
    }
    /**
     * string value = 2;
     * @return The bytes for value.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = 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(key_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(value_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
      }
      unknownFields.writeTo(output);
    }

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

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

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata)) {
        return super.equals(obj);
      }
      com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata other = (com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata) obj;

      if (!getKey()
          .equals(other.getKey())) return false;
      if (!getValue()
          .equals(other.getValue())) return false;
      if (!unknownFields.equals(other.unknownFields)) 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) + KEY_FIELD_NUMBER;
      hash = (53 * hash) + getKey().hashCode();
      hash = (37 * hash) + VALUE_FIELD_NUMBER;
      hash = (53 * hash) + getValue().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata 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 com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata 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 com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata 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(com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata 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;
    }
    /**
     * Protobuf type {@code attrpubapi_v1.UserMetadata}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:attrpubapi_v1.UserMetadata)
        com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_UserMetadata_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_UserMetadata_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.class, com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.Builder.class);
      }

      // Construct using com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        key_ = "";

        value_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_UserMetadata_descriptor;
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata getDefaultInstanceForType() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.getDefaultInstance();
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata build() {
        com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata buildPartial() {
        com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata result = new com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata(this);
        result.key_ = key_;
        result.value_ = value_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata) {
          return mergeFrom((com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata other) {
        if (other == com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata.getDefaultInstance()) return this;
        if (!other.getKey().isEmpty()) {
          key_ = other.key_;
          onChanged();
        }
        if (!other.getValue().isEmpty()) {
          value_ = other.value_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object key_ = "";
      /**
       * string key = 1;
       * @return The key.
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          key_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string key = 1;
       * @return The bytes for key.
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string key = 1;
       * @param value The key to set.
       * @return This builder for chaining.
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * string key = 1;
       * @return This builder for chaining.
       */
      public Builder clearKey() {
        
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * string key = 1;
       * @param value The bytes for key to set.
       * @return This builder for chaining.
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        key_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object value_ = "";
      /**
       * string value = 2;
       * @return The value.
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          value_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string value = 2;
       * @return The bytes for value.
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string value = 2;
       * @param value The value to set.
       * @return This builder for chaining.
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * string value = 2;
       * @return This builder for chaining.
       */
      public Builder clearValue() {
        
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * string value = 2;
       * @param value The bytes for value to set.
       * @return This builder for chaining.
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        value_ = value;
        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:attrpubapi_v1.UserMetadata)
    }

    // @@protoc_insertion_point(class_scope:attrpubapi_v1.UserMetadata)
    private static final com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata();
    }

    public static com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public UserMetadata parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UserMetadata(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.UserMetadata getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MultiValueOrBuilder extends
      // @@protoc_insertion_point(interface_extends:attrpubapi_v1.MultiValue)
      com.google.protobuf.MessageOrBuilder {

    /**
     * repeated .attrpubapi_v1.MultiValue.Value values = 1;
     */
    java.util.List 
        getValuesList();
    /**
     * repeated .attrpubapi_v1.MultiValue.Value values = 1;
     */
    com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value getValues(int index);
    /**
     * repeated .attrpubapi_v1.MultiValue.Value values = 1;
     */
    int getValuesCount();
    /**
     * repeated .attrpubapi_v1.MultiValue.Value values = 1;
     */
    java.util.List 
        getValuesOrBuilderList();
    /**
     * repeated .attrpubapi_v1.MultiValue.Value values = 1;
     */
    com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.ValueOrBuilder getValuesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code attrpubapi_v1.MultiValue}
   */
  public static final class MultiValue extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:attrpubapi_v1.MultiValue)
      MultiValueOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MultiValue.newBuilder() to construct.
    private MultiValue(com.google.protobuf.GeneratedMessageV3.Builder builder) {
      super(builder);
    }
    private MultiValue() {
      values_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private MultiValue(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                values_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              values_.add(
                  input.readMessage(com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          values_ = java.util.Collections.unmodifiableList(values_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_MultiValue_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_MultiValue_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.class, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Builder.class);
    }

    public interface ValueOrBuilder extends
        // @@protoc_insertion_point(interface_extends:attrpubapi_v1.MultiValue.Value)
        com.google.protobuf.MessageOrBuilder {

      /**
       * .attrpubapi_v1.ContentType content_type = 1;
       * @return The enum numeric value on the wire for contentType.
       */
      int getContentTypeValue();
      /**
       * .attrpubapi_v1.ContentType content_type = 1;
       * @return The contentType.
       */
      com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType getContentType();

      /**
       * bytes data = 2;
       * @return The data.
       */
      com.google.protobuf.ByteString getData();
    }
    /**
     * Protobuf type {@code attrpubapi_v1.MultiValue.Value}
     */
    public static final class Value extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:attrpubapi_v1.MultiValue.Value)
        ValueOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Value.newBuilder() to construct.
      private Value(com.google.protobuf.GeneratedMessageV3.Builder builder) {
        super(builder);
      }
      private Value() {
        contentType_ = 0;
        data_ = com.google.protobuf.ByteString.EMPTY;
      }

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

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private Value(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                int rawValue = input.readEnum();

                contentType_ = rawValue;
                break;
              }
              case 18: {

                data_ = input.readBytes();
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_MultiValue_Value_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_MultiValue_Value_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.class, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder.class);
      }

      public static final int CONTENT_TYPE_FIELD_NUMBER = 1;
      private int contentType_;
      /**
       * .attrpubapi_v1.ContentType content_type = 1;
       * @return The enum numeric value on the wire for contentType.
       */
      @java.lang.Override public int getContentTypeValue() {
        return contentType_;
      }
      /**
       * .attrpubapi_v1.ContentType content_type = 1;
       * @return The contentType.
       */
      @java.lang.Override public com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType getContentType() {
        @SuppressWarnings("deprecation")
        com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType result = com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.valueOf(contentType_);
        return result == null ? com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.UNRECOGNIZED : result;
      }

      public static final int DATA_FIELD_NUMBER = 2;
      private com.google.protobuf.ByteString data_;
      /**
       * bytes data = 2;
       * @return The data.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getData() {
        return 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 (contentType_ != com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.UNDEFINED.getNumber()) {
          output.writeEnum(1, contentType_);
        }
        if (!data_.isEmpty()) {
          output.writeBytes(2, data_);
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        if (contentType_ != com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.UNDEFINED.getNumber()) {
          size += com.google.protobuf.CodedOutputStream
            .computeEnumSize(1, contentType_);
        }
        if (!data_.isEmpty()) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, data_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value)) {
          return super.equals(obj);
        }
        com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value other = (com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value) obj;

        if (contentType_ != other.contentType_) return false;
        if (!getData()
            .equals(other.getData())) return false;
        if (!unknownFields.equals(other.unknownFields)) 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) + CONTENT_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + contentType_;
        hash = (37 * hash) + DATA_FIELD_NUMBER;
        hash = (53 * hash) + getData().hashCode();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value 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 com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value 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 com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value 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(com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value 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;
      }
      /**
       * Protobuf type {@code attrpubapi_v1.MultiValue.Value}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder implements
          // @@protoc_insertion_point(builder_implements:attrpubapi_v1.MultiValue.Value)
          com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.ValueOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_MultiValue_Value_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_MultiValue_Value_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.class, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder.class);
        }

        // Construct using com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          contentType_ = 0;

          data_ = com.google.protobuf.ByteString.EMPTY;

          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_MultiValue_Value_descriptor;
        }

        @java.lang.Override
        public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value getDefaultInstanceForType() {
          return com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.getDefaultInstance();
        }

        @java.lang.Override
        public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value build() {
          com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value buildPartial() {
          com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value result = new com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value(this);
          result.contentType_ = contentType_;
          result.data_ = data_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value) {
            return mergeFrom((com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value other) {
          if (other == com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.getDefaultInstance()) return this;
          if (other.contentType_ != 0) {
            setContentTypeValue(other.getContentTypeValue());
          }
          if (other.getData() != com.google.protobuf.ByteString.EMPTY) {
            setData(other.getData());
          }
          this.mergeUnknownFields(other.unknownFields);
          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 {
          com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private int contentType_ = 0;
        /**
         * .attrpubapi_v1.ContentType content_type = 1;
         * @return The enum numeric value on the wire for contentType.
         */
        @java.lang.Override public int getContentTypeValue() {
          return contentType_;
        }
        /**
         * .attrpubapi_v1.ContentType content_type = 1;
         * @param value The enum numeric value on the wire for contentType to set.
         * @return This builder for chaining.
         */
        public Builder setContentTypeValue(int value) {
          
          contentType_ = value;
          onChanged();
          return this;
        }
        /**
         * .attrpubapi_v1.ContentType content_type = 1;
         * @return The contentType.
         */
        @java.lang.Override
        public com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType getContentType() {
          @SuppressWarnings("deprecation")
          com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType result = com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.valueOf(contentType_);
          return result == null ? com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType.UNRECOGNIZED : result;
        }
        /**
         * .attrpubapi_v1.ContentType content_type = 1;
         * @param value The contentType to set.
         * @return This builder for chaining.
         */
        public Builder setContentType(com.yoti.api.client.spi.remote.proto.ContentTypeProto.ContentType value) {
          if (value == null) {
            throw new NullPointerException();
          }
          
          contentType_ = value.getNumber();
          onChanged();
          return this;
        }
        /**
         * .attrpubapi_v1.ContentType content_type = 1;
         * @return This builder for chaining.
         */
        public Builder clearContentType() {
          
          contentType_ = 0;
          onChanged();
          return this;
        }

        private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * bytes data = 2;
         * @return The data.
         */
        @java.lang.Override
        public com.google.protobuf.ByteString getData() {
          return data_;
        }
        /**
         * bytes data = 2;
         * @param value The data to set.
         * @return This builder for chaining.
         */
        public Builder setData(com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          data_ = value;
          onChanged();
          return this;
        }
        /**
         * bytes data = 2;
         * @return This builder for chaining.
         */
        public Builder clearData() {
          
          data_ = getDefaultInstance().getData();
          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:attrpubapi_v1.MultiValue.Value)
      }

      // @@protoc_insertion_point(class_scope:attrpubapi_v1.MultiValue.Value)
      private static final com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value();
      }

      public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser
          PARSER = new com.google.protobuf.AbstractParser() {
        @java.lang.Override
        public Value parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Value(input, extensionRegistry);
        }
      };

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

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

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public static final int VALUES_FIELD_NUMBER = 1;
    private java.util.List values_;
    /**
     * repeated .attrpubapi_v1.MultiValue.Value values = 1;
     */
    @java.lang.Override
    public java.util.List getValuesList() {
      return values_;
    }
    /**
     * repeated .attrpubapi_v1.MultiValue.Value values = 1;
     */
    @java.lang.Override
    public java.util.List 
        getValuesOrBuilderList() {
      return values_;
    }
    /**
     * repeated .attrpubapi_v1.MultiValue.Value values = 1;
     */
    @java.lang.Override
    public int getValuesCount() {
      return values_.size();
    }
    /**
     * repeated .attrpubapi_v1.MultiValue.Value values = 1;
     */
    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value getValues(int index) {
      return values_.get(index);
    }
    /**
     * repeated .attrpubapi_v1.MultiValue.Value values = 1;
     */
    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.ValueOrBuilder getValuesOrBuilder(
        int index) {
      return values_.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 < values_.size(); i++) {
        output.writeMessage(1, values_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

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

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue)) {
        return super.equals(obj);
      }
      com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue other = (com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue) obj;

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

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getValuesCount() > 0) {
        hash = (37 * hash) + VALUES_FIELD_NUMBER;
        hash = (53 * hash) + getValuesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue 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 com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue 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 com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue 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(com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue 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;
    }
    /**
     * Protobuf type {@code attrpubapi_v1.MultiValue}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:attrpubapi_v1.MultiValue)
        com.yoti.api.client.spi.remote.proto.AttrProto.MultiValueOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_MultiValue_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_MultiValue_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.class, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Builder.class);
      }

      // Construct using com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getValuesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (valuesBuilder_ == null) {
          values_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          valuesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.internal_static_attrpubapi_v1_MultiValue_descriptor;
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue getDefaultInstanceForType() {
        return com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.getDefaultInstance();
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue build() {
        com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue buildPartial() {
        com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue result = new com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue(this);
        int from_bitField0_ = bitField0_;
        if (valuesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            values_ = java.util.Collections.unmodifiableList(values_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.values_ = values_;
        } else {
          result.values_ = valuesBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue) {
          return mergeFrom((com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue other) {
        if (other == com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.getDefaultInstance()) return this;
        if (valuesBuilder_ == null) {
          if (!other.values_.isEmpty()) {
            if (values_.isEmpty()) {
              values_ = other.values_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureValuesIsMutable();
              values_.addAll(other.values_);
            }
            onChanged();
          }
        } else {
          if (!other.values_.isEmpty()) {
            if (valuesBuilder_.isEmpty()) {
              valuesBuilder_.dispose();
              valuesBuilder_ = null;
              values_ = other.values_;
              bitField0_ = (bitField0_ & ~0x00000001);
              valuesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getValuesFieldBuilder() : null;
            } else {
              valuesBuilder_.addAllMessages(other.values_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        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 {
        com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List values_ =
        java.util.Collections.emptyList();
      private void ensureValuesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          values_ = new java.util.ArrayList(values_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.ValueOrBuilder> valuesBuilder_;

      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public java.util.List getValuesList() {
        if (valuesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(values_);
        } else {
          return valuesBuilder_.getMessageList();
        }
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public int getValuesCount() {
        if (valuesBuilder_ == null) {
          return values_.size();
        } else {
          return valuesBuilder_.getCount();
        }
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value getValues(int index) {
        if (valuesBuilder_ == null) {
          return values_.get(index);
        } else {
          return valuesBuilder_.getMessage(index);
        }
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public Builder setValues(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value value) {
        if (valuesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValuesIsMutable();
          values_.set(index, value);
          onChanged();
        } else {
          valuesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public Builder setValues(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder builderForValue) {
        if (valuesBuilder_ == null) {
          ensureValuesIsMutable();
          values_.set(index, builderForValue.build());
          onChanged();
        } else {
          valuesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public Builder addValues(com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value value) {
        if (valuesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValuesIsMutable();
          values_.add(value);
          onChanged();
        } else {
          valuesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public Builder addValues(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value value) {
        if (valuesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValuesIsMutable();
          values_.add(index, value);
          onChanged();
        } else {
          valuesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public Builder addValues(
          com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder builderForValue) {
        if (valuesBuilder_ == null) {
          ensureValuesIsMutable();
          values_.add(builderForValue.build());
          onChanged();
        } else {
          valuesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public Builder addValues(
          int index, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder builderForValue) {
        if (valuesBuilder_ == null) {
          ensureValuesIsMutable();
          values_.add(index, builderForValue.build());
          onChanged();
        } else {
          valuesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public Builder addAllValues(
          java.lang.Iterable values) {
        if (valuesBuilder_ == null) {
          ensureValuesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, values_);
          onChanged();
        } else {
          valuesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public Builder clearValues() {
        if (valuesBuilder_ == null) {
          values_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          valuesBuilder_.clear();
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public Builder removeValues(int index) {
        if (valuesBuilder_ == null) {
          ensureValuesIsMutable();
          values_.remove(index);
          onChanged();
        } else {
          valuesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder getValuesBuilder(
          int index) {
        return getValuesFieldBuilder().getBuilder(index);
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.ValueOrBuilder getValuesOrBuilder(
          int index) {
        if (valuesBuilder_ == null) {
          return values_.get(index);  } else {
          return valuesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public java.util.List 
           getValuesOrBuilderList() {
        if (valuesBuilder_ != null) {
          return valuesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(values_);
        }
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder addValuesBuilder() {
        return getValuesFieldBuilder().addBuilder(
            com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.getDefaultInstance());
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder addValuesBuilder(
          int index) {
        return getValuesFieldBuilder().addBuilder(
            index, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.getDefaultInstance());
      }
      /**
       * repeated .attrpubapi_v1.MultiValue.Value values = 1;
       */
      public java.util.List 
           getValuesBuilderList() {
        return getValuesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.ValueOrBuilder> 
          getValuesFieldBuilder() {
        if (valuesBuilder_ == null) {
          valuesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.Value.Builder, com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue.ValueOrBuilder>(
                  values_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          values_ = null;
        }
        return valuesBuilder_;
      }
      @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:attrpubapi_v1.MultiValue)
    }

    // @@protoc_insertion_point(class_scope:attrpubapi_v1.MultiValue)
    private static final com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue();
    }

    public static com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public MultiValue parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MultiValue(input, extensionRegistry);
      }
    };

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

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

    @java.lang.Override
    public com.yoti.api.client.spi.remote.proto.AttrProto.MultiValue getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_attrpubapi_v1_Attribute_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_attrpubapi_v1_Attribute_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_attrpubapi_v1_Metadata_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_attrpubapi_v1_Metadata_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_attrpubapi_v1_Anchor_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_attrpubapi_v1_Anchor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_attrpubapi_v1_UserMetadata_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_attrpubapi_v1_UserMetadata_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_attrpubapi_v1_MultiValue_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_attrpubapi_v1_MultiValue_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_attrpubapi_v1_MultiValue_Value_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_attrpubapi_v1_MultiValue_Value_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\017Attribute.proto\022\rattrpubapi_v1\032\021Conten" +
      "tType.proto\"\367\001\n\tAttribute\022\014\n\004name\030\001 \001(\t\022" +
      "\r\n\005value\030\002 \001(\014\0220\n\014content_type\030\003 \001(\0162\032.a" +
      "ttrpubapi_v1.ContentType\022&\n\007anchors\030\004 \003(" +
      "\0132\025.attrpubapi_v1.Anchor\0222\n\ruser_metadat" +
      "a\030\005 \003(\0132\033.attrpubapi_v1.UserMetadata\022)\n\010" +
      "metadata\030\006 \001(\0132\027.attrpubapi_v1.Metadata\022" +
      "\024\n\014ephemeral_id\030\007 \001(\t\"q\n\010Metadata\022\035\n\025sup" +
      "erseded_time_stamp\030\001 \001(\t\022\021\n\tdeletable\030\002 " +
      "\001(\010\022\022\n\nreceipt_id\030\003 \001(\014\022\017\n\007revoked\030\004 \001(\010" +
      "\022\016\n\006locked\030\005 \001(\010\"\263\001\n\006Anchor\022\025\n\rartifact_" +
      "link\030\001 \001(\014\022\033\n\023origin_server_certs\030\002 \003(\014\022" +
      "\032\n\022artifact_signature\030\003 \001(\014\022\020\n\010sub_type\030" +
      "\004 \001(\t\022\021\n\tsignature\030\005 \001(\014\022\031\n\021signed_time_" +
      "stamp\030\006 \001(\014\022\031\n\021associated_source\030\007 \001(\t\"*" +
      "\n\014UserMetadata\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001" +
      "(\t\"\206\001\n\nMultiValue\022/\n\006values\030\001 \003(\0132\037.attr" +
      "pubapi_v1.MultiValue.Value\032G\n\005Value\0220\n\014c" +
      "ontent_type\030\001 \001(\0162\032.attrpubapi_v1.Conten" +
      "tType\022\014\n\004data\030\002 \001(\014B\340\001\n$com.yoti.api.cli" +
      "ent.spi.remote.protoB\tAttrProtoZ/github." +
      "com/getyoti/yoti-go-sdk/v3/yotiprotoattr" +
      "\252\002\034Yoti.Auth.ProtoBuf.Attribute\312\002\030Yoti\\P" +
      "rotobuf\\Attrpubapi\342\002$Yoti\\Protobuf\\Attrp" +
      "ubapi\\GPBMetadata\352\002\032Yoti::Protobuf::Attr" +
      "pubapib\006proto3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          com.yoti.api.client.spi.remote.proto.ContentTypeProto.getDescriptor(),
        });
    internal_static_attrpubapi_v1_Attribute_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_attrpubapi_v1_Attribute_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_attrpubapi_v1_Attribute_descriptor,
        new java.lang.String[] { "Name", "Value", "ContentType", "Anchors", "UserMetadata", "Metadata", "EphemeralId", });
    internal_static_attrpubapi_v1_Metadata_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_attrpubapi_v1_Metadata_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_attrpubapi_v1_Metadata_descriptor,
        new java.lang.String[] { "SupersededTimeStamp", "Deletable", "ReceiptId", "Revoked", "Locked", });
    internal_static_attrpubapi_v1_Anchor_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_attrpubapi_v1_Anchor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_attrpubapi_v1_Anchor_descriptor,
        new java.lang.String[] { "ArtifactLink", "OriginServerCerts", "ArtifactSignature", "SubType", "Signature", "SignedTimeStamp", "AssociatedSource", });
    internal_static_attrpubapi_v1_UserMetadata_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_attrpubapi_v1_UserMetadata_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_attrpubapi_v1_UserMetadata_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_attrpubapi_v1_MultiValue_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_attrpubapi_v1_MultiValue_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_attrpubapi_v1_MultiValue_descriptor,
        new java.lang.String[] { "Values", });
    internal_static_attrpubapi_v1_MultiValue_Value_descriptor =
      internal_static_attrpubapi_v1_MultiValue_descriptor.getNestedTypes().get(0);
    internal_static_attrpubapi_v1_MultiValue_Value_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_attrpubapi_v1_MultiValue_Value_descriptor,
        new java.lang.String[] { "ContentType", "Data", });
    com.yoti.api.client.spi.remote.proto.ContentTypeProto.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy